46 lines
794 B
C
46 lines
794 B
C
#define UTMPFILE "/etc/utmp"
|
|
|
|
#ifdef __USG
|
|
struct utmp {
|
|
char ut_name[8];
|
|
char ut_id[4];
|
|
char ut_line[12];
|
|
short ut_pid;
|
|
short ut_type;
|
|
struct exit_status {
|
|
short e_termination;
|
|
short e_exit;
|
|
} ut_exit;
|
|
long ut_time;
|
|
};
|
|
#else
|
|
struct utmp {
|
|
char ut_line[8];
|
|
char ut_name[8];
|
|
#ifdef __BSD4_2
|
|
char ut_host[16];
|
|
#endif
|
|
long ut_time;
|
|
};
|
|
#endif
|
|
|
|
char *
|
|
getlogin()
|
|
{
|
|
struct utmp ut;
|
|
static char name[sizeof(ut.ut_name) + 1];
|
|
int slotno = ttyslot();
|
|
int fd;
|
|
register char *p, *q;
|
|
|
|
if (! slotno || !(fd = open(UTMPFILE, 0))) return 0;
|
|
lseek(fd, (long) slotno * sizeof(ut), 0);
|
|
if (read(fd, (char *) &ut, sizeof(ut)) < sizeof(ut)) return 0;
|
|
close(fd);
|
|
ut.ut_name[sizeof(ut.ut_name)] = ' ';
|
|
p = ut.ut_name;
|
|
q = name;
|
|
while (*p != ' ') *q++ = *p++;
|
|
*q = '\0';
|
|
return name;
|
|
}
|