diff options
author | Andy Wingo <wingo@pobox.com> | 2009-06-19 14:26:47 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2009-06-19 14:26:47 +0200 |
commit | 25b82b3485e9e44d8d6268d3774b0b81d0d501b2 (patch) | |
tree | f3378fd8b175d43240e6bff9f749826e4da87175 /libguile/filesys.c | |
parent | ffca4c2203d85bc4d9e348d77053d21112e665af (diff) | |
download | guile-25b82b3485e9e44d8d6268d3774b0b81d0d501b2.tar.gz |
new function: canonicalize-path. use when autocompiling
* libguile/filesys.h:
* libguile/filesys.c (scm_canonicalize_path): New function,
canonicalize-path.
* module/system/base/compile.scm (compiled-file-name): Canonicalize the
filename so that compiling e.g. ../foo.scm doesn't compile to
~/.guile-ccache/1.9/../foo.scm.
Diffstat (limited to 'libguile/filesys.c')
-rw-r--r-- | libguile/filesys.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/libguile/filesys.c b/libguile/filesys.c index b49d488f1..a2db6996f 100644 --- a/libguile/filesys.c +++ b/libguile/filesys.c @@ -30,6 +30,7 @@ #endif #include <alloca.h> +#include <canonicalize.h> #include <stdio.h> #include <errno.h> @@ -1661,6 +1662,27 @@ SCM_DEFINE (scm_basename, "basename", 1, 1, 0, } #undef FUNC_NAME +SCM_DEFINE (scm_canonicalize_path, "canonicalize-path", 1, 0, 0, + (SCM path), + "Return the canonical path of @var{path}. A canonical path has\n" + "no @code{.} or @code{..} components, nor any repeated path\n" + "separators (@code{/}) nor symlinks.\n\n" + "Raises an error if any component of @var{path} does not exist.") +#define FUNC_NAME s_scm_canonicalize_path +{ char *str, *canon; + + SCM_VALIDATE_STRING (1, path); + + str = scm_to_locale_string (path); + canon = canonicalize_file_name (str); + free (str); + + if (canon) + return scm_take_locale_string (canon); + else + SCM_SYSERROR; +} +#undef FUNC_NAME |