+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.
+ *
+ * bin/openocd.exe
+ * interface/dummy.cfg
+ * target/at91eb40a.cfg
+ */
+ path = alloc_printf("%s%s", strExePath, "/..");
+ if (path) {
+ add_script_search_dir(path);
+ free(path);
+ }
+ /* 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
+ */
+ 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
+ /*
+ * The directory containing OpenOCD-supplied scripts should be
+ * listed last in the built-in search order, so the user can
+ * override these scripts with site-specific customizations.
+ */
+
+ const char *home = getenv("HOME");