From: Eric Blake Date: Fri, 27 Oct 2006 13:51:23 +0000 (+0000) Subject: * MODULES.html.sh: Document tempname. X-Git-Tag: cvs-readonly~1643 X-Git-Url: http://erislabs.org.uk/gitweb/?a=commitdiff_plain;h=a8753bfd5b8e2d2d440febce6355fc719eb469b4;p=gnulib.git * MODULES.html.sh: Document tempname. * modules/mkstemp (Depends-on): Add tempname, and drop transitive dependencies. (Files): Move lib/tempname.c... * modules/tempname: ...to this new module. * m4/mkstemp.m4 (gl_FUNC_MKSTEMP): Remove tempname checks. (gl_PREREQ_TEMPNAME): Move... * m4/tempname.m4: ...to this new file. * lib/mkstemp.c (includes) [!_LIBC]: Use tempname.h. * modules/sys_stat (Depends-on): Add stat-macros. * lib/stat_.h (includes): Pick up stat macros. * m4/sys_stat_h.m4 (gl_HEADER_SYS_STAT_H): Replace if stat macros are broken. * lib/tempname.c (includes): No need to include "stat-macros.h". (__gen_tempname) [!_LIBC]: Expose as gen_tempname. (direxists, __path_search) [!_LIBC]: Don't compile these in gnulib; the tmpdir module covers that. * lib/tempname.h: New file. --- diff --git a/ChangeLog b/ChangeLog index eac3f3aca..9e372d403 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,24 @@ +2006-10-27 Eric Blake + + * MODULES.html.sh: Document tempname. + * modules/mkstemp (Depends-on): Add tempname, and drop transitive + dependencies. + (Files): Move lib/tempname.c... + * modules/tempname: ...to this new module. + * m4/mkstemp.m4 (gl_FUNC_MKSTEMP): Remove tempname checks. + (gl_PREREQ_TEMPNAME): Move... + * m4/tempname.m4: ...to this new file. + * lib/mkstemp.c (includes) [!_LIBC]: Use tempname.h. + * modules/sys_stat (Depends-on): Add stat-macros. + * lib/stat_.h (includes): Pick up stat macros. + * m4/sys_stat_h.m4 (gl_HEADER_SYS_STAT_H): Replace + if stat macros are broken. + * lib/tempname.c (includes): No need to include "stat-macros.h". + (__gen_tempname) [!_LIBC]: Expose as gen_tempname. + (direxists, __path_search) [!_LIBC]: Don't compile these in + gnulib; the tmpdir module covers that. + * lib/tempname.h: New file. + 2006-10-26 Paul Eggert * COPYING: Explain how gnulib-tool converts licence headers. diff --git a/MODULES.html.sh b/MODULES.html.sh index 9b3f33324..b10ae1cd8 100755 --- a/MODULES.html.sh +++ b/MODULES.html.sh @@ -1848,11 +1848,12 @@ func_all_modules () func_module inet_ntop func_module inet_pton func_module mkdir - func_module mkstemp func_module mkdtemp + func_module mkstemp func_module poll func_module readlink func_module lstat + func_module tempname func_module time_r func_module timespec func_module nanosleep diff --git a/lib/mkstemp.c b/lib/mkstemp.c index eabee0c11..34c9e474c 100644 --- a/lib/mkstemp.c +++ b/lib/mkstemp.c @@ -18,7 +18,9 @@ #if !_LIBC # include # include "mkstemp.h" -int __gen_tempname (); +# include "tempname.h" +# define __gen_tempname gen_tempname +# define __GT_FILE GT_FILE #endif #include diff --git a/lib/stat_.h b/lib/stat_.h index 8c2e552f1..f646dbb82 100644 --- a/lib/stat_.h +++ b/lib/stat_.h @@ -1,4 +1,4 @@ -/* Provide a complete sys/stat header file. +/* Provide a more complete sys/stat header file. Copyright (C) 2006 Free Software Foundation, Inc. Written by Eric Blake. @@ -24,6 +24,8 @@ needed by an application. Start with what the system provides. */ #include @ABSOLUTE_SYS_STAT_H@ +#include "stat-macros.h" + /* mingw does not support symlinks, therefore it does not have lstat. But without links, stat does just fine. */ #if ! HAVE_LSTAT diff --git a/lib/tempname.c b/lib/tempname.c index 6fef5e9a1..fd31acc44 100644 --- a/lib/tempname.c +++ b/lib/tempname.c @@ -17,8 +17,11 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ +/* Extracted from glibc sysdeps/posix/tempname.c. See also tmpdir.c. */ + #if !_LIBC # include +# include "tempname.h" #endif #include @@ -63,10 +66,10 @@ # define small_open __open # define large_open __open64 #else -# include "stat-macros.h" # define struct_stat64 struct stat # define small_open open # define large_open open +# define __gen_tempname gen_tempname # define __getpid getpid # define __gettimeofday gettimeofday # define __mkdir mkdir @@ -106,6 +109,7 @@ # define uint64_t uintmax_t #endif +#if _LIBC /* Return nonzero if DIR is an existent directory. */ static int direxists (const char *dir) @@ -176,6 +180,7 @@ __path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx, sprintf (tmpl, "%.*s/%.*sXXXXXX", (int) dlen, dir, (int) plen, pfx); return 0; } +#endif /* _LIBC */ /* These are the characters used in temporary file names. */ static const char letters[] = @@ -195,6 +200,7 @@ static const char letters[] = __GT_DIR: create a directory, which will be mode 0700. We use a clever algorithm to get hard-to-predict names. */ +#if _LIBC || !HAVE___GEN_TEMPNAME int __gen_tempname (char *tmpl, int kind) { @@ -315,3 +321,15 @@ __gen_tempname (char *tmpl, int kind) __set_errno (EEXIST); return -1; } + +#else /* !_LIBC && HAVE___GEN_TEMPNAME */ + +# undef __gen_tempname +extern int __gen_tempname (char *, int); +int +gen_tempname (char *tmpl, int kind) +{ + return __gen_tempname (tmpl, kind); +} + +#endif /* !_LIBC && HAVE___GEN_TEMPNAME */ diff --git a/lib/tempname.h b/lib/tempname.h new file mode 100644 index 000000000..c51fa6942 --- /dev/null +++ b/lib/tempname.h @@ -0,0 +1,40 @@ +/* Create a temporary file or directory. + + Copyright (C) 2006 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 Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* header written by Eric Blake */ + +/* In gnulib, always prefer large files. GT_FILE maps to + __GT_BIGFILE, not __GT_FILE, for a reason. */ +#define GT_FILE 1 +#define GT_DIR 2 +#define GT_NOCREATE 3 + +/* Generate a temporary file name based on TMPL. TMPL must match the + rules for mk[s]temp (i.e. end in "XXXXXX"). The name constructed + does not exist at the time of the call to gen_tempname. TMPL is + overwritten with the result. + + KIND may be one of: + GT_NOCREATE: simply verify that the name does not exist + at the time of the call. + GT_FILE: create a large file using open(O_CREAT|O_EXCL) + and return a read-write fd. The file is mode 0600. + GT_DIR: create a directory, which will be mode 0700. + + We use a clever algorithm to get hard-to-predict names. */ +extern int gen_tempname (char *tmpl, int kind); diff --git a/m4/mkstemp.m4 b/m4/mkstemp.m4 index e58fdf82a..27367cb70 100644 --- a/m4/mkstemp.m4 +++ b/m4/mkstemp.m4 @@ -1,4 +1,4 @@ -#serial 14 +#serial 15 # Copyright (C) 2001, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation @@ -45,10 +45,8 @@ AC_DEFUN([gl_FUNC_MKSTEMP], if test $gl_cv_func_working_mkstemp != yes; then AC_DEFINE([__MKSTEMP_PREFIX], [[rpl_]], [Define to rpl_ if the mkstemp replacement function should be used.]) - AC_LIBOBJ(mkstemp) - AC_LIBOBJ(tempname) + AC_LIBOBJ([mkstemp]) gl_PREREQ_MKSTEMP - gl_PREREQ_TEMPNAME fi ]) @@ -56,10 +54,3 @@ AC_DEFUN([gl_FUNC_MKSTEMP], AC_DEFUN([gl_PREREQ_MKSTEMP], [ ]) - -# Prerequisites of lib/tempname.c. -AC_DEFUN([gl_PREREQ_TEMPNAME], -[ - AC_CHECK_HEADERS_ONCE(sys/time.h) - AC_CHECK_FUNCS(__secure_getenv gettimeofday) -]) diff --git a/m4/sys_stat_h.m4 b/m4/sys_stat_h.m4 index c432ac254..bf9bb9544 100644 --- a/m4/sys_stat_h.m4 +++ b/m4/sys_stat_h.m4 @@ -17,8 +17,12 @@ AC_DEFUN([gl_HEADER_SYS_STAT_H], dnl instead. AC_CHECK_DECLS([mkdir], [], [], [#include ]) + dnl Check for broken stat macros. + AC_REQUIRE([AC_HEADER_STAT]) + SYS_STAT_H= - if test $ac_cv_func_lstat:$ac_cv_have_decl_mkdir != yes:yes ; then + if test $ac_cv_func_lstat:$ac_cv_have_decl_mkdir:$ac_cv_header_stat_broken \ + != yes:yes:no ; then gl_ABSOLUTE_HEADER([sys/stat.h]) ABSOLUTE_SYS_STAT_H=\"$gl_cv_absolute_sys_stat_h\" AC_CHECK_HEADERS([io.h]) diff --git a/m4/tempname.m4 b/m4/tempname.m4 new file mode 100644 index 000000000..cd0e442a4 --- /dev/null +++ b/m4/tempname.m4 @@ -0,0 +1,24 @@ +#serial 1 + +# Copyright (C) 2006 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. + +# glibc provides __gen_tempname as a wrapper for mk[ds]temp. Expose +# it as a public API, and provide it on systems that are lacking. +AC_DEFUN([gl_FUNC_GEN_TEMPNAME], +[ + AC_REQUIRE([AC_SYS_LARGEFILE]) + AC_CHECK_FUNCS_ONCE([__gen_tempname]) + + AC_LIBOBJ([tempname]) + gl_PREREQ_TEMPNAME +]) + +# Prerequisites of lib/tempname.c. +AC_DEFUN([gl_PREREQ_TEMPNAME], +[ + AC_CHECK_HEADERS_ONCE([sys/time.h]) + AC_CHECK_FUNCS_ONCE([gettimeofday]) +]) diff --git a/modules/mkstemp b/modules/mkstemp index 7d0173521..dc77562e7 100644 --- a/modules/mkstemp +++ b/modules/mkstemp @@ -4,14 +4,11 @@ mkstemp() function: create a private temporary file. Files: lib/mkstemp.h lib/mkstemp.c -lib/tempname.c m4/mkstemp.m4 Depends-on: extensions -stat-macros -stdint -sys_stat +tempname configure.ac: gl_FUNC_MKSTEMP diff --git a/modules/sys_stat b/modules/sys_stat index 3b8839f91..9dbb90093 100644 --- a/modules/sys_stat +++ b/modules/sys_stat @@ -7,6 +7,7 @@ m4/absolute-header.m4 m4/sys_stat_h.m4 Depends-on: +stat-macros configure.ac: gl_HEADER_SYS_STAT_H diff --git a/modules/tempname b/modules/tempname new file mode 100644 index 000000000..a94f56848 --- /dev/null +++ b/modules/tempname @@ -0,0 +1,26 @@ +Description: +gen_tempname() function: create a private temporary file or directory. + +Files: +lib/tempname.c +lib/tempname.h +m4/tempname.m4 + +Depends-on: +extensions +stdint +sys_stat + +configure.ac: +gl_FUNC_GEN_TEMPNAME + +Makefile.am: + +Include: +"tempname.h" + +License: +GPL + +Maintainer: +Eric Blake and Jim Meyering