Prechádzať zdrojové kódy

HPCC-17426 Windows not finding "ecl bundle" command

Use same logic as Linux to search current executable location first.
Note that Windows searches current executable directory by default when
localing dll files, but this does not (it seems) apply when loading
executables.

Signed-off-by: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 8 rokov pred
rodič
commit
dbd8ebda08
1 zmenil súbory, kde vykonal 7 pridanie a 3 odobranie
  1. 7 3
      ecl/eclcmd/eclcmd_shell.cpp

+ 7 - 3
ecl/eclcmd/eclcmd_shell.cpp

@@ -51,13 +51,17 @@ int EclCMDShell::callExternal(ArgvIterator &iter)
         argv[i++]=iter.query();
     argv[i]=NULL;
 //TODO - add common routine or use existing in jlib
-#ifdef _WIN32
-    if (_spawnvp(_P_WAIT, cmdstr.str(), const_cast<char **>(argv))==-1)
-#else
     // First try in same dir as the ecl executable
     StringBuffer local;
     splitFilename(queryCurrentProcessPath(), &local, &local, NULL, NULL);
     local.append(cmdstr);
+    errno = 0;
+#ifdef _WIN32
+    if (_spawnvp(_P_WAIT, local.str(), const_cast<char **>(argv))==-1)
+        return 0;
+    // If not found, try the path
+    if (errno!=ENOENT || _spawnvp(cmdstr.str(), const_cast<char **>(argv))==-1)
+#else
     if (execvp(local.str(), const_cast<char **>(argv))!=-1)
         return 0;
     // If not found, try the path