* pexecute.c (pexecute) [__MSDOS__]: Change __GO32__ to
authorJeff Law <law@redhat.com>
Thu, 27 Jul 2000 01:49:21 +0000 (01:49 +0000)
committerJeff Law <law@redhat.com>
Thu, 27 Jul 2000 01:49:21 +0000 (01:49 +0000)
        __DJGPP__. Use P_WAIT instead of constant in the spawnv* call.
        Cast program to 'char *' in errmsg_arg assignment.
        (PWAIT_ERROR): Define.
(pwait): Use PWAIT_ERROR.  Adjust DJGPP's status code to conform
        to DJGPP's WIF* macros.

libiberty/ChangeLog
libiberty/pexecute.c

index 9acd322846c278c013395b762d2a0c24acaca2c0..d8cada80147570027a703d4a022db022fa81ee22 100644 (file)
@@ -1,3 +1,12 @@
+2000-07-26 Mark Elbrecht <snowball3@bigfoot.com>
+
+       * pexecute.c (pexecute) [__MSDOS__]: Change __GO32__ to
+       __DJGPP__. Use P_WAIT instead of constant in the spawnv* call.
+       Cast program to 'char *' in errmsg_arg assignment.
+       (PWAIT_ERROR): Define.
+       (pwait): Use PWAIT_ERROR.  Adjust DJGPP's status code to conform
+       to DJGPP's WIF* macros.
+
 2000-07-27  RodneyBrown  <RodneyBrown@pmsc.com>
             Jeff Law <law@cygnus.com>
 
index 4a1970d5309dfc92472f077a5c3ccaa9bdfbb783..9c62b57bbdb466a93b85a38ce0de1d57eb562504 100644 (file)
@@ -157,9 +157,9 @@ pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags)
   if ((flags & PEXECUTE_ONE) != PEXECUTE_ONE)
     abort ();
 
-#ifdef __GO32__
+#ifdef __DJGPP__
   /* ??? What are the possible return values from spawnv?  */
-  rc = (flags & PEXECUTE_SEARCH ? spawnvp : spawnv) (1, program, argv);
+  rc = (flags & PEXECUTE_SEARCH ? spawnvp : spawnv) (P_WAIT, program, argv);
 #else
   char *scmd, *rf;
   FILE *argfile;
@@ -208,7 +208,7 @@ pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags)
   if (rc == -1)
     {
       *errmsg_fmt = install_error_msg;
-      *errmsg_arg = program;
+      *errmsg_arg = (char *)program;
       return -1;
     }
 
@@ -217,6 +217,13 @@ pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags)
   return last_pid;
 }
 
+/* Use ECHILD if available, otherwise use EINVAL.  */
+#ifdef ECHILD
+#define PWAIT_ERROR ECHILD
+#else
+#define PWAIT_ERROR EINVAL
+#endif
+
 int
 pwait (pid, status, flags)
      int pid;
@@ -228,13 +235,16 @@ pwait (pid, status, flags)
       /* Called twice for the same child?  */
       || pid == last_reaped)
     {
-      /* ??? ECHILD would be a better choice.  Can we use it here?  */
-      errno = EINVAL;
+      errno = PWAIT_ERROR;
       return -1;
     }
   /* ??? Here's an opportunity to canonicalize the values in STATUS.
      Needed?  */
+#ifdef __DJGPP__
+  *status = (last_status >> 8);
+#else
   *status = last_status;
+#endif
   last_reaped = last_pid;
   return last_pid;
 }