diff options
author | Andy Wingo <wingo@pobox.com> | 2015-01-22 13:04:34 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2015-01-22 13:04:34 +0100 |
commit | 086bbcc874f230c709b7c0a46439c2fd3f7cd37c (patch) | |
tree | 9a7d42c5a3c7880c50ff4d679ae2e8cf91149dfc /libguile/load.c | |
parent | d5dffec4ffcb93ab649acb2b6f7d8a013ba0e10e (diff) | |
parent | fdd319e9bd4121d844662d3d8ccc69b462b60840 (diff) | |
download | guile-086bbcc874f230c709b7c0a46439c2fd3f7cd37c.tar.gz |
Merge commit 'fdd319e9bd4121d844662d3d8ccc69b462b60840'
Diffstat (limited to 'libguile/load.c')
-rw-r--r-- | libguile/load.c | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/libguile/load.c b/libguile/load.c index b6e07a549..74f3bb49b 100644 --- a/libguile/load.c +++ b/libguile/load.c @@ -469,23 +469,22 @@ stringbuf_cat (struct stringbuf *buf, char *str) } } - +/* Return non-zero if STR is suffixed by a dot followed by one of + EXTENSIONS. */ static int -scm_c_string_has_an_ext (char *str, size_t len, SCM extensions) +string_has_an_ext (SCM str, SCM extensions) { for (; !scm_is_null (extensions); extensions = SCM_CDR (extensions)) { - char *ext; - size_t extlen; - int match; - ext = scm_to_locale_string (SCM_CAR (extensions)); - extlen = strlen (ext); - match = (len > extlen && str[len - extlen - 1] == '.' - && strncmp (str + (len - extlen), ext, extlen) == 0); - free (ext); - if (match) - return 1; + SCM extension; + + extension = SCM_CAR (extensions); + if (scm_is_true (scm_string_suffix_p (extension, str, + SCM_UNDEFINED, SCM_UNDEFINED, + SCM_UNDEFINED, SCM_UNDEFINED))) + return 1; } + return 0; } @@ -576,8 +575,7 @@ search_path (SCM path, SCM filename, SCM extensions, SCM require_exts, if (is_absolute_file_name (filename)) { if ((scm_is_false (require_exts) || - scm_c_string_has_an_ext (filename_chars, filename_len, - extensions)) + string_has_an_ext (filename, extensions)) && stat (filename_chars, stat_buf) == 0 && !(stat_buf->st_mode & S_IFDIR)) result = filename; @@ -595,8 +593,7 @@ search_path (SCM path, SCM filename, SCM extensions, SCM require_exts, if (*endp == '.') { if (scm_is_true (require_exts) && - !scm_c_string_has_an_ext (filename_chars, filename_len, - extensions)) + !string_has_an_ext (filename, extensions)) { /* This filename has an extension, but not one of the right ones... */ |