Mercurial > hg > octave-kai > gnulib-hg
changeset 8504:24420da38757
* MODULES.html.sh (File system functions): New module write-any-file.
* modules/write-any-file, lib/write-any-file.c, lib/write-any-file.h:
* m4/write-any-file.m4: New files.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Fri, 23 Mar 2007 17:33:07 +0000 |
parents | 7c0e7f4f1ac1 |
children | 1166975a7fe6 |
files | ChangeLog MODULES.html.sh lib/write-any-file.c lib/write-any-file.h m4/write-any-file.m4 modules/write-any-file |
diffstat | 6 files changed, 107 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2007-03-23 Paul Eggert <eggert@cs.ucla.edu> + + * MODULES.html.sh (File system functions): New module write-any-file. + * modules/write-any-file, lib/write-any-file.c, lib/write-any-file.h: + * m4/write-any-file.m4: New files. + 2007-03-23 Eric Blake <ebb9@byu.net> * gnulib-tool: Rearrange space-tab sequences, since some editors
--- a/MODULES.html.sh +++ b/MODULES.html.sh @@ -2072,6 +2072,7 @@ func_module unlinkdir func_module utimecmp func_module utimens + func_module write-any-file func_module xgetcwd func_module xreadlink func_module xreadlink-with-size
new file mode 100644 --- /dev/null +++ b/lib/write-any-file.c @@ -0,0 +1,59 @@ +/* Determine whether we can write any file. + + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Written by Paul Eggert. */ + +#include <config.h> + +#include "write-any-file.h" + +#if HAVE_PRIV_H +# include <priv.h> +#endif +#include <unistd.h> + +/* Return true if we know that we can write any file, including + writing directories. */ + +bool +can_write_any_file (void) +{ + static bool initialized; + static bool can; + + if (! initialized) + { +#if defined PRIV_EFFECTIVE && defined PRIV_FILE_DAC_WRITE + priv_set_t *pset = priv_allocset (); + if (pset) + { + can = + (getppriv (PRIV_EFFECTIVE, pset) == 0 + && priv_ismember (pset, PRIV_FILE_DAC_WRITE)); + priv_freeset (pset); + } + else +#else + /* In traditional Unix, only root can unlink directories. */ + can = (geteuid () == 0); +#endif + initialized = true; + } + + return can; +}
new file mode 100644 --- /dev/null +++ b/lib/write-any-file.h @@ -0,0 +1,2 @@ +#include <stdbool.h> +bool can_write_any_file (void);
new file mode 100644 --- /dev/null +++ b/m4/write-any-file.m4 @@ -0,0 +1,15 @@ +# Determine whether we can write any file. + +# Copyright (C) 2007 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Written by Paul Eggert. + +AC_DEFUN([gl_WRITE_ANY_FILE], +[ + AC_CHECK_HEADERS_ONCE(priv.h) + AC_LIBOBJ([write-any-file]) +])
new file mode 100644 --- /dev/null +++ b/modules/write-any-file @@ -0,0 +1,24 @@ +Description: +Determine whether we can write any file. + +Files: +lib/write-any-file.h +lib/write-any-file.c +m4/write-any-file.m4 + +Depends-on: +stdbool + +configure.ac: +gl_WRITE_ANY_FILE + +Makefile.am: + +Include: +"write-any-file.h" + +License: +GPL + +Maintainer: +Paul Eggert, Jim Meyering