summaryrefslogtreecommitdiff
path: root/newlib/libc/unix/getlogin.c
diff options
context:
space:
mode:
authorChristopher Faylor <me+cygwin@cgf.cx>2000-02-17 19:39:46 +0000
committerChristopher Faylor <me+cygwin@cgf.cx>2000-02-17 19:39:46 +0000
commit43b55bace5fad27af5da7a99784667363b92c45d (patch)
tree17fe82f6ba0d93b76d10dd73d4945ab81b69db40 /newlib/libc/unix/getlogin.c
parent8dabd7496a9eeaca2a7180c0a176059ba9229bb2 (diff)
downloadgdb-SNAPSHOT.tar.gz
import newlib-2000-02-17 snapshotnewlib-2000-02-17SNAPSHOT
Diffstat (limited to 'newlib/libc/unix/getlogin.c')
-rw-r--r--newlib/libc/unix/getlogin.c40
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 00000000000..7c1f3104e1c
--- /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;
+}