From 2c7cbed8fb9e5872a258efaada8e824ab5cd8186 Mon Sep 17 00:00:00 2001 From: Xiaoqiang Wang Date: Fri, 13 Dec 2019 08:33:03 +0100 Subject: [PATCH] fix checking of absolute paths on windows --- runScript.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/runScript.c b/runScript.c index 80c266b..25125d2 100644 --- a/runScript.c +++ b/runScript.c @@ -45,8 +45,6 @@ epicsShareFunc int epicsShareAPI iocshCmd(const char *cmd); #include #endif -#define IS_ABS_PATH(filename) (filename[0] == OSI_PATH_SEPARATOR[0]) /* may be different for other OS ? */ - #include "expr.h" #include "require.h" @@ -55,6 +53,24 @@ epicsShareFunc int epicsShareAPI iocshCmd(const char *cmd); int runScriptDebug=0; +int isAbsPath(const char* filename) +{ +#ifdef _WIN32 + /* network path, e.g. "\\x03ma\gac-x03ma\Data1" */ + if (strncmp(filename, "\\\\", 2) == 0) + return 1; + /* driver letter, e.g. "C:\Temp" */ + else if (strlen(filename) > 3 + && ((filename[0]>='a'&&filename[0]<='z') || (filename[0]>='A'&&filename[0]<='Z')) + && strncmp(filename+1, ":\\", 2) == 0) + return 1; + else + return 0; +#else + return filename[0] == OSI_PATH_SEPARATOR[0] ? 1 : 0; +#endif +} + int runScript(const char* filename, const char* args) { MAC_HANDLE *mac = NULL; @@ -134,7 +150,7 @@ int runScript(const char* filename, const char* args) free(pairs); } - if (IS_ABS_PATH(filename)) + if (isAbsPath(filename)) { file = fopen(filename, "r"); }