diff options
Diffstat (limited to 'otherlibs/unix/errmsg.c')
-rw-r--r-- | otherlibs/unix/errmsg.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/otherlibs/unix/errmsg.c b/otherlibs/unix/errmsg.c new file mode 100644 index 000000000..d3efc8414 --- /dev/null +++ b/otherlibs/unix/errmsg.c @@ -0,0 +1,36 @@ +#include <errno.h> +#include <mlvalues.h> +#include <alloc.h> + +extern int error_table[]; + +#ifdef HAS_STRERROR + +#include <string.h> + +value unix_error_message(err) + value err; +{ + int errnum; + errnum = error_table[Tag_val(err)]; + return copy_string(strerror(errno)); +} + +#else + +extern int sys_nerr; +extern char *sys_errlist[]; + +value unix_error_message(err) + value err; +{ + int errnum; + errnum = error_table[Tag_val(err)]; + if (errnum < 0 || errnum >= sys_nerr) { + return copy_string("Unknown error"); + } else { + return copy_string(sys_errlist[errnum]); + } +} + +#endif |