From: Ulrich Drepper Date: Fri, 24 Dec 1999 08:27:33 +0000 (+0000) Subject: Update. X-Git-Tag: cvs/pre-glibc-2_1_3~52 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=ce40141c6b68a40687f460450e1d07a0a78e1559;p=glibc.git Update. 1999-12-24 Ulrich Drepper * sysdeps/posix/system.c (__libc_system): Check whether command processor is available if LINE is NULL. Don't return immediately if wait call returned with EINTR. Patches by Geoff Clare (PR libc/1497 and libc/1498). --- diff --git a/ChangeLog b/ChangeLog index 3cac10bf26..257dee79f4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +1999-12-24 Ulrich Drepper + + * sysdeps/posix/system.c (__libc_system): Check whether command + processor is available if LINE is NULL. Don't return immediately + if wait call returned with EINTR. + Patches by Geoff Clare (PR libc/1497 and libc/1498). + 1999-12-23 Ulrich Drepper * locale/programs/ld-monetary.c (monetary_finish): Add cast to diff --git a/locale/programs/ld-collate.c b/locale/programs/ld-collate.c index a0f1139cde..65229275ff 100644 --- a/locale/programs/ld-collate.c +++ b/locale/programs/ld-collate.c @@ -1583,7 +1583,7 @@ output_weight (struct obstack *pool, struct locale_collate_t *collate, if (elem->weights[cnt].w[i] == NULL) { /* This entry was IGNORE. */ - buf[len++] = '\3'; + buf[len++] = IGNORE_CHAR; } else len += utf8_encode (&buf[len], @@ -1839,6 +1839,9 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap, assert (cnt == _NL_ITEM_INDEX (_NL_NUM_LC_COLLATE)); write_locale_data (output_path, "LC_COLLATE", 2 + cnt, iov); + + obstack_free (&weightpool, NULL); + obstack_free (&extrapool, NULL); } diff --git a/sysdeps/posix/system.c b/sysdeps/posix/system.c index 1111646bbd..10c86a998b 100644 --- a/sysdeps/posix/system.c +++ b/sysdeps/posix/system.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 92, 94, 95, 96, 97 Free Software Foundation, Inc. +/* Copyright (C) 1991, 92, 94, 95, 96, 97, 99 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -44,8 +44,9 @@ __libc_system (const char *line) #endif if (line == NULL) - /* This signals that we have a command processor available. */ - return 1; + /* Check that we have a command processor available. It might + not be available after a chroot(), for example. */ + return __libc_system ("exit 0"); sa.sa_handler = SIG_IGN; sa.sa_flags = 0; @@ -113,23 +114,32 @@ __libc_system (const char *line) status = -1; else /* Parent side. */ -#ifdef NO_WAITPID { +#ifdef NO_WAITPID pid_t child; do { child = __wait (&status); - if (child <= -1) + if (child <= -1 && errno != EINTR) { status = -1; break; } - } while (child != pid); - } + /* Note that pid cannot be <= -1 and therefore the loop continues + when __wait returned with EINTR. */ + } + while (child != pid); #else - if (__waitpid (pid, &status, 0) != pid) - status = -1; + int n; + + do + n = __waitpid (pid, &status, 0); + while (n == -1 && errno == EINTR); + + if (n != pid) + status = -1; #endif + } save = errno; if ((__sigaction (SIGINT, &intr, (struct sigaction *) NULL) |