diff --git a/src/helper/options.c b/src/helper/options.c
index 98cd634bc2cd3c4613c3dbfddcdede1b68451dc0..e6b0f64415884845b70110817e1912dbd3b0dbd2 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
 	/*