diff options
author | Christopher Faylor <me@cgf.cx> | 2000-02-17 19:39:52 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2000-02-17 19:39:52 +0000 |
commit | 8a0efa53e44919bcf5ccb1d3353618a82afdf8bc (patch) | |
tree | 68c3dbf3f2c6fd5d49777def9914d77b5cd4589d /newlib/libc/unix/getlogin.c | |
parent | 1fd5e000ace55b323124c7e556a7a864b972a5c4 (diff) | |
download | cygnal-8a0efa53e44919bcf5ccb1d3353618a82afdf8bc.tar.gz cygnal-8a0efa53e44919bcf5ccb1d3353618a82afdf8bc.tar.bz2 cygnal-8a0efa53e44919bcf5ccb1d3353618a82afdf8bc.zip |
import newlib-2000-02-17 snapshot
Diffstat (limited to 'newlib/libc/unix/getlogin.c')
-rw-r--r-- | newlib/libc/unix/getlogin.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/newlib/libc/unix/getlogin.c b/newlib/libc/unix/getlogin.c new file mode 100644 index 000000000..7c1f3104e --- /dev/null +++ b/newlib/libc/unix/getlogin.c @@ -0,0 +1,40 @@ +#include <sys/types.h> +#include <utmp.h> +#include <fcntl.h> +#include <_syslist.h> + +char * +getlogin () +{ + int utmp_fd; + struct utmp utmp_buf; + static char buf[10]; + extern char *ttyname (); + char *tty; + + if (((tty = ttyname (0)) == 0) + || ((tty = ttyname (1)) == 0) + || ((tty = ttyname (2)) == 0)) + return 0; + + if ((utmp_fd = _open (UTMP_FILE, O_RDONLY)) == -1) + return 0; + + if (!strncmp (tty, "/dev/", 5)) + tty += 5; + + while (_read (utmp_fd, &utmp_buf, sizeof (utmp_buf)) == sizeof (utmp_buf)) + { + if (!strncmp (tty, utmp_buf.ut_line, sizeof (utmp_buf.ut_line)) + && utmp_buf.ut_type == USER_PROCESS) + { + _close (utmp_fd); + memset (buf, 0, sizeof (buf)); + strncpy (buf, utmp_buf.ut_user, sizeof (utmp_buf.ut_user)); + return buf; + } + } + + _close (utmp_fd); + return 0; +} |