1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-20 11:40:18 +02:00

add exception-on-error optional arg to `stat' in scheme

* libguile/filesys.h:
* libguile/filesys.c (scm_stat): Add optional arg, exception-on-error,
  which if #f (not the default) will just return #f instead of raising an
  exception if the stat fails.
This commit is contained in:
Andy Wingo 2009-06-02 22:20:21 +02:00
parent 5b197db838
commit fcb6f5ff33
2 changed files with 22 additions and 12 deletions

View file

@ -580,17 +580,23 @@ static int fstat_Win32 (int fdes, struct stat *buf)
}
#endif /* __MINGW32__ */
SCM_DEFINE (scm_stat, "stat", 1, 0, 0,
(SCM object),
SCM_DEFINE (scm_stat, "stat", 1, 1, 0,
(SCM object, SCM exception_on_error),
"Return an object containing various information about the file\n"
"determined by @var{obj}. @var{obj} can be a string containing\n"
"a file name or a port or integer file descriptor which is open\n"
"on a file (in which case @code{fstat} is used as the underlying\n"
"system call).\n"
"\n"
"The object returned by @code{stat} can be passed as a single\n"
"parameter to the following procedures, all of which return\n"
"integers:\n"
"If the optional @var{exception_on_error} argument is true, which\n"
"is the default, an exception will be raised if the underlying\n"
"system call returns an error, for example if the file is not\n"
"found or is not readable. Otherwise, an error will cause\n"
"@code{stat} to return @code{#f}."
"\n"
"The object returned by a successful call to @code{stat} can be\n"
"passed as a single parameter to the following procedures, all of\n"
"which return integers:\n"
"\n"
"@table @code\n"
"@item stat:dev\n"
@ -678,12 +684,16 @@ SCM_DEFINE (scm_stat, "stat", 1, 0, 0,
if (rv == -1)
{
int en = errno;
SCM_SYSERROR_MSG ("~A: ~S",
scm_list_2 (scm_strerror (scm_from_int (en)),
object),
en);
if (SCM_UNBNDP (exception_on_error) || scm_is_true (exception_on_error))
{
int en = errno;
SCM_SYSERROR_MSG ("~A: ~S",
scm_list_2 (scm_strerror (scm_from_int (en)),
object),
en);
}
else
return SCM_BOOL_F;
}
return scm_stat2scm (&stat_temp);
}

View file

@ -42,7 +42,7 @@ SCM_API SCM scm_open_fdes (SCM path, SCM flags, SCM mode);
SCM_API SCM scm_open (SCM path, SCM flags, SCM mode);
SCM_API SCM scm_close (SCM fd_or_port);
SCM_API SCM scm_close_fdes (SCM fd);
SCM_API SCM scm_stat (SCM object);
SCM_API SCM scm_stat (SCM object, SCM exception_on_error);
SCM_API SCM scm_link (SCM oldpath, SCM newpath);
SCM_API SCM scm_rename (SCM oldname, SCM newname);
SCM_API SCM scm_delete_file (SCM str);