Usermode/libc - Time formatting, stub locale.h, rename/remove
[tpg/acess2.git] / Usermode / Libraries / libposix.so_src / unistd.c
index 545ef16..64cb70f 100644 (file)
@@ -183,6 +183,17 @@ int usleep(useconds_t usec)
        return 0;
 }
 
+unsigned int alarm(unsigned int seconds)
+{
+       static int64_t  alarm_time;
+       if( seconds > 0 )
+       {
+               alarm_time = _SysTimestamp() + seconds * 1000;
+               // TODO: Schedule SIGALRM
+       }
+       return (alarm_time - _SysTimestamp()) / 1000;
+}
+
 int kill(pid_t pid, int signal)
 {
        // TODO: Need special handling?
@@ -242,6 +253,7 @@ char *getpass(const char *prompt)
        mode.OutputMode = 0;
        _SysIOCtl(STDIN_FILENO, PTY_IOCTL_SETMODE, &mode);
        fprintf(stderr, "%s", prompt);
+       fflush(stdin);  // clear stdin buffer
        fgets(passbuf, PASS_MAX+1, stdin);
        fprintf(stderr, "\n");
        for( int i = strlen(passbuf); i > 0 && (passbuf[i-1] == '\r' || passbuf[i-1] == '\n'); i -- )
@@ -252,3 +264,25 @@ char *getpass(const char *prompt)
        return passbuf;
 }
 
+char *ttyname(int fd)
+{
+       static char ttyname_buf[32];
+       errno = ttyname_r(fd, ttyname_buf, sizeof(ttyname_buf));
+       if(errno)       return NULL;
+       
+       return ttyname_buf;
+}
+int ttyname_r(int fd, char *buf, size_t buflen)
+{
+        int    type = _SysIOCtl(fd, DRV_IOCTL_TYPE, NULL);
+       if( type == -1 )
+               return errno;
+       if( type != DRV_TYPE_TERMINAL )
+               return ENOTTY;
+
+       _SysIOCtl(fd, PTY_IOCTL_GETID, NULL);   
+
+       _SysDebug("TODO: ttyname_r");
+
+       return ENOTIMPL;
+}

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