diff options
author | Ludovic Courtès <ludo@gnu.org> | 2011-04-14 23:42:28 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2011-04-15 00:09:16 +0200 |
commit | 073167ef7b803067bcc8be19925fac1a48577bd8 (patch) | |
tree | c54db78672d35a9dd1c542cefc705bbd65aeb87a /libguile/posix.c | |
parent | 22072f2155f657ff229bf8aaaa00318b60e8d6e5 (diff) | |
download | guile-073167ef7b803067bcc8be19925fac1a48577bd8.tar.gz |
Allow compilation with `--disable-posix'.
Reported by Dmitry Dzhus <dima@dzhus.org>.
* configure.ac: Remove `AC_LIBOBJ([filesys])'. Document
`--disable-posix' as omitting non-essential POSIX interfaces.
* libguile/Makefile.am (libguile_@GUILE_EFFECTIVE_VERSION@_la_SOURCES):
Add `filesys.c'.
(DOT_DOC_FILES): Add `filesys.doc'.
(EXTRA_libguile_@GUILE_EFFECTIVE_VERSION@_la_SOURCES): Remove
`filesys.c'.
* libguile/posix.c (scm_mkstemp, scm_access): Move to `filesys.c'.
(scm_init_posix): Move `R_OK' etc. to `filesys.c'.
* libguile/filesys.c (scm_chown, scm_chmod, scm_umask, scm_open_fdes,
scm_open, scm_close, scm_close_fdes, scm_link, scm_tc16_dir,
scm_directory_stream_p, scm_opendir, scm_readdir, scm_rewinddir,
scm_closedir, scm_dir_print, scm_dir_free, scm_chdir, scm_getcwd,
set_element, fill_select_type, get_element, retrieve_select_type,
scm_select, scm_fcntl, scm_fsync, scm_symlink, scm_readlink,
scm_lstat, scm_copy_file): Conditionalize on HAVE_POSIX.
(scm_mkstemp, scm_access): New functions.
(scm_init_filesys): Conditionalize `scm_tc16_dir', `O_RDONLY', etc. on
HAVE_POSIX. Define `R_OK', `W_OK', etc.
* libguile/fports.c (fport_print): Use `scm_ttyname' only when
HAVE_POSIX.
* libguile/i18n.c (lock_locale_mutex, unlock_locale_mutex): New
functions. Update users of `scm_i_locale_mutex' to use them.
* libguile/init.c (scm_i_init_guile): Always call `scm_init_filesys'.
* meta/guile-tools.in (main): Use `setlocale' only when it is defined.
* module/ice-9/boot-9.scm: Always load `ice-9/posix'.
Diffstat (limited to 'libguile/posix.c')
-rw-r--r-- | libguile/posix.c | 106 |
1 files changed, 0 insertions, 106 deletions
diff --git a/libguile/posix.c b/libguile/posix.c index 422aadbe5..bfcefaee3 100644 --- a/libguile/posix.c +++ b/libguile/posix.c @@ -1329,54 +1329,6 @@ SCM_DEFINE (scm_tmpnam, "tmpnam", 0, 0, 0, #endif -#ifndef HAVE_MKSTEMP -extern int mkstemp (char *); -#endif - -SCM_DEFINE (scm_mkstemp, "mkstemp!", 1, 0, 0, - (SCM tmpl), - "Create a new unique file in the file system and return a new\n" - "buffered port open for reading and writing to the file.\n" - "\n" - "@var{tmpl} is a string specifying where the file should be\n" - "created: it must end with @samp{XXXXXX} and those @samp{X}s\n" - "will be changed in the string to return the name of the file.\n" - "(@code{port-filename} on the port also gives the name.)\n" - "\n" - "POSIX doesn't specify the permissions mode of the file, on GNU\n" - "and most systems it's @code{#o600}. An application can use\n" - "@code{chmod} to relax that if desired. For example\n" - "@code{#o666} less @code{umask}, which is usual for ordinary\n" - "file creation,\n" - "\n" - "@example\n" - "(let ((port (mkstemp! (string-copy \"/tmp/myfile-XXXXXX\"))))\n" - " (chmod port (logand #o666 (lognot (umask))))\n" - " ...)\n" - "@end example") -#define FUNC_NAME s_scm_mkstemp -{ - char *c_tmpl; - int rv; - - scm_dynwind_begin (0); - - c_tmpl = scm_to_locale_string (tmpl); - scm_dynwind_free (c_tmpl); - - SCM_SYSCALL (rv = mkstemp (c_tmpl)); - if (rv == -1) - SCM_SYSERROR; - - scm_substring_move_x (scm_from_locale_string (c_tmpl), - SCM_INUM0, scm_string_length (tmpl), - tmpl, SCM_INUM0); - - scm_dynwind_end (); - return scm_fdes_to_port (rv, "w+", tmpl); -} -#undef FUNC_NAME - SCM_DEFINE (scm_tmpfile, "tmpfile", 0, 0, 0, (void), "Return an input/output port to a unique temporary file\n" @@ -1489,58 +1441,6 @@ SCM_DEFINE (scm_utime, "utime", 1, 5, 0, } #undef FUNC_NAME -SCM_DEFINE (scm_access, "access?", 2, 0, 0, - (SCM path, SCM how), - "Test accessibility of a file under the real UID and GID of the\n" - "calling process. The return is @code{#t} if @var{path} exists\n" - "and the permissions requested by @var{how} are all allowed, or\n" - "@code{#f} if not.\n" - "\n" - "@var{how} is an integer which is one of the following values,\n" - "or a bitwise-OR (@code{logior}) of multiple values.\n" - "\n" - "@defvar R_OK\n" - "Test for read permission.\n" - "@end defvar\n" - "@defvar W_OK\n" - "Test for write permission.\n" - "@end defvar\n" - "@defvar X_OK\n" - "Test for execute permission.\n" - "@end defvar\n" - "@defvar F_OK\n" - "Test for existence of the file. This is implied by each of the\n" - "other tests, so there's no need to combine it with them.\n" - "@end defvar\n" - "\n" - "It's important to note that @code{access?} does not simply\n" - "indicate what will happen on attempting to read or write a\n" - "file. In normal circumstances it does, but in a set-UID or\n" - "set-GID program it doesn't because @code{access?} tests the\n" - "real ID, whereas an open or execute attempt uses the effective\n" - "ID.\n" - "\n" - "A program which will never run set-UID/GID can ignore the\n" - "difference between real and effective IDs, but for maximum\n" - "generality, especially in library functions, it's best not to\n" - "use @code{access?} to predict the result of an open or execute,\n" - "instead simply attempt that and catch any exception.\n" - "\n" - "The main use for @code{access?} is to let a set-UID/GID program\n" - "determine what the invoking user would have been allowed to do,\n" - "without the greater (or perhaps lesser) privileges afforded by\n" - "the effective ID. For more on this, see ``Testing File\n" - "Access'' in The GNU C Library Reference Manual.") -#define FUNC_NAME s_scm_access -{ - int rv; - - WITH_STRING (path, c_path, - rv = access (c_path, scm_to_int (how))); - return scm_from_bool (!rv); -} -#undef FUNC_NAME - SCM_DEFINE (scm_getpid, "getpid", 0, 0, 0, (), "Return an integer representing the current process ID.") @@ -2222,12 +2122,6 @@ scm_init_posix () scm_c_define ("WUNTRACED", scm_from_int (WUNTRACED)); #endif - /* access() symbols. */ - scm_c_define ("R_OK", scm_from_int (R_OK)); - scm_c_define ("W_OK", scm_from_int (W_OK)); - scm_c_define ("X_OK", scm_from_int (X_OK)); - scm_c_define ("F_OK", scm_from_int (F_OK)); - #ifdef LC_COLLATE scm_c_define ("LC_COLLATE", scm_from_int (LC_COLLATE)); #endif |