From 07158a7f8a5897f28e988969029e692ac106b2bc Mon Sep 17 00:00:00 2001 From: Freddie Chopin Date: Fri, 17 Aug 2012 11:54:24 +0200 Subject: [PATCH] Add another scripts search path for Windows builds Add single "scripts" folder to search path for Windows OpenOCD builds that don't use cygwin bin/openocd.exe scripts/interface/dummy.cfg scripts/target/at91eb40a.cfg Do some refactoring of current code (thx to Andreas). Change-Id: Idbb08d1368b06f25da44f4f9ab1511db992b1724 Signed-off-by: Freddie Chopin Signed-off-by: Andreas Fritiofson Reviewed-on: http://openocd.zylin.com/785 Tested-by: jenkins --- src/helper/options.c | 65 +++++++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 28 deletions(-) diff --git a/src/helper/options.c b/src/helper/options.c index 98cd634bc2..e6b0f64415 100644 --- a/src/helper/options.c +++ b/src/helper/options.c @@ -55,43 +55,52 @@ int configuration_output_handler(struct command_context *context, const char *li static void add_default_dirs(void) { #ifdef _WIN32 + char strExePath[MAX_PATH]; + char *path; + GetModuleFileName(NULL, strExePath, MAX_PATH); + + /* Strip executable file name, leaving path */ + *strrchr(strExePath, '\\') = '\0'; + + /* Convert path separators to UNIX style, should work on Windows also. */ + for (char *p = strExePath; *p; p++) { + if (*p == '\\') + *p = '/'; + } + /* Add the parent of the directory where openocd.exe resides to the * config script search path. - * Directory layout: - * bin\openocd.exe - * lib\openocd + * + * bin/openocd.exe + * interface/dummy.cfg + * target/at91eb40a.cfg */ - { - char strExePath[MAX_PATH]; - GetModuleFileName(NULL, strExePath, MAX_PATH); - /* Either this code will *always* work or it will SEGFAULT giving - * excellent information on the culprit. - */ - *strrchr(strExePath, '\\') = 0; - strcat(strExePath, "\\.."); - add_script_search_dir(strExePath); + path = alloc_printf("%s%s", strExePath, "/.."); + if (path) { + add_script_search_dir(path); + free(path); } - /* - * Add support for the default (as of 20091118) layout when - * using autotools and cygwin/MinGW to build native binary. - * Path separator is converted to UNIX style so that MinGW is - * pleased. + /* Add support for the directory layout resulting from a 'make install'. * * bin/openocd.exe * share/openocd/scripts/interface/dummy.cfg * share/openocd/scripts/target/at91eb40a.cfg */ - { - char strExePath[MAX_PATH]; - char *p; - GetModuleFileName(NULL, strExePath, MAX_PATH); - *strrchr(strExePath, '\\') = 0; - strcat(strExePath, "/../share/"PACKAGE "/scripts"); - for (p = strExePath; *p; p++) { - if (*p == '\\') - *p = '/'; - } - add_script_search_dir(strExePath); + path = alloc_printf("%s%s", strExePath, "/../share/" PACKAGE "/scripts"); + if (path) { + add_script_search_dir(path); + free(path); + } + /* Add single "scripts" folder to search path for Windows OpenOCD builds that don't use cygwin + * + * bin/openocd.exe + * scripts/interface/dummy.cfg + * scripts/target/at91eb40a.cfg + */ + path = alloc_printf("%s%s", strExePath, "/../scripts"); + if (path) { + add_script_search_dir(path); + free(path); } #else /* -- 2.30.2