]> sourceware.org Git - glibc.git/commitdiff
Update.
authorUlrich Drepper <drepper@redhat.com>
Fri, 24 Dec 1999 08:27:33 +0000 (08:27 +0000)
committerUlrich Drepper <drepper@redhat.com>
Fri, 24 Dec 1999 08:27:33 +0000 (08:27 +0000)
1999-12-24  Ulrich Drepper  <drepper@cygnus.com>

* 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 <gwc@unisoft.com> (PR libc/1497 and libc/1498).

ChangeLog
locale/programs/ld-collate.c
sysdeps/posix/system.c

index 3cac10bf26841b5629d36a2b4410698cffd8b0b0..257dee79f44ee52b005136da717ed236324131f3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+1999-12-24  Ulrich Drepper  <drepper@cygnus.com>
+
+       * 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 <gwc@unisoft.com> (PR libc/1497 and libc/1498).
+
 1999-12-23  Ulrich Drepper  <drepper@cygnus.com>
 
        * locale/programs/ld-monetary.c (monetary_finish): Add cast to
index a0f1139cdee13b52bfbabb6b613cb9d564d44271..65229275ff1e4ce07c6304fbff5a5330e39bcdd2 100644 (file)
@@ -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);
 }
 
 
index 1111646bbda518bf3606df7cc3932b876a1e872e..10c86a998b4f0863d00152985fb80f8a79f7207e 100644 (file)
@@ -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) |
This page took 0.054442 seconds and 5 git commands to generate.