summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libguile/load.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/libguile/load.c b/libguile/load.c
index 8d50b21b0..da75a5a71 100644
--- a/libguile/load.c
+++ b/libguile/load.c
@@ -478,23 +478,25 @@ is_drive_letter (SCM c)
}
static int
-is_absolute_file_name (const char *filename_chars, size_t filename_len)
+is_absolute_file_name (SCM filename)
{
+ size_t filename_len = scm_c_string_length (filename);
+
if (filename_len >= 1
- && is_file_name_separator (SCM_MAKE_CHAR (filename_chars[0]))
+ && is_file_name_separator (scm_c_string_ref (filename, 0))
#ifdef __MINGW32__
/* On Windows, one initial separator indicates a drive-relative
path. Two separators indicate a Universal Naming Convention
(UNC) path. UNC paths are always absolute. */
&& filename_len >= 2
- && is_file_name_separator (SCM_MAKE_CHAR (filename_chars[1]))
+ && is_file_name_separator (scm_c_string_ref (filename, 1))
#endif
)
return 1;
if (filename_len >= 3
- && is_drive_letter (SCM_MAKE_CHAR (filename_chars[0]))
- && filename_chars[1] == ':'
- && is_file_name_separator (SCM_MAKE_CHAR (filename_chars[2])))
+ && is_drive_letter (scm_c_string_ref (filename, 0))
+ && scm_is_eq (scm_c_string_ref (filename, 1), SCM_MAKE_CHAR (':'))
+ && is_file_name_separator (scm_c_string_ref (filename, 2)))
return 1;
return 0;
}
@@ -529,7 +531,7 @@ search_path (SCM path, SCM filename, SCM extensions, SCM require_exts,
scm_dynwind_free (filename_chars);
/* If FILENAME is absolute and is still valid, return it unchanged. */
- if (is_absolute_file_name (filename_chars, filename_len))
+ if (is_absolute_file_name (filename))
{
if ((scm_is_false (require_exts) ||
scm_c_string_has_an_ext (filename_chars, filename_len,