Commit 0a4f21c6 authored by dearblue's avatar dearblue

Support `disable_presym` for `mrbgems/mruby-errno`

The `mrbgems/mruby-errno/src/known_errors_def.cstub` file has been extended, so the `mrbgems/mruby-errno/src/known_errors_e2c.cstub` file is no longer needed.
parent b7adf61f
......@@ -10,14 +10,30 @@
#include <string.h>
#include <mruby/presym.h>
static struct {
static const struct {
#ifdef MRB_NO_PRESYM
#define itsdefined(name, sym) { #name, name },
const char *name;
#else
#define itsdefined(name, sym) { sym, name },
mrb_sym sym;
#endif
int eno;
} e2c[] = {
#include "known_errors_e2c.cstub"
{0, 0},
#define itsnotdefined(name, sym)
#include "known_errors_def.cstub"
#undef itsdefined
#undef itsnotdefined
};
#ifdef MRB_NO_PRESYM
#define ENTRY_SYM(e) mrb_intern_static(mrb, (e).name, strlen((e).name))
#else
#define ENTRY_SYM(e) (e).sym
#endif
#define E2C_LEN (sizeof(e2c) / sizeof(e2c[0]))
static void
mrb_sce_init(mrb_state *mrb, mrb_value self, mrb_value m, mrb_int n)
{
......@@ -30,14 +46,14 @@ mrb_sce_init(mrb_state *mrb, mrb_value self, mrb_value m, mrb_int n)
if (!no_errno) {
int i;
for (i=0; e2c[i].sym != 0; i++) {
for (i=0; i < E2C_LEN; i++) {
if (e2c[i].eno == n) {
mrb_basic_ptr(self)->c = mrb_class_get_under_id(mrb, m_errno, e2c[i].sym);
mrb_basic_ptr(self)->c = mrb_class_get_under_id(mrb, m_errno, ENTRY_SYM(e2c[i]));
str = mrb_str_new_cstr(mrb, strerror(n));
break;
}
}
if (e2c[i].sym == 0) {
if (i == E2C_LEN) {
mrb_iv_set(mrb, self, MRB_SYM(errno), mrb_fixnum_value(n));
str = mrb_str_new_cstr(mrb, "Unknown error: ");
snprintf(buf, sizeof(buf), "%d", (int)n);
......@@ -158,19 +174,19 @@ mrb_mruby_errno_gem_init(mrb_state *mrb)
//mrb_define_method(mrb, e, "===", mrb_exxx_cmp, MRB_ARGS_REQ(1));
noerror = mrb_obj_value(e);
#define itsdefined(SYM) \
#define itsdefined(name, sym) \
do { \
int ai = mrb_gc_arena_save(mrb); \
e = mrb_define_class_under(mrb, eno, #SYM, sce); \
mrb_define_const_id(mrb, e, MRB_SYM(Errno), mrb_fixnum_value(SYM)); \
e = mrb_define_class_under_id(mrb, eno, sym, sce); \
mrb_define_const_id(mrb, e, MRB_SYM(Errno), mrb_fixnum_value(name)); \
mrb_define_method(mrb, e, "initialize", mrb_exxx_init, MRB_ARGS_OPT(1)); \
mrb_gc_arena_restore(mrb, ai); \
} while (0)
} while (0);
#define itsnotdefined(SYM) \
#define itsnotdefined(name, sym) \
do { \
mrb_define_const(mrb, eno, #SYM, noerror); \
} while (0)
mrb_define_const_id(mrb, eno, sym, noerror); \
} while (0);
#include "known_errors_def.cstub"
}
......
......@@ -2,24 +2,17 @@
Dir.chdir(File.dirname($0))
e = File.open("known_errors_e2c.cstub", "w")
d = File.open("known_errors_def.cstub", "w")
IO.readlines("known_errors.def").each { |name|
next if name =~ /^#/
name.strip!
e.write <<CODE
#ifdef #{name}
{ MRB_SYM(#{name}), #{name} },
#endif
CODE
d.write <<CODE
#ifdef #{name}
itsdefined(#{name});
itsdefined(#{name}, MRB_SYM(#{name}))
#else
itsnotdefined(#{name});
itsnotdefined(#{name}, MRB_SYM(#{name}))
#endif
CODE
}
#ifdef EPERM
{ MRB_SYM(EPERM), EPERM },
#endif
#ifdef ENOENT
{ MRB_SYM(ENOENT), ENOENT },
#endif
#ifdef ESRCH
{ MRB_SYM(ESRCH), ESRCH },
#endif
#ifdef EINTR
{ MRB_SYM(EINTR), EINTR },
#endif
#ifdef EIO
{ MRB_SYM(EIO), EIO },
#endif
#ifdef ENXIO
{ MRB_SYM(ENXIO), ENXIO },
#endif
#ifdef E2BIG
{ MRB_SYM(E2BIG), E2BIG },
#endif
#ifdef ENOEXEC
{ MRB_SYM(ENOEXEC), ENOEXEC },
#endif
#ifdef EBADF
{ MRB_SYM(EBADF), EBADF },
#endif
#ifdef ECHILD
{ MRB_SYM(ECHILD), ECHILD },
#endif
#ifdef EAGAIN
{ MRB_SYM(EAGAIN), EAGAIN },
#endif
#ifdef ENOMEM
{ MRB_SYM(ENOMEM), ENOMEM },
#endif
#ifdef EACCES
{ MRB_SYM(EACCES), EACCES },
#endif
#ifdef EFAULT
{ MRB_SYM(EFAULT), EFAULT },
#endif
#ifdef ENOTBLK
{ MRB_SYM(ENOTBLK), ENOTBLK },
#endif
#ifdef EBUSY
{ MRB_SYM(EBUSY), EBUSY },
#endif
#ifdef EEXIST
{ MRB_SYM(EEXIST), EEXIST },
#endif
#ifdef EXDEV
{ MRB_SYM(EXDEV), EXDEV },
#endif
#ifdef ENODEV
{ MRB_SYM(ENODEV), ENODEV },
#endif
#ifdef ENOTDIR
{ MRB_SYM(ENOTDIR), ENOTDIR },
#endif
#ifdef EISDIR
{ MRB_SYM(EISDIR), EISDIR },
#endif
#ifdef EINVAL
{ MRB_SYM(EINVAL), EINVAL },
#endif
#ifdef ENFILE
{ MRB_SYM(ENFILE), ENFILE },
#endif
#ifdef EMFILE
{ MRB_SYM(EMFILE), EMFILE },
#endif
#ifdef ENOTTY
{ MRB_SYM(ENOTTY), ENOTTY },
#endif
#ifdef ETXTBSY
{ MRB_SYM(ETXTBSY), ETXTBSY },
#endif
#ifdef EFBIG
{ MRB_SYM(EFBIG), EFBIG },
#endif
#ifdef ENOSPC
{ MRB_SYM(ENOSPC), ENOSPC },
#endif
#ifdef ESPIPE
{ MRB_SYM(ESPIPE), ESPIPE },
#endif
#ifdef EROFS
{ MRB_SYM(EROFS), EROFS },
#endif
#ifdef EMLINK
{ MRB_SYM(EMLINK), EMLINK },
#endif
#ifdef EPIPE
{ MRB_SYM(EPIPE), EPIPE },
#endif
#ifdef EDOM
{ MRB_SYM(EDOM), EDOM },
#endif
#ifdef ERANGE
{ MRB_SYM(ERANGE), ERANGE },
#endif
#ifdef EDEADLK
{ MRB_SYM(EDEADLK), EDEADLK },
#endif
#ifdef ENAMETOOLONG
{ MRB_SYM(ENAMETOOLONG), ENAMETOOLONG },
#endif
#ifdef ENOLCK
{ MRB_SYM(ENOLCK), ENOLCK },
#endif
#ifdef ENOSYS
{ MRB_SYM(ENOSYS), ENOSYS },
#endif
#ifdef ENOTEMPTY
{ MRB_SYM(ENOTEMPTY), ENOTEMPTY },
#endif
#ifdef ELOOP
{ MRB_SYM(ELOOP), ELOOP },
#endif
#ifdef EWOULDBLOCK
{ MRB_SYM(EWOULDBLOCK), EWOULDBLOCK },
#endif
#ifdef ENOMSG
{ MRB_SYM(ENOMSG), ENOMSG },
#endif
#ifdef EIDRM
{ MRB_SYM(EIDRM), EIDRM },
#endif
#ifdef ECHRNG
{ MRB_SYM(ECHRNG), ECHRNG },
#endif
#ifdef EL2NSYNC
{ MRB_SYM(EL2NSYNC), EL2NSYNC },
#endif
#ifdef EL3HLT
{ MRB_SYM(EL3HLT), EL3HLT },
#endif
#ifdef EL3RST
{ MRB_SYM(EL3RST), EL3RST },
#endif
#ifdef ELNRNG
{ MRB_SYM(ELNRNG), ELNRNG },
#endif
#ifdef EUNATCH
{ MRB_SYM(EUNATCH), EUNATCH },
#endif
#ifdef ENOCSI
{ MRB_SYM(ENOCSI), ENOCSI },
#endif
#ifdef EL2HLT
{ MRB_SYM(EL2HLT), EL2HLT },
#endif
#ifdef EBADE
{ MRB_SYM(EBADE), EBADE },
#endif
#ifdef EBADR
{ MRB_SYM(EBADR), EBADR },
#endif
#ifdef EXFULL
{ MRB_SYM(EXFULL), EXFULL },
#endif
#ifdef ENOANO
{ MRB_SYM(ENOANO), ENOANO },
#endif
#ifdef EBADRQC
{ MRB_SYM(EBADRQC), EBADRQC },
#endif
#ifdef EBADSLT
{ MRB_SYM(EBADSLT), EBADSLT },
#endif
#ifdef EDEADLOCK
{ MRB_SYM(EDEADLOCK), EDEADLOCK },
#endif
#ifdef EBFONT
{ MRB_SYM(EBFONT), EBFONT },
#endif
#ifdef ENOSTR
{ MRB_SYM(ENOSTR), ENOSTR },
#endif
#ifdef ENODATA
{ MRB_SYM(ENODATA), ENODATA },
#endif
#ifdef ETIME
{ MRB_SYM(ETIME), ETIME },
#endif
#ifdef ENOSR
{ MRB_SYM(ENOSR), ENOSR },
#endif
#ifdef ENONET
{ MRB_SYM(ENONET), ENONET },
#endif
#ifdef ENOPKG
{ MRB_SYM(ENOPKG), ENOPKG },
#endif
#ifdef EREMOTE
{ MRB_SYM(EREMOTE), EREMOTE },
#endif
#ifdef ENOLINK
{ MRB_SYM(ENOLINK), ENOLINK },
#endif
#ifdef EADV
{ MRB_SYM(EADV), EADV },
#endif
#ifdef ESRMNT
{ MRB_SYM(ESRMNT), ESRMNT },
#endif
#ifdef ECOMM
{ MRB_SYM(ECOMM), ECOMM },
#endif
#ifdef EPROTO
{ MRB_SYM(EPROTO), EPROTO },
#endif
#ifdef ENOTCAPABLE
{ MRB_SYM(ENOTCAPABLE), ENOTCAPABLE },
#endif
#ifdef ECAPMODE
{ MRB_SYM(ECAPMODE), ECAPMODE },
#endif
#ifdef EMULTIHOP
{ MRB_SYM(EMULTIHOP), EMULTIHOP },
#endif
#ifdef EDOTDOT
{ MRB_SYM(EDOTDOT), EDOTDOT },
#endif
#ifdef EBADMSG
{ MRB_SYM(EBADMSG), EBADMSG },
#endif
#ifdef EPWROFF
{ MRB_SYM(EPWROFF), EPWROFF },
#endif
#ifdef EDEVERR
{ MRB_SYM(EDEVERR), EDEVERR },
#endif
#ifdef EOVERFLOW
{ MRB_SYM(EOVERFLOW), EOVERFLOW },
#endif
#ifdef EBADEXEC
{ MRB_SYM(EBADEXEC), EBADEXEC },
#endif
#ifdef EBADARCH
{ MRB_SYM(EBADARCH), EBADARCH },
#endif
#ifdef EBADMACHO
{ MRB_SYM(EBADMACHO), EBADMACHO },
#endif
#ifdef ESHLIBVERS
{ MRB_SYM(ESHLIBVERS), ESHLIBVERS },
#endif
#ifdef ENOTUNIQ
{ MRB_SYM(ENOTUNIQ), ENOTUNIQ },
#endif
#ifdef EBADFD
{ MRB_SYM(EBADFD), EBADFD },
#endif
#ifdef EREMCHG
{ MRB_SYM(EREMCHG), EREMCHG },
#endif
#ifdef ELIBACC
{ MRB_SYM(ELIBACC), ELIBACC },
#endif
#ifdef ELIBBAD
{ MRB_SYM(ELIBBAD), ELIBBAD },
#endif
#ifdef ELIBSCN
{ MRB_SYM(ELIBSCN), ELIBSCN },
#endif
#ifdef ELIBMAX
{ MRB_SYM(ELIBMAX), ELIBMAX },
#endif
#ifdef ELIBEXEC
{ MRB_SYM(ELIBEXEC), ELIBEXEC },
#endif
#ifdef EILSEQ
{ MRB_SYM(EILSEQ), EILSEQ },
#endif
#ifdef ERESTART
{ MRB_SYM(ERESTART), ERESTART },
#endif
#ifdef ESTRPIPE
{ MRB_SYM(ESTRPIPE), ESTRPIPE },
#endif
#ifdef EUSERS
{ MRB_SYM(EUSERS), EUSERS },
#endif
#ifdef ENOTSOCK
{ MRB_SYM(ENOTSOCK), ENOTSOCK },
#endif
#ifdef EDESTADDRREQ
{ MRB_SYM(EDESTADDRREQ), EDESTADDRREQ },
#endif
#ifdef EMSGSIZE
{ MRB_SYM(EMSGSIZE), EMSGSIZE },
#endif
#ifdef EPROTOTYPE
{ MRB_SYM(EPROTOTYPE), EPROTOTYPE },
#endif
#ifdef ENOPROTOOPT
{ MRB_SYM(ENOPROTOOPT), ENOPROTOOPT },
#endif
#ifdef EPROTONOSUPPORT
{ MRB_SYM(EPROTONOSUPPORT), EPROTONOSUPPORT },
#endif
#ifdef ESOCKTNOSUPPORT
{ MRB_SYM(ESOCKTNOSUPPORT), ESOCKTNOSUPPORT },
#endif
#ifdef EOPNOTSUPP
{ MRB_SYM(EOPNOTSUPP), EOPNOTSUPP },
#endif
#ifdef EPFNOSUPPORT
{ MRB_SYM(EPFNOSUPPORT), EPFNOSUPPORT },
#endif
#ifdef EAFNOSUPPORT
{ MRB_SYM(EAFNOSUPPORT), EAFNOSUPPORT },
#endif
#ifdef EADDRINUSE
{ MRB_SYM(EADDRINUSE), EADDRINUSE },
#endif
#ifdef EADDRNOTAVAIL
{ MRB_SYM(EADDRNOTAVAIL), EADDRNOTAVAIL },
#endif
#ifdef ENETDOWN
{ MRB_SYM(ENETDOWN), ENETDOWN },
#endif
#ifdef ENETUNREACH
{ MRB_SYM(ENETUNREACH), ENETUNREACH },
#endif
#ifdef ENETRESET
{ MRB_SYM(ENETRESET), ENETRESET },
#endif
#ifdef ECONNABORTED
{ MRB_SYM(ECONNABORTED), ECONNABORTED },
#endif
#ifdef ECONNRESET
{ MRB_SYM(ECONNRESET), ECONNRESET },
#endif
#ifdef ENOBUFS
{ MRB_SYM(ENOBUFS), ENOBUFS },
#endif
#ifdef EISCONN
{ MRB_SYM(EISCONN), EISCONN },
#endif
#ifdef ENOTCONN
{ MRB_SYM(ENOTCONN), ENOTCONN },
#endif
#ifdef ESHUTDOWN
{ MRB_SYM(ESHUTDOWN), ESHUTDOWN },
#endif
#ifdef ETOOMANYREFS
{ MRB_SYM(ETOOMANYREFS), ETOOMANYREFS },
#endif
#ifdef ETIMEDOUT
{ MRB_SYM(ETIMEDOUT), ETIMEDOUT },
#endif
#ifdef ECONNREFUSED
{ MRB_SYM(ECONNREFUSED), ECONNREFUSED },
#endif
#ifdef EHOSTDOWN
{ MRB_SYM(EHOSTDOWN), EHOSTDOWN },
#endif
#ifdef EHOSTUNREACH
{ MRB_SYM(EHOSTUNREACH), EHOSTUNREACH },
#endif
#ifdef EALREADY
{ MRB_SYM(EALREADY), EALREADY },
#endif
#ifdef EINPROGRESS
{ MRB_SYM(EINPROGRESS), EINPROGRESS },
#endif
#ifdef ESTALE
{ MRB_SYM(ESTALE), ESTALE },
#endif
#ifdef EUCLEAN
{ MRB_SYM(EUCLEAN), EUCLEAN },
#endif
#ifdef ENOTNAM
{ MRB_SYM(ENOTNAM), ENOTNAM },
#endif
#ifdef ENAVAIL
{ MRB_SYM(ENAVAIL), ENAVAIL },
#endif
#ifdef EISNAM
{ MRB_SYM(EISNAM), EISNAM },
#endif
#ifdef EREMOTEIO
{ MRB_SYM(EREMOTEIO), EREMOTEIO },
#endif
#ifdef EDQUOT
{ MRB_SYM(EDQUOT), EDQUOT },
#endif
#ifdef ECANCELED
{ MRB_SYM(ECANCELED), ECANCELED },
#endif
#ifdef EKEYEXPIRED
{ MRB_SYM(EKEYEXPIRED), EKEYEXPIRED },
#endif
#ifdef EKEYREJECTED
{ MRB_SYM(EKEYREJECTED), EKEYREJECTED },
#endif
#ifdef EKEYREVOKED
{ MRB_SYM(EKEYREVOKED), EKEYREVOKED },
#endif
#ifdef EMEDIUMTYPE
{ MRB_SYM(EMEDIUMTYPE), EMEDIUMTYPE },
#endif
#ifdef ENOKEY
{ MRB_SYM(ENOKEY), ENOKEY },
#endif
#ifdef ENOMEDIUM
{ MRB_SYM(ENOMEDIUM), ENOMEDIUM },
#endif
#ifdef ENOTRECOVERABLE
{ MRB_SYM(ENOTRECOVERABLE), ENOTRECOVERABLE },
#endif
#ifdef EOWNERDEAD
{ MRB_SYM(EOWNERDEAD), EOWNERDEAD },
#endif
#ifdef EINTEGRITY
{ MRB_SYM(EINTEGRITY), EINTEGRITY },
#endif
#ifdef ERFKILL
{ MRB_SYM(ERFKILL), ERFKILL },
#endif
#ifdef EAUTH
{ MRB_SYM(EAUTH), EAUTH },
#endif
#ifdef EBADRPC
{ MRB_SYM(EBADRPC), EBADRPC },
#endif
#ifdef EDOOFUS
{ MRB_SYM(EDOOFUS), EDOOFUS },
#endif
#ifdef EFTYPE
{ MRB_SYM(EFTYPE), EFTYPE },
#endif
#ifdef ENEEDAUTH
{ MRB_SYM(ENEEDAUTH), ENEEDAUTH },
#endif
#ifdef ENOATTR
{ MRB_SYM(ENOATTR), ENOATTR },
#endif
#ifdef ENOTSUP
{ MRB_SYM(ENOTSUP), ENOTSUP },
#endif
#ifdef EPROCLIM
{ MRB_SYM(EPROCLIM), EPROCLIM },
#endif
#ifdef EPROCUNAVAIL
{ MRB_SYM(EPROCUNAVAIL), EPROCUNAVAIL },
#endif
#ifdef EPROGMISMATCH
{ MRB_SYM(EPROGMISMATCH), EPROGMISMATCH },
#endif
#ifdef EPROGUNAVAIL
{ MRB_SYM(EPROGUNAVAIL), EPROGUNAVAIL },
#endif
#ifdef ERPCMISMATCH
{ MRB_SYM(ERPCMISMATCH), ERPCMISMATCH },
#endif
#ifdef EIPSEC
{ MRB_SYM(EIPSEC), EIPSEC },
#endif
#ifdef ENOPOLICY
{ MRB_SYM(ENOPOLICY), ENOPOLICY },
#endif
#ifdef EQFULL
{ MRB_SYM(EQFULL), EQFULL },
#endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment