diff --git a/include/Makemodule.am b/include/Makemodule.am index be94f8a87..48a19541e 100644 --- a/include/Makemodule.am +++ b/include/Makemodule.am @@ -42,7 +42,6 @@ dist_noinst_HEADERS += \ include/pt-sgi.h \ include/pt-sun.h \ include/randutils.h \ - include/readutmp.h \ include/rpmatch.h \ include/setproctitle.h \ include/statfs_magic.h \ diff --git a/include/readutmp.h b/include/readutmp.h deleted file mode 100644 index 93251eac1..000000000 --- a/include/readutmp.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Declarations for GNU's read utmp module. - - Copyright (C) 1992-2007, 2009-2014 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by jla; revised by djm */ - -#ifndef READUTMP_H -#define READUTMP_H - -#include -#include - -int read_utmp (char const *file, size_t *n_entries, struct utmp **utmp_buf); - -#endif /* READUTMP_H */ diff --git a/lib/Makemodule.am b/lib/Makemodule.am index 566c527a0..6ef69570f 100644 --- a/lib/Makemodule.am +++ b/lib/Makemodule.am @@ -24,8 +24,7 @@ libcommon_la_SOURCES = \ lib/timeutils.c \ lib/ttyutils.c \ lib/exec_shell.c \ - lib/strv.c \ - lib/readutmp.c + lib/strv.c if LINUX libcommon_la_SOURCES += \ diff --git a/lib/readutmp.c b/lib/readutmp.c deleted file mode 100644 index b11e9a4d2..000000000 --- a/lib/readutmp.c +++ /dev/null @@ -1,78 +0,0 @@ -/* GNU's read utmp module. - - Copyright (C) 1992-2001, 2003-2006, 2009-2014 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by jla; revised by djm */ -/* extracted for util-linux by ooprala */ - -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include "xalloc.h" -#include "readutmp.h" - -/* Read the utmp entries corresponding to file FILE into freshly- - malloc'd storage, set *UTMP_BUF to that pointer, set *N_ENTRIES to - the number of entries, and return zero. If there is any error, - return -1, setting errno, and don't modify the parameters. - If OPTIONS & READ_UTMP_CHECK_PIDS is nonzero, omit entries whose - process-IDs do not currently exist. */ -int -read_utmp (char const *file, size_t *n_entries, struct utmp **utmp_buf) -{ - size_t n_read = 0; - size_t n_alloc = 0; - struct utmp *utmp = NULL; - struct utmp *u; - - /* Ignore the return value for now. - Solaris' utmpname returns 1 upon success -- which is contrary - to what the GNU libc version does. In addition, older GNU libc - versions are actually void. */ - utmpname(file); - - setutent(); - - errno = 0; - while ((u = getutent()) != NULL) { - if (n_read == n_alloc) { - n_alloc += 32; - utmp = xrealloc(utmp, n_alloc * sizeof (struct utmp)); - if (!utmp) - return -1; - } - utmp[n_read++] = *u; - } - if (!u && errno) { - free(utmp); - return -1; - } - - endutent(); - - *n_entries = n_read; - *utmp_buf = utmp; - - return 0; -} diff --git a/login-utils/lslogins.c b/login-utils/lslogins.c index 48ba6d8ad..b56efd476 100644 --- a/login-utils/lslogins.c +++ b/login-utils/lslogins.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -35,7 +36,6 @@ #include #include #include - #include #include @@ -56,7 +56,6 @@ #include "optutils.h" #include "pathnames.h" #include "logindefs.h" -#include "readutmp.h" #include "procutils.h" /* @@ -476,6 +475,37 @@ static struct utmp *get_last_btmp(struct lslogins_control *ctl, const char *user } +static int read_utmp(char const *file, size_t *nents, struct utmp **res) +{ + size_t n_read = 0, n_alloc = 0; + struct utmp *utmp = NULL, *u; + + if (utmpname(file) < 0) + return -errno; + + setutent(); + errno = 0; + + while ((u = getutent()) != NULL) { + if (n_read == n_alloc) { + n_alloc += 32; + utmp = xrealloc(utmp, n_alloc * sizeof (struct utmp)); + } + utmp[n_read++] = *u; + } + if (!u && errno) { + free(utmp); + return -errno; + } + + endutent(); + + *nents = n_read; + *res = utmp; + + return 0; +} + static int parse_wtmp(struct lslogins_control *ctl, char *path) { int rc = 0;