From: Micah Cowan Date: Fri, 30 May 2008 00:43:26 +0000 (-0700) Subject: Explicitly import quotearg gnulib module. X-Git-Tag: v1.13~421^2~12^2~13 X-Git-Url: http://sjero.net/git/?p=wget;a=commitdiff_plain;h=b55f8bf86cc6add2be92963456e6dba7eafad1e2 Explicitly import quotearg gnulib module. --- diff --git a/lib/Makefile.am b/lib/Makefile.am index 796a645a..210ff7d2 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -9,7 +9,7 @@ # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. -# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --aux-dir=. --no-libtool --macro-prefix=gl alloca c-ctype getopt getpass-gnu maintainer-makefile quote +# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --aux-dir=. --no-libtool --macro-prefix=gl alloca c-ctype getopt getpass-gnu maintainer-makefile quote quotearg AUTOMAKE_OPTIONS = 1.5 gnits @@ -86,6 +86,15 @@ EXTRA_libgnu_a_SOURCES += exitfail.c ## end gnulib module exitfail +## begin gnulib module fseeko + + +EXTRA_DIST += fseeko.c stdio-impl.h + +EXTRA_libgnu_a_SOURCES += fseeko.c + +## end gnulib module fseeko + ## begin gnulib module getdelim @@ -163,6 +172,15 @@ EXTRA_DIST += $(top_srcdir)/./link-warning.h ## end gnulib module link-warning +## begin gnulib module lseek + + +EXTRA_DIST += lseek.c + +EXTRA_libgnu_a_SOURCES += lseek.c + +## end gnulib module lseek + ## begin gnulib module maintainer-makefile EXTRA_DIST += $(top_srcdir)/maint.mk diff --git a/lib/fseeko.c b/lib/fseeko.c new file mode 100644 index 00000000..48ff48e1 --- /dev/null +++ b/lib/fseeko.c @@ -0,0 +1,113 @@ +/* An fseeko() function that, together with fflush(), is POSIX compliant. + Copyright (C) 2007-2008 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 3, 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. */ + +#include + +/* Specification. */ +#include + +/* Get off_t and lseek. */ +#include + +#include "stdio-impl.h" + +#undef fseeko +#if !HAVE_FSEEKO +# undef fseek +# define fseeko fseek +#endif + +int +rpl_fseeko (FILE *fp, off_t offset, int whence) +{ +#if LSEEK_PIPE_BROKEN + /* mingw gives bogus answers rather than failure on non-seekable files. */ + if (lseek (fileno (fp), 0, SEEK_CUR) == -1) + return EOF; +#endif + + /* These tests are based on fpurge.c. */ +#if defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Linux libc5 */ + if (fp->_IO_read_end == fp->_IO_read_ptr + && fp->_IO_write_ptr == fp->_IO_write_base + && fp->_IO_save_base == NULL) +#elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ +# if defined __SL64 && defined __SCLE /* Cygwin */ + if ((fp->_flags & __SL64) == 0) + { + /* Cygwin 1.5.0 through 1.5.24 failed to open stdin in 64-bit + mode; but has an fseeko that requires 64-bit mode. */ + FILE *tmp = fopen ("/dev/null", "r"); + if (!tmp) + return -1; + fp->_flags |= __SL64; + fp->_seek64 = tmp->_seek64; + fclose (tmp); + } +# endif + if (fp_->_p == fp_->_bf._base + && fp_->_r == 0 + && fp_->_w == ((fp_->_flags & (__SLBF | __SNBF | __SRD)) == 0 /* fully buffered and not currently reading? */ + ? fp_->_bf._size + : 0) + && fp_ub._base == NULL) +#elif defined __EMX__ /* emx+gcc */ + if (fp->_ptr == fp->_buffer + && fp->_rcount == 0 + && fp->_wcount == 0 + && fp->_ungetc_count == 0) +#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ + if (fp_->_ptr == fp_->_base + && (fp_->_ptr == NULL || fp_->_cnt == 0)) +#elif defined __UCLIBC__ /* uClibc */ + if (((fp->__modeflags & __FLAG_WRITING) == 0 + || fp->__bufpos == fp->__bufstart) + && ((fp->__modeflags & (__FLAG_READONLY | __FLAG_READING)) == 0 + || fp->__bufpos == fp->__bufread)) +#elif defined __QNX__ /* QNX */ + if ((fp->_Mode & _MWRITE ? fp->_Next == fp->_Buf : fp->_Next == fp->_Rend) + && fp->_Rback == fp->_Back + sizeof (fp->_Back) + && fp->_Rsave == NULL) +#else + #error "Please port gnulib fseeko.c to your platform! Look at the code in fpurge.c, then report this to bug-gnulib." +#endif + { + off_t pos = lseek (fileno (fp), offset, whence); + if (pos == -1) + { +#if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ + fp_->_flags &= ~__SOFF; +#endif + return -1; + } + else + { +#if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ + fp_->_offset = pos; + fp_->_flags |= __SOFF; + fp_->_flags &= ~__SEOF; +#elif defined __EMX__ /* emx+gcc */ + fp->_flags &= ~_IOEOF; +#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ + fp->_flag &= ~_IOEOF; +#endif + return 0; + } + } + else + return fseeko (fp, offset, whence); +} diff --git a/lib/lseek.c b/lib/lseek.c new file mode 100644 index 00000000..f2ed8bb5 --- /dev/null +++ b/lib/lseek.c @@ -0,0 +1,62 @@ +/* An lseek() function that detects pipes. + 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 3, 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. */ + +#include + +/* Specification. */ +#include + +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +/* Windows platforms. */ +/* Get GetFileType. */ +# include +#else +# include +#endif +#include + +#undef lseek + +off_t +rpl_lseek (int fd, off_t offset, int whence) +{ +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + /* mingw lseek mistakenly succeeds on pipes, sockets, and terminals. */ + HANDLE h = (HANDLE) _get_osfhandle (fd); + if (h == INVALID_HANDLE_VALUE) + { + errno = EBADF; + return -1; + } + if (GetFileType (h) != FILE_TYPE_DISK) + { + errno = ESPIPE; + return -1; + } +#else + /* BeOS lseek mistakenly succeeds on pipes... */ + struct stat statbuf; + if (fstat (fd, &statbuf) < 0) + return -1; + if (!S_ISREG (statbuf.st_mode)) + { + errno = ESPIPE; + return -1; + } +#endif + return lseek (fd, offset, whence); +} diff --git a/lib/stdbool.in.h b/lib/stdbool.in.h index 171d70ab..cffa0ab2 100644 --- a/lib/stdbool.in.h +++ b/lib/stdbool.in.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2001, 2002, 2003, 2006, 2007 Free Software Foundation, Inc. +/* Copyright (C) 2001-2003, 2006-2008 Free Software Foundation, Inc. Written by Bruno Haible , 2001. This program is free software; you can redistribute it and/or modify @@ -58,7 +58,7 @@ /* BeOS already #defines false 0, true 1. We use the same definitions below, but temporarily we have to #undef them. */ -#ifdef __BEOS__ +#if defined __BEOS__ && !defined __HAIKU__ # include /* defines bool but not _Bool */ # undef false # undef true @@ -73,7 +73,7 @@ (see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int' (see ISO C 99 6.3.1.1.(2)). So we add a negative value to the enum; this ensures that '_Bool' promotes to 'int'. */ -#if defined __cplusplus || defined __BEOS__ +#if defined __cplusplus || (defined __BEOS__ && !defined __HAIKU__) /* A compiler known to have 'bool'. */ /* If the compiler already has both 'bool' and '_Bool', we can assume they are the same types. */ diff --git a/lib/stdio-impl.h b/lib/stdio-impl.h new file mode 100644 index 00000000..b9572b4f --- /dev/null +++ b/lib/stdio-impl.h @@ -0,0 +1,94 @@ +/* Implementation details of FILE streams. + Copyright (C) 2007-2008 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 3 of the License, 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, see . */ + +/* Many stdio implementations have the same logic and therefore can share + the same implementation of stdio extension API, except that some fields + have different naming conventions, or their access requires some casts. */ + + +/* BSD stdio derived implementations. */ + +#if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ + +# if defined __DragonFly__ /* DragonFly */ + /* See . */ +# define fp_ ((struct { struct __FILE_public pub; \ + struct { unsigned char *_base; int _size; } _bf; \ + void *cookie; \ + void *_close; \ + void *_read; \ + void *_seek; \ + void *_write; \ + struct { unsigned char *_base; int _size; } _ub; \ + int _ur; \ + unsigned char _ubuf[3]; \ + unsigned cahr _nbuf[1]; \ + struct { unsigned char *_base; int _size; } _lb; \ + int _blksize; \ + fpos_t _offset; \ + /* More fields, not relevant here. */ \ + } *) fp) + /* See . */ +# define _p pub._p +# define _flags pub._flags +# define _r pub._r +# define _w pub._w +# else +# define fp_ fp +# endif + +# if defined __NetBSD__ || defined __OpenBSD__ /* NetBSD, OpenBSD */ + /* See + and */ + struct __sfileext + { + struct __sbuf _ub; /* ungetc buffer */ + /* More fields, not relevant here. */ + }; +# define fp_ub ((struct __sfileext *) fp->_ext._base)->_ub +# else /* FreeBSD, DragonFly, MacOS X, Cygwin */ +# define fp_ub fp->_ub +# endif + +# define HASUB(fp) (fp_ub._base != NULL) + +#endif + + +/* SystemV derived implementations. */ + +#if defined _IOERR + +# if defined __sun && defined _LP64 /* Solaris/{SPARC,AMD64} 64-bit */ +# define fp_ ((struct { unsigned char *_ptr; \ + unsigned char *_base; \ + unsigned char *_end; \ + long _cnt; \ + int _file; \ + unsigned int _flag; \ + } *) fp) +# else +# define fp_ fp +# endif + +# if defined _SCO_DS /* OpenServer */ +# define _cnt __cnt +# define _ptr __ptr +# define _base __base +# define _flag __flag +# endif + +#endif diff --git a/lib/xalloc.h b/lib/xalloc.h index 0f6879f0..57a13e0a 100644 --- a/lib/xalloc.h +++ b/lib/xalloc.h @@ -108,7 +108,7 @@ char *xstrdup (char const *str) ATTRIBUTE_MALLOC; void *xnmalloc (size_t n, size_t s) ATTRIBUTE_MALLOC; void *xnrealloc (void *p, size_t n, size_t s); void *x2nrealloc (void *p, size_t *pn, size_t s); - char *xcharalloc (size_t n) ATTRIBUTE_MALLOC;; + char *xcharalloc (size_t n) ATTRIBUTE_MALLOC; # endif # ifdef static_inline diff --git a/m4/fseeko.m4 b/m4/fseeko.m4 new file mode 100644 index 00000000..3d773656 --- /dev/null +++ b/m4/fseeko.m4 @@ -0,0 +1,34 @@ +# fseeko.m4 serial 4 +dnl Copyright (C) 2007-2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_FSEEKO], +[ + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gl_STDIN_LARGE_OFFSET]) + + dnl Persuade glibc to declare fseeko(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_CACHE_CHECK([for fseeko], [gl_cv_func_fseeko], + [ + AC_TRY_LINK([#include ], [fseeko (stdin, 0, 0);], + [gl_cv_func_fseeko=yes], [gl_cv_func_fseeko=no]) + ]) + if test $gl_cv_func_fseeko = no; then + HAVE_FSEEKO=0 + gl_REPLACE_FSEEKO + elif test $gl_cv_var_stdin_large_offset = no; then + gl_REPLACE_FSEEKO + fi +]) + +AC_DEFUN([gl_REPLACE_FSEEKO], +[ + AC_LIBOBJ([fseeko]) + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + REPLACE_FSEEKO=1 +]) diff --git a/m4/gnulib-cache.m4 b/m4/gnulib-cache.m4 index ba4a7d8d..508da7f1 100644 --- a/m4/gnulib-cache.m4 +++ b/m4/gnulib-cache.m4 @@ -15,11 +15,11 @@ # Specification in the form of a command-line invocation: -# gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --aux-dir=. --no-libtool --macro-prefix=gl alloca c-ctype getopt getpass-gnu maintainer-makefile quote +# gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --aux-dir=. --no-libtool --macro-prefix=gl alloca c-ctype getopt getpass-gnu maintainer-makefile quote quotearg # Specification in the form of a few gnulib-tool.m4 macro invocations: gl_LOCAL_DIR([]) -gl_MODULES([alloca c-ctype getopt getpass-gnu maintainer-makefile quote]) +gl_MODULES([alloca c-ctype getopt getpass-gnu maintainer-makefile quote quotearg]) gl_AVOID([]) gl_SOURCE_BASE([lib]) gl_M4_BASE([m4]) diff --git a/m4/gnulib-comp.m4 b/m4/gnulib-comp.m4 index 5cd73ad0..9fce2e41 100644 --- a/m4/gnulib-comp.m4 +++ b/m4/gnulib-comp.m4 @@ -26,6 +26,7 @@ AC_DEFUN([gl_EARLY], m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable AC_REQUIRE([AC_PROG_RANLIB]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + AC_REQUIRE([AC_FUNC_FSEEKO]) ]) # This macro should be invoked from ./configure.ac, in the section @@ -50,6 +51,8 @@ AC_DEFUN([gl_INIT], [AM_XGETTEXT_OPTION([--flag=error:3:c-format]) AM_XGETTEXT_OPTION([--flag=error_at_line:5:c-format])]) gl_EXITFAIL + gl_FUNC_FSEEKO + gl_STDIO_MODULE_INDICATOR([fseeko]) gl_FUNC_GETDELIM gl_STDIO_MODULE_INDICATOR([getdelim]) gl_FUNC_GETLINE @@ -69,6 +72,8 @@ AC_DEFUN([gl_INIT], [AC_CONFIG_LINKS([$GNUmakefile:$GNUmakefile], [], [GNUmakefile=$GNUmakefile])]) gl_INLINE + gl_FUNC_LSEEK + gl_UNISTD_MODULE_INDICATOR([lseek]) gl_QUOTE gl_QUOTEARG gl_FUNC_REALLOC_POSIX @@ -224,6 +229,7 @@ AC_DEFUN([gl_FILE_LIST], [ lib/error.h lib/exitfail.c lib/exitfail.h + lib/fseeko.c lib/getdelim.c lib/getline.c lib/getopt.c @@ -234,12 +240,14 @@ AC_DEFUN([gl_FILE_LIST], [ lib/getpass.h lib/gettext.h lib/intprops.h + lib/lseek.c lib/quote.c lib/quote.h lib/quotearg.c lib/quotearg.h lib/realloc.c lib/stdbool.in.h + lib/stdio-impl.h lib/stdio.in.h lib/stdlib.in.h lib/strerror.c @@ -255,6 +263,7 @@ AC_DEFUN([gl_FILE_LIST], [ m4/error.m4 m4/exitfail.m4 m4/extensions.m4 + m4/fseeko.m4 m4/getdelim.m4 m4/getline.m4 m4/getopt.m4 @@ -262,6 +271,7 @@ AC_DEFUN([gl_FILE_LIST], [ m4/gnulib-common.m4 m4/include_next.m4 m4/inline.m4 + m4/lseek.m4 m4/malloc.m4 m4/mbrtowc.m4 m4/mbstate_t.m4 diff --git a/m4/lseek.m4 b/m4/lseek.m4 new file mode 100644 index 00000000..f3369907 --- /dev/null +++ b/m4/lseek.m4 @@ -0,0 +1,50 @@ +# lseek.m4 serial 4 +dnl Copyright (C) 2007 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_LSEEK], +[ + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + AC_REQUIRE([AC_PROG_CC]) + AC_CACHE_CHECK([whether lseek detects pipes], [gl_cv_func_lseek_pipe], + [if test $cross_compiling = no; then + AC_LINK_IFELSE([ +#include /* for off_t */ +#include /* for SEEK_CUR */ +#include +int main () +{ + /* Exit with success only if stdin is seekable. */ + return lseek (0, (off_t)0, SEEK_CUR) < 0; +}], + [if test -s conftest$ac_exeext \ + && ./conftest$ac_exeext < conftest.$ac_ext \ + && { echo hi | ./conftest$ac_exeext; test $? = 1; }; then + gl_cv_func_lseek_pipe=yes + else + gl_cv_func_lseek_pipe=no + fi], + [gl_cv_func_lseek_pipe=no]) + else + AC_COMPILE_IFELSE([ +#if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) || defined __BEOS__ +/* mingw and BeOS mistakenly return 0 when trying to seek on pipes. */ + Choke me. +#endif], + [gl_cv_func_lseek_pipe=yes], [gl_cv_func_lseek_pipe=no]) + fi]) + if test $gl_cv_func_lseek_pipe = no; then + gl_REPLACE_LSEEK + fi +]) + +AC_DEFUN([gl_REPLACE_LSEEK], +[ + AC_LIBOBJ([lseek]) + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + REPLACE_LSEEK=1 + AC_DEFINE([LSEEK_PIPE_BROKEN], [1], + [Define to 1 if lseek does not detect pipes.]) +]) diff --git a/maint.mk b/maint.mk index 662b3717..4d74e19e 100644 --- a/maint.mk +++ b/maint.mk @@ -20,7 +20,7 @@ ME := maint.mk # List of all C-like source code files that will be tested for -# stylistic "errors". You may want to define this to something +# stylistic "errors". You may want to define this to something # more complex in Makefile.cfg. C_SOURCES ?= $(shell find . -name '*.[chly]')