Merge branch 'master' of git://cadel.mutabah.net/acess2
authorJohn Hodge (sonata) <[email protected]>
Thu, 1 Aug 2013 04:07:43 +0000 (12:07 +0800)
committerJohn Hodge (sonata) <[email protected]>
Thu, 1 Aug 2013 04:07:43 +0000 (12:07 +0800)
Conflicts:
Usermode/Applications/telnetd_src/main.c
Usermode/Libraries/libc.so_src/perror.c

1  2 
Usermode/Applications/telnetd_src/main.c
Usermode/Libraries/ld-acess.so_src/include_exp/acess/devices/pty.h
Usermode/Libraries/libc.so_src/Makefile
Usermode/Libraries/libc.so_src/errno.c

  #include <stdio.h>
  #include <stdlib.h>
  #include <acess/sys.h>
+ #include <assert.h>
  
  // === 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 ===
@@@ -6,39 -6,59 +6,73 @@@
   * - errno and strerror
   */
  #include "lib.h"
 +#include <stdio.h>
  #include <errno.h>
  #include <acess/sys.h>
+ #include <string.h>
  
  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);
 +}
 +

UCC git Repository :: git.ucc.asn.au