ack/lang/cem/libcc/gen/getlogin.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;
}