URL
https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk
Subversion Repositories openrisc_me
[/] [openrisc/] [trunk/] [gnu-src/] [newlib-1.18.0/] [newlib/] [libc/] [unix/] [getut.c] - Rev 207
Compare with Previous | Blame | View Log
#ifndef _NO_GETUT #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <unistd.h> #include <utmp.h> #include <_syslist.h> #include <_ansi.h> static int utmp_fd = -2; static char *utmp_file = UTMP_FILE; static struct utmp utmp_data; void setutent () { if (utmp_fd == -2) { utmp_fd = open (utmp_file, O_RDONLY); } lseek (utmp_fd, 0, SEEK_SET); } void endutent () { close (utmp_fd); utmp_fd = -2; } void utmpname (_CONST char *file) { utmp_file = strdup (file); } struct utmp * getutent () { if (utmp_fd == -2) setutent (); if (read (utmp_fd, &utmp_data, sizeof (utmp_data)) < sizeof (utmp_data)) return 0; return &utmp_data; } struct utmp * getutid (struct utmp *id) { while (read (utmp_fd, &utmp_data, sizeof (utmp_data)) == sizeof (utmp_data)) { switch (id->ut_type) { case RUN_LVL: case BOOT_TIME: case OLD_TIME: case NEW_TIME: if (id->ut_type == utmp_data.ut_type) return &utmp_data; case INIT_PROCESS: case LOGIN_PROCESS: case USER_PROCESS: case DEAD_PROCESS: if (id->ut_id == utmp_data.ut_id) return &utmp_data; default: abort (); } } return 0; } struct utmp * getutline (struct utmp *line) { while (read (utmp_fd, &utmp_data, sizeof (utmp_data)) == sizeof (utmp_data)) { if ((utmp_data.ut_type == LOGIN_PROCESS || utmp_data.ut_type == USER_PROCESS) && !strncmp (utmp_data.ut_line, line->ut_line, sizeof (utmp_data.ut_line))) return &utmp_data; } return 0; } #endif /* !_NO_GETUT */