]> Savannah Git Hosting - gnulib.git/commitdiff
windows-spawn: Export another auxiliary function.
authorBruno Haible <bruno@clisp.org>
Thu, 24 Dec 2020 21:18:27 +0000 (22:18 +0100)
committerBruno Haible <bruno@clisp.org>
Thu, 24 Dec 2020 21:18:27 +0000 (22:18 +0100)
* lib/windows-spawn.h (convert_CreateProcess_error): New declaration.
* lib/windows-spawn.c (convert_CreateProcess_error): New function,
extracted from spawnpvech.
(spawnpvech): Use it.

ChangeLog
lib/windows-spawn.c
lib/windows-spawn.h

index 39629f3dcc820a459d5e1204e5ce455a8e44b6fe..fceaaa687bca15fe52c709f0c3a1246f5a48a887 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2020-12-24  Bruno Haible  <bruno@clisp.org>
+
+       windows-spawn: Export another auxiliary function.
+       * lib/windows-spawn.h (convert_CreateProcess_error): New declaration.
+       * lib/windows-spawn.c (convert_CreateProcess_error): New function,
+       extracted from spawnpvech.
+       (spawnpvech): Use it.
+
 2020-12-24  Bruno Haible  <bruno@clisp.org>
 
        windows-spawn: Export some more auxiliary functions.
index a2f63b9166586a771df8d41c9abcb17af5746ef7..a78109091bd643bebcdcf6fc246b92dec818c21a 100644 (file)
@@ -526,6 +526,46 @@ free_inheritable_handles (struct inheritable_handles *inh_handles)
   free (inh_handles->handles);
 }
 
+int
+convert_CreateProcess_error (DWORD error)
+{
+  /* Some of these errors probably cannot happen.  But who knows...  */
+  switch (error)
+    {
+    case ERROR_FILE_NOT_FOUND:
+    case ERROR_PATH_NOT_FOUND:
+    case ERROR_BAD_PATHNAME:
+    case ERROR_BAD_NET_NAME:
+    case ERROR_INVALID_NAME:
+    case ERROR_DIRECTORY:
+      return ENOENT;
+      break;
+
+    case ERROR_ACCESS_DENIED:
+    case ERROR_SHARING_VIOLATION:
+      return EACCES;
+      break;
+
+    case ERROR_OUTOFMEMORY:
+      return ENOMEM;
+      break;
+
+    case ERROR_BUFFER_OVERFLOW:
+    case ERROR_FILENAME_EXCED_RANGE:
+      return ENAMETOOLONG;
+      break;
+
+    case ERROR_BAD_FORMAT:
+    case ERROR_BAD_EXE_FORMAT:
+      return ENOEXEC;
+      break;
+
+    default:
+      return EINVAL;
+      break;
+    }
+}
+
 intptr_t
 spawnpvech (int mode,
             const char *progname, const char * const *argv,
@@ -622,42 +662,7 @@ spawnpvech (int mode,
       if (resolved_progname != progname)
         free ((char *) resolved_progname);
 
-      /* Some of these errors probably cannot happen.  But who knows...  */
-      switch (error)
-        {
-        case ERROR_FILE_NOT_FOUND:
-        case ERROR_PATH_NOT_FOUND:
-        case ERROR_BAD_PATHNAME:
-        case ERROR_BAD_NET_NAME:
-        case ERROR_INVALID_NAME:
-        case ERROR_DIRECTORY:
-          errno = ENOENT;
-          break;
-
-        case ERROR_ACCESS_DENIED:
-        case ERROR_SHARING_VIOLATION:
-          errno = EACCES;
-          break;
-
-        case ERROR_OUTOFMEMORY:
-          errno = ENOMEM;
-          break;
-
-        case ERROR_BUFFER_OVERFLOW:
-        case ERROR_FILENAME_EXCED_RANGE:
-          errno = ENAMETOOLONG;
-          break;
-
-        case ERROR_BAD_FORMAT:
-        case ERROR_BAD_EXE_FORMAT:
-          errno = ENOEXEC;
-          break;
-
-        default:
-          errno = EINVAL;
-          break;
-        }
-
+      errno = convert_CreateProcess_error (error);
       return -1;
     }
 
index 6e06652deb41f483b473c2406c6993019037c0e9..1ff76f644b7b15754692f4f63e95f0a491d54ae3 100644 (file)
@@ -122,6 +122,11 @@ extern int compose_handles_block (const struct inheritable_handles *inh_handles,
 extern void free_inheritable_handles (struct inheritable_handles *inh_handles);
 
 
+/* Converts a CreateProcess() error code (retrieved through GetLastError()) to
+   an errno value.  */
+extern int convert_CreateProcess_error (DWORD error);
+
+
 /* Creates a subprocess.
    MODE is either P_WAIT or P_NOWAIT.
    PROGNAME is the program to invoke.