1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-09-02 22:11:54 +02:00

40604: revert to the old method if getutent() is not available

This commit is contained in:
Jun-ichi Takimoto 2017-02-23 00:34:45 +09:00
parent 1b0541c52f
commit 8328b79286
3 changed files with 28 additions and 5 deletions

View file

@ -1,3 +1,8 @@
2017-02-23 Jun-ichi Takimoto <takimoto-j@kba.biglobe.ne.jp>
* 40604: configure.ac, Src/watch.c: revert to the old method if
getutent() is not available
2017-02-21 Barton E. Schaefer <schaefer@zsh.org>
* Julien Nicoulaud: 40586:

View file

@ -91,6 +91,9 @@
# define setutent setutxent
# define getutent getutxent
# define endutent endutxent
# ifndef HAVE_GETUTENT
# define HAVE_GETUTENT 1
# endif
# endif
/*
@ -482,21 +485,32 @@ ucmp(WATCH_STRUCT_UTMP *u, WATCH_STRUCT_UTMP *v)
static int
readwtab(WATCH_STRUCT_UTMP **head, int initial_sz)
{
WATCH_STRUCT_UTMP *uptr, *tmp;
WATCH_STRUCT_UTMP *uptr;
int wtabmax = initial_sz < 2 ? 32 : initial_sz;
int sz = 0;
# ifdef HAVE_GETUTENT
WATCH_STRUCT_UTMP *tmp;
# else
FILE *in;
# endif
uptr = *head = (WATCH_STRUCT_UTMP *)
zalloc(wtabmax * sizeof(WATCH_STRUCT_UTMP));
# ifdef HAVE_GETUTENT
setutent();
while ((tmp = getutent()) != NULL) {
memcpy(uptr, tmp, sizeof (WATCH_STRUCT_UTMP));
# else
if (!(in = fopen(WATCH_UTMP_FILE, "r")))
return 0;
while (fread(uptr, sizeof(WATCH_STRUCT_UTMP), 1, in)) {
# endif
# ifdef USER_PROCESS
if (tmp->ut_type == USER_PROCESS)
if (uptr->ut_type == USER_PROCESS)
# else /* !USER_PROCESS */
if (tmp->ut_name[0])
if (uptr->ut_name[0])
# endif /* !USER_PROCESS */
{
memcpy(uptr, tmp, sizeof (WATCH_STRUCT_UTMP));
uptr++;
if (++sz == wtabmax) {
uptr = (WATCH_STRUCT_UTMP *)
@ -512,7 +526,11 @@ readwtab(WATCH_STRUCT_UTMP **head, int initial_sz)
}
}
}
# ifdef HAVE_GETUTENT
endutent();
# else
fclose(in);
# endif
if (sz)
qsort((void *) *head, sz, sizeof(WATCH_STRUCT_UTMP),

View file

@ -1325,7 +1325,7 @@ AC_CHECK_FUNCS(strftime strptime mktime timelocal \
cygwin_conv_path \
nanosleep \
srand_deterministic \
setutxent getutxent endutxent)
setutxent getutxent endutxent getutent)
AC_FUNC_STRCOLL
AH_TEMPLATE([REALPATH_ACCEPTS_NULL],