Explorar el Código

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 hace 8 años
padre
commit
dbd8ebda08
Se han modificado 1 ficheros con 7 adiciones y 3 borrados
  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