mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-14 15:56:13 +03:00
libuv: Errno, build up errors at comptime
This commit is contained in:
@ -2,179 +2,190 @@ const std = @import("std");
|
|||||||
const testing = std.testing;
|
const testing = std.testing;
|
||||||
const c = @import("c.zig");
|
const c = @import("c.zig");
|
||||||
|
|
||||||
/// Errors that libuv can produce
|
/// Enum mapping for errors.
|
||||||
|
pub const Errno = enum(i32) {
|
||||||
|
E2BIG = c.UV_E2BIG,
|
||||||
|
EACCES = c.UV_EACCES,
|
||||||
|
EADDRINUSE = c.UV_EADDRINUSE,
|
||||||
|
EADDRNOTAVAIL = c.UV_EADDRNOTAVAIL,
|
||||||
|
EAFNOSUPPORT = c.UV_EAFNOSUPPORT,
|
||||||
|
EAGAIN = c.UV_EAGAIN,
|
||||||
|
EAI_ADDRFAMILY = c.UV_EAI_ADDRFAMILY,
|
||||||
|
EAI_AGAIN = c.UV_EAI_AGAIN,
|
||||||
|
EAI_BADFLAGS = c.UV_EAI_BADFLAGS,
|
||||||
|
EAI_BADHINTS = c.UV_EAI_BADHINTS,
|
||||||
|
EAI_CANCELED = c.UV_EAI_CANCELED,
|
||||||
|
EAI_FAIL = c.UV_EAI_FAIL,
|
||||||
|
EAI_FAMILY = c.UV_EAI_FAMILY,
|
||||||
|
EAI_MEMORY = c.UV_EAI_MEMORY,
|
||||||
|
EAI_NODATA = c.UV_EAI_NODATA,
|
||||||
|
EAI_NONAME = c.UV_EAI_NONAME,
|
||||||
|
EAI_OVERFLOW = c.UV_EAI_OVERFLOW,
|
||||||
|
EAI_PROTOCOL = c.UV_EAI_PROTOCOL,
|
||||||
|
EAI_SERVICE = c.UV_EAI_SERVICE,
|
||||||
|
EAI_SOCKTYPE = c.UV_EAI_SOCKTYPE,
|
||||||
|
EALREADY = c.UV_EALREADY,
|
||||||
|
EBADF = c.UV_EBADF,
|
||||||
|
EBUSY = c.UV_EBUSY,
|
||||||
|
ECANCELED = c.UV_ECANCELED,
|
||||||
|
ECHARSET = c.UV_ECHARSET,
|
||||||
|
ECONNABORTED = c.UV_ECONNABORTED,
|
||||||
|
ECONNREFUSED = c.UV_ECONNREFUSED,
|
||||||
|
ECONNRESET = c.UV_ECONNRESET,
|
||||||
|
EDESTADDRREQ = c.UV_EDESTADDRREQ,
|
||||||
|
EEXIST = c.UV_EEXIST,
|
||||||
|
EFAULT = c.UV_EFAULT,
|
||||||
|
EFBIG = c.UV_EFBIG,
|
||||||
|
EHOSTUNREACH = c.UV_EHOSTUNREACH,
|
||||||
|
EINTR = c.UV_EINTR,
|
||||||
|
EINVAL = c.UV_EINVAL,
|
||||||
|
EIO = c.UV_EIO,
|
||||||
|
EISCONN = c.UV_EISCONN,
|
||||||
|
EISDIR = c.UV_EISDIR,
|
||||||
|
ELOOP = c.UV_ELOOP,
|
||||||
|
EMFILE = c.UV_EMFILE,
|
||||||
|
EMSGSIZE = c.UV_EMSGSIZE,
|
||||||
|
ENAMETOOLONG = c.UV_ENAMETOOLONG,
|
||||||
|
ENETDOWN = c.UV_ENETDOWN,
|
||||||
|
ENETUNREACH = c.UV_ENETUNREACH,
|
||||||
|
ENFILE = c.UV_ENFILE,
|
||||||
|
ENOBUFS = c.UV_ENOBUFS,
|
||||||
|
ENODEV = c.UV_ENODEV,
|
||||||
|
ENOENT = c.UV_ENOENT,
|
||||||
|
ENOMEM = c.UV_ENOMEM,
|
||||||
|
ENONET = c.UV_ENONET,
|
||||||
|
ENOPROTOOPT = c.UV_ENOPROTOOPT,
|
||||||
|
ENOSPC = c.UV_ENOSPC,
|
||||||
|
ENOSYS = c.UV_ENOSYS,
|
||||||
|
ENOTCONN = c.UV_ENOTCONN,
|
||||||
|
ENOTDIR = c.UV_ENOTDIR,
|
||||||
|
ENOTEMPTY = c.UV_ENOTEMPTY,
|
||||||
|
ENOTSOCK = c.UV_ENOTSOCK,
|
||||||
|
ENOTSUP = c.UV_ENOTSUP,
|
||||||
|
EPERM = c.UV_EPERM,
|
||||||
|
EPIPE = c.UV_EPIPE,
|
||||||
|
EPROTO = c.UV_EPROTO,
|
||||||
|
EPROTONOSUPPORT = c.UV_EPROTONOSUPPORT,
|
||||||
|
EPROTOTYPE = c.UV_EPROTOTYPE,
|
||||||
|
ERANGE = c.UV_ERANGE,
|
||||||
|
EROFS = c.UV_EROFS,
|
||||||
|
ESHUTDOWN = c.UV_ESHUTDOWN,
|
||||||
|
ESPIPE = c.UV_ESPIPE,
|
||||||
|
ESRCH = c.UV_ESRCH,
|
||||||
|
ETIMEDOUT = c.UV_ETIMEDOUT,
|
||||||
|
ETXTBSY = c.UV_ETXTBSY,
|
||||||
|
EXDEV = c.UV_EXDEV,
|
||||||
|
UNKNOWN = c.UV_UNKNOWN,
|
||||||
|
EOF = c.UV_EOF,
|
||||||
|
ENXIO = c.UV_ENXIO,
|
||||||
|
EHOSTDOWN = c.UV_EHOSTDOWN,
|
||||||
|
EREMOTEIO = c.UV_EREMOTEIO,
|
||||||
|
ENOTTY = c.UV_ENOTTY,
|
||||||
|
EFTYPE = c.UV_EFTYPE,
|
||||||
|
EILSEQ = c.UV_EILSEQ,
|
||||||
|
ESOCKTNOSUPPORT = c.UV_ESOCKTNOSUPPORT,
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Errors that libuv can produce.
|
||||||
///
|
///
|
||||||
/// http://docs.libuv.org/en/v1.x/errors.html
|
/// http://docs.libuv.org/en/v1.x/errors.html
|
||||||
pub const Error = error{
|
pub const Error = blk: {
|
||||||
E2BIG,
|
// We produce these from the Errno enum so that we can easily
|
||||||
EACCES,
|
// keep it synced.
|
||||||
EADDRINUSE,
|
const info = @typeInfo(Errno).Enum;
|
||||||
EADDRNOTAVAIL,
|
var errors: [info.fields.len]std.builtin.Type.Error = undefined;
|
||||||
EAFNOSUPPORT,
|
for (info.fields) |field, i| {
|
||||||
EAGAIN,
|
errors[i] = .{ .name = field.name };
|
||||||
EAI_ADDRFAMILY,
|
}
|
||||||
EAI_AGAIN,
|
|
||||||
EAI_BADFLAGS,
|
break :blk @Type(.{ .ErrorSet = &errors });
|
||||||
EAI_BADHINTS,
|
|
||||||
EAI_CANCELED,
|
|
||||||
EAI_FAIL,
|
|
||||||
EAI_FAMILY,
|
|
||||||
EAI_MEMORY,
|
|
||||||
EAI_NODATA,
|
|
||||||
EAI_NONAME,
|
|
||||||
EAI_OVERFLOW,
|
|
||||||
EAI_PROTOCOL,
|
|
||||||
EAI_SERVICE,
|
|
||||||
EAI_SOCKTYPE,
|
|
||||||
EALREADY,
|
|
||||||
EBADF,
|
|
||||||
EBUSY,
|
|
||||||
ECANCELED,
|
|
||||||
ECHARSET,
|
|
||||||
ECONNABORTED,
|
|
||||||
ECONNREFUSED,
|
|
||||||
ECONNRESET,
|
|
||||||
EDESTADDRREQ,
|
|
||||||
EEXIST,
|
|
||||||
EFAULT,
|
|
||||||
EFBIG,
|
|
||||||
EHOSTUNREACH,
|
|
||||||
EINTR,
|
|
||||||
EINVAL,
|
|
||||||
EIO,
|
|
||||||
EISCONN,
|
|
||||||
EISDIR,
|
|
||||||
ELOOP,
|
|
||||||
EMFILE,
|
|
||||||
EMSGSIZE,
|
|
||||||
ENAMETOOLONG,
|
|
||||||
ENETDOWN,
|
|
||||||
ENETUNREACH,
|
|
||||||
ENFILE,
|
|
||||||
ENOBUFS,
|
|
||||||
ENODEV,
|
|
||||||
ENOENT,
|
|
||||||
ENOMEM,
|
|
||||||
ENONET,
|
|
||||||
ENOPROTOOPT,
|
|
||||||
ENOSPC,
|
|
||||||
ENOSYS,
|
|
||||||
ENOTCONN,
|
|
||||||
ENOTDIR,
|
|
||||||
ENOTEMPTY,
|
|
||||||
ENOTSOCK,
|
|
||||||
ENOTSUP,
|
|
||||||
EPERM,
|
|
||||||
EPIPE,
|
|
||||||
EPROTO,
|
|
||||||
EPROTONOSUPPORT,
|
|
||||||
EPROTOTYPE,
|
|
||||||
ERANGE,
|
|
||||||
EROFS,
|
|
||||||
ESHUTDOWN,
|
|
||||||
ESPIPE,
|
|
||||||
ESRCH,
|
|
||||||
ETIMEDOUT,
|
|
||||||
ETXTBSY,
|
|
||||||
EXDEV,
|
|
||||||
UNKNOWN,
|
|
||||||
EOF,
|
|
||||||
ENXIO,
|
|
||||||
EMLINK,
|
|
||||||
EHOSTDOWN,
|
|
||||||
EREMOTEIO,
|
|
||||||
ENOTTY,
|
|
||||||
EFTYPE,
|
|
||||||
EILSEQ,
|
|
||||||
ESOCKTNOSUPPORT,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Convert the result of a libuv API call to an error (or no error).
|
/// Convert the result of a libuv API call to an error (or no error).
|
||||||
pub fn convertError(r: i32) !void {
|
pub fn convertError(r: i32) !void {
|
||||||
if (r >= 0) return;
|
if (r >= 0) return;
|
||||||
|
|
||||||
return switch (r) {
|
return switch (@intToEnum(Errno, r)) {
|
||||||
c.UV_E2BIG => Error.E2BIG,
|
.E2BIG => Error.E2BIG,
|
||||||
c.UV_EACCES => Error.EACCES,
|
.EACCES => Error.EACCES,
|
||||||
c.UV_EADDRINUSE => Error.EADDRINUSE,
|
.EADDRINUSE => Error.EADDRINUSE,
|
||||||
c.UV_EADDRNOTAVAIL => Error.EADDRNOTAVAIL,
|
.EADDRNOTAVAIL => Error.EADDRNOTAVAIL,
|
||||||
c.UV_EAFNOSUPPORT => Error.EAFNOSUPPORT,
|
.EAFNOSUPPORT => Error.EAFNOSUPPORT,
|
||||||
c.UV_EAGAIN => Error.EAGAIN,
|
.EAGAIN => Error.EAGAIN,
|
||||||
c.UV_EAI_ADDRFAMILY => Error.EAI_ADDRFAMILY,
|
.EAI_ADDRFAMILY => Error.EAI_ADDRFAMILY,
|
||||||
c.UV_EAI_AGAIN => Error.EAI_AGAIN,
|
.EAI_AGAIN => Error.EAI_AGAIN,
|
||||||
c.UV_EAI_BADFLAGS => Error.EAI_BADFLAGS,
|
.EAI_BADFLAGS => Error.EAI_BADFLAGS,
|
||||||
c.UV_EAI_BADHINTS => Error.EAI_BADHINTS,
|
.EAI_BADHINTS => Error.EAI_BADHINTS,
|
||||||
c.UV_EAI_CANCELED => Error.EAI_CANCELED,
|
.EAI_CANCELED => Error.EAI_CANCELED,
|
||||||
c.UV_EAI_FAIL => Error.EAI_FAIL,
|
.EAI_FAIL => Error.EAI_FAIL,
|
||||||
c.UV_EAI_FAMILY => Error.EAI_FAMILY,
|
.EAI_FAMILY => Error.EAI_FAMILY,
|
||||||
c.UV_EAI_MEMORY => Error.EAI_MEMORY,
|
.EAI_MEMORY => Error.EAI_MEMORY,
|
||||||
c.UV_EAI_NODATA => Error.EAI_NODATA,
|
.EAI_NODATA => Error.EAI_NODATA,
|
||||||
c.UV_EAI_NONAME => Error.EAI_NONAME,
|
.EAI_NONAME => Error.EAI_NONAME,
|
||||||
c.UV_EAI_OVERFLOW => Error.EAI_OVERFLOW,
|
.EAI_OVERFLOW => Error.EAI_OVERFLOW,
|
||||||
c.UV_EAI_PROTOCOL => Error.EAI_PROTOCOL,
|
.EAI_PROTOCOL => Error.EAI_PROTOCOL,
|
||||||
c.UV_EAI_SERVICE => Error.EAI_SERVICE,
|
.EAI_SERVICE => Error.EAI_SERVICE,
|
||||||
c.UV_EAI_SOCKTYPE => Error.EAI_SOCKTYPE,
|
.EAI_SOCKTYPE => Error.EAI_SOCKTYPE,
|
||||||
c.UV_EALREADY => Error.EALREADY,
|
.EALREADY => Error.EALREADY,
|
||||||
c.UV_EBADF => Error.EBADF,
|
.EBADF => Error.EBADF,
|
||||||
c.UV_EBUSY => Error.EBUSY,
|
.EBUSY => Error.EBUSY,
|
||||||
c.UV_ECANCELED => Error.ECANCELED,
|
.ECANCELED => Error.ECANCELED,
|
||||||
c.UV_ECHARSET => Error.ECHARSET,
|
.ECHARSET => Error.ECHARSET,
|
||||||
c.UV_ECONNABORTED => Error.ECONNABORTED,
|
.ECONNABORTED => Error.ECONNABORTED,
|
||||||
c.UV_ECONNREFUSED => Error.ECONNREFUSED,
|
.ECONNREFUSED => Error.ECONNREFUSED,
|
||||||
c.UV_ECONNRESET => Error.ECONNRESET,
|
.ECONNRESET => Error.ECONNRESET,
|
||||||
c.UV_EDESTADDRREQ => Error.EDESTADDRREQ,
|
.EDESTADDRREQ => Error.EDESTADDRREQ,
|
||||||
c.UV_EEXIST => Error.EEXIST,
|
.EEXIST => Error.EEXIST,
|
||||||
c.UV_EFAULT => Error.EFAULT,
|
.EFAULT => Error.EFAULT,
|
||||||
c.UV_EFBIG => Error.EFBIG,
|
.EFBIG => Error.EFBIG,
|
||||||
c.UV_EHOSTUNREACH => Error.EHOSTUNREACH,
|
.EHOSTUNREACH => Error.EHOSTUNREACH,
|
||||||
c.UV_EINTR => Error.EINTR,
|
.EINTR => Error.EINTR,
|
||||||
c.UV_EINVAL => Error.EINVAL,
|
.EINVAL => Error.EINVAL,
|
||||||
c.UV_EIO => Error.EIO,
|
.EIO => Error.EIO,
|
||||||
c.UV_EISCONN => Error.EISCONN,
|
.EISCONN => Error.EISCONN,
|
||||||
c.UV_EISDIR => Error.EISDIR,
|
.EISDIR => Error.EISDIR,
|
||||||
c.UV_ELOOP => Error.ELOOP,
|
.ELOOP => Error.ELOOP,
|
||||||
c.UV_EMFILE => Error.EMFILE,
|
.EMFILE => Error.EMFILE,
|
||||||
c.UV_EMSGSIZE => Error.EMSGSIZE,
|
.EMSGSIZE => Error.EMSGSIZE,
|
||||||
c.UV_ENAMETOOLONG => Error.ENAMETOOLONG,
|
.ENAMETOOLONG => Error.ENAMETOOLONG,
|
||||||
c.UV_ENETDOWN => Error.ENETDOWN,
|
.ENETDOWN => Error.ENETDOWN,
|
||||||
c.UV_ENETUNREACH => Error.ENETUNREACH,
|
.ENETUNREACH => Error.ENETUNREACH,
|
||||||
c.UV_ENFILE => Error.ENFILE,
|
.ENFILE => Error.ENFILE,
|
||||||
c.UV_ENOBUFS => Error.ENOBUFS,
|
.ENOBUFS => Error.ENOBUFS,
|
||||||
c.UV_ENODEV => Error.ENODEV,
|
.ENODEV => Error.ENODEV,
|
||||||
c.UV_ENOENT => Error.ENOENT,
|
.ENOENT => Error.ENOENT,
|
||||||
c.UV_ENOMEM => Error.ENOMEM,
|
.ENOMEM => Error.ENOMEM,
|
||||||
c.UV_ENONET => Error.ENONET,
|
.ENONET => Error.ENONET,
|
||||||
c.UV_ENOPROTOOPT => Error.ENOPROTOOPT,
|
.ENOPROTOOPT => Error.ENOPROTOOPT,
|
||||||
c.UV_ENOSPC => Error.ENOSPC,
|
.ENOSPC => Error.ENOSPC,
|
||||||
c.UV_ENOSYS => Error.ENOSYS,
|
.ENOSYS => Error.ENOSYS,
|
||||||
c.UV_ENOTCONN => Error.ENOTCONN,
|
.ENOTCONN => Error.ENOTCONN,
|
||||||
c.UV_ENOTDIR => Error.ENOTDIR,
|
.ENOTDIR => Error.ENOTDIR,
|
||||||
c.UV_ENOTEMPTY => Error.ENOTEMPTY,
|
.ENOTEMPTY => Error.ENOTEMPTY,
|
||||||
c.UV_ENOTSOCK => Error.ENOTSOCK,
|
.ENOTSOCK => Error.ENOTSOCK,
|
||||||
c.UV_ENOTSUP => Error.ENOTSUP,
|
.ENOTSUP => Error.ENOTSUP,
|
||||||
c.UV_EPERM => Error.EPERM,
|
.EPERM => Error.EPERM,
|
||||||
c.UV_EPIPE => Error.EPIPE,
|
.EPIPE => Error.EPIPE,
|
||||||
c.UV_EPROTO => Error.EPROTO,
|
.EPROTO => Error.EPROTO,
|
||||||
c.UV_EPROTONOSUPPORT => Error.EPROTONOSUPPORT,
|
.EPROTONOSUPPORT => Error.EPROTONOSUPPORT,
|
||||||
c.UV_EPROTOTYPE => Error.EPROTOTYPE,
|
.EPROTOTYPE => Error.EPROTOTYPE,
|
||||||
c.UV_ERANGE => Error.ERANGE,
|
.ERANGE => Error.ERANGE,
|
||||||
c.UV_EROFS => Error.EROFS,
|
.EROFS => Error.EROFS,
|
||||||
c.UV_ESHUTDOWN => Error.ESHUTDOWN,
|
.ESHUTDOWN => Error.ESHUTDOWN,
|
||||||
c.UV_ESPIPE => Error.ESPIPE,
|
.ESPIPE => Error.ESPIPE,
|
||||||
c.UV_ESRCH => Error.ESRCH,
|
.ESRCH => Error.ESRCH,
|
||||||
c.UV_ETIMEDOUT => Error.ETIMEDOUT,
|
.ETIMEDOUT => Error.ETIMEDOUT,
|
||||||
c.UV_ETXTBSY => Error.ETXTBSY,
|
.ETXTBSY => Error.ETXTBSY,
|
||||||
c.UV_EXDEV => Error.EXDEV,
|
.EXDEV => Error.EXDEV,
|
||||||
c.UV_UNKNOWN => Error.UNKNOWN,
|
.UNKNOWN => Error.UNKNOWN,
|
||||||
c.UV_EOF => Error.EOF,
|
.EOF => Error.EOF,
|
||||||
c.UV_ENXIO => Error.ENXIO,
|
.ENXIO => Error.ENXIO,
|
||||||
c.UV_EHOSTDOWN => Error.EHOSTDOWN,
|
.EHOSTDOWN => Error.EHOSTDOWN,
|
||||||
c.UV_EREMOTEIO => Error.EREMOTEIO,
|
.EREMOTEIO => Error.EREMOTEIO,
|
||||||
c.UV_ENOTTY => Error.ENOTTY,
|
.ENOTTY => Error.ENOTTY,
|
||||||
c.UV_EFTYPE => Error.EFTYPE,
|
.EFTYPE => Error.EFTYPE,
|
||||||
c.UV_EILSEQ => Error.EILSEQ,
|
.EILSEQ => Error.EILSEQ,
|
||||||
c.UV_ESOCKTNOSUPPORT => Error.ESOCKTNOSUPPORT,
|
.ESOCKTNOSUPPORT => Error.ESOCKTNOSUPPORT,
|
||||||
else => unreachable,
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user