diff options
-rw-r--r-- | include/utmp.h | 8 | ||||
-rw-r--r-- | libc/misc/utmp/utent.c | 80 | ||||
-rw-r--r-- | libc/misc/utmp/utxent.c | 4 | ||||
-rw-r--r-- | libc/misc/utmp/wtent.c | 14 |
4 files changed, 76 insertions, 30 deletions
diff --git a/include/utmp.h b/include/utmp.h index 10b75c9a0..cb8e08f56 100644 --- a/include/utmp.h +++ b/include/utmp.h @@ -57,37 +57,29 @@ extern void logwtmp (__const char *__ut_line, __const char *__ut_name, /* Append entry UTMP to the wtmp-like file WTMP_FILE. */ extern void updwtmp (__const char *__wtmp_file, __const struct utmp *__utmp) __THROW; -libc_hidden_proto(updwtmp) /* Change name of the utmp file to be examined. */ extern int utmpname (__const char *__file) __THROW; -libc_hidden_proto(utmpname) /* Read next entry from a utmp-like file. */ extern struct utmp *getutent (void) __THROW; -libc_hidden_proto(getutent) /* Reset the input stream to the beginning of the file. */ extern void setutent (void) __THROW; -libc_hidden_proto(setutent) /* Close the current open file. */ extern void endutent (void) __THROW; -libc_hidden_proto(endutent) /* Search forward from the current point in the utmp file until the next entry with a ut_type matching ID->ut_type. */ extern struct utmp *getutid (__const struct utmp *__id) __THROW; -libc_hidden_proto(getutid) /* Search forward from the current point in the utmp file until the next entry with a ut_line matching LINE->ut_line. */ extern struct utmp *getutline (__const struct utmp *__line) __THROW; -libc_hidden_proto(getutline) /* Write out entry pointed to by UTMP_PTR into the utmp file. */ extern struct utmp *pututline (__const struct utmp *__utmp_ptr) __THROW; -libc_hidden_proto(pututline) #if 0 /* def __USE_MISC */ diff --git a/libc/misc/utmp/utent.c b/libc/misc/utmp/utent.c index 07ca44eb2..a35bb2b84 100644 --- a/libc/misc/utmp/utent.c +++ b/libc/misc/utmp/utent.c @@ -19,6 +19,9 @@ #include <errno.h> #include <string.h> #include <utmp.h> +#ifdef __UCLIBC_HAS_UTMPX__ +# include <utmpx.h> +#endif #include <not-cancel.h> #include <bits/uClibc_mutex.h> @@ -31,7 +34,7 @@ static const char default_file_name[] = _PATH_UTMP; static const char *static_ut_name = default_file_name; /* This function must be called with the LOCK held */ -static void __setutent(void) +static void __setutent_unlocked(void) { if (static_fd < 0) { static_fd = open_not_cancel_2(static_ut_name, O_RDWR | O_CLOEXEC); @@ -50,19 +53,24 @@ static void __setutent(void) lseek(static_fd, 0, SEEK_SET); } #if defined __UCLIBC_HAS_THREADS__ -void setutent(void) +static void __setutent(void) { __UCLIBC_MUTEX_LOCK(utmplock); - __setutent(); + __setutent_unlocked(); __UCLIBC_MUTEX_UNLOCK(utmplock); } #else +static void __setutent(void); +strong_alias(__setutent_unlocked,__setutent) +#endif strong_alias(__setutent,setutent) + +#ifdef __UCLIBC_HAS_UTMPX__ +strong_alias(__setutent,setutxent) #endif -libc_hidden_def(setutent) /* This function must be called with the LOCK held */ -static struct utmp *__getutent(void) +static struct utmp *__getutent_unlocked(void) { if (static_fd < 0) { __setutent(); @@ -78,19 +86,27 @@ static struct utmp *__getutent(void) return NULL; } #if defined __UCLIBC_HAS_THREADS__ -struct utmp *getutent(void) +static struct utmp *__getutent(void) { struct utmp *ret; __UCLIBC_MUTEX_LOCK(utmplock); - ret = __getutent(); + ret = __getutent_unlocked(); __UCLIBC_MUTEX_UNLOCK(utmplock); return ret; } #else +static struct utmp *__getutent(void); +strong_alias(__getutent_unlocked,__getutent) +#endif strong_alias(__getutent,getutent) + +#ifdef __UCLIBC_HAS_UTMPX__ +struct utmpx *getutxent(void) +{ + return (struct utmpx *) __getutent (); +} #endif -libc_hidden_def(getutent) static void __endutent(void) { @@ -101,10 +117,13 @@ static void __endutent(void) __UCLIBC_MUTEX_UNLOCK(utmplock); } strong_alias(__endutent,endutent) -libc_hidden_def(endutent) + +#ifdef __UCLIBC_HAS_UTMPX__ +strong_alias(__endutent,endutxent) +#endif /* This function must be called with the LOCK held */ -static struct utmp *__getutid(const struct utmp *utmp_entry) +static struct utmp *__getutid_unlocked(const struct utmp *utmp_entry) { struct utmp *lutmp; unsigned type; @@ -114,7 +133,7 @@ static struct utmp *__getutid(const struct utmp *utmp_entry) type = utmp_entry->ut_type - 1; type /= 4; - while ((lutmp = __getutent()) != NULL) { + while ((lutmp = __getutent_unlocked()) != NULL) { if (type == 0 && lutmp->ut_type == utmp_entry->ut_type) { /* one of RUN_LVL, BOOT_TIME, NEW_TIME, OLD_TIME */ return lutmp; @@ -128,26 +147,34 @@ static struct utmp *__getutid(const struct utmp *utmp_entry) return NULL; } #if defined __UCLIBC_HAS_THREADS__ -struct utmp *getutid(const struct utmp *utmp_entry) +static struct utmp *__getutid(const struct utmp *utmp_entry) { struct utmp *ret; __UCLIBC_MUTEX_LOCK(utmplock); - ret = __getutid(utmp_entry); + ret = __getutid_unlocked(utmp_entry); __UCLIBC_MUTEX_UNLOCK(utmplock); return ret; } #else +static struct utmp *__getutid(const struct utmp *utmp_entry); +strong_alias(__getutid_unlocked,__getutid) +#endif strong_alias(__getutid,getutid) + +#ifdef __UCLIBC_HAS_UTMPX__ +struct utmpx *getutxid(const struct utmpx *utmp_entry) +{ + return (struct utmpx *) __getutid ((const struct utmp *) utmp_entry); +} #endif -libc_hidden_def(getutid) static struct utmp *__getutline(const struct utmp *utmp_entry) { struct utmp *lutmp; __UCLIBC_MUTEX_LOCK(utmplock); - while ((lutmp = __getutent()) != NULL) { + while ((lutmp = __getutent_unlocked()) != NULL) { if (lutmp->ut_type == USER_PROCESS || lutmp->ut_type == LOGIN_PROCESS) { if (strncmp(lutmp->ut_line, utmp_entry->ut_line, sizeof(lutmp->ut_line)) == 0) { break; @@ -158,7 +185,13 @@ static struct utmp *__getutline(const struct utmp *utmp_entry) return lutmp; } strong_alias(__getutline,getutline) -libc_hidden_def(getutline) + +#ifdef __UCLIBC_HAS_UTMPX__ +struct utmpx *getutxline(const struct utmpx *utmp_entry) +{ + return (struct utmpx *) __getutline ((const struct utmp *) utmp_entry); +} +#endif static struct utmp *__pututline(const struct utmp *utmp_entry) { @@ -167,7 +200,7 @@ static struct utmp *__pututline(const struct utmp *utmp_entry) the file pointer where they want it, everything will work out. */ lseek(static_fd, (off_t) - sizeof(struct utmp), SEEK_CUR); - if (__getutid(utmp_entry) != NULL) + if (__getutid_unlocked(utmp_entry) != NULL) lseek(static_fd, (off_t) - sizeof(struct utmp), SEEK_CUR); else lseek(static_fd, (off_t) 0, SEEK_END); @@ -178,7 +211,13 @@ static struct utmp *__pututline(const struct utmp *utmp_entry) return (struct utmp *)utmp_entry; } strong_alias(__pututline,pututline) -libc_hidden_def(pututline) + +#ifdef __UCLIBC_HAS_UTMPX__ +struct utmpx *pututxline (const struct utmpx *utmp_entry) +{ + return (struct utmpx *) __pututline ((const struct utmp *) utmp_entry); +} +#endif static int __utmpname(const char *new_ut_name) { @@ -202,4 +241,7 @@ static int __utmpname(const char *new_ut_name) return 0; /* or maybe return -(static_ut_name != new_ut_name)? */ } strong_alias(__utmpname,utmpname) -libc_hidden_def(utmpname) + +#ifdef __UCLIBC_HAS_UTMPX__ +strong_alias(__utmpname,utmpxname) +#endif diff --git a/libc/misc/utmp/utxent.c b/libc/misc/utmp/utxent.c index a0e80a662..71157ccd8 100644 --- a/libc/misc/utmp/utxent.c +++ b/libc/misc/utmp/utxent.c @@ -13,6 +13,7 @@ #include <utmpx.h> #include <utmp.h> +#if 0 /* moved to utent.c */ void setutxent(void) { setutent (); @@ -48,10 +49,12 @@ int utmpxname (const char *new_ut_name) return utmpname (new_ut_name); } +/* moved to wtent.c */ void updwtmpx (const char *wtmpx_file, const struct utmpx *utmpx) { updwtmp (wtmpx_file, (const struct utmp *) utmpx); } +#endif /* Copy the information in UTMPX to UTMP. */ void getutmp (const struct utmpx *utmpx, struct utmp *utmp) @@ -104,4 +107,3 @@ void getutmpx (const struct utmp *utmp, struct utmpx *utmpx) utmpx->ut_time = utmp->ut_time; #endif } - diff --git a/libc/misc/utmp/wtent.c b/libc/misc/utmp/wtent.c index c97f89cff..97254262f 100644 --- a/libc/misc/utmp/wtent.c +++ b/libc/misc/utmp/wtent.c @@ -11,6 +11,9 @@ #include <time.h> #include <unistd.h> #include <utmp.h> +#ifdef __UCLIBC_HAS_UTMPX__ +# include <utmpx.h> +#endif #include <fcntl.h> #include <sys/file.h> #include <not-cancel.h> @@ -33,7 +36,7 @@ void logwtmp (const char *line, const char *name, const char *host) } #endif -void updwtmp(const char *wtmp_file, const struct utmp *lutmp) +static void __updwtmp(const char *wtmp_file, const struct utmp *lutmp) { int fd; @@ -46,4 +49,11 @@ void updwtmp(const char *wtmp_file, const struct utmp *lutmp) } } } -libc_hidden_def(updwtmp) +strong_alias(__updwtmp,updwtmp) + +#ifdef __UCLIBC_HAS_UTMPX__ +void updwtmpx (const char *wtmpx_file, const struct utmpx *utmpx) +{ + __updwtmp (wtmpx_file, (const struct utmp *) utmpx); +} +#endif |