]> git.sur5r.net Git - bacula/bacula/commitdiff
always have CreateChildProcess execute process command via $COMSPEC
authorChristopher S. Hull <csh@raidersolutions.com>
Wed, 9 Jun 2004 16:58:57 +0000 (16:58 +0000)
committerChristopher S. Hull <csh@raidersolutions.com>
Wed, 9 Jun 2004 16:58:57 +0000 (16:58 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@1405 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/src/win32/compat/compat.cpp

index 89392cb728670113d625d4c1ec7f8923c06a7fed..4a954ab50dfdc301f0182a7284661794c5d8b4ac 100644 (file)
@@ -815,20 +815,6 @@ getArgv0(const char *cmdline)
     return rval;
 }
 
-/*
- * Check to see if filename has the batch file extention.
- */
-int
-isBatchFile(const char *fname)
-{
-    const char *ext = strrchr(fname, '.');
-    
-    if (ext) {
-       int rval = strncasecmp(ext, ".bat", 4);
-       return !rval;
-    }
-    return 0;
-}
 
 /**
  * OK, so it would seem CreateProcess only handles true executables:
@@ -871,55 +857,20 @@ CreateChildProcess(const char *cmdline, HANDLE in, HANDLE out, HANDLE err)
         siStartInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE);
     // Create the child process.
 
-    char cmdLine[1024];
-    char exeFile[1024];
-    // retrive the first compont of the command line which should be the
-    // executable
-    const char *exeName = getArgv0(cmdline);
-
-    if (isBatchFile(exeName)) {
-       const char *comspec = getenv("COMSPEC");
-       if (comspec == NULL) // should never happen
-           return INVALID_HANDLE_VALUE;
-
-       free((void *)exeName);
-       strcpy(exeFile, comspec);
-       strcpy(cmdLine, comspec);
-       strcat(cmdLine, " /c ");
-       strcat(cmdLine, cmdline);
-    }
-    else
-    {
-    // check to see if absolute path was passed to us already?
-       // allow for case when absolute path is in quotes "C:/...."
-       int driveCheck = exeName[0] == '"' ? 2 : 1;
-       if (exeName[driveCheck] != ':'
-           || (strchr(cmdline, '/') == NULL
-               && strchr(cmdline, '\\') == NULL))
-       {
-           // only command name so perform search of PATH to find
-           char *file;
-           DWORD rval = SearchPath(NULL,
-                                   exeName,
-                                   ".exe",
-                                   sizeof(exeFile),
-                                   exeFile,
-                                   &file);
-           if (rval == 0)
-               return INVALID_HANDLE_VALUE;
-           if (rval > sizeof(exeFile))
-               return INVALID_HANDLE_VALUE;
-           
-       }
-       else
-           cygwin_conv_to_win32_path(exeName, exeFile);
-       
-       // exeFile now has absolute path to program to execute.
-       free((void *)exeName);
+    char exeFile[256];
+
+    const char *comspec = getenv("COMSPEC");
+    
+    if (comspec == NULL) // should never happen
+       return INVALID_HANDLE_VALUE;
+
+    char *cmdLine = (char *)alloca(strlen(cmdline) + strlen(comspec) + 16);
+    
+    strcpy(exeFile, comspec);
+    strcpy(cmdLine, comspec);
+    strcat(cmdLine, " /c ");
+    strcat(cmdLine, cmdline);
 
-       // copy original command line to pass to create process
-       strcpy(cmdLine, cmdline);
-    }
     // try to execute program
     bFuncRetn = CreateProcess(exeFile,
                               cmdLine, // command line