From: John Hodge (sonata) Date: Thu, 1 Aug 2013 04:07:43 +0000 (+0800) Subject: Merge branch 'master' of git://cadel.mutabah.net/acess2 X-Git-Tag: rel0.15~292^2 X-Git-Url: https://git.ucc.asn.au/?p=tpg%2Facess2.git;a=commitdiff_plain;h=e7a76b0d8a0cc6aa77966509780973a6f8216ef7 Merge branch 'master' of git://cadel.mutabah.net/acess2 Conflicts: Usermode/Applications/telnetd_src/main.c Usermode/Libraries/libc.so_src/perror.c --- e7a76b0d8a0cc6aa77966509780973a6f8216ef7 diff --cc Usermode/Applications/telnetd_src/main.c index 6ef832f3,05268011..7fac367b --- a/Usermode/Applications/telnetd_src/main.c +++ b/Usermode/Applications/telnetd_src/main.c @@@ -10,23 -10,14 +10,26 @@@ #include #include #include + #include // === TYPES === +enum eTelnetMode +{ + MODE_DATA, + MODE_IAC, + MODE_WILL, + MODE_WONT, + MODE_DO, + MODE_DONT +}; + typedef struct sClient { + enum eTelnetMode Mode; int Socket; - int stdout; + int pty; + int stdin; ++ int stdout; } tClient; // === PROTOTYPES === diff --cc Usermode/Libraries/libc.so_src/errno.c index b4a4f019,a2d78909..7e1905cd --- a/Usermode/Libraries/libc.so_src/errno.c +++ b/Usermode/Libraries/libc.so_src/errno.c @@@ -6,39 -6,59 +6,73 @@@ * - errno and strerror */ #include "lib.h" +#include #include #include + #include EXPORT int *libc_geterrno() { return &_errno; } - EXPORT const char *strerror(int errnum) + EXPORT char *strerror(int errnum) { - switch(errnum) + switch((enum libc_eErrorNumbers)errnum) { + case EOK: return "Success"; case ENOSYS: return "Invalid instruction/syscall"; + case EINVAL: return "Bad argument(s)"; + case EBADF: return "Invalid file"; + case ENOMEM: return "No free memory"; + case EACCES: return "Not permitted"; + case EBUSY: return "Resource is busy"; + case ERANGE: return "Value out of range"; + case ENOTFOUND: return "Item not found"; + case EROFS: return "Read only filesystem"; + case ENOTIMPL: return "Not implimented"; case ENOENT: return "No such file or directory"; - case EINVAL: return "Bad arguments"; - case EPERM: return "Permissions error"; - default: - _SysDebug("strerror: errnum=%i unk", errnum); - return "unknown error"; + case EEXIST: return "Already exists"; + case ENFILE: return "Too many open files"; + case ENOTDIR: return "Not a directory"; + case EISDIR: return "Is a directory"; + case EIO: return "IO Error"; + case EINTR: return "Interrupted"; + case EWOULDBLOCK: return "Operation would have blocked"; + case ENODEV: return "No such device"; + case EADDRNOTAVAIL: return "Address not avaliable"; + case EINPROGRESS: return "Operation in process"; + case EPERM: return "Operation not permitted"; + case ENOTTY: return "Not a TTY"; + case EAGAIN: return "Try again"; + case EALREADY: return "Operation was no-op"; + case EINTERNAL: return "Internal error"; } + _SysDebug("strerror: errnum=%i unk", errnum); + errno = EINVAL; + return "unknown error"; + } + + EXPORT int strerror_r(int errnum, char *buf, size_t bufsiz) + { + const char *str = strerror(errnum); + if(!str) + return -1; + + strncpy(buf, str, bufsiz); + return 0; } +// stdio.h +EXPORT void perror(const char *s) +{ + int err = errno; + if( s && s[0] ) { + fprintf(stderr, "%s: (%i) %s\n", s, err, strerror(err)); + } + else { + fprintf(stderr, "(%i) %s\n", err, strerror(err)); + } + _SysDebug("perror('%s'): %s (%i)", s, strerror(err), err); +} +