summaryrefslogtreecommitdiff
path: root/libguile/load.c
diff options
context:
space:
mode:
Diffstat (limited to 'libguile/load.c')
-rw-r--r--libguile/load.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/libguile/load.c b/libguile/load.c
index b5a7757d0..71715263b 100644
--- a/libguile/load.c
+++ b/libguile/load.c
@@ -188,7 +188,11 @@ scm_internal_parse_path (char *path, SCM tail)
do {
/* Scan back to the beginning of the current element. */
do scan--;
+#ifdef __MINGW32__
+ while (scan >= path && *scan != ';');
+#else
while (scan >= path && *scan != ':');
+#endif
tail = scm_cons (scm_mem2string (scan + 1, elt_end - (scan + 1)),
tail);
elt_end = scan;
@@ -273,7 +277,16 @@ SCM_DEFINE (scm_search_path, "search-path", 2, 1, 0,
filename_len = SCM_STRING_LENGTH (filename);
/* If FILENAME is absolute, return it unchanged. */
+#ifdef __MINGW32__
+ if (((filename_len >= 1) &&
+ (filename_chars[0] == '/' || filename_chars[0] == '\\')) ||
+ ((filename_len >= 3) && filename_chars[1] == ':' &&
+ ((filename_chars[0] >= 'a' && filename_chars[0] <= 'z') ||
+ (filename_chars[0] >= 'A' && filename_chars[0] <= 'Z')) &&
+ (filename_chars[2] == '/' || filename_chars[2] == '\\')))
+#else
if (filename_len >= 1 && filename_chars[0] == '/')
+#endif
return filename;
/* Find the length of the longest element of path. */
@@ -306,7 +319,11 @@ SCM_DEFINE (scm_search_path, "search-path", 2, 1, 0,
extensions = SCM_EOL;
break;
}
+#ifdef __MINGW32__
+ else if (*endp == '/' || *endp == '\\')
+#else
else if (*endp == '/')
+#endif
/* This filename has no extension, so keep the current list
of extensions. */
break;
@@ -351,7 +368,11 @@ SCM_DEFINE (scm_search_path, "search-path", 2, 1, 0,
/* Concatenate the path name and the filename. */
len = SCM_STRING_LENGTH (dir);
memcpy (buf, SCM_STRING_CHARS (dir), len);
+#ifdef __MINGW32__
+ if (len >= 1 && buf[len - 1] != '/' && buf[len - 1] != '\\')
+#else
if (len >= 1 && buf[len - 1] != '/')
+#endif
buf[len++] = '/';
memcpy (buf + len, filename_chars, filename_len);
len += filename_len;
@@ -433,7 +454,12 @@ SCM_DEFINE (scm_primitive_load_path, "primitive-load-path", 1, 0, 0,
if (SCM_FALSEP (full_filename))
{
int absolute = (SCM_STRING_LENGTH (filename) >= 1
+#ifdef __MINGW32__
+ && (SCM_STRING_CHARS (filename)[0] == '/' ||
+ SCM_STRING_CHARS (filename)[0] == '\\'));
+#else
&& SCM_STRING_CHARS (filename)[0] == '/');
+#endif
SCM_MISC_ERROR ((absolute
? "Unable to load file ~S"
: "Unable to find file ~S in load path"),