OSDN Git Service

* pinfo.cc (status_exit): Return complete error code. Handle
authorcgf <cgf>
Sat, 5 Nov 2011 18:29:50 +0000 (18:29 +0000)
committercgf <cgf>
Sat, 5 Nov 2011 18:29:50 +0000 (18:29 +0000)
STATUS_ACCESS_VIOLATION correctly.
(pinfo::set_exit_code): Set self->exitcode directly from status_exit.

winsup/cygwin/ChangeLog
winsup/cygwin/pinfo.cc

index 1401a18..cd9cdf5 100644 (file)
@@ -1,3 +1,9 @@
+2011-11-05  Christopher Faylor  <me.cygwin2011@cgf.cx>
+
+       * pinfo.cc (status_exit): Return complete error code.  Handle
+       STATUS_ACCESS_VIOLATION correctly.
+       (pinfo::set_exit_code): Set self->exitcode directly from status_exit.
+
 2011-11-04  Christopher Faylor  <me.cygwin2011@cgf.cx>
 
        * pinfo.h (pinfo::reattach): Only set destroy to false when
index 5a77d8f..83f231d 100644 (file)
@@ -130,18 +130,21 @@ status_exit (DWORD x)
        mount_table->conv_to_posix_path (pc.get_win32 (), posix_prog, 1);
        small_printf ("%s: error while loading shared libraries: %s: cannot open shared object file: No such file or directory\n",
                      posix_prog, find_first_notloaded_dll (pc));
-       x = 127;
+       x = 127 << 8;
       }
       break;
     case STATUS_ILLEGAL_DLL_PSEUDO_RELOCATION: /* custom error value */
       /* We've already printed the error message in pseudo-reloc.c */
-      x = 127;
+      x = 127 << 8;
+      break;
+    case STATUS_ACCESS_VIOLATION:
+      x = SIGSEGV;
       break;
     default:
       debug_printf ("*** STATUS_%p\n", x);
-      x = 127;
+      x = 127 << 8;
     }
-  return x;
+  return EXITCODE_SET | x;
 }
 
 # define self (*this)
@@ -149,8 +152,9 @@ void
 pinfo::set_exit_code (DWORD x)
 {
   if (x >= 0xc0000000UL)
-    x = status_exit (x);
-  self->exitcode = EXITCODE_SET | (sigExeced ?: (x & 0xff) << 8);
+    self->exitcode = status_exit (x);
+  else
+    self->exitcode = EXITCODE_SET | (sigExeced ?: (x & 0xff) << 8);
 }
 
 void