refactor(c-libuv): Ajust Errno

This commit is contained in:
赵英杰
2024-07-25 15:40:02 +08:00
parent c27c654180
commit 65e1f261c0
4 changed files with 117 additions and 99 deletions

View File

@@ -40,7 +40,7 @@ func main() {
func onOpen(req *libuv.Fs) { func onOpen(req *libuv.Fs) {
// Check for errors // Check for errors
if libuv.FsGetResult(req) < 0 { if libuv.FsGetResult(req) < 0 {
c.Fprintf(c.Stderr, c.Str("Error opening file: %s\n"), libuv.Strerror(libuv.LoopClose(loop))) c.Fprintf(c.Stderr, c.Str("Error opening file: %s\n"), libuv.Strerror(libuv.Errno(libuv.LoopClose(loop))))
libuv.LoopClose(loop) libuv.LoopClose(loop)
return return
} }
@@ -49,7 +49,7 @@ func onOpen(req *libuv.Fs) {
// Read the file // Read the file
readRes := libuv.FsRead(loop, &readReq, libuv.UvFile(libuv.FsGetResult(req)), &iov, 1, -1, onRead) readRes := libuv.FsRead(loop, &readReq, libuv.UvFile(libuv.FsGetResult(req)), &iov, 1, -1, onRead)
if readRes != 0 { if readRes != 0 {
c.Printf(c.Str("Error in FsRead: %s (code: %d)\n"), libuv.Strerror(c.Int(readRes)), readRes) c.Printf(c.Str("Error in FsRead: %s (code: %d)\n"), libuv.Strerror(libuv.Errno(readRes)), readRes)
libuv.LoopClose(loop) libuv.LoopClose(loop)
return return
} }
@@ -58,7 +58,7 @@ func onOpen(req *libuv.Fs) {
func onRead(req *libuv.Fs) { func onRead(req *libuv.Fs) {
// Check for errors // Check for errors
if libuv.FsGetResult(req) < 0 { if libuv.FsGetResult(req) < 0 {
c.Fprintf(c.Stderr, c.Str("Read error: %s\n"), libuv.Strerror(libuv.FsGetResult(req))) c.Fprintf(c.Stderr, c.Str("Read error: %s\n"), libuv.Strerror(libuv.Errno(libuv.FsGetResult(req))))
libuv.LoopClose(loop) libuv.LoopClose(loop)
} else if libuv.FsGetResult(req) == 0 { } else if libuv.FsGetResult(req) == 0 {
c.Printf(c.Str("EOF\n")) c.Printf(c.Str("EOF\n"))
@@ -66,7 +66,7 @@ func onRead(req *libuv.Fs) {
closeRes := libuv.FsClose(loop, &closeReq, libuv.UvFile(libuv.FsGetResult(&openReq)), onClose) closeRes := libuv.FsClose(loop, &closeReq, libuv.UvFile(libuv.FsGetResult(&openReq)), onClose)
if closeRes != 0 { if closeRes != 0 {
// Print the content // Print the content
c.Printf(c.Str("Error in FsClose: %s (code: %d)\n"), libuv.Strerror(c.Int(closeRes)), closeRes) c.Printf(c.Str("Error in FsClose: %s (code: %d)\n"), libuv.Strerror(libuv.Errno(closeRes)), closeRes)
libuv.LoopClose(loop) libuv.LoopClose(loop)
return return
} }
@@ -80,7 +80,7 @@ func onRead(req *libuv.Fs) {
func onClose(req *libuv.Fs) { func onClose(req *libuv.Fs) {
// Check for errors // Check for errors
if libuv.FsGetResult(req) < 0 { if libuv.FsGetResult(req) < 0 {
c.Fprintf(c.Stderr, c.Str("Error closing file: %s\n"), libuv.Strerror(libuv.FsGetResult(req))) c.Fprintf(c.Stderr, c.Str("Error closing file: %s\n"), libuv.Strerror(libuv.Errno(libuv.FsGetResult(req))))
} else { } else {
c.Printf(c.Str("\nFile closed successfully.\n")) c.Printf(c.Str("\nFile closed successfully.\n"))
} }

View File

@@ -35,7 +35,7 @@ func main() {
(&server).Bind((*net.SockAddr)(c.Pointer(&addr)), 0) (&server).Bind((*net.SockAddr)(c.Pointer(&addr)), 0)
res := (*libuv.Stream)(&server).Listen(DEFAULT_BACKLOG, OnNewConnection) res := (*libuv.Stream)(&server).Listen(DEFAULT_BACKLOG, OnNewConnection)
if res != 0 { if res != 0 {
c.Fprintf(c.Stderr, c.Str("Listen error: %s\n"), libuv.Strerror(res)) c.Fprintf(c.Stderr, c.Str("Listen error: %s\n"), libuv.Strerror((libuv.Errno(res))))
return return
} }
@@ -58,7 +58,7 @@ func AllocBuffer(handle *libuv.Handle, suggestedSize uintptr, buf *libuv.Buf) {
func EchoWrite(req *libuv.Write, status c.Int) { func EchoWrite(req *libuv.Write, status c.Int) {
if status != 0 { if status != 0 {
c.Fprintf(c.Stderr, c.Str("Write error: %s\n"), libuv.Strerror(status)) c.Fprintf(c.Stderr, c.Str("Write error: %s\n"), libuv.Strerror((libuv.Errno(status))))
} }
FreeWriteReq(req) FreeWriteReq(req)
} }
@@ -80,7 +80,7 @@ func EchoRead(client *libuv.Stream, nread c.Long, buf *libuv.Buf) {
if nread < 0 { if nread < 0 {
// Handle read errors and EOF. // Handle read errors and EOF.
if (libuv.Errno)(nread) != libuv.EOF { if (libuv.Errno)(nread) != libuv.EOF {
c.Fprintf(c.Stderr, c.Str("Read error: %s\n"), libuv.Strerror(c.Int(nread))) c.Fprintf(c.Stderr, c.Str("Read error: %s\n"), libuv.Strerror((libuv.Errno)(nread)))
} }
(*libuv.Handle)(c.Pointer(client)).Close(nil) (*libuv.Handle)(c.Pointer(client)).Close(nil)
} }
@@ -92,7 +92,7 @@ func EchoRead(client *libuv.Stream, nread c.Long, buf *libuv.Buf) {
func OnNewConnection(server *libuv.Stream, status c.Int) { func OnNewConnection(server *libuv.Stream, status c.Int) {
if status < 0 { if status < 0 {
c.Fprintf(c.Stderr, c.Str("New connection error: %s\n"), libuv.Strerror(status)) c.Fprintf(c.Stderr, c.Str("New connection error: %s\n"), libuv.Strerror(libuv.Errno(status)))
return return
} }

View File

@@ -2,110 +2,111 @@ package libuv
import ( import (
"github.com/goplus/llgo/c" "github.com/goplus/llgo/c"
"github.com/goplus/llgo/c/net"
"github.com/goplus/llgo/c/syscall"
_ "unsafe" _ "unsafe"
) )
const ( const (
E2BIG Errno = iota E2BIG Errno = (Errno)(syscall.E2BIG)
EACCES EACCES Errno = (Errno)(syscall.EACCES)
EADDRINUSE EADDRINUSE Errno = (Errno)(syscall.EADDRINUSE)
EADDRNOTAVAIL EADDRNOTAVAIL Errno = (Errno)(syscall.EADDRNOTAVAIL)
EAFNOSUPPORT EAFNOSUPPORT Errno = (Errno)(syscall.EAFNOSUPPORT)
EAGAIN EAGAIN Errno = (Errno)(syscall.EAGAIN)
EAI_ADDRFAMILY EAI_ADDRFAMILY Errno = net.EAI_ADDRFAMILY
EAI_AGAIN EAI_AGAIN Errno = net.EAI_AGAIN
EAI_BADFLAGS EAI_BADFLAGS Errno = net.EAI_BADFLAGS
EAI_BADHINTS EAI_BADHINTS Errno = net.EAI_BADHINTS
EAI_CANCELED EAI_CANCELED Errno = -3003
EAI_FAIL EAI_FAIL Errno = net.EAI_FAIL
EAI_FAMILY EAI_FAMILY Errno = net.EAI_FAMILY
EAI_MEMORY EAI_MEMORY Errno = net.EAI_MEMORY
EAI_NODATA EAI_NODATA Errno = net.EAI_NODATA
EAI_NONAME EAI_NONAME Errno = net.EAI_NONAME
EAI_OVERFLOW EAI_OVERFLOW Errno = net.EAI_OVERFLOW
EAI_PROTOCOL EAI_PROTOCOL Errno = net.EAI_PROTOCOL
EAI_SERVICE EAI_SERVICE Errno = net.EAI_SERVICE
EAI_SOCKTYPE EAI_SOCKTYPE Errno = net.EAI_SOCKTYPE
EALREADY EALREADY Errno = (Errno)(syscall.EALREADY)
EBADF EBADF Errno = (Errno)(syscall.EBADF)
EBUSY EBUSY Errno = (Errno)(syscall.EBUSY)
ECANCELED ECANCELED Errno = (Errno)(syscall.ECANCELED)
ECHARSET ECHARSET Errno = -4080
ECONNABORTED ECONNABORTED Errno = (Errno)(syscall.ECONNABORTED)
ECONNREFUSED ECONNREFUSED Errno = (Errno)(syscall.ECONNREFUSED)
ECONNRESET ECONNRESET Errno = (Errno)(syscall.ECONNRESET)
EDESTADDRREQ EDESTADDRREQ Errno = (Errno)(syscall.EDESTADDRREQ)
EEXIST EEXIST Errno = (Errno)(syscall.EEXIST)
EFAULT EFAULT Errno = (Errno)(syscall.EFAULT)
EFBIG EFBIG Errno = (Errno)(syscall.EFBIG)
EHOSTUNREACH EHOSTUNREACH Errno = (Errno)(syscall.EHOSTUNREACH)
EINTR EINTR Errno = (Errno)(syscall.EINTR)
EINVAL EINVAL Errno = (Errno)(syscall.EINVAL)
EIO EIO Errno = (Errno)(syscall.EIO)
EISCONN EISCONN Errno = (Errno)(syscall.EISCONN)
EISDIR EISDIR Errno = (Errno)(syscall.EISDIR)
ELOOP ELOOP Errno = (Errno)(syscall.ELOOP)
EMFILE EMFILE Errno = (Errno)(syscall.EMFILE)
EMSGSIZE EMSGSIZE Errno = (Errno)(syscall.EMSGSIZE)
ENAMETOOLONG ENAMETOOLONG Errno = (Errno)(syscall.ENAMETOOLONG)
ENETDOWN ENETDOWN Errno = (Errno)(syscall.ENETDOWN)
ENETUNREACH ENETUNREACH Errno = (Errno)(syscall.ENETUNREACH)
ENFILE ENFILE Errno = (Errno)(syscall.ENFILE)
ENOBUFS ENOBUFS Errno = (Errno)(syscall.ENOBUFS)
ENODEV ENODEV Errno = (Errno)(syscall.ENODEV)
ENOENT ENOENT Errno = (Errno)(syscall.ENOENT)
ENOMEM ENOMEM Errno = (Errno)(syscall.ENOMEM)
ENONET ENONET Errno = -4056
ENOPROTOOPT ENOPROTOOPT Errno = (Errno)(syscall.ENOPROTOOPT)
ENOSPC ENOSPC Errno = (Errno)(syscall.ENOSPC)
ENOSYS ENOSYS Errno = (Errno)(syscall.ENOSYS)
ENOTCONN ENOTCONN Errno = (Errno)(syscall.ENOTCONN)
ENOTDIR ENOTDIR Errno = (Errno)(syscall.ENOTDIR)
ENOTEMPTY ENOTEMPTY Errno = (Errno)(syscall.ENOTEMPTY)
ENOTSOCK ENOTSOCK Errno = (Errno)(syscall.ENOTSOCK)
ENOTSUP ENOTSUP Errno = (Errno)(syscall.ENOTSUP)
EOVERFLOW EOVERFLOW Errno = (Errno)(syscall.EOVERFLOW)
EPERM EPERM Errno = (Errno)(syscall.EPERM)
EPIPE EPIPE Errno = (Errno)(syscall.EPIPE)
EPROTO EPROTO Errno = (Errno)(syscall.EPROTO)
EPROTONOSUPPORT EPROTONOSUPPORT Errno = (Errno)(syscall.EPROTONOSUPPORT)
EPROTOTYPE EPROTOTYPE Errno = (Errno)(syscall.EPROTOTYPE)
ERANGE ERANGE Errno = (Errno)(syscall.ERANGE)
EROFS EROFS Errno = (Errno)(syscall.EROFS)
ESHUTDOWN ESHUTDOWN Errno = (Errno)(syscall.ESHUTDOWN)
ESPIPE ESPIPE Errno = (Errno)(syscall.ESPIPE)
ESRCH ESRCH Errno = (Errno)(syscall.ESRCH)
ETIMEDOUT ETIMEDOUT Errno = (Errno)(syscall.ETIMEDOUT)
ETXTBSY ETXTBSY Errno = (Errno)(syscall.ETXTBSY)
EXDEV EXDEV Errno = (Errno)(syscall.EXDEV)
UNKNOWN UNKNOWN Errno = -4094
EOF EOF Errno = -1
ENXIO ENXIO Errno = (Errno)(syscall.ENXIO)
EMLINK EMLINK Errno = (Errno)(syscall.EMLINK)
EHOSTDOWN EHOSTDOWN Errno = (Errno)(syscall.EHOSTDOWN)
EREMOTEIO EREMOTEIO Errno = -4030
ENOTTY ENOTTY Errno = (Errno)(syscall.ENOTTY)
EFTYPE EFTYPE Errno = (Errno)(syscall.EFTYPE)
EILSEQ EILSEQ Errno = (Errno)(syscall.EILSEQ)
ESOCKTNOSUPPORT ESOCKTNOSUPPORT Errno = (Errno)(syscall.ESOCKTNOSUPPORT)
ENODATA
EUNATCH ERRNO_MAX = EOF - 1
ERRNO_MAX
) )
type Errno c.Int type Errno c.Int
//go:linkname TranslateSysError C.uv_translate_sys_error //go:linkname TranslateSysError C.uv_translate_sys_error
func TranslateSysError(sysErrno c.Int) c.Int func TranslateSysError(sysErrno c.Int) Errno
//go:linkname Strerror C.uv_strerror //go:linkname Strerror C.uv_strerror
func Strerror(err c.Int) *c.Char func Strerror(err Errno) *c.Char
//go:linkname StrerrorR C.uv_strerror_r //go:linkname StrerrorR C.uv_strerror_r
func StrerrorR(err c.Int, buf *c.Char, bufLen uintptr) *c.Char func StrerrorR(err Errno, buf *c.Char, bufLen uintptr) *c.Char
//go:linkname ErrName C.uv_err_name //go:linkname ErrName C.uv_err_name
func ErrName(err c.Int) *c.Char func ErrName(err Errno) *c.Char
//go:linkname ErrNameR C.uv_err_name_r //go:linkname ErrNameR C.uv_err_name_r
func ErrNameR(err c.Int, buf *c.Char, bufLen uintptr) *c.Char func ErrNameR(err Errno, buf *c.Char, bufLen uintptr) *c.Char

View File

@@ -80,6 +80,23 @@ const (
SOCK_SEQPACKET = 5 // sequenced packet stream SOCK_SEQPACKET = 5 // sequenced packet stream
) )
const (
EAI_ADDRFAMILY = iota + 1 /* address family for hostname not supported */
EAI_AGAIN /* temporary failure in name resolution */
EAI_BADFLAGS /* invalid value for ai_flags */
EAI_FAIL /* non-recoverable failure in name resolution */
EAI_FAMILY /* ai_family not supported */
EAI_MEMORY /* memory allocation failure */
EAI_NODATA /* no address associated with hostname */
EAI_NONAME /* hostname nor servname provided, or not known */
EAI_SERVICE /* servname not supported for ai_socktype */
EAI_SOCKTYPE /* ai_socktype not supported */
EAI_SYSTEM /* system error returned in errno */
EAI_BADHINTS /* invalid value for hints */
EAI_PROTOCOL /* resolved protocol is unknown */
EAI_OVERFLOW /* argument buffer overflow */
)
// (TODO) merge to inet // (TODO) merge to inet
const INET_ADDRSTRLEN = 16 const INET_ADDRSTRLEN = 16