From 6ff9c31abc14f207265ab214370982ecb3bfe428 Mon Sep 17 00:00:00 2001 From: Bernhard Reutner-Fischer Date: Wed, 25 Mar 2015 23:59:45 +0100 Subject: utmp: favour POSIX utmpx over SVID utmp Note: _PATH_UTMPX == _PATH_UTMP and the utmp struct is identical to the utmpx struct so this only changes the external API entrypoints and NOT the underlying data source. This saves about 500b (~1300b from previously ~1950) while at it. Signed-off-by: Bernhard Reutner-Fischer --- include/internal/utmp.h | 92 +++++++++++++++++++++++++++++++++++++++++++++++++ include/pty.h | 1 + include/utmp.h | 10 +----- 3 files changed, 94 insertions(+), 9 deletions(-) create mode 100644 include/internal/utmp.h (limited to 'include') diff --git a/include/internal/utmp.h b/include/internal/utmp.h new file mode 100644 index 000000000..49f96b4d8 --- /dev/null +++ b/include/internal/utmp.h @@ -0,0 +1,92 @@ +/* vi: set sw=4 ts=4: */ +/* + * internal helper for utmp and utmpx handling + * + * Copyright (C) 2015 by Bernhard Reutner-Fischer + * + * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. + */ +#ifndef __INTERNAL_UTMP_H +#define __INTERNAL_UTMP_H + +#include +#include + +/* Note: _PATH_UTMPX == _PATH_UTMP */ + +#if (defined __UCLIBC_HAS_UTMPX__ && defined __UCLIBC_HAS_UTMP__) \ + || !defined __UCLIBC_HAS_UTMP__ +/* implement the X and alias the non-X */ +# define __set_unlocked __setutxent_unlocked +# define set setutxent +# define __get_unlocked __getutxent_unlocked +# define get getutxent +# define end endutxent +# define __getid_unlocked __getutxid_unlocked +# define getid getutxid +# define getline getutxline +# define putline pututxline +# define name utmpxname +# define updw updwtmpx +# define UT utmpx +# ifndef __DEFAULT_PATH_UTMP +# define __DEFAULT_PATH_UTMP _PATH_UTMPX +# endif +# if defined __UCLIBC_HAS_UTMP__ +# define other(n,a) strong_alias_untyped(n,a) +# else +# define other(n,a) /* nothing */ +# endif +#elif defined __UCLIBC_HAS_UTMP__ +# define __set_unlocked __setutent_unlocked +# define set setutent +# define __get_unlocked __getutent_unlocked +# define get getutent +# define end endutent +# define __getid_unlocked __getutid_unlocked +# define getid getutid +# define getline getutline +# define putline pututline +# define name utmpname +# define updw updwtmp +# define UT utmp +# ifndef __DEFAULT_PATH_UTMP +# define __DEFAULT_PATH_UTMP _PATH_UTMP +# endif +# define other(n,a) /* nothing */ +#else +#error You are supposed to either have UTMP or UTMPX or both here +#endif + +/* not used in libc_hidden_proto(setutxent) */ +/* not used in libc_hidden_proto(endutxent) */ +/* not used in libc_hidden_proto(getutxent) */ +/* not used in libc_hidden_proto(getutxid) */ +/* not used in libc_hidden_proto(getutxline) */ +/* not used in libc_hidden_proto(pututxline) */ +/* not used in libc_hidden_proto(utmpxname) */ +/* not used in libc_hidden_proto(updwtmpx) */ + +/* not used in libc_hidden_proto(setutent) */ +/* not used in libc_hidden_proto(endutent) */ +/* not used in libc_hidden_proto(getutent) */ +/* not used in libc_hidden_proto(getutid) */ +/* not used in libc_hidden_proto(getutline) */ +/* not used in libc_hidden_proto(pututline) */ +/* not used in libc_hidden_proto(utmpname) */ +/* not used in libc_hidden_proto(updwtmp) */ + +#ifdef IS_IN_libutil +# if (defined __UCLIBC_HAS_UTMPX__ && defined __UCLIBC_HAS_UTMP__) \ + || !defined __UCLIBC_HAS_UTMP__ + /* monkey-patch to use the POSIX interface */ +# define setutent setutxent +# define getutline getutxline +# define pututline pututxline +# define endutent endutxent +# define updwtmp updwtmpx +# endif +#endif /* IS_IN_libutil */ + +#endif /* __INTERNAL_UTMP_H */ + diff --git a/include/pty.h b/include/pty.h index 26c3011c6..f23a260ae 100644 --- a/include/pty.h +++ b/include/pty.h @@ -32,6 +32,7 @@ __BEGIN_DECLS ends in AMASTER and ASLAVE. */ extern int openpty (int *__amaster, int *__aslave, char *__name, struct termios *__termp, struct winsize *__winp) __THROW; +libutil_hidden_proto(openpty) /* Create child process and establish the slave pseudo terminal as the child's controlling terminal. */ diff --git a/include/utmp.h b/include/utmp.h index 754f76781..8ecbb54e7 100644 --- a/include/utmp.h +++ b/include/utmp.h @@ -40,7 +40,7 @@ __BEGIN_DECLS /* Make FD be the controlling terminal, stdin, stdout, and stderr; then close FD. Returns 0 on success, nonzero on error. */ extern int login_tty (int __fd) __THROW; - +libutil_hidden_proto(login_tty) /* Write the given entry into utmp and wtmp. */ extern void login (const struct utmp *__entry) __THROW; @@ -56,37 +56,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 */ -- cgit v1.2.3