aboutsummaryrefslogtreecommitdiff
path: root/src/helper/options.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/helper/options.c')
-rw-r--r--src/helper/options.c65
1 files changed, 37 insertions, 28 deletions
diff --git a/src/helper/options.c b/src/helper/options.c
index 98cd634b..e6b0f644 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
/*