bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

patch: use err, not errno


From: James A Morrison
Subject: patch: use err, not errno
Date: Thu, 14 Mar 2002 22:17:00 -0500 (EST)

 Ok, I've grep'd through the hurd source looking for instances of errno being
assigned directly.  These seem to be the places where setting errno isn't 
right.  I've also changed !var to var == MACH_PORT_NULL where appropriate 
because some documentation, mach.texi, says MACH_PORT_NULL is not assumed to
be 0 in the Hurd system.

So how does the change log look?

2002-03-14  James A. Morrison  <ja2morri@uwaterloo.ca>

daemons: 
        * console-run.c (open_console): Use err, not errno.
        
fstests:

        * opendisk.c: Use err, not errno.
init:
        * init.c (reboot_mach): Use err, not errno.
        (run): Likewise.
        (launch_core_servers): Likewise.
        (run_for_real): Check file is equal to MACH_PORT_NULL, not !file.
        (start_child): Likewise.

libnetfs:

        * make-protid.c (netfs_make_protid): Use err, not errno.

nfs:
        * main.c (main): Use err, not errno.
        * mount.c (mount_root): Likewise.
        * fsys.c (init_filesystems): Check root is equal to MACH_PORT_NULL, 
        not !root.
        (write_filesystems): Use err, not errno.

term:
        * main.c (main): Use err, not errno.
        * users.c (init_users): Likewise.

trans:
        * ifsock.c (main): Use err, not errno.
utils:
        * rpctrace (parse_msgid_list): Use err, not errno.
        * shd.c (run): Likewise.


Index: daemons/console-run.c
===================================================================
RCS file: /cvsroot/hurd/hurd/daemons/console-run.c,v
retrieving revision 1.4
diff -u -p -r1.4 console-run.c
--- daemons/console-run.c       30 Jan 2001 23:45:31 -0000      1.4
+++ daemons/console-run.c       15 Mar 2002 02:38:46 -0000
@@ -1,5 +1,5 @@
 /* Run a program on the console, trying hard to get the console open.
-   Copyright (C) 1999, 2001 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2001,02 Free Software Foundation, Inc.
 
    This file is part of the GNU Hurd.
 
@@ -141,21 +141,21 @@ open_console (char **namep)
          termname = terminal + strlen (terminal) + 1; /* first arg is name */
 
          /* The callback to start_translator opens TERM as a side effect.  */
-         errno =
+         err =
            fshelp_start_translator (open_node, NULL, terminal, terminal,
                                     argz_len, 3000, &control);
-         if (errno)
+         if (err)
            {
-             error (0, errno, "%s", terminal);
+             error (0, err, "%s", terminal);
              continue;
            }
 
-         errno = file_set_translator (term, 0, FS_TRANS_SET, 0, 0, 0,
+         err = file_set_translator (term, 0, FS_TRANS_SET, 0, 0, 0,
                                       control, MACH_MSG_TYPE_COPY_SEND);
          mach_port_deallocate (mach_task_self (), control);
-         if (errno)
+         if (err)
            {
-             error (0, errno, "%s", termname);
+             error (0, err, "%s", termname);
              continue;
            }
          mach_port_deallocate (mach_task_self (), term);
@@ -167,10 +167,10 @@ open_console (char **namep)
              error (0, errno, "%s", termname);
              continue;
            }
-         errno = io_stat (term, &st);
-         if (errno)
+         err = io_stat (term, &st);
+         if (err)
            {
-             error (0, errno, "%s", termname);
+             error (0, err, "%s", termname);
              term = MACH_PORT_NULL;
              continue;
            }
Index: fstests/opendisk.c
===================================================================
RCS file: /cvsroot/hurd/hurd/fstests/opendisk.c,v
retrieving revision 1.3
diff -u -p -r1.3 opendisk.c
--- fstests/opendisk.c  9 Sep 1994 16:06:52 -0000       1.3
+++ fstests/opendisk.c  15 Mar 2002 02:38:48 -0000
@@ -1,5 +1,5 @@
 /* Attempt to open a disk device
-   Copyright (C) 1994 Free Software Foundation, Inc.
+   Copyright (C) 1994,2002 Free Software Foundation, Inc.
    Written by Michael I. Bushnell.
 
    This file is part of the GNU Hurd.
@@ -23,8 +23,10 @@
 #include <errno.h>
 #include <hurd.h>
 #include <stdio.h>
+#include <error.h>
 
 /* Boneheaded CMU people decided to gratuitously screw us. */
+/* is this anywhere else now? */
 #include "/gd/gnu/mach/sys/ioctl.h"
 
 #define DKTYPENAMES
@@ -37,29 +39,30 @@ main (int argc, char **argv)
   mach_port_t device;
   int sizes[DEV_GET_SIZE_COUNT];
   int sizescnt = DEV_GET_SIZE_COUNT;
+  error_t err;
   struct disklabel label;
   int labelcnt = sizeof label / sizeof (int);
   int i;
 
-  errno = get_privileged_ports (&hostpriv, &devicemaster);
+  err = get_privileged_ports (&hostpriv, &devicemaster);
   
-  if (errno)
+  if (err)
     {
       perror ("Cannot get privileged ports");
       exit (1);
     }
   
-  errno = device_open (devicemaster, D_READ, argv[1], &device);
+  err = device_open (devicemaster, D_READ, argv[1], &device);
   
-  if (errno)
+  if (err)
     {
       perror (argv[1]);
       exit (1);
     }
   
-  errno = device_get_status (device, DEV_GET_SIZE, sizes, &sizescnt);
+  err = device_get_status (device, DEV_GET_SIZE, sizes, &sizescnt);
   
-  if (errno)
+  if (err)
     {
       perror ("device_get_status");
       exit (1);
@@ -69,9 +72,9 @@ main (int argc, char **argv)
          sizes[DEV_GET_SIZE_RECORD_SIZE], sizes[DEV_GET_SIZE_DEVICE_SIZE]);
 
 
-  errno = device_get_status (device, DIOCGDINFO, &label, &labelcnt);
+  err = device_get_status (device, DIOCGDINFO, &label, &labelcnt);
 
-  if (errno)
+  if (err)
     {
       perror ("reading disk label");
       exit (1);
Index: init/init.c
===================================================================
RCS file: /cvsroot/hurd/hurd/init/init.c,v
retrieving revision 1.127
diff -u -p -r1.127 init.c
--- init/init.c 2 Jan 2002 11:21:41 -0000       1.127
+++ init/init.c 15 Mar 2002 02:38:49 -0000
@@ -171,12 +171,13 @@ reboot_mach (int flags)
     }
   else
     {
+      error_t err;
       printf ("%s: %sing Mach (flags %#x)...\n",
              program_invocation_short_name, BOOT (flags), flags);
       fflush (stdout);
       sleep (5);
-      while ((errno = host_reboot (host_priv, flags)))
-       error (0, errno, "reboot");
+      while ((err = host_reboot (host_priv, flags)))
+       error (0, err, "reboot");
       for (;;);
     }
 }
@@ -357,6 +358,7 @@ run (const char *server, mach_port_t *po
   while (1)
     {
       file_t file;
+      error_t err;
 
       file = file_name_lookup (prog, O_EXEC, 0);
       if (file == MACH_PORT_NULL)
@@ -373,17 +375,17 @@ run (const char *server, mach_port_t *po
              printf ("Pausing for %s\n", prog);
              getchar ();
            }
-         errno = file_exec (file, *task, 0,
-                            (char *)prog, strlen (prog) + 1, /* Args.  */
-                            startup_envz, startup_envz_len,
-                            default_dtable, MACH_MSG_TYPE_COPY_SEND, 3,
-                            ports, MACH_MSG_TYPE_COPY_SEND, INIT_PORT_MAX,
-                            default_ints, INIT_INT_MAX,
-                            NULL, 0, NULL, 0);
-         if (!errno)
+         err = file_exec (file, *task, 0,
+                          (char *)prog, strlen (prog) + 1, /* Args.  */
+                          startup_envz, startup_envz_len,
+                          default_dtable, MACH_MSG_TYPE_COPY_SEND, 3,
+                          ports, MACH_MSG_TYPE_COPY_SEND, INIT_PORT_MAX,
+                          default_ints, INIT_INT_MAX,
+                          NULL, 0, NULL, 0);
+         if (!err)
            break;
 
-         error (0, errno, "%s", prog);
+         error (0, err, "%s", prog);
        }
 
       printf ("File name for server %s (or nothing to reboot): ", server);
@@ -426,13 +428,13 @@ run_for_real (char *filename, char *args
       if (getstring (buf, sizeof (buf)) && *buf)
        filename = buf;
       file = file_name_lookup (filename, O_EXEC, 0);
-      if (!file)
+      if ( file == MACH_PORT_NULL )
        error (0, errno, "%s", filename);
     }
-  while (!file);
+  while ( file == MACH_PORT_NULL );
 #else
   file = file_name_lookup (filename, O_EXEC, 0);
-  if (!file)
+  if ( file == MACH_PORT_NULL )
     {
       error (0, errno, "%s", filename);
       return 0;
@@ -692,10 +694,10 @@ launch_core_servers (void)
     mach_port_deallocate (mach_task_self (), old);
 
   /* Give the bootstrap FS its proc and auth ports.  */
-  errno = fsys_init (bootport, fsproc, MACH_MSG_TYPE_COPY_SEND, authserver);
+  err = fsys_init (bootport, fsproc, MACH_MSG_TYPE_COPY_SEND, authserver);
   mach_port_deallocate (mach_task_self (), fsproc);
-  if (errno)
-    error (0, errno, "fsys_init"); /* Not necessarily fatal.  */
+  if (err)
+    error (0, err, "fsys_init"); /* Not necessarily fatal.  */
 }
 
 /* Set up the initial value of the standard exec data. */
@@ -1029,7 +1031,7 @@ start_child (const char *prog, char **pr
   assert_perror (err);
 
   file = file_name_lookup (args, O_EXEC, 0);
-  if (!file)
+  if ( file == MACH_PORT_NULL )
     {
       error (0, errno, "%s", args);
       free (args);
Index: libnetfs/make-protid.c
===================================================================
RCS file: /cvsroot/hurd/hurd/libnetfs/make-protid.c,v
retrieving revision 1.6
diff -u -p -r1.6 make-protid.c
--- libnetfs/make-protid.c      18 Nov 1996 23:51:10 -0000      1.6
+++ libnetfs/make-protid.c      15 Mar 2002 02:38:50 -0000
@@ -1,5 +1,5 @@
 /* 
-   Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+   Copyright (C) 1995, 1996, 2002 Free Software Foundation, Inc.
    Written by Michael I. Bushnell, p/BSG.
 
    This file is part of the GNU Hurd.
@@ -23,18 +23,22 @@
 struct protid *
 netfs_make_protid (struct peropen *po, struct iouser *cred)
 {
+  error_t err;
   struct protid *pi;
 
   if (cred)
-    errno = ports_create_port (netfs_protid_class, netfs_port_bucket, 
+    err = ports_create_port (netfs_protid_class, netfs_port_bucket, 
                               sizeof (struct protid), &pi);
   else
-    errno = ports_create_port_noinstall (netfs_protid_class,
+    err = ports_create_port_noinstall (netfs_protid_class,
                                         netfs_port_bucket, 
                                         sizeof (struct protid), &pi);
     
-  if (errno)
-    return 0;
+  if (err)
+    {
+      errno = err;
+      return 0;
+    }
 
   po->refcnt++;
   pi->po = po;
@@ -43,3 +47,4 @@ netfs_make_protid (struct peropen *po, s
   pi->mapped = 0;
   return pi;
 }
+
Index: nfs/main.c
===================================================================
RCS file: /cvsroot/hurd/hurd/nfs/main.c,v
retrieving revision 1.29
diff -u -p -r1.29 main.c
--- nfs/main.c  30 Jan 2001 00:38:45 -0000      1.29
+++ nfs/main.c  15 Mar 2002 02:38:52 -0000
@@ -1,5 +1,5 @@
 /* 
-   Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 2002 Free Software Foundation, Inc.
    Written by Michael I. Bushnell, p/BSG.
 
    This file is part of the GNU Hurd.
@@ -345,6 +345,7 @@ parse_startup_opt (int key, char *arg, s
 int
 main (int argc, char **argv)
 {
+  error_t err;
   struct argp common_argp = { common_options, parse_common_opt };
   const struct argp_child argp_children[] =
     { {&common_argp}, {&netfs_std_startup_argp}, {0} };
@@ -383,9 +384,9 @@ main (int argc, char **argv)
       exit (1);
     }
 
-  errno = maptime_map (0, 0, &mapped_time);
-  if (errno)
-    error (2, errno, "mapping time");
+  err = maptime_map (0, 0, &mapped_time);
+  if (err)
+    error (2, err, "mapping time");
 
   cthread_detach (cthread_fork ((cthread_fn_t) timeout_service_thread, 0));
   cthread_detach (cthread_fork ((cthread_fn_t) rpc_receive_thread, 0));
Index: nfs/mount.c
===================================================================
RCS file: /cvsroot/hurd/hurd/nfs/mount.c,v
retrieving revision 1.24
diff -u -p -r1.24 mount.c
--- nfs/mount.c 29 Dec 2001 00:40:09 -0000      1.24
+++ nfs/mount.c 15 Mar 2002 02:38:52 -0000
@@ -1,5 +1,5 @@
 /*
-   Copyright (C) 1995,96,97,98,2001 Free Software Foundation, Inc.
+   Copyright (C) 1995,96,97,98,2001,02 Free Software Foundation, Inc.
    Written by Michael I. Bushnell, p/BSG.
 
    This file is part of the GNU Hurd.
@@ -101,6 +101,7 @@ mount_root (char *name, char *host)
   int *p;
   void *rpcbuf;
   int port;
+  error_t err;
   struct node *np;
   short pmapport;
 
@@ -160,8 +161,8 @@ mount_root (char *name, char *host)
       *p++ = htonl (MOUNTVERS);
       *p++ = htonl (IPPROTO_UDP);
       *p++ = htonl (0);
-      errno = conduct_rpc (&rpcbuf, &p);
-      if (!errno)
+      err = conduct_rpc (&rpcbuf, &p);
+      if (!err)
        {
          port = ntohl (*p++);
          addr.sin_port = htons (port);
@@ -193,8 +194,8 @@ mount_root (char *name, char *host)
     }
 
   p = xdr_encode_string (p, name);
-  errno = conduct_rpc (&rpcbuf, &p);
-  if (errno)
+  err = conduct_rpc (&rpcbuf, &p);
+  if (err)
     {
       perror (name);
       goto error_with_rpcbuf;
@@ -237,8 +238,8 @@ mount_root (char *name, char *host)
       *p++ = htonl (NFS_VERSION);
       *p++ = htonl (IPPROTO_UDP);
       *p++ = htonl (0);
-      errno = conduct_rpc (&rpcbuf, &p);
-      if (!errno)
+      err = conduct_rpc (&rpcbuf, &p);
+      if (!err)
        port = ntohl (*p++);
       else if (nfs_port)
        port = nfs_port;
Index: nfsd/fsys.c
===================================================================
RCS file: /cvsroot/hurd/hurd/nfsd/fsys.c,v
retrieving revision 1.2
diff -u -p -r1.2 fsys.c
--- nfsd/fsys.c 7 Aug 1996 19:03:28 -0000       1.2
+++ nfsd/fsys.c 15 Mar 2002 02:38:52 -0000
@@ -1,5 +1,5 @@
 /* Filesystem management for NFS server
-   Copyright (C) 1996 Free Software Foundation, Inc.
+   Copyright (C) 1996, 2002 Free Software Foundation, Inc.
    Written by Michael I. Bushnell, p/BSG.
 
    This file is part of the GNU Hurd.
@@ -87,7 +87,7 @@ init_filesystems (void)
        }
 
       root = file_name_lookup (name, 0, 0);
-      if (!root)
+      if (root == MACH_PORT_NULL)
        {
          fprintf (stderr, "%s:%s:%d Filesystem `%s': %s\n",
                   program_invocation_name, index_file_name, line,
@@ -123,6 +123,7 @@ write_filesystems (void)
 {
   file_t newindex;
   FILE *f;
+  error_t err;
   int i;
 
   if (!index_file_name)
@@ -141,11 +142,11 @@ write_filesystems (void)
     }
 
   /* Create an anonymous file in the same directory */
-  errno = dir_mkfile (index_file_dir, O_WRONLY, 0666, &newindex);
-  if (errno)
+  err = dir_mkfile (index_file_dir, O_WRONLY, 0666, &newindex);
+  if (err)
     {
       fprintf (stderr, "%s: `%s': %s\n",
-              program_invocation_name, index_file_name, strerror (errno));
+              program_invocation_name, index_file_name, strerror (err));
       index_file_name = 0;
       mach_port_deallocate (mach_task_self (), index_file_dir);
       index_file_dir = MACH_PORT_NULL;
@@ -159,10 +160,10 @@ write_filesystems (void)
       fprintf (f, "%d %s\n", i, fsystable[i].name);
 
   /* Link it in */
-  errno = dir_link (index_file_dir, newindex, index_file_compname, 0);
-  if (errno)
+  err = dir_link (index_file_dir, newindex, index_file_compname, 0);
+  if (err)
     fprintf (stderr, "%s: `%s': %s\n",
-            program_invocation_name, index_file_name, strerror (errno));
+            program_invocation_name, index_file_name, strerror (err));
   fflush (f);
   file_sync (newindex, 1, 0);
   fclose (f);
Index: term/main.c
===================================================================
RCS file: /cvsroot/hurd/hurd/term/main.c,v
retrieving revision 1.27
diff -u -p -r1.27 main.c
--- term/main.c 5 Mar 2002 02:17:04 -0000       1.27
+++ term/main.c 15 Mar 2002 02:38:58 -0000
@@ -26,6 +26,7 @@
 #include <argp.h>
 #include <hurd/fsys.h>
 #include <string.h>
+#include <error.h>
 
 #include <version.h>
 
@@ -148,6 +149,7 @@ main (int argc, char **argv)
   struct trivfs_control **ourcntl, **peercntl;
   mach_port_t bootstrap, right;
   struct stat st;
+  error_t err;
 
   term_bucket = ports_create_bucket ();
   
@@ -219,10 +221,10 @@ main (int argc, char **argv)
     }
 
   /* Set our node.  */
-  errno = trivfs_startup (bootstrap, 0,
+  err = trivfs_startup (bootstrap, 0,
                          ourcntlclass, term_bucket, ourclass, term_bucket,
                          ourcntl);
-  if (errno)
+  if (err)
     {
       perror ("Starting translator");
       exit (1);
@@ -238,21 +240,21 @@ main (int argc, char **argv)
       char *peer_name = tty_arg;
       file_t file = file_name_lookup (peer_name, O_CREAT|O_NOTRANS, 0666);
 
-      if (file != MACH_PORT_NULL)
-       errno = 0;
+      if (file == MACH_PORT_NULL)
+       err = errno;
 
-      if (! errno)
-       errno = trivfs_create_control (file, peercntlclass, term_bucket,
-                                      peerclass, term_bucket, peercntl);
-      if (! errno)
+      if (! err)
+       err = trivfs_create_control (file, peercntlclass, term_bucket,
+                                    peerclass, term_bucket, peercntl);
+      if (! err)
        {
          right = ports_get_send_right (*peercntl);
-         errno = file_set_translator (file, 0, FS_TRANS_EXCL | FS_TRANS_SET,
+         err = file_set_translator (file, 0, FS_TRANS_EXCL | FS_TRANS_SET,
                                     0, 0, 0, right, MACH_MSG_TYPE_COPY_SEND);
          mach_port_deallocate (mach_task_self (), right);
        }
 
-      if (errno)
+      if (err)
        {
          perror (peer_name);
          exit (1);
@@ -268,12 +270,13 @@ main (int argc, char **argv)
 
   /* Initialize status from underlying node.  */
   errno = io_stat ((*ourcntl)->underlying, &st);
-  if (errno)
+  if (err)
     {
       /* We cannot stat the underlying node.  Fallback to the defaults.  */
       term_owner = term_group = 0;
       term_mode = (bottom == &ptyio_bottom ? DEFFILEMODE : S_IRUSR | S_IWUSR);
       errno = 0;
+      err = 0;
     }
   else
     {
@@ -289,8 +292,8 @@ main (int argc, char **argv)
   
   outputq = create_queue (256, QUEUE_LOWAT, QUEUE_HIWAT);
   
-  errno = (*bottom->init) ();
-  if (errno)
+  err = (*bottom->init) ();
+  if (err)
     {
       perror ("Initializing bottom handler");
       exit (1);
Index: term/users.c
===================================================================
RCS file: /cvsroot/hurd/hurd/term/users.c,v
retrieving revision 1.96
diff -u -p -r1.96 users.c
--- term/users.c        5 Mar 2002 02:17:04 -0000       1.96
+++ term/users.c        15 Mar 2002 02:38:59 -0000
@@ -30,6 +30,7 @@
 #include <stdio.h>
 #include <hurd/iohelp.h>
 #include <hurd/fshelp.h>
+#include <error.h>
 #include "ourmsg_U.h"
 
 
@@ -84,9 +85,10 @@ struct protid_hook
 void
 init_users ()
 {
-  errno = ports_create_port (cttyid_class, term_bucket,
-                            sizeof (struct port_info), &cttyid);
-  if (errno)
+  error_t err;
+  err = ports_create_port (cttyid_class, term_bucket,
+                          sizeof (struct port_info), &cttyid);
+  if (err)
     {
       perror ("Allocating cttyid");
       exit (1);
Index: trans/ifsock.c
===================================================================
RCS file: /cvsroot/hurd/hurd/trans/ifsock.c,v
retrieving revision 1.9
diff -u -p -r1.9 ifsock.c
--- trans/ifsock.c      26 Feb 2001 04:16:01 -0000      1.9
+++ trans/ifsock.c      15 Mar 2002 02:38:59 -0000
@@ -1,5 +1,5 @@
 /* Server for S_IFSOCK nodes
-   Copyright (C) 1994, 1995, 2001 Free Software Foundation
+   Copyright (C) 1994, 1995, 2001, 02 Free Software Foundation
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -89,8 +89,8 @@ main (int argc, char **argv)
     address_port = MACH_PORT_NULL;
   else
     {
-      errno = socket_fabricate_address (pflocal, AF_LOCAL, &address_port);
-      if (errno)
+      err = socket_fabricate_address (pflocal, AF_LOCAL, &address_port);
+      if (err)
        address_port = MACH_PORT_NULL;
       mach_port_deallocate (mach_task_self (), pflocal);
     }
Index: utils/rpctrace.c
===================================================================
RCS file: /cvsroot/hurd/hurd/utils/rpctrace.c,v
retrieving revision 1.11
diff -u -p -r1.11 rpctrace.c
--- utils/rpctrace.c    30 Jan 2002 12:25:44 -0000      1.11
+++ utils/rpctrace.c    15 Mar 2002 02:39:00 -0000
@@ -79,6 +79,7 @@ parse_msgid_list (const char *filename)
   unsigned int lineno = 0;
   char *name, *subsystem;
   unsigned int msgid;
+  error_t err;
 
   fp = fopen (filename, "r");
   if (fp == 0)
@@ -103,9 +104,9 @@ parse_msgid_list (const char *filename)
            error (1, errno, "malloc");
          info->name = name;
          info->subsystem = subsystem;
-         errno = ihash_add (&msgid_ihash, msgid, info, NULL);
-         if (errno)
-           error (1, errno, "ihash_add");
+         err = ihash_add (&msgid_ihash, msgid, info, NULL);
+         if (err)
+           error (1, err, "ihash_add");
        }
     }
 
Index: utils/shd.c
===================================================================
RCS file: /cvsroot/hurd/hurd/utils/shd.c,v
retrieving revision 1.8
diff -u -p -r1.8 shd.c
--- utils/shd.c 2 Jan 2002 11:22:17 -0000       1.8
+++ utils/shd.c 15 Mar 2002 02:39:00 -0000
@@ -69,6 +69,7 @@ run (char **argv, int fd0, int fd1)
 {
   file_t file;
   char *program;
+  error_t err;
 
   if (strchr (argv[0], '/') != NULL)
     program = argv[0];
@@ -92,12 +93,12 @@ run (char **argv, int fd0, int fd1)
       task_t task;
       pid_t pid;
 
-      errno = task_create (mach_task_self (),
+      err = task_create (mach_task_self (),
 #ifdef KERN_INVALID_LEDGER
                           NULL, 0,     /* OSF Mach */
 #endif
                           0, &task);
-      if (errno)
+      if (err)
        {
          perror ("task_create");
          pid = -1;
@@ -140,8 +141,8 @@ run (char **argv, int fd0, int fd1)
          pid = task2pid (task);
          if (pid == -1)
            perror ("task2pid"), pid = 0;
-         errno = proc_child (proc, task);
-         if (errno)
+         err = proc_child (proc, task);
+         if (err)
            perror ("proc_child");
          if (pause_startup)
            {
@@ -154,17 +155,17 @@ run (char **argv, int fd0, int fd1)
              movefd (fd1, 1, &save1))
            return -1;
 
-         errno = _hurd_exec (task, file, argv, environ);
+         err = _hurd_exec (task, file, argv, environ);
 
          if (restorefd (fd0, 0, &save0) ||
              restorefd (fd1, 1, &save1))
            return -1;
 
-         if (errno)
+         if (err)
            {
              perror ("_hurd_exec");
-             errno = task_terminate (task);
-             if (errno)
+             err = task_terminate (task);
+             if (err)
                perror ("task_terminate");
            }
          mach_port_deallocate (mach_task_self (), task);
@@ -172,6 +173,7 @@ run (char **argv, int fd0, int fd1)
        }
       mach_port_deallocate (mach_task_self (), file);
 
+      errno = err;
       return pid;
     }
 }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]