diff options
author | Igor Pashev <pashev.igor@gmail.com> | 2013-07-01 17:38:06 +0400 |
---|---|---|
committer | Igor Pashev <pashev.igor@gmail.com> | 2013-07-10 16:00:55 +0400 |
commit | d1e644e59ee5eb679a7118b35a055e1249d250e2 (patch) | |
tree | dd2af38e1db50e2c31553352ae379a85792209b3 | |
parent | 5e147cf09fe97d9488571e222f54e6ed5b7846ba (diff) | |
download | dctrl-tools-d1e644e59ee5eb679a7118b35a055e1249d250e2.tar.gz |
Added gnulib (argp)
175 files changed, 57614 insertions, 7 deletions
diff --git a/Makefile.am b/Makefile.am index 50bc43e..7c42824 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,6 +1,6 @@ -SUBDIRS = po . +SUBDIRS = gnulib/lib gnulib/po po . -ACLOCAL_AMFLAGS = -I m4 +ACLOCAL_AMFLAGS = -I m4 -I gnulib/m4 noinst_LTLIBRARIES = lib/libdctrl.la @@ -12,7 +12,9 @@ bin_PROGRAMS = \ sbin_SCRIPTS = sync-available/sync-available -AM_CPPFLAGS = -I$(top_srcdir)/lib \ +AM_CPPFLAGS = \ +-I$(top_srcdir)/lib \ +-I$(top_srcdir)/gnulib/lib \ -DSYSCONF=\"$(sysconfdir)\" \ -DLOCALEDIR=\"$(localedir)\" \ -DMAINTAINER=\"$(PACKAGE_BUGREPORT)\" @@ -20,16 +22,16 @@ AM_CPPFLAGS = -I$(top_srcdir)/lib \ AM_CFLAGS = $(WERROR) grep_dctrl_grep_dctrl_SOURCES = grep-dctrl/grep-dctrl.c -grep_dctrl_grep_dctrl_LDADD = lib/libdctrl.la +grep_dctrl_grep_dctrl_LDADD = lib/libdctrl.la -Lgnulib/lib/ -lgnu sort_dctrl_sort_dctrl_SOURCES = sort-dctrl/sort-dctrl.c -sort_dctrl_sort_dctrl_LDADD = lib/libdctrl.la +sort_dctrl_sort_dctrl_LDADD = lib/libdctrl.la -Lgnulib/lib/ -lgnu tbl_dctrl_tbl_dctrl_SOURCES = tbl-dctrl/tbl-dctrl.c -tbl_dctrl_tbl_dctrl_LDADD = lib/libdctrl.la +tbl_dctrl_tbl_dctrl_LDADD = lib/libdctrl.la -Lgnulib/lib/ -lgnu join_dctrl_join_dctrl_SOURCES = join-dctrl/join-dctrl.c -join_dctrl_join_dctrl_LDADD = lib/libdctrl.la +join_dctrl_join_dctrl_LDADD = lib/libdctrl.la -Lgnulib/lib/ -lgnu lib_libdctrl_la_SOURCES = \ lib/align.h \ diff --git a/configure.ac b/configure.ac index 9715107..17a9021 100644 --- a/configure.ac +++ b/configure.ac @@ -6,8 +6,10 @@ AM_INIT_AUTOMAKE([foreign subdir-objects dist-bzip2]) m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES]) AC_PROG_CC_C99 +gl_EARLY AC_USE_SYSTEM_EXTENSIONS LT_INIT +gl_INIT AC_CHECK_PROG([PO4A],[po4a],[po4a],[no]) AM_CONDITIONAL([HAVE_PO4A], [test "x$PO4A" != "xno"]) @@ -27,9 +29,12 @@ AS_IF([test "x$enable_werror" != "xno"], [ AC_SUBST([GREP_ALIASES], ["grep-status grep-available grep-aptavail grep-debtags"]) +AC_CONFIG_HEADER([config.h]) AC_CONFIG_FILES([ Makefile po/Makefile.in + gnulib/lib/Makefile + gnulib/po/Makefile.in sync-available/sync-available ]) diff --git a/gnulib/aux/snippet/_Noreturn.h b/gnulib/aux/snippet/_Noreturn.h new file mode 100644 index 0000000..1a7b4da --- /dev/null +++ b/gnulib/aux/snippet/_Noreturn.h @@ -0,0 +1,10 @@ +#ifndef _Noreturn +# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \ + || 0x5110 <= __SUNPRO_C) +# define _Noreturn __attribute__ ((__noreturn__)) +# elif 1200 <= _MSC_VER +# define _Noreturn __declspec (noreturn) +# else +# define _Noreturn +# endif +#endif diff --git a/gnulib/aux/snippet/arg-nonnull.h b/gnulib/aux/snippet/arg-nonnull.h new file mode 100644 index 0000000..3a9dd26 --- /dev/null +++ b/gnulib/aux/snippet/arg-nonnull.h @@ -0,0 +1,26 @@ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2012 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 <http://www.gnu.org/licenses/>. */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif diff --git a/gnulib/aux/snippet/c++defs.h b/gnulib/aux/snippet/c++defs.h new file mode 100644 index 0000000..96da94b --- /dev/null +++ b/gnulib/aux/snippet/c++defs.h @@ -0,0 +1,271 @@ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2012 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 <http://www.gnu.org/licenses/>. */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + rettype (*const func) parameters = ::rpl_func; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + rettype (*const func) parameters = \ + reinterpret_cast<rettype(*)parameters>(::rpl_func); \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* If we were to write + rettype (*const func) parameters = ::func; + like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls + better (remove an indirection through a 'static' pointer variable), + but then the _GL_CXXALIASWARN macro below would cause a warning not only + for uses of ::func but also for uses of GNULIB_NAMESPACE::func. */ +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static rettype (*func) parameters = ::func; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static rettype (*func) parameters = \ + reinterpret_cast<rettype(*)parameters>(::func); \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static rettype (*func) parameters = \ + reinterpret_cast<rettype(*)parameters>( \ + (rettype2(*)parameters2)(::func)); \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ diff --git a/gnulib/aux/snippet/warn-on-use.h b/gnulib/aux/snippet/warn-on-use.h new file mode 100644 index 0000000..d4cb94f --- /dev/null +++ b/gnulib/aux/snippet/warn-on-use.h @@ -0,0 +1,109 @@ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2012 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 <http://www.gnu.org/licenses/>. */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + This macro is useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. However, one of the reasons that a function is a + portability trap is if it has the wrong signature. Declaring + FUNCTION with a different signature in C is a compilation error, so + this macro must use the same type as any existing declaration so + that programs that avoid the problematic FUNCTION do not fail to + compile merely because they included a header that poisoned the + function. But this implies that _GL_WARN_ON_USE is only safe to + use if FUNCTION is known to already have a declaration. Use of + this macro implies that there must not be any other macro hiding + the declaration of FUNCTION; but undefining FUNCTION first is part + of the poisoning process anyway (although for symbols that are + provided only via a macro, the result is a compilation error rather + than a warning containing "literal string"). Also note that in + C++, it is only safe to use if FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system <stdio.h>: + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static inline char ***rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function __attribute__ ((__warning__ (message))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") + is like _GL_WARN_ON_USE (function, "string"), except that the function is + declared with the given prototype, consisting of return type, parameters, + and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif diff --git a/gnulib/lib/Makefile.am b/gnulib/lib/Makefile.am new file mode 100644 index 0000000..ad25445 --- /dev/null +++ b/gnulib/lib/Makefile.am @@ -0,0 +1,1257 @@ +## DO NOT EDIT! GENERATED AUTOMATICALLY! +## Process this file with automake to produce Makefile.in. +# Copyright (C) 2002-2012 Free Software Foundation, Inc. +# +# This file 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 file 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 file. If not, see <http://www.gnu.org/licenses/>. +# +# As a special exception to the GNU General Public License, +# this file may be distributed as part of a program that +# contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# Generated by gnulib-tool. +# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=gnulib/lib --m4-base=gnulib/m4 --po-base=gnulib/po --doc-base=gnulib/doc --tests-base=gnulib/tests --aux-dir=gnulib/aux --no-conditional-dependencies --no-libtool --macro-prefix=gl --po-domain=dctrl-tools --no-vc-files argp + +AUTOMAKE_OPTIONS = 1.5 gnits + +SUBDIRS = +noinst_HEADERS = +noinst_LIBRARIES = +noinst_LTLIBRARIES = +EXTRA_DIST = +BUILT_SOURCES = +SUFFIXES = +MOSTLYCLEANFILES = core *.stackdump +MOSTLYCLEANDIRS = +CLEANFILES = +DISTCLEANFILES = +MAINTAINERCLEANFILES = + +AM_CPPFLAGS = +AM_CFLAGS = + +noinst_LIBRARIES += libgnu.a + +libgnu_a_SOURCES = +libgnu_a_LIBADD = $(gl_LIBOBJS) +libgnu_a_DEPENDENCIES = $(gl_LIBOBJS) +EXTRA_libgnu_a_SOURCES = + +AM_CPPFLAGS += -DDEFAULT_TEXT_DOMAIN=\"dctrl-tools-gnulib\" + +## begin gnulib module alloca + + +libgnu_a_LIBADD += @ALLOCA@ +libgnu_a_DEPENDENCIES += @ALLOCA@ +EXTRA_DIST += alloca.c + +EXTRA_libgnu_a_SOURCES += alloca.c + +## end gnulib module alloca + +## begin gnulib module alloca-opt + +BUILT_SOURCES += $(ALLOCA_H) + +# We need the following in order to create <alloca.h> when the system +# doesn't have one that works with the given compiler. +if GL_GENERATE_ALLOCA_H +alloca.h: alloca.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + cat $(srcdir)/alloca.in.h; \ + } > $@-t && \ + mv -f $@-t $@ +else +alloca.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += alloca.h alloca.h-t + +EXTRA_DIST += alloca.in.h + +## end gnulib module alloca-opt + +## begin gnulib module argp + +libgnu_a_SOURCES += argp.h argp-ba.c argp-eexst.c \ + argp-fmtstream.c argp-fmtstream.h argp-fs-xinl.c argp-help.c \ + argp-namefrob.h argp-parse.c argp-pin.c argp-pv.c argp-pvh.c \ + argp-xinl.c + +## end gnulib module argp + +## begin gnulib module dirname-lgpl + +libgnu_a_SOURCES += dirname-lgpl.c basename-lgpl.c stripslash.c + +EXTRA_DIST += dirname.h + +## end gnulib module dirname-lgpl + +## begin gnulib module dosname + + +EXTRA_DIST += dosname.h + +## end gnulib module dosname + +## begin gnulib module errno + +BUILT_SOURCES += $(ERRNO_H) + +# We need the following in order to create <errno.h> when the system +# doesn't have one that is POSIX compliant. +if GL_GENERATE_ERRNO_H +errno.h: errno.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ + -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ + -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ + -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ + -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ + -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ + -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ + < $(srcdir)/errno.in.h; \ + } > $@-t && \ + mv $@-t $@ +else +errno.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += errno.h errno.h-t + +EXTRA_DIST += errno.in.h + +## end gnulib module errno + +## begin gnulib module float + +BUILT_SOURCES += $(FLOAT_H) + +# We need the following in order to create <float.h> when the system +# doesn't have one that works with the given compiler. +if GL_GENERATE_FLOAT_H +float.h: float.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \ + -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \ + < $(srcdir)/float.in.h; \ + } > $@-t && \ + mv $@-t $@ +else +float.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += float.h float.h-t + +EXTRA_DIST += float.c float.in.h itold.c + +EXTRA_libgnu_a_SOURCES += float.c itold.c + +## end gnulib module float + +## begin gnulib module getopt-posix + +BUILT_SOURCES += $(GETOPT_H) + +# We need the following in order to create <getopt.h> when the system +# doesn't have one that works with the given compiler. +getopt.h: getopt.in.h $(top_builddir)/config.status $(ARG_NONNULL_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + < $(srcdir)/getopt.in.h; \ + } > $@-t && \ + mv -f $@-t $@ +MOSTLYCLEANFILES += getopt.h getopt.h-t + +EXTRA_DIST += getopt.c getopt.in.h getopt1.c getopt_int.h + +EXTRA_libgnu_a_SOURCES += getopt.c getopt1.c + +## end gnulib module getopt-posix + +## begin gnulib module gettext-h + +libgnu_a_SOURCES += gettext.h + +## end gnulib module gettext-h + +## begin gnulib module intprops + + +EXTRA_DIST += intprops.h + +## end gnulib module intprops + +## begin gnulib module malloc-gnu + + +EXTRA_DIST += malloc.c + +EXTRA_libgnu_a_SOURCES += malloc.c + +## end gnulib module malloc-gnu + +## begin gnulib module malloc-posix + + +EXTRA_DIST += malloc.c + +EXTRA_libgnu_a_SOURCES += malloc.c + +## end gnulib module malloc-posix + +## begin gnulib module memchr + + +EXTRA_DIST += memchr.c memchr.valgrind + +EXTRA_libgnu_a_SOURCES += memchr.c + +## end gnulib module memchr + +## begin gnulib module mempcpy + + +EXTRA_DIST += mempcpy.c + +EXTRA_libgnu_a_SOURCES += mempcpy.c + +## end gnulib module mempcpy + +## begin gnulib module rawmemchr + + +EXTRA_DIST += rawmemchr.c rawmemchr.valgrind + +EXTRA_libgnu_a_SOURCES += rawmemchr.c + +## end gnulib module rawmemchr + +## begin gnulib module size_max + +libgnu_a_SOURCES += size_max.h + +## end gnulib module size_max + +## begin gnulib module sleep + + +EXTRA_DIST += sleep.c + +EXTRA_libgnu_a_SOURCES += sleep.c + +## end gnulib module sleep + +## begin gnulib module snippet/_Noreturn + +# Because this Makefile snippet defines a variable used by other +# gnulib Makefile snippets, it must be present in all Makefile.am that +# need it. This is ensured by the applicability 'all' defined above. + +_NORETURN_H=$(top_srcdir)/gnulib/aux/snippet/_Noreturn.h + +EXTRA_DIST += $(top_srcdir)/gnulib/aux/snippet/_Noreturn.h + +## end gnulib module snippet/_Noreturn + +## begin gnulib module snippet/arg-nonnull + +# The BUILT_SOURCES created by this Makefile snippet are not used via #include +# statements but through direct file reference. Therefore this snippet must be +# present in all Makefile.am that need it. This is ensured by the applicability +# 'all' defined above. + +BUILT_SOURCES += arg-nonnull.h +# The arg-nonnull.h that gets inserted into generated .h files is the same as +# build-aux/snippet/arg-nonnull.h, except that it has the copyright header cut +# off. +arg-nonnull.h: $(top_srcdir)/gnulib/aux/snippet/arg-nonnull.h + $(AM_V_GEN)rm -f $@-t $@ && \ + sed -n -e '/GL_ARG_NONNULL/,$$p' \ + < $(top_srcdir)/gnulib/aux/snippet/arg-nonnull.h \ + > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += arg-nonnull.h arg-nonnull.h-t + +ARG_NONNULL_H=arg-nonnull.h + +EXTRA_DIST += $(top_srcdir)/gnulib/aux/snippet/arg-nonnull.h + +## end gnulib module snippet/arg-nonnull + +## begin gnulib module snippet/c++defs + +# The BUILT_SOURCES created by this Makefile snippet are not used via #include +# statements but through direct file reference. Therefore this snippet must be +# present in all Makefile.am that need it. This is ensured by the applicability +# 'all' defined above. + +BUILT_SOURCES += c++defs.h +# The c++defs.h that gets inserted into generated .h files is the same as +# build-aux/snippet/c++defs.h, except that it has the copyright header cut off. +c++defs.h: $(top_srcdir)/gnulib/aux/snippet/c++defs.h + $(AM_V_GEN)rm -f $@-t $@ && \ + sed -n -e '/_GL_CXXDEFS/,$$p' \ + < $(top_srcdir)/gnulib/aux/snippet/c++defs.h \ + > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += c++defs.h c++defs.h-t + +CXXDEFS_H=c++defs.h + +EXTRA_DIST += $(top_srcdir)/gnulib/aux/snippet/c++defs.h + +## end gnulib module snippet/c++defs + +## begin gnulib module snippet/warn-on-use + +BUILT_SOURCES += warn-on-use.h +# The warn-on-use.h that gets inserted into generated .h files is the same as +# build-aux/snippet/warn-on-use.h, except that it has the copyright header cut +# off. +warn-on-use.h: $(top_srcdir)/gnulib/aux/snippet/warn-on-use.h + $(AM_V_GEN)rm -f $@-t $@ && \ + sed -n -e '/^.ifndef/,$$p' \ + < $(top_srcdir)/gnulib/aux/snippet/warn-on-use.h \ + > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += warn-on-use.h warn-on-use.h-t + +WARN_ON_USE_H=warn-on-use.h + +EXTRA_DIST += $(top_srcdir)/gnulib/aux/snippet/warn-on-use.h + +## end gnulib module snippet/warn-on-use + +## begin gnulib module stdalign + +BUILT_SOURCES += $(STDALIGN_H) + +# We need the following in order to create <stdalign.h> when the system +# doesn't have one that works. +if GL_GENERATE_STDALIGN_H +stdalign.h: stdalign.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + cat $(srcdir)/stdalign.in.h; \ + } > $@-t && \ + mv $@-t $@ +else +stdalign.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += stdalign.h stdalign.h-t + +EXTRA_DIST += stdalign.in.h + +## end gnulib module stdalign + +## begin gnulib module stdbool + +BUILT_SOURCES += $(STDBOOL_H) + +# We need the following in order to create <stdbool.h> when the system +# doesn't have one that works. +if GL_GENERATE_STDBOOL_H +stdbool.h: stdbool.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \ + } > $@-t && \ + mv $@-t $@ +else +stdbool.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += stdbool.h stdbool.h-t + +EXTRA_DIST += stdbool.in.h + +## end gnulib module stdbool + +## begin gnulib module stddef + +BUILT_SOURCES += $(STDDEF_H) + +# We need the following in order to create <stddef.h> when the system +# doesn't have one that works with the given compiler. +if GL_GENERATE_STDDEF_H +stddef.h: stddef.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ + -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ + -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ + < $(srcdir)/stddef.in.h; \ + } > $@-t && \ + mv $@-t $@ +else +stddef.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += stddef.h stddef.h-t + +EXTRA_DIST += stddef.in.h + +## end gnulib module stddef + +## begin gnulib module stdint + +BUILT_SOURCES += $(STDINT_H) + +# We need the following in order to create <stdint.h> when the system +# doesn't have one that works with the given compiler. +if GL_GENERATE_STDINT_H +stdint.h: stdint.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ + -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ + -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ + -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ + -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ + -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \ + -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ + -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ + -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ + -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ + -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \ + -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \ + -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \ + -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \ + -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \ + -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ + -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ + -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ + < $(srcdir)/stdint.in.h; \ + } > $@-t && \ + mv $@-t $@ +else +stdint.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += stdint.h stdint.h-t + +EXTRA_DIST += stdint.in.h + +## end gnulib module stdint + +## begin gnulib module stdio + +BUILT_SOURCES += stdio.h + +# We need the following in order to create <stdio.h> when the system +# doesn't have one that works with the given compiler. +stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \ + -e 's/@''GNULIB_DPRINTF''@/$(GNULIB_DPRINTF)/g' \ + -e 's/@''GNULIB_FCLOSE''@/$(GNULIB_FCLOSE)/g' \ + -e 's/@''GNULIB_FDOPEN''@/$(GNULIB_FDOPEN)/g' \ + -e 's/@''GNULIB_FFLUSH''@/$(GNULIB_FFLUSH)/g' \ + -e 's/@''GNULIB_FGETC''@/$(GNULIB_FGETC)/g' \ + -e 's/@''GNULIB_FGETS''@/$(GNULIB_FGETS)/g' \ + -e 's/@''GNULIB_FOPEN''@/$(GNULIB_FOPEN)/g' \ + -e 's/@''GNULIB_FPRINTF''@/$(GNULIB_FPRINTF)/g' \ + -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GNULIB_FPRINTF_POSIX)/g' \ + -e 's/@''GNULIB_FPURGE''@/$(GNULIB_FPURGE)/g' \ + -e 's/@''GNULIB_FPUTC''@/$(GNULIB_FPUTC)/g' \ + -e 's/@''GNULIB_FPUTS''@/$(GNULIB_FPUTS)/g' \ + -e 's/@''GNULIB_FREAD''@/$(GNULIB_FREAD)/g' \ + -e 's/@''GNULIB_FREOPEN''@/$(GNULIB_FREOPEN)/g' \ + -e 's/@''GNULIB_FSCANF''@/$(GNULIB_FSCANF)/g' \ + -e 's/@''GNULIB_FSEEK''@/$(GNULIB_FSEEK)/g' \ + -e 's/@''GNULIB_FSEEKO''@/$(GNULIB_FSEEKO)/g' \ + -e 's/@''GNULIB_FTELL''@/$(GNULIB_FTELL)/g' \ + -e 's/@''GNULIB_FTELLO''@/$(GNULIB_FTELLO)/g' \ + -e 's/@''GNULIB_FWRITE''@/$(GNULIB_FWRITE)/g' \ + -e 's/@''GNULIB_GETC''@/$(GNULIB_GETC)/g' \ + -e 's/@''GNULIB_GETCHAR''@/$(GNULIB_GETCHAR)/g' \ + -e 's/@''GNULIB_GETDELIM''@/$(GNULIB_GETDELIM)/g' \ + -e 's/@''GNULIB_GETLINE''@/$(GNULIB_GETLINE)/g' \ + -e 's/@''GNULIB_GETS''@/$(GNULIB_GETS)/g' \ + -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GNULIB_OBSTACK_PRINTF)/g' \ + -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GNULIB_OBSTACK_PRINTF_POSIX)/g' \ + -e 's/@''GNULIB_PCLOSE''@/$(GNULIB_PCLOSE)/g' \ + -e 's/@''GNULIB_PERROR''@/$(GNULIB_PERROR)/g' \ + -e 's/@''GNULIB_POPEN''@/$(GNULIB_POPEN)/g' \ + -e 's/@''GNULIB_PRINTF''@/$(GNULIB_PRINTF)/g' \ + -e 's/@''GNULIB_PRINTF_POSIX''@/$(GNULIB_PRINTF_POSIX)/g' \ + -e 's/@''GNULIB_PUTC''@/$(GNULIB_PUTC)/g' \ + -e 's/@''GNULIB_PUTCHAR''@/$(GNULIB_PUTCHAR)/g' \ + -e 's/@''GNULIB_PUTS''@/$(GNULIB_PUTS)/g' \ + -e 's/@''GNULIB_REMOVE''@/$(GNULIB_REMOVE)/g' \ + -e 's/@''GNULIB_RENAME''@/$(GNULIB_RENAME)/g' \ + -e 's/@''GNULIB_RENAMEAT''@/$(GNULIB_RENAMEAT)/g' \ + -e 's/@''GNULIB_SCANF''@/$(GNULIB_SCANF)/g' \ + -e 's/@''GNULIB_SNPRINTF''@/$(GNULIB_SNPRINTF)/g' \ + -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GNULIB_SPRINTF_POSIX)/g' \ + -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GNULIB_STDIO_H_NONBLOCKING)/g' \ + -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GNULIB_STDIO_H_SIGPIPE)/g' \ + -e 's/@''GNULIB_TMPFILE''@/$(GNULIB_TMPFILE)/g' \ + -e 's/@''GNULIB_VASPRINTF''@/$(GNULIB_VASPRINTF)/g' \ + -e 's/@''GNULIB_VDPRINTF''@/$(GNULIB_VDPRINTF)/g' \ + -e 's/@''GNULIB_VFPRINTF''@/$(GNULIB_VFPRINTF)/g' \ + -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GNULIB_VFPRINTF_POSIX)/g' \ + -e 's/@''GNULIB_VFSCANF''@/$(GNULIB_VFSCANF)/g' \ + -e 's/@''GNULIB_VSCANF''@/$(GNULIB_VSCANF)/g' \ + -e 's/@''GNULIB_VPRINTF''@/$(GNULIB_VPRINTF)/g' \ + -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GNULIB_VPRINTF_POSIX)/g' \ + -e 's/@''GNULIB_VSNPRINTF''@/$(GNULIB_VSNPRINTF)/g' \ + -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GNULIB_VSPRINTF_POSIX)/g' \ + < $(srcdir)/stdio.in.h | \ + sed -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \ + -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \ + -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \ + -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \ + -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ + -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \ + -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \ + -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \ + -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \ + -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \ + -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \ + -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \ + -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \ + -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \ + -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ + -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ + -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \ + -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \ + -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \ + -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \ + -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \ + -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \ + -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \ + -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \ + -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \ + -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \ + -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \ + -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \ + -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \ + -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \ + -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \ + -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \ + -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \ + -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \ + -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \ + -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \ + -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \ + -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \ + -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \ + -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \ + -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \ + -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \ + -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \ + -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \ + -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \ + -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \ + -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \ + -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \ + -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += stdio.h stdio.h-t + +EXTRA_DIST += stdio.in.h + +## end gnulib module stdio + +## begin gnulib module stdlib + +BUILT_SOURCES += stdlib.h + +# We need the following in order to create <stdlib.h> when the system +# doesn't have one that works with the given compiler. +stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \ + $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \ + -e 's/@''GNULIB__EXIT''@/$(GNULIB__EXIT)/g' \ + -e 's/@''GNULIB_ATOLL''@/$(GNULIB_ATOLL)/g' \ + -e 's/@''GNULIB_CALLOC_POSIX''@/$(GNULIB_CALLOC_POSIX)/g' \ + -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GNULIB_CANONICALIZE_FILE_NAME)/g' \ + -e 's/@''GNULIB_GETLOADAVG''@/$(GNULIB_GETLOADAVG)/g' \ + -e 's/@''GNULIB_GETSUBOPT''@/$(GNULIB_GETSUBOPT)/g' \ + -e 's/@''GNULIB_GRANTPT''@/$(GNULIB_GRANTPT)/g' \ + -e 's/@''GNULIB_MALLOC_POSIX''@/$(GNULIB_MALLOC_POSIX)/g' \ + -e 's/@''GNULIB_MBTOWC''@/$(GNULIB_MBTOWC)/g' \ + -e 's/@''GNULIB_MKDTEMP''@/$(GNULIB_MKDTEMP)/g' \ + -e 's/@''GNULIB_MKOSTEMP''@/$(GNULIB_MKOSTEMP)/g' \ + -e 's/@''GNULIB_MKOSTEMPS''@/$(GNULIB_MKOSTEMPS)/g' \ + -e 's/@''GNULIB_MKSTEMP''@/$(GNULIB_MKSTEMP)/g' \ + -e 's/@''GNULIB_MKSTEMPS''@/$(GNULIB_MKSTEMPS)/g' \ + -e 's/@''GNULIB_POSIX_OPENPT''@/$(GNULIB_POSIX_OPENPT)/g' \ + -e 's/@''GNULIB_PTSNAME''@/$(GNULIB_PTSNAME)/g' \ + -e 's/@''GNULIB_PTSNAME_R''@/$(GNULIB_PTSNAME_R)/g' \ + -e 's/@''GNULIB_PUTENV''@/$(GNULIB_PUTENV)/g' \ + -e 's/@''GNULIB_RANDOM''@/$(GNULIB_RANDOM)/g' \ + -e 's/@''GNULIB_RANDOM_R''@/$(GNULIB_RANDOM_R)/g' \ + -e 's/@''GNULIB_REALLOC_POSIX''@/$(GNULIB_REALLOC_POSIX)/g' \ + -e 's/@''GNULIB_REALPATH''@/$(GNULIB_REALPATH)/g' \ + -e 's/@''GNULIB_RPMATCH''@/$(GNULIB_RPMATCH)/g' \ + -e 's/@''GNULIB_SETENV''@/$(GNULIB_SETENV)/g' \ + -e 's/@''GNULIB_STRTOD''@/$(GNULIB_STRTOD)/g' \ + -e 's/@''GNULIB_STRTOLL''@/$(GNULIB_STRTOLL)/g' \ + -e 's/@''GNULIB_STRTOULL''@/$(GNULIB_STRTOULL)/g' \ + -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GNULIB_SYSTEM_POSIX)/g' \ + -e 's/@''GNULIB_UNLOCKPT''@/$(GNULIB_UNLOCKPT)/g' \ + -e 's/@''GNULIB_UNSETENV''@/$(GNULIB_UNSETENV)/g' \ + -e 's/@''GNULIB_WCTOMB''@/$(GNULIB_WCTOMB)/g' \ + < $(srcdir)/stdlib.in.h | \ + sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \ + -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ + -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \ + -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ + -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ + -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \ + -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \ + -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \ + -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \ + -e 's|@''HAVE_MKSTEMP''@|$(HAVE_MKSTEMP)|g' \ + -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \ + -e 's|@''HAVE_POSIX_OPENPT''@|$(HAVE_POSIX_OPENPT)|g' \ + -e 's|@''HAVE_PTSNAME''@|$(HAVE_PTSNAME)|g' \ + -e 's|@''HAVE_PTSNAME_R''@|$(HAVE_PTSNAME_R)|g' \ + -e 's|@''HAVE_RANDOM''@|$(HAVE_RANDOM)|g' \ + -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ + -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ + -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \ + -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ + -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \ + -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ + -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \ + -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \ + -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \ + -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \ + -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \ + -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \ + -e 's|@''REPLACE_CALLOC''@|$(REPLACE_CALLOC)|g' \ + -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \ + -e 's|@''REPLACE_MALLOC''@|$(REPLACE_MALLOC)|g' \ + -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \ + -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ + -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \ + -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ + -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \ + -e 's|@''REPLACE_REALLOC''@|$(REPLACE_REALLOC)|g' \ + -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \ + -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \ + -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \ + -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \ + -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _Noreturn/r $(_NORETURN_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += stdlib.h stdlib.h-t + +EXTRA_DIST += stdlib.in.h + +## end gnulib module stdlib + +## begin gnulib module strcase + + +EXTRA_DIST += strcasecmp.c strncasecmp.c + +EXTRA_libgnu_a_SOURCES += strcasecmp.c strncasecmp.c + +## end gnulib module strcase + +## begin gnulib module strchrnul + + +EXTRA_DIST += strchrnul.c strchrnul.valgrind + +EXTRA_libgnu_a_SOURCES += strchrnul.c + +## end gnulib module strchrnul + +## begin gnulib module strerror + + +EXTRA_DIST += strerror.c + +EXTRA_libgnu_a_SOURCES += strerror.c + +## end gnulib module strerror + +## begin gnulib module strerror-override + + +EXTRA_DIST += strerror-override.c strerror-override.h + +EXTRA_libgnu_a_SOURCES += strerror-override.c + +## end gnulib module strerror-override + +## begin gnulib module string + +BUILT_SOURCES += string.h + +# We need the following in order to create <string.h> when the system +# doesn't have one that works with the given compiler. +string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ + -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \ + -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \ + -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \ + -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \ + -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \ + -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \ + -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \ + -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \ + -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \ + -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \ + -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \ + -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \ + -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \ + -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \ + -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \ + -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \ + -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \ + -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \ + -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \ + -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \ + -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \ + -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \ + -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \ + -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \ + -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \ + -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \ + -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \ + -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \ + -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \ + -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \ + -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \ + -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \ + -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \ + -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \ + -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \ + -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \ + -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \ + < $(srcdir)/string.in.h | \ + sed -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ + -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ + -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ + -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \ + -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ + -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ + -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ + -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ + -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ + -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ + -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ + -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ + -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ + -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ + -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ + -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ + -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ + -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ + -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ + -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ + -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ + -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ + -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ + -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ + -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ + -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ + -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ + -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ + -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ + -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ + -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \ + -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \ + -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \ + -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ + -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ + -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + < $(srcdir)/string.in.h; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += string.h string.h-t + +EXTRA_DIST += string.in.h + +## end gnulib module string + +## begin gnulib module strings + +BUILT_SOURCES += strings.h + +# We need the following in order to create <strings.h> when the system +# doesn't have one that works with the given compiler. +strings.h: strings.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_STRINGS_H''@|$(HAVE_STRINGS_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_STRINGS_H''@|$(NEXT_STRINGS_H)|g' \ + -e 's|@''GNULIB_FFS''@|$(GNULIB_FFS)|g' \ + -e 's|@''HAVE_FFS''@|$(HAVE_FFS)|g' \ + -e 's|@''HAVE_STRCASECMP''@|$(HAVE_STRCASECMP)|g' \ + -e 's|@''HAVE_DECL_STRNCASECMP''@|$(HAVE_DECL_STRNCASECMP)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/strings.in.h; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += strings.h strings.h-t + +EXTRA_DIST += strings.in.h + +## end gnulib module strings + +## begin gnulib module strndup + + +EXTRA_DIST += strndup.c + +EXTRA_libgnu_a_SOURCES += strndup.c + +## end gnulib module strndup + +## begin gnulib module strnlen + + +EXTRA_DIST += strnlen.c + +EXTRA_libgnu_a_SOURCES += strnlen.c + +## end gnulib module strnlen + +## begin gnulib module sys_types + +BUILT_SOURCES += sys/types.h + +# We need the following in order to create <sys/types.h> when the system +# doesn't have one that works with the given compiler. +sys/types.h: sys_types.in.h $(top_builddir)/config.status + $(AM_V_at)$(MKDIR_P) sys + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \ + < $(srcdir)/sys_types.in.h; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += sys/types.h sys/types.h-t + +EXTRA_DIST += sys_types.in.h + +## end gnulib module sys_types + +## begin gnulib module sysexits + +BUILT_SOURCES += $(SYSEXITS_H) + +# We need the following in order to create <sysexits.h> when the system +# doesn't have one that works with the given compiler. +if GL_GENERATE_SYSEXITS_H +sysexits.h: sysexits.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_SYSEXITS_H''@|$(HAVE_SYSEXITS_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_SYSEXITS_H''@|$(NEXT_SYSEXITS_H)|g' \ + < $(srcdir)/sysexits.in.h; \ + } > $@-t && \ + mv -f $@-t $@ +else +sysexits.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += sysexits.h sysexits.h-t + +EXTRA_DIST += sysexits.in.h + +## end gnulib module sysexits + +## begin gnulib module unistd + +BUILT_SOURCES += unistd.h + +# We need the following in order to create an empty placeholder for +# <unistd.h> when the system doesn't have one. +unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ + -e 's/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \ + -e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \ + -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \ + -e 's/@''GNULIB_DUP''@/$(GNULIB_DUP)/g' \ + -e 's/@''GNULIB_DUP2''@/$(GNULIB_DUP2)/g' \ + -e 's/@''GNULIB_DUP3''@/$(GNULIB_DUP3)/g' \ + -e 's/@''GNULIB_ENVIRON''@/$(GNULIB_ENVIRON)/g' \ + -e 's/@''GNULIB_EUIDACCESS''@/$(GNULIB_EUIDACCESS)/g' \ + -e 's/@''GNULIB_FACCESSAT''@/$(GNULIB_FACCESSAT)/g' \ + -e 's/@''GNULIB_FCHDIR''@/$(GNULIB_FCHDIR)/g' \ + -e 's/@''GNULIB_FCHOWNAT''@/$(GNULIB_FCHOWNAT)/g' \ + -e 's/@''GNULIB_FDATASYNC''@/$(GNULIB_FDATASYNC)/g' \ + -e 's/@''GNULIB_FSYNC''@/$(GNULIB_FSYNC)/g' \ + -e 's/@''GNULIB_FTRUNCATE''@/$(GNULIB_FTRUNCATE)/g' \ + -e 's/@''GNULIB_GETCWD''@/$(GNULIB_GETCWD)/g' \ + -e 's/@''GNULIB_GETDOMAINNAME''@/$(GNULIB_GETDOMAINNAME)/g' \ + -e 's/@''GNULIB_GETDTABLESIZE''@/$(GNULIB_GETDTABLESIZE)/g' \ + -e 's/@''GNULIB_GETGROUPS''@/$(GNULIB_GETGROUPS)/g' \ + -e 's/@''GNULIB_GETHOSTNAME''@/$(GNULIB_GETHOSTNAME)/g' \ + -e 's/@''GNULIB_GETLOGIN''@/$(GNULIB_GETLOGIN)/g' \ + -e 's/@''GNULIB_GETLOGIN_R''@/$(GNULIB_GETLOGIN_R)/g' \ + -e 's/@''GNULIB_GETPAGESIZE''@/$(GNULIB_GETPAGESIZE)/g' \ + -e 's/@''GNULIB_GETUSERSHELL''@/$(GNULIB_GETUSERSHELL)/g' \ + -e 's/@''GNULIB_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \ + -e 's/@''GNULIB_ISATTY''@/$(GNULIB_ISATTY)/g' \ + -e 's/@''GNULIB_LCHOWN''@/$(GNULIB_LCHOWN)/g' \ + -e 's/@''GNULIB_LINK''@/$(GNULIB_LINK)/g' \ + -e 's/@''GNULIB_LINKAT''@/$(GNULIB_LINKAT)/g' \ + -e 's/@''GNULIB_LSEEK''@/$(GNULIB_LSEEK)/g' \ + -e 's/@''GNULIB_PIPE''@/$(GNULIB_PIPE)/g' \ + -e 's/@''GNULIB_PIPE2''@/$(GNULIB_PIPE2)/g' \ + -e 's/@''GNULIB_PREAD''@/$(GNULIB_PREAD)/g' \ + -e 's/@''GNULIB_PWRITE''@/$(GNULIB_PWRITE)/g' \ + -e 's/@''GNULIB_READ''@/$(GNULIB_READ)/g' \ + -e 's/@''GNULIB_READLINK''@/$(GNULIB_READLINK)/g' \ + -e 's/@''GNULIB_READLINKAT''@/$(GNULIB_READLINKAT)/g' \ + -e 's/@''GNULIB_RMDIR''@/$(GNULIB_RMDIR)/g' \ + -e 's/@''GNULIB_SETHOSTNAME''@/$(GNULIB_SETHOSTNAME)/g' \ + -e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \ + -e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \ + -e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \ + -e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \ + -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GNULIB_GL_UNISTD_H_GETOPT)/g' \ + -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/g' \ + -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GNULIB_UNISTD_H_SIGPIPE)/g' \ + -e 's/@''GNULIB_UNLINK''@/$(GNULIB_UNLINK)/g' \ + -e 's/@''GNULIB_UNLINKAT''@/$(GNULIB_UNLINKAT)/g' \ + -e 's/@''GNULIB_USLEEP''@/$(GNULIB_USLEEP)/g' \ + -e 's/@''GNULIB_WRITE''@/$(GNULIB_WRITE)/g' \ + < $(srcdir)/unistd.in.h | \ + sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \ + -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \ + -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \ + -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ + -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \ + -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \ + -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \ + -e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \ + -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ + -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ + -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ + -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \ + -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ + -e 's|@''HAVE_GETLOGIN''@|$(HAVE_GETLOGIN)|g' \ + -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ + -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \ + -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \ + -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ + -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \ + -e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \ + -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \ + -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \ + -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \ + -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ + -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \ + -e 's|@''HAVE_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|g' \ + -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ + -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \ + -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \ + -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \ + -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \ + -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ + -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \ + -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \ + -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \ + -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ + -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \ + -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \ + -e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \ + -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \ + -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ + -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ + | \ + sed -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ + -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ + -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \ + -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \ + -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \ + -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ + -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \ + -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \ + -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ + -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ + -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \ + -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ + -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \ + -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \ + -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \ + -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \ + -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \ + -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \ + -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \ + -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \ + -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \ + -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \ + -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \ + -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \ + -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \ + -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \ + -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ + -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ + -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += unistd.h unistd.h-t + +EXTRA_DIST += unistd.in.h + +## end gnulib module unistd + +## begin gnulib module vasnprintf + + +EXTRA_DIST += asnprintf.c float+.h printf-args.c printf-args.h printf-parse.c printf-parse.h vasnprintf.c vasnprintf.h + +EXTRA_libgnu_a_SOURCES += asnprintf.c printf-args.c printf-parse.c vasnprintf.c + +## end gnulib module vasnprintf + +## begin gnulib module verify + + +EXTRA_DIST += verify.h + +## end gnulib module verify + +## begin gnulib module vsnprintf + + +EXTRA_DIST += vsnprintf.c + +EXTRA_libgnu_a_SOURCES += vsnprintf.c + +## end gnulib module vsnprintf + +## begin gnulib module wchar + +BUILT_SOURCES += wchar.h + +# We need the following in order to create <wchar.h> when the system +# version does not work standalone. +wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \ + -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \ + -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \ + -e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \ + -e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \ + -e 's/@''GNULIB_MBSINIT''@/$(GNULIB_MBSINIT)/g' \ + -e 's/@''GNULIB_MBRTOWC''@/$(GNULIB_MBRTOWC)/g' \ + -e 's/@''GNULIB_MBRLEN''@/$(GNULIB_MBRLEN)/g' \ + -e 's/@''GNULIB_MBSRTOWCS''@/$(GNULIB_MBSRTOWCS)/g' \ + -e 's/@''GNULIB_MBSNRTOWCS''@/$(GNULIB_MBSNRTOWCS)/g' \ + -e 's/@''GNULIB_WCRTOMB''@/$(GNULIB_WCRTOMB)/g' \ + -e 's/@''GNULIB_WCSRTOMBS''@/$(GNULIB_WCSRTOMBS)/g' \ + -e 's/@''GNULIB_WCSNRTOMBS''@/$(GNULIB_WCSNRTOMBS)/g' \ + -e 's/@''GNULIB_WCWIDTH''@/$(GNULIB_WCWIDTH)/g' \ + -e 's/@''GNULIB_WMEMCHR''@/$(GNULIB_WMEMCHR)/g' \ + -e 's/@''GNULIB_WMEMCMP''@/$(GNULIB_WMEMCMP)/g' \ + -e 's/@''GNULIB_WMEMCPY''@/$(GNULIB_WMEMCPY)/g' \ + -e 's/@''GNULIB_WMEMMOVE''@/$(GNULIB_WMEMMOVE)/g' \ + -e 's/@''GNULIB_WMEMSET''@/$(GNULIB_WMEMSET)/g' \ + -e 's/@''GNULIB_WCSLEN''@/$(GNULIB_WCSLEN)/g' \ + -e 's/@''GNULIB_WCSNLEN''@/$(GNULIB_WCSNLEN)/g' \ + -e 's/@''GNULIB_WCSCPY''@/$(GNULIB_WCSCPY)/g' \ + -e 's/@''GNULIB_WCPCPY''@/$(GNULIB_WCPCPY)/g' \ + -e 's/@''GNULIB_WCSNCPY''@/$(GNULIB_WCSNCPY)/g' \ + -e 's/@''GNULIB_WCPNCPY''@/$(GNULIB_WCPNCPY)/g' \ + -e 's/@''GNULIB_WCSCAT''@/$(GNULIB_WCSCAT)/g' \ + -e 's/@''GNULIB_WCSNCAT''@/$(GNULIB_WCSNCAT)/g' \ + -e 's/@''GNULIB_WCSCMP''@/$(GNULIB_WCSCMP)/g' \ + -e 's/@''GNULIB_WCSNCMP''@/$(GNULIB_WCSNCMP)/g' \ + -e 's/@''GNULIB_WCSCASECMP''@/$(GNULIB_WCSCASECMP)/g' \ + -e 's/@''GNULIB_WCSNCASECMP''@/$(GNULIB_WCSNCASECMP)/g' \ + -e 's/@''GNULIB_WCSCOLL''@/$(GNULIB_WCSCOLL)/g' \ + -e 's/@''GNULIB_WCSXFRM''@/$(GNULIB_WCSXFRM)/g' \ + -e 's/@''GNULIB_WCSDUP''@/$(GNULIB_WCSDUP)/g' \ + -e 's/@''GNULIB_WCSCHR''@/$(GNULIB_WCSCHR)/g' \ + -e 's/@''GNULIB_WCSRCHR''@/$(GNULIB_WCSRCHR)/g' \ + -e 's/@''GNULIB_WCSCSPN''@/$(GNULIB_WCSCSPN)/g' \ + -e 's/@''GNULIB_WCSSPN''@/$(GNULIB_WCSSPN)/g' \ + -e 's/@''GNULIB_WCSPBRK''@/$(GNULIB_WCSPBRK)/g' \ + -e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \ + -e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \ + -e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \ + < $(srcdir)/wchar.in.h | \ + sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \ + -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \ + -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \ + -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \ + -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \ + -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \ + -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \ + -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \ + -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \ + -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \ + -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \ + -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \ + -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \ + -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \ + -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \ + -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \ + -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \ + -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \ + -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \ + -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \ + -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \ + -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \ + -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \ + -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \ + -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \ + -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \ + -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \ + -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \ + -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \ + -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \ + -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \ + -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \ + -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \ + -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \ + -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \ + -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \ + -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \ + -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \ + -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \ + -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ + | \ + sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \ + -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \ + -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \ + -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \ + -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \ + -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \ + -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \ + -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \ + -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \ + -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \ + -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \ + -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \ + -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += wchar.h wchar.h-t + +EXTRA_DIST += wchar.in.h + +## end gnulib module wchar + +## begin gnulib module xsize + +libgnu_a_SOURCES += xsize.h + +## end gnulib module xsize + + +mostlyclean-local: mostlyclean-generic + @for dir in '' $(MOSTLYCLEANDIRS); do \ + if test -n "$$dir" && test -d $$dir; then \ + echo "rmdir $$dir"; rmdir $$dir; \ + fi; \ + done; \ + : diff --git a/gnulib/lib/alloca.c b/gnulib/lib/alloca.c new file mode 100644 index 0000000..ee0f018 --- /dev/null +++ b/gnulib/lib/alloca.c @@ -0,0 +1,478 @@ +/* alloca.c -- allocate automatically reclaimed memory + (Mostly) portable public-domain implementation -- D A Gwyn + + This implementation of the PWB library alloca function, + which is used to allocate space off the run-time stack so + that it is automatically reclaimed upon procedure exit, + was inspired by discussions with J. Q. Johnson of Cornell. + J.Otto Tennant <jot@cray.com> contributed the Cray support. + + There are some preprocessor constants that can + be defined when compiling for your specific system, for + improved efficiency; however, the defaults should be okay. + + The general concept of this implementation is to keep + track of all alloca-allocated blocks, and reclaim any + that are found to be deeper in the stack than the current + invocation. This heuristic does not reclaim storage as + soon as it becomes invalid, but it will do so eventually. + + As a special case, alloca(0) reclaims storage without + allocating any. It is a good idea to use alloca(0) in + your main control loop, etc. to force garbage collection. */ + +#include <config.h> + +#include <alloca.h> + +#include <string.h> +#include <stdlib.h> + +#ifdef emacs +# include "lisp.h" +# include "blockinput.h" +# ifdef EMACS_FREE +# undef free +# define free EMACS_FREE +# endif +#else +# define memory_full() abort () +#endif + +/* If compiling with GCC 2, this file's not needed. */ +#if !defined (__GNUC__) || __GNUC__ < 2 + +/* If someone has defined alloca as a macro, + there must be some other way alloca is supposed to work. */ +# ifndef alloca + +# ifdef emacs +# ifdef static +/* actually, only want this if static is defined as "" + -- this is for usg, in which emacs must undefine static + in order to make unexec workable + */ +# ifndef STACK_DIRECTION +you +lose +-- must know STACK_DIRECTION at compile-time +/* Using #error here is not wise since this file should work for + old and obscure compilers. */ +# endif /* STACK_DIRECTION undefined */ +# endif /* static */ +# endif /* emacs */ + +/* If your stack is a linked list of frames, you have to + provide an "address metric" ADDRESS_FUNCTION macro. */ + +# if defined (CRAY) && defined (CRAY_STACKSEG_END) +long i00afunc (); +# define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg)) +# else +# define ADDRESS_FUNCTION(arg) &(arg) +# endif + +/* Define STACK_DIRECTION if you know the direction of stack + growth for your system; otherwise it will be automatically + deduced at run-time. + + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ + +# ifndef STACK_DIRECTION +# define STACK_DIRECTION 0 /* Direction unknown. */ +# endif + +# if STACK_DIRECTION != 0 + +# define STACK_DIR STACK_DIRECTION /* Known at compile-time. */ + +# else /* STACK_DIRECTION == 0; need run-time code. */ + +static int stack_dir; /* 1 or -1 once known. */ +# define STACK_DIR stack_dir + +static int +find_stack_direction (int *addr, int depth) +{ + int dir, dummy = 0; + if (! addr) + addr = &dummy; + *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; + dir = depth ? find_stack_direction (addr, depth - 1) : 0; + return dir + dummy; +} + +# endif /* STACK_DIRECTION == 0 */ + +/* An "alloca header" is used to: + (a) chain together all alloca'ed blocks; + (b) keep track of stack depth. + + It is very important that sizeof(header) agree with malloc + alignment chunk size. The following default should work okay. */ + +# ifndef ALIGN_SIZE +# define ALIGN_SIZE sizeof(double) +# endif + +typedef union hdr +{ + char align[ALIGN_SIZE]; /* To force sizeof(header). */ + struct + { + union hdr *next; /* For chaining headers. */ + char *deep; /* For stack depth measure. */ + } h; +} header; + +static header *last_alloca_header = NULL; /* -> last alloca header. */ + +/* Return a pointer to at least SIZE bytes of storage, + which will be automatically reclaimed upon exit from + the procedure that called alloca. Originally, this space + was supposed to be taken from the current stack frame of the + caller, but that method cannot be made to work for some + implementations of C, for example under Gould's UTX/32. */ + +void * +alloca (size_t size) +{ + auto char probe; /* Probes stack depth: */ + register char *depth = ADDRESS_FUNCTION (probe); + +# if STACK_DIRECTION == 0 + if (STACK_DIR == 0) /* Unknown growth direction. */ + STACK_DIR = find_stack_direction (NULL, (size & 1) + 20); +# endif + + /* Reclaim garbage, defined as all alloca'd storage that + was allocated from deeper in the stack than currently. */ + + { + register header *hp; /* Traverses linked list. */ + +# ifdef emacs + BLOCK_INPUT; +# endif + + for (hp = last_alloca_header; hp != NULL;) + if ((STACK_DIR > 0 && hp->h.deep > depth) + || (STACK_DIR < 0 && hp->h.deep < depth)) + { + register header *np = hp->h.next; + + free (hp); /* Collect garbage. */ + + hp = np; /* -> next header. */ + } + else + break; /* Rest are not deeper. */ + + last_alloca_header = hp; /* -> last valid storage. */ + +# ifdef emacs + UNBLOCK_INPUT; +# endif + } + + if (size == 0) + return NULL; /* No allocation required. */ + + /* Allocate combined header + user data storage. */ + + { + /* Address of header. */ + register header *new; + + size_t combined_size = sizeof (header) + size; + if (combined_size < sizeof (header)) + memory_full (); + + new = malloc (combined_size); + + if (! new) + memory_full (); + + new->h.next = last_alloca_header; + new->h.deep = depth; + + last_alloca_header = new; + + /* User storage begins just after header. */ + + return (void *) (new + 1); + } +} + +# if defined (CRAY) && defined (CRAY_STACKSEG_END) + +# ifdef DEBUG_I00AFUNC +# include <stdio.h> +# endif + +# ifndef CRAY_STACK +# define CRAY_STACK +# ifndef CRAY2 +/* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */ +struct stack_control_header + { + long shgrow:32; /* Number of times stack has grown. */ + long shaseg:32; /* Size of increments to stack. */ + long shhwm:32; /* High water mark of stack. */ + long shsize:32; /* Current size of stack (all segments). */ + }; + +/* The stack segment linkage control information occurs at + the high-address end of a stack segment. (The stack + grows from low addresses to high addresses.) The initial + part of the stack segment linkage control information is + 0200 (octal) words. This provides for register storage + for the routine which overflows the stack. */ + +struct stack_segment_linkage + { + long ss[0200]; /* 0200 overflow words. */ + long sssize:32; /* Number of words in this segment. */ + long ssbase:32; /* Offset to stack base. */ + long:32; + long sspseg:32; /* Offset to linkage control of previous + segment of stack. */ + long:32; + long sstcpt:32; /* Pointer to task common address block. */ + long sscsnm; /* Private control structure number for + microtasking. */ + long ssusr1; /* Reserved for user. */ + long ssusr2; /* Reserved for user. */ + long sstpid; /* Process ID for pid based multi-tasking. */ + long ssgvup; /* Pointer to multitasking thread giveup. */ + long sscray[7]; /* Reserved for Cray Research. */ + long ssa0; + long ssa1; + long ssa2; + long ssa3; + long ssa4; + long ssa5; + long ssa6; + long ssa7; + long sss0; + long sss1; + long sss2; + long sss3; + long sss4; + long sss5; + long sss6; + long sss7; + }; + +# else /* CRAY2 */ +/* The following structure defines the vector of words + returned by the STKSTAT library routine. */ +struct stk_stat + { + long now; /* Current total stack size. */ + long maxc; /* Amount of contiguous space which would + be required to satisfy the maximum + stack demand to date. */ + long high_water; /* Stack high-water mark. */ + long overflows; /* Number of stack overflow ($STKOFEN) calls. */ + long hits; /* Number of internal buffer hits. */ + long extends; /* Number of block extensions. */ + long stko_mallocs; /* Block allocations by $STKOFEN. */ + long underflows; /* Number of stack underflow calls ($STKRETN). */ + long stko_free; /* Number of deallocations by $STKRETN. */ + long stkm_free; /* Number of deallocations by $STKMRET. */ + long segments; /* Current number of stack segments. */ + long maxs; /* Maximum number of stack segments so far. */ + long pad_size; /* Stack pad size. */ + long current_address; /* Current stack segment address. */ + long current_size; /* Current stack segment size. This + number is actually corrupted by STKSTAT to + include the fifteen word trailer area. */ + long initial_address; /* Address of initial segment. */ + long initial_size; /* Size of initial segment. */ + }; + +/* The following structure describes the data structure which trails + any stack segment. I think that the description in 'asdef' is + out of date. I only describe the parts that I am sure about. */ + +struct stk_trailer + { + long this_address; /* Address of this block. */ + long this_size; /* Size of this block (does not include + this trailer). */ + long unknown2; + long unknown3; + long link; /* Address of trailer block of previous + segment. */ + long unknown5; + long unknown6; + long unknown7; + long unknown8; + long unknown9; + long unknown10; + long unknown11; + long unknown12; + long unknown13; + long unknown14; + }; + +# endif /* CRAY2 */ +# endif /* not CRAY_STACK */ + +# ifdef CRAY2 +/* Determine a "stack measure" for an arbitrary ADDRESS. + I doubt that "lint" will like this much. */ + +static long +i00afunc (long *address) +{ + struct stk_stat status; + struct stk_trailer *trailer; + long *block, size; + long result = 0; + + /* We want to iterate through all of the segments. The first + step is to get the stack status structure. We could do this + more quickly and more directly, perhaps, by referencing the + $LM00 common block, but I know that this works. */ + + STKSTAT (&status); + + /* Set up the iteration. */ + + trailer = (struct stk_trailer *) (status.current_address + + status.current_size + - 15); + + /* There must be at least one stack segment. Therefore it is + a fatal error if "trailer" is null. */ + + if (trailer == 0) + abort (); + + /* Discard segments that do not contain our argument address. */ + + while (trailer != 0) + { + block = (long *) trailer->this_address; + size = trailer->this_size; + if (block == 0 || size == 0) + abort (); + trailer = (struct stk_trailer *) trailer->link; + if ((block <= address) && (address < (block + size))) + break; + } + + /* Set the result to the offset in this segment and add the sizes + of all predecessor segments. */ + + result = address - block; + + if (trailer == 0) + { + return result; + } + + do + { + if (trailer->this_size <= 0) + abort (); + result += trailer->this_size; + trailer = (struct stk_trailer *) trailer->link; + } + while (trailer != 0); + + /* We are done. Note that if you present a bogus address (one + not in any segment), you will get a different number back, formed + from subtracting the address of the first block. This is probably + not what you want. */ + + return (result); +} + +# else /* not CRAY2 */ +/* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP. + Determine the number of the cell within the stack, + given the address of the cell. The purpose of this + routine is to linearize, in some sense, stack addresses + for alloca. */ + +static long +i00afunc (long address) +{ + long stkl = 0; + + long size, pseg, this_segment, stack; + long result = 0; + + struct stack_segment_linkage *ssptr; + + /* Register B67 contains the address of the end of the + current stack segment. If you (as a subprogram) store + your registers on the stack and find that you are past + the contents of B67, you have overflowed the segment. + + B67 also points to the stack segment linkage control + area, which is what we are really interested in. */ + + stkl = CRAY_STACKSEG_END (); + ssptr = (struct stack_segment_linkage *) stkl; + + /* If one subtracts 'size' from the end of the segment, + one has the address of the first word of the segment. + + If this is not the first segment, 'pseg' will be + nonzero. */ + + pseg = ssptr->sspseg; + size = ssptr->sssize; + + this_segment = stkl - size; + + /* It is possible that calling this routine itself caused + a stack overflow. Discard stack segments which do not + contain the target address. */ + + while (!(this_segment <= address && address <= stkl)) + { +# ifdef DEBUG_I00AFUNC + fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl); +# endif + if (pseg == 0) + break; + stkl = stkl - pseg; + ssptr = (struct stack_segment_linkage *) stkl; + size = ssptr->sssize; + pseg = ssptr->sspseg; + this_segment = stkl - size; + } + + result = address - this_segment; + + /* If you subtract pseg from the current end of the stack, + you get the address of the previous stack segment's end. + This seems a little convoluted to me, but I'll bet you save + a cycle somewhere. */ + + while (pseg != 0) + { +# ifdef DEBUG_I00AFUNC + fprintf (stderr, "%011o %011o\n", pseg, size); +# endif + stkl = stkl - pseg; + ssptr = (struct stack_segment_linkage *) stkl; + size = ssptr->sssize; + pseg = ssptr->sspseg; + result += size; + } + return (result); +} + +# endif /* not CRAY2 */ +# endif /* CRAY */ + +# endif /* no alloca */ +#endif /* not GCC 2 */ diff --git a/gnulib/lib/alloca.in.h b/gnulib/lib/alloca.in.h new file mode 100644 index 0000000..e94eb68 --- /dev/null +++ b/gnulib/lib/alloca.in.h @@ -0,0 +1,56 @@ +/* Memory allocation on the stack. + + Copyright (C) 1995, 1999, 2001-2004, 2006-2012 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, see + <http://www.gnu.org/licenses/>. + */ + +/* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H + means there is a real alloca function. */ +#ifndef _GL_ALLOCA_H +#define _GL_ALLOCA_H + +/* alloca (N) returns a pointer to N bytes of memory + allocated on the stack, which will last until the function returns. + Use of alloca should be avoided: + - inside arguments of function calls - undefined behaviour, + - in inline functions - the allocation may actually last until the + calling function returns, + - for huge N (say, N >= 65536) - you never know how large (or small) + the stack is, and when the stack cannot fulfill the memory allocation + request, the program just crashes. + */ + +#ifndef alloca +# ifdef __GNUC__ +# define alloca __builtin_alloca +# elif defined _AIX +# define alloca __alloca +# elif defined _MSC_VER +# include <malloc.h> +# define alloca _alloca +# elif defined __DECC && defined __VMS +# define alloca __ALLOCA +# else +# include <stddef.h> +# ifdef __cplusplus +extern "C" +# endif +void *alloca (size_t); +# endif +#endif + +#endif /* _GL_ALLOCA_H */ diff --git a/gnulib/lib/argp-ba.c b/gnulib/lib/argp-ba.c new file mode 100644 index 0000000..0b3d0bd --- /dev/null +++ b/gnulib/lib/argp-ba.c @@ -0,0 +1,34 @@ +/* Default definition for ARGP_PROGRAM_BUG_ADDRESS. + Copyright (C) 1996-1997, 1999, 2009-2012 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Written by Miles Bader <miles@gnu.ai.mit.edu>. + + 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 <http://www.gnu.org/licenses/>. */ + +/* If set by the user program, it should point to string that is the + bug-reporting address for the program. It will be printed by argp_help if + the ARGP_HELP_BUG_ADDR flag is set (as it is by various standard help + messages), embedded in a sentence that says something like "Report bugs to + ADDR." */ +const char *argp_program_bug_address +/* This variable should be zero-initialized. On most systems, putting it into + BSS is sufficient. Not so on MacOS X 10.3 and 10.4, see + <http://lists.gnu.org/archive/html/bug-gnulib/2009-01/msg00329.html> + <http://lists.gnu.org/archive/html/bug-gnulib/2009-08/msg00096.html>. */ +#if defined __ELF__ + /* On ELF systems, variables in BSS behave well. */ +#else + = (const char *) 0 +#endif + ; diff --git a/gnulib/lib/argp-eexst.c b/gnulib/lib/argp-eexst.c new file mode 100644 index 0000000..dcb10a6 --- /dev/null +++ b/gnulib/lib/argp-eexst.c @@ -0,0 +1,30 @@ +/* Default definition for ARGP_ERR_EXIT_STATUS + Copyright (C) 1997, 2009-2012 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Written by Miles Bader <miles@gnu.ai.mit.edu>. + + 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 <http://www.gnu.org/licenses/>. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <sysexits.h> + +#include "argp.h" + +/* The exit status that argp will use when exiting due to a parsing error. + If not defined or set by the user program, this defaults to EX_USAGE from + <sysexits.h>. */ +error_t argp_err_exit_status = EX_USAGE; diff --git a/gnulib/lib/argp-fmtstream.c b/gnulib/lib/argp-fmtstream.c new file mode 100644 index 0000000..70e3eb8 --- /dev/null +++ b/gnulib/lib/argp-fmtstream.c @@ -0,0 +1,435 @@ +/* Word-wrapping and line-truncating streams + Copyright (C) 1997-1999, 2001-2003, 2005, 2009-2012 Free Software + Foundation, Inc. + This file is part of the GNU C Library. + Written by Miles Bader <miles@gnu.ai.mit.edu>. + + 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 <http://www.gnu.org/licenses/>. */ + +/* This package emulates glibc 'line_wrap_stream' semantics for systems that + don't have that. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <stdlib.h> +#include <string.h> +#include <errno.h> +#include <stdarg.h> +#include <ctype.h> + +#include "argp-fmtstream.h" +#include "argp-namefrob.h" + +#ifndef ARGP_FMTSTREAM_USE_LINEWRAP + +#ifndef isblank +#define isblank(ch) ((ch)==' ' || (ch)=='\t') +#endif + +#if defined _LIBC && defined USE_IN_LIBIO +# include <wchar.h> +# include <libio/libioP.h> +# define __vsnprintf(s, l, f, a) _IO_vsnprintf (s, l, f, a) +#endif + +#define INIT_BUF_SIZE 200 +#define PRINTF_SIZE_GUESS 150 + +/* Return an argp_fmtstream that outputs to STREAM, and which prefixes lines + written on it with LMARGIN spaces and limits them to RMARGIN columns + total. If WMARGIN >= 0, words that extend past RMARGIN are wrapped by + replacing the whitespace before them with a newline and WMARGIN spaces. + Otherwise, chars beyond RMARGIN are simply dropped until a newline. + Returns NULL if there was an error. */ +argp_fmtstream_t +__argp_make_fmtstream (FILE *stream, + size_t lmargin, size_t rmargin, ssize_t wmargin) +{ + argp_fmtstream_t fs; + + fs = (struct argp_fmtstream *) malloc (sizeof (struct argp_fmtstream)); + if (fs != NULL) + { + fs->stream = stream; + + fs->lmargin = lmargin; + fs->rmargin = rmargin; + fs->wmargin = wmargin; + fs->point_col = 0; + fs->point_offs = 0; + + fs->buf = (char *) malloc (INIT_BUF_SIZE); + if (! fs->buf) + { + free (fs); + fs = 0; + } + else + { + fs->p = fs->buf; + fs->end = fs->buf + INIT_BUF_SIZE; + } + } + + return fs; +} +#if 0 +/* Not exported. */ +#ifdef weak_alias +weak_alias (__argp_make_fmtstream, argp_make_fmtstream) +#endif +#endif + +/* Flush FS to its stream, and free it (but don't close the stream). */ +void +__argp_fmtstream_free (argp_fmtstream_t fs) +{ + __argp_fmtstream_update (fs); + if (fs->p > fs->buf) + { +#ifdef USE_IN_LIBIO + __fxprintf (fs->stream, "%.*s", (int) (fs->p - fs->buf), fs->buf); +#else + fwrite_unlocked (fs->buf, 1, fs->p - fs->buf, fs->stream); +#endif + } + free (fs->buf); + free (fs); +} +#if 0 +/* Not exported. */ +#ifdef weak_alias +weak_alias (__argp_fmtstream_free, argp_fmtstream_free) +#endif +#endif + +/* Process FS's buffer so that line wrapping is done from POINT_OFFS to the + end of its buffer. This code is mostly from glibc stdio/linewrap.c. */ +void +__argp_fmtstream_update (argp_fmtstream_t fs) +{ + char *buf, *nl; + size_t len; + + /* Scan the buffer for newlines. */ + buf = fs->buf + fs->point_offs; + while (buf < fs->p) + { + size_t r; + + if (fs->point_col == 0 && fs->lmargin != 0) + { + /* We are starting a new line. Print spaces to the left margin. */ + const size_t pad = fs->lmargin; + if (fs->p + pad < fs->end) + { + /* We can fit in them in the buffer by moving the + buffer text up and filling in the beginning. */ + memmove (buf + pad, buf, fs->p - buf); + fs->p += pad; /* Compensate for bigger buffer. */ + memset (buf, ' ', pad); /* Fill in the spaces. */ + buf += pad; /* Don't bother searching them. */ + } + else + { + /* No buffer space for spaces. Must flush. */ + size_t i; + for (i = 0; i < pad; i++) + { +#ifdef USE_IN_LIBIO + if (_IO_fwide (fs->stream, 0) > 0) + putwc_unlocked (L' ', fs->stream); + else +#endif + putc_unlocked (' ', fs->stream); + } + } + fs->point_col = pad; + } + + len = fs->p - buf; + nl = memchr (buf, '\n', len); + + if (fs->point_col < 0) + fs->point_col = 0; + + if (!nl) + { + /* The buffer ends in a partial line. */ + + if (fs->point_col + len < fs->rmargin) + { + /* The remaining buffer text is a partial line and fits + within the maximum line width. Advance point for the + characters to be written and stop scanning. */ + fs->point_col += len; + break; + } + else + /* Set the end-of-line pointer for the code below to + the end of the buffer. */ + nl = fs->p; + } + else if (fs->point_col + (nl - buf) < (ssize_t) fs->rmargin) + { + /* The buffer contains a full line that fits within the maximum + line width. Reset point and scan the next line. */ + fs->point_col = 0; + buf = nl + 1; + continue; + } + + /* This line is too long. */ + r = fs->rmargin - 1; + + if (fs->wmargin < 0) + { + /* Truncate the line by overwriting the excess with the + newline and anything after it in the buffer. */ + if (nl < fs->p) + { + memmove (buf + (r - fs->point_col), nl, fs->p - nl); + fs->p -= buf + (r - fs->point_col) - nl; + /* Reset point for the next line and start scanning it. */ + fs->point_col = 0; + buf += r + 1; /* Skip full line plus \n. */ + } + else + { + /* The buffer ends with a partial line that is beyond the + maximum line width. Advance point for the characters + written, and discard those past the max from the buffer. */ + fs->point_col += len; + fs->p -= fs->point_col - r; + break; + } + } + else + { + /* Do word wrap. Go to the column just past the maximum line + width and scan back for the beginning of the word there. + Then insert a line break. */ + + char *p, *nextline; + int i; + + p = buf + (r + 1 - fs->point_col); + while (p >= buf && !isblank ((unsigned char) *p)) + --p; + nextline = p + 1; /* This will begin the next line. */ + + if (nextline > buf) + { + /* Swallow separating blanks. */ + if (p >= buf) + do + --p; + while (p >= buf && isblank ((unsigned char) *p)); + nl = p + 1; /* The newline will replace the first blank. */ + } + else + { + /* A single word that is greater than the maximum line width. + Oh well. Put it on an overlong line by itself. */ + p = buf + (r + 1 - fs->point_col); + /* Find the end of the long word. */ + if (p < nl) + do + ++p; + while (p < nl && !isblank ((unsigned char) *p)); + if (p == nl) + { + /* It already ends a line. No fussing required. */ + fs->point_col = 0; + buf = nl + 1; + continue; + } + /* We will move the newline to replace the first blank. */ + nl = p; + /* Swallow separating blanks. */ + do + ++p; + while (isblank ((unsigned char) *p)); + /* The next line will start here. */ + nextline = p; + } + + /* Note: There are a bunch of tests below for + NEXTLINE == BUF + LEN + 1; this case is where NL happens to fall + at the end of the buffer, and NEXTLINE is in fact empty (and so + we need not be careful to maintain its contents). */ + + if ((nextline == buf + len + 1 + ? fs->end - nl < fs->wmargin + 1 + : nextline - (nl + 1) < fs->wmargin) + && fs->p > nextline) + { + /* The margin needs more blanks than we removed. */ + if (fs->end - fs->p > fs->wmargin + 1) + /* Make some space for them. */ + { + size_t mv = fs->p - nextline; + memmove (nl + 1 + fs->wmargin, nextline, mv); + nextline = nl + 1 + fs->wmargin; + len = nextline + mv - buf; + *nl++ = '\n'; + } + else + /* Output the first line so we can use the space. */ + { +#ifdef _LIBC + __fxprintf (fs->stream, "%.*s\n", + (int) (nl - fs->buf), fs->buf); +#else + if (nl > fs->buf) + fwrite_unlocked (fs->buf, 1, nl - fs->buf, fs->stream); + putc_unlocked ('\n', fs->stream); +#endif + + len += buf - fs->buf; + nl = buf = fs->buf; + } + } + else + /* We can fit the newline and blanks in before + the next word. */ + *nl++ = '\n'; + + if (nextline - nl >= fs->wmargin + || (nextline == buf + len + 1 && fs->end - nextline >= fs->wmargin)) + /* Add blanks up to the wrap margin column. */ + for (i = 0; i < fs->wmargin; ++i) + *nl++ = ' '; + else + for (i = 0; i < fs->wmargin; ++i) +#ifdef USE_IN_LIBIO + if (_IO_fwide (fs->stream, 0) > 0) + putwc_unlocked (L' ', fs->stream); + else +#endif + putc_unlocked (' ', fs->stream); + + /* Copy the tail of the original buffer into the current buffer + position. */ + if (nl < nextline) + memmove (nl, nextline, buf + len - nextline); + len -= nextline - buf; + + /* Continue the scan on the remaining lines in the buffer. */ + buf = nl; + + /* Restore bufp to include all the remaining text. */ + fs->p = nl + len; + + /* Reset the counter of what has been output this line. If wmargin + is 0, we want to avoid the lmargin getting added, so we set + point_col to a magic value of -1 in that case. */ + fs->point_col = fs->wmargin ? fs->wmargin : -1; + } + } + + /* Remember that we've scanned as far as the end of the buffer. */ + fs->point_offs = fs->p - fs->buf; +} + +/* Ensure that FS has space for AMOUNT more bytes in its buffer, either by + growing the buffer, or by flushing it. True is returned iff we succeed. */ +int +__argp_fmtstream_ensure (struct argp_fmtstream *fs, size_t amount) +{ + if ((size_t) (fs->end - fs->p) < amount) + { + ssize_t wrote; + + /* Flush FS's buffer. */ + __argp_fmtstream_update (fs); + +#ifdef _LIBC + __fxprintf (fs->stream, "%.*s", (int) (fs->p - fs->buf), fs->buf); + wrote = fs->p - fs->buf; +#else + wrote = fwrite_unlocked (fs->buf, 1, fs->p - fs->buf, fs->stream); +#endif + if (wrote == fs->p - fs->buf) + { + fs->p = fs->buf; + fs->point_offs = 0; + } + else + { + fs->p -= wrote; + fs->point_offs -= wrote; + memmove (fs->buf, fs->buf + wrote, fs->p - fs->buf); + return 0; + } + + if ((size_t) (fs->end - fs->buf) < amount) + /* Gotta grow the buffer. */ + { + size_t old_size = fs->end - fs->buf; + size_t new_size = old_size + amount; + char *new_buf; + + if (new_size < old_size || ! (new_buf = realloc (fs->buf, new_size))) + { + __set_errno (ENOMEM); + return 0; + } + + fs->buf = new_buf; + fs->end = new_buf + new_size; + fs->p = fs->buf; + } + } + + return 1; +} + +ssize_t +__argp_fmtstream_printf (struct argp_fmtstream *fs, const char *fmt, ...) +{ + int out; + size_t avail; + size_t size_guess = PRINTF_SIZE_GUESS; /* How much space to reserve. */ + + do + { + va_list args; + + if (! __argp_fmtstream_ensure (fs, size_guess)) + return -1; + + va_start (args, fmt); + avail = fs->end - fs->p; + out = __vsnprintf (fs->p, avail, fmt, args); + va_end (args); + if ((size_t) out >= avail) + size_guess = out + 1; + } + while ((size_t) out >= avail); + + fs->p += out; + + return out; +} +#if 0 +/* Not exported. */ +#ifdef weak_alias +weak_alias (__argp_fmtstream_printf, argp_fmtstream_printf) +#endif +#endif + +#endif /* !ARGP_FMTSTREAM_USE_LINEWRAP */ diff --git a/gnulib/lib/argp-fmtstream.h b/gnulib/lib/argp-fmtstream.h new file mode 100644 index 0000000..a891c3d --- /dev/null +++ b/gnulib/lib/argp-fmtstream.h @@ -0,0 +1,354 @@ +/* Word-wrapping and line-truncating streams. + Copyright (C) 1997, 2006-2012 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Written by Miles Bader <miles@gnu.ai.mit.edu>. + + 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 <http://www.gnu.org/licenses/>. */ + +/* This package emulates glibc 'line_wrap_stream' semantics for systems that + don't have that. If the system does have it, it is just a wrapper for + that. This header file is only used internally while compiling argp, and + shouldn't be installed. */ + +#ifndef _ARGP_FMTSTREAM_H +#define _ARGP_FMTSTREAM_H + +#include <stdio.h> +#include <string.h> +#include <unistd.h> + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The __-protected variants of the attributes 'format' and 'printf' are + accepted by gcc versions 2.6.4 (effectively 2.7) and later. + We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because + gnulib and libintl do '#define printf __printf__' when they override + the 'printf' function. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) +#else +# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ +#endif + +#if (_LIBC - 0 && !defined (USE_IN_LIBIO)) \ + || (defined (__GNU_LIBRARY__) && defined (HAVE_LINEWRAP_H)) +/* line_wrap_stream is available, so use that. */ +#define ARGP_FMTSTREAM_USE_LINEWRAP +#endif + +#ifdef ARGP_FMTSTREAM_USE_LINEWRAP +/* Just be a simple wrapper for line_wrap_stream; the semantics are + *slightly* different, as line_wrap_stream doesn't actually make a new + object, it just modifies the given stream (reversibly) to do + line-wrapping. Since we control who uses this code, it doesn't matter. */ + +#include <linewrap.h> + +typedef FILE *argp_fmtstream_t; + +#define argp_make_fmtstream line_wrap_stream +#define __argp_make_fmtstream line_wrap_stream +#define argp_fmtstream_free line_unwrap_stream +#define __argp_fmtstream_free line_unwrap_stream + +#define __argp_fmtstream_putc(fs,ch) putc(ch,fs) +#define argp_fmtstream_putc(fs,ch) putc(ch,fs) +#define __argp_fmtstream_puts(fs,str) fputs(str,fs) +#define argp_fmtstream_puts(fs,str) fputs(str,fs) +#define __argp_fmtstream_write(fs,str,len) fwrite(str,1,len,fs) +#define argp_fmtstream_write(fs,str,len) fwrite(str,1,len,fs) +#define __argp_fmtstream_printf fprintf +#define argp_fmtstream_printf fprintf + +#define __argp_fmtstream_lmargin line_wrap_lmargin +#define argp_fmtstream_lmargin line_wrap_lmargin +#define __argp_fmtstream_set_lmargin line_wrap_set_lmargin +#define argp_fmtstream_set_lmargin line_wrap_set_lmargin +#define __argp_fmtstream_rmargin line_wrap_rmargin +#define argp_fmtstream_rmargin line_wrap_rmargin +#define __argp_fmtstream_set_rmargin line_wrap_set_rmargin +#define argp_fmtstream_set_rmargin line_wrap_set_rmargin +#define __argp_fmtstream_wmargin line_wrap_wmargin +#define argp_fmtstream_wmargin line_wrap_wmargin +#define __argp_fmtstream_set_wmargin line_wrap_set_wmargin +#define argp_fmtstream_set_wmargin line_wrap_set_wmargin +#define __argp_fmtstream_point line_wrap_point +#define argp_fmtstream_point line_wrap_point + +#else /* !ARGP_FMTSTREAM_USE_LINEWRAP */ +/* Guess we have to define our own version. */ + +struct argp_fmtstream +{ + FILE *stream; /* The stream we're outputting to. */ + + size_t lmargin, rmargin; /* Left and right margins. */ + ssize_t wmargin; /* Margin to wrap to, or -1 to truncate. */ + + /* Point in buffer to which we've processed for wrapping, but not output. */ + size_t point_offs; + /* Output column at POINT_OFFS, or -1 meaning 0 but don't add lmargin. */ + ssize_t point_col; + + char *buf; /* Output buffer. */ + char *p; /* Current end of text in BUF. */ + char *end; /* Absolute end of BUF. */ +}; + +typedef struct argp_fmtstream *argp_fmtstream_t; + +/* Return an argp_fmtstream that outputs to STREAM, and which prefixes lines + written on it with LMARGIN spaces and limits them to RMARGIN columns + total. If WMARGIN >= 0, words that extend past RMARGIN are wrapped by + replacing the whitespace before them with a newline and WMARGIN spaces. + Otherwise, chars beyond RMARGIN are simply dropped until a newline. + Returns NULL if there was an error. */ +extern argp_fmtstream_t __argp_make_fmtstream (FILE *__stream, + size_t __lmargin, + size_t __rmargin, + ssize_t __wmargin); +extern argp_fmtstream_t argp_make_fmtstream (FILE *__stream, + size_t __lmargin, + size_t __rmargin, + ssize_t __wmargin); + +/* Flush __FS to its stream, and free it (but don't close the stream). */ +extern void __argp_fmtstream_free (argp_fmtstream_t __fs); +extern void argp_fmtstream_free (argp_fmtstream_t __fs); + +extern ssize_t __argp_fmtstream_printf (argp_fmtstream_t __fs, + const char *__fmt, ...) + _GL_ATTRIBUTE_FORMAT ((printf, 2, 3)); +extern ssize_t argp_fmtstream_printf (argp_fmtstream_t __fs, + const char *__fmt, ...) + _GL_ATTRIBUTE_FORMAT ((printf, 2, 3)); + +#if _LIBC || !defined __OPTIMIZE__ +extern int __argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch); +extern int argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch); + +extern int __argp_fmtstream_puts (argp_fmtstream_t __fs, const char *__str); +extern int argp_fmtstream_puts (argp_fmtstream_t __fs, const char *__str); + +extern size_t __argp_fmtstream_write (argp_fmtstream_t __fs, + const char *__str, size_t __len); +extern size_t argp_fmtstream_write (argp_fmtstream_t __fs, + const char *__str, size_t __len); +#endif + +/* Access macros for various bits of state. */ +#define argp_fmtstream_lmargin(__fs) ((__fs)->lmargin) +#define argp_fmtstream_rmargin(__fs) ((__fs)->rmargin) +#define argp_fmtstream_wmargin(__fs) ((__fs)->wmargin) +#define __argp_fmtstream_lmargin argp_fmtstream_lmargin +#define __argp_fmtstream_rmargin argp_fmtstream_rmargin +#define __argp_fmtstream_wmargin argp_fmtstream_wmargin + +#if _LIBC || !defined __OPTIMIZE__ +/* Set __FS's left margin to LMARGIN and return the old value. */ +extern size_t argp_fmtstream_set_lmargin (argp_fmtstream_t __fs, + size_t __lmargin); +extern size_t __argp_fmtstream_set_lmargin (argp_fmtstream_t __fs, + size_t __lmargin); + +/* Set __FS's right margin to __RMARGIN and return the old value. */ +extern size_t argp_fmtstream_set_rmargin (argp_fmtstream_t __fs, + size_t __rmargin); +extern size_t __argp_fmtstream_set_rmargin (argp_fmtstream_t __fs, + size_t __rmargin); + +/* Set __FS's wrap margin to __WMARGIN and return the old value. */ +extern size_t argp_fmtstream_set_wmargin (argp_fmtstream_t __fs, + size_t __wmargin); +extern size_t __argp_fmtstream_set_wmargin (argp_fmtstream_t __fs, + size_t __wmargin); + +/* Return the column number of the current output point in __FS. */ +extern size_t argp_fmtstream_point (argp_fmtstream_t __fs); +extern size_t __argp_fmtstream_point (argp_fmtstream_t __fs); +#endif + +/* Internal routines. */ +extern void _argp_fmtstream_update (argp_fmtstream_t __fs); +extern void __argp_fmtstream_update (argp_fmtstream_t __fs); +extern int _argp_fmtstream_ensure (argp_fmtstream_t __fs, size_t __amount); +extern int __argp_fmtstream_ensure (argp_fmtstream_t __fs, size_t __amount); + +#ifdef __OPTIMIZE__ +/* Inline versions of above routines. */ + +#if !_LIBC +#define __argp_fmtstream_putc argp_fmtstream_putc +#define __argp_fmtstream_puts argp_fmtstream_puts +#define __argp_fmtstream_write argp_fmtstream_write +#define __argp_fmtstream_set_lmargin argp_fmtstream_set_lmargin +#define __argp_fmtstream_set_rmargin argp_fmtstream_set_rmargin +#define __argp_fmtstream_set_wmargin argp_fmtstream_set_wmargin +#define __argp_fmtstream_point argp_fmtstream_point +#define __argp_fmtstream_update _argp_fmtstream_update +#define __argp_fmtstream_ensure _argp_fmtstream_ensure +#endif + +#ifndef ARGP_FS_EI +# ifdef __GNUC__ + /* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 + inline semantics, unless -fgnu89-inline is used. It defines a macro + __GNUC_STDC_INLINE__ to indicate this situation or a macro + __GNUC_GNU_INLINE__ to indicate the opposite situation. + + GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline + semantics but warns, unless -fgnu89-inline is used: + warning: C99 inline functions are not supported; using GNU89 + warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute + It defines a macro __GNUC_GNU_INLINE__ to indicate this situation. + + Whereas Apple GCC 4.0.1 build 5479 without -std=c99 or -std=gnu99 + implements the GNU C inline semantics and defines the macro + __GNUC_GNU_INLINE__, but it does not warn and does not support + __attribute__ ((__gnu_inline__)). + + All in all, these are the possible combinations. For every compiler, + we need to choose ARGP_FS_EI so that the corresponding table cell + contains an "ok". + + \ ARGP_FS_EI inline extern extern + \ inline inline + CC \ __attribute__ + ((gnu_inline)) + + gcc 4.3.0 error ok ok + gcc 4.3.0 -std=gnu99 -fgnu89-inline error ok ok + gcc 4.3.0 -std=gnu99 ok error ok + + gcc 4.2.2 error ok ok + gcc 4.2.2 -std=gnu99 -fgnu89-inline error ok ok + gcc 4.2.2 -std=gnu99 error warning ok + + gcc 4.1.2 error ok warning + gcc 4.1.2 -std=gnu99 error ok warning + + Apple gcc 4.0.1 error ok warning + Apple gcc 4.0.1 -std=gnu99 ok error warning + */ +# if defined __GNUC_STDC_INLINE__ +# define ARGP_FS_EI inline +# elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2) +# define ARGP_FS_EI extern inline __attribute__ ((__gnu_inline__)) +# else +# define ARGP_FS_EI extern inline +# endif +# else + /* With other compilers, assume the ISO C99 meaning of 'inline', if + the compiler supports 'inline' at all. */ +# define ARGP_FS_EI inline +# endif +#endif + +ARGP_FS_EI size_t +__argp_fmtstream_write (argp_fmtstream_t __fs, + const char *__str, size_t __len) +{ + if (__fs->p + __len <= __fs->end || __argp_fmtstream_ensure (__fs, __len)) + { + memcpy (__fs->p, __str, __len); + __fs->p += __len; + return __len; + } + else + return 0; +} + +ARGP_FS_EI int +__argp_fmtstream_puts (argp_fmtstream_t __fs, const char *__str) +{ + size_t __len = strlen (__str); + if (__len) + { + size_t __wrote = __argp_fmtstream_write (__fs, __str, __len); + return __wrote == __len ? 0 : -1; + } + else + return 0; +} + +ARGP_FS_EI int +__argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch) +{ + if (__fs->p < __fs->end || __argp_fmtstream_ensure (__fs, 1)) + return *__fs->p++ = __ch; + else + return EOF; +} + +/* Set __FS's left margin to __LMARGIN and return the old value. */ +ARGP_FS_EI size_t +__argp_fmtstream_set_lmargin (argp_fmtstream_t __fs, size_t __lmargin) +{ + size_t __old; + if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs) + __argp_fmtstream_update (__fs); + __old = __fs->lmargin; + __fs->lmargin = __lmargin; + return __old; +} + +/* Set __FS's right margin to __RMARGIN and return the old value. */ +ARGP_FS_EI size_t +__argp_fmtstream_set_rmargin (argp_fmtstream_t __fs, size_t __rmargin) +{ + size_t __old; + if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs) + __argp_fmtstream_update (__fs); + __old = __fs->rmargin; + __fs->rmargin = __rmargin; + return __old; +} + +/* Set FS's wrap margin to __WMARGIN and return the old value. */ +ARGP_FS_EI size_t +__argp_fmtstream_set_wmargin (argp_fmtstream_t __fs, size_t __wmargin) +{ + size_t __old; + if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs) + __argp_fmtstream_update (__fs); + __old = __fs->wmargin; + __fs->wmargin = __wmargin; + return __old; +} + +/* Return the column number of the current output point in __FS. */ +ARGP_FS_EI size_t +__argp_fmtstream_point (argp_fmtstream_t __fs) +{ + if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs) + __argp_fmtstream_update (__fs); + return __fs->point_col >= 0 ? __fs->point_col : 0; +} + +#if !_LIBC +#undef __argp_fmtstream_putc +#undef __argp_fmtstream_puts +#undef __argp_fmtstream_write +#undef __argp_fmtstream_set_lmargin +#undef __argp_fmtstream_set_rmargin +#undef __argp_fmtstream_set_wmargin +#undef __argp_fmtstream_point +#undef __argp_fmtstream_update +#undef __argp_fmtstream_ensure +#endif + +#endif /* __OPTIMIZE__ */ + +#endif /* ARGP_FMTSTREAM_USE_LINEWRAP */ + +#endif /* argp-fmtstream.h */ diff --git a/gnulib/lib/argp-fs-xinl.c b/gnulib/lib/argp-fs-xinl.c new file mode 100644 index 0000000..b030e58 --- /dev/null +++ b/gnulib/lib/argp-fs-xinl.c @@ -0,0 +1,42 @@ +/* Real definitions for extern inline functions in argp-fmtstream.h + Copyright (C) 1997, 2003-2004, 2009-2012 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Written by Miles Bader <miles@gnu.ai.mit.edu>. + + 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 <http://www.gnu.org/licenses/>. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#define ARGP_FS_EI +#undef __OPTIMIZE__ +#define __OPTIMIZE__ 1 +#include "argp-fmtstream.h" + +#if 0 +/* Not exported. */ +/* Add weak aliases. */ +#if _LIBC - 0 && !defined (ARGP_FMTSTREAM_USE_LINEWRAP) && defined (weak_alias) + +weak_alias (__argp_fmtstream_putc, argp_fmtstream_putc) +weak_alias (__argp_fmtstream_puts, argp_fmtstream_puts) +weak_alias (__argp_fmtstream_write, argp_fmtstream_write) +weak_alias (__argp_fmtstream_set_lmargin, argp_fmtstream_set_lmargin) +weak_alias (__argp_fmtstream_set_rmargin, argp_fmtstream_set_rmargin) +weak_alias (__argp_fmtstream_set_wmargin, argp_fmtstream_set_wmargin) +weak_alias (__argp_fmtstream_point, argp_fmtstream_point) + +#endif +#endif diff --git a/gnulib/lib/argp-help.c b/gnulib/lib/argp-help.c new file mode 100644 index 0000000..a126acb --- /dev/null +++ b/gnulib/lib/argp-help.c @@ -0,0 +1,1954 @@ +/* Hierarchical argument parsing help output + Copyright (C) 1995-2005, 2007, 2009-2012 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Written by Miles Bader <miles@gnu.ai.mit.edu>. + + 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 <http://www.gnu.org/licenses/>. */ + +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <alloca.h> +#include <errno.h> +#include <stddef.h> +#include <stdlib.h> +#include <string.h> +#include <assert.h> +#include <stdarg.h> +#include <ctype.h> +#include <limits.h> +#ifdef USE_IN_LIBIO +# include <wchar.h> +#endif + +#ifdef _LIBC +# include <libintl.h> +# undef dgettext +# define dgettext(domain, msgid) \ + INTUSE(__dcgettext) (domain, msgid, LC_MESSAGES) +#else +# include "gettext.h" +#endif + +#include "argp.h" +#include "argp-fmtstream.h" +#include "argp-namefrob.h" + +#ifndef SIZE_MAX +# define SIZE_MAX ((size_t) -1) +#endif + +/* User-selectable (using an environment variable) formatting parameters. + + These may be specified in an environment variable called 'ARGP_HELP_FMT', + with a contents like: VAR1=VAL1,VAR2=VAL2,BOOLVAR2,no-BOOLVAR2 + Where VALn must be a positive integer. The list of variables is in the + UPARAM_NAMES vector, below. */ + +/* Default parameters. */ +#define DUP_ARGS 0 /* True if option argument can be duplicated. */ +#define DUP_ARGS_NOTE 1 /* True to print a note about duplicate args. */ +#define SHORT_OPT_COL 2 /* column in which short options start */ +#define LONG_OPT_COL 6 /* column in which long options start */ +#define DOC_OPT_COL 2 /* column in which doc options start */ +#define OPT_DOC_COL 29 /* column in which option text starts */ +#define HEADER_COL 1 /* column in which group headers are printed */ +#define USAGE_INDENT 12 /* indentation of wrapped usage lines */ +#define RMARGIN 79 /* right margin used for wrapping */ + +/* User-selectable (using an environment variable) formatting parameters. + They must all be of type 'int' for the parsing code to work. */ +struct uparams +{ + /* If true, arguments for an option are shown with both short and long + options, even when a given option has both, e.g. '-x ARG, --longx=ARG'. + If false, then if an option has both, the argument is only shown with + the long one, e.g., '-x, --longx=ARG', and a message indicating that + this really means both is printed below the options. */ + int dup_args; + + /* This is true if when DUP_ARGS is false, and some duplicate arguments have + been suppressed, an explanatory message should be printed. */ + int dup_args_note; + + /* Various output columns. */ + int short_opt_col; /* column in which short options start */ + int long_opt_col; /* column in which long options start */ + int doc_opt_col; /* column in which doc options start */ + int opt_doc_col; /* column in which option text starts */ + int header_col; /* column in which group headers are printed */ + int usage_indent; /* indentation of wrapped usage lines */ + int rmargin; /* right margin used for wrapping */ + + int valid; /* True when the values in here are valid. */ +}; + +/* This is a global variable, as user options are only ever read once. */ +static struct uparams uparams = { + DUP_ARGS, DUP_ARGS_NOTE, + SHORT_OPT_COL, LONG_OPT_COL, DOC_OPT_COL, OPT_DOC_COL, HEADER_COL, + USAGE_INDENT, RMARGIN, + 0 +}; + +/* A particular uparam, and what the user name is. */ +struct uparam_name +{ + const char *name; /* User name. */ + int is_bool; /* Whether it's 'boolean'. */ + size_t uparams_offs; /* Location of the (int) field in UPARAMS. */ +}; + +/* The name-field mappings we know about. */ +static const struct uparam_name uparam_names[] = +{ + { "dup-args", 1, offsetof (struct uparams, dup_args) }, + { "dup-args-note", 1, offsetof (struct uparams, dup_args_note) }, + { "short-opt-col", 0, offsetof (struct uparams, short_opt_col) }, + { "long-opt-col", 0, offsetof (struct uparams, long_opt_col) }, + { "doc-opt-col", 0, offsetof (struct uparams, doc_opt_col) }, + { "opt-doc-col", 0, offsetof (struct uparams, opt_doc_col) }, + { "header-col", 0, offsetof (struct uparams, header_col) }, + { "usage-indent", 0, offsetof (struct uparams, usage_indent) }, + { "rmargin", 0, offsetof (struct uparams, rmargin) }, + { 0 } +}; + +static void +validate_uparams (const struct argp_state *state, struct uparams *upptr) +{ + const struct uparam_name *up; + + for (up = uparam_names; up->name; up++) + { + if (up->is_bool + || up->uparams_offs == offsetof (struct uparams, rmargin)) + continue; + if (*(int *)((char *)upptr + up->uparams_offs) >= upptr->rmargin) + { + __argp_failure (state, 0, 0, + dgettext (state->root_argp->argp_domain, + "\ +ARGP_HELP_FMT: %s value is less than or equal to %s"), + "rmargin", up->name); + return; + } + } + uparams = *upptr; + uparams.valid = 1; +} + +/* Read user options from the environment, and fill in UPARAMS appropriately. */ +static void +fill_in_uparams (const struct argp_state *state) +{ + const char *var = getenv ("ARGP_HELP_FMT"); + struct uparams new_params = uparams; + +#define SKIPWS(p) do { while (isspace ((unsigned char) *p)) p++; } while (0); + + if (var) + { + /* Parse var. */ + while (*var) + { + SKIPWS (var); + + if (isalpha ((unsigned char) *var)) + { + size_t var_len; + const struct uparam_name *un; + int unspec = 0, val = 0; + const char *arg = var; + + while (isalnum ((unsigned char) *arg) || *arg == '-' || *arg == '_') + arg++; + var_len = arg - var; + + SKIPWS (arg); + + if (*arg == '\0' || *arg == ',') + unspec = 1; + else if (*arg == '=') + { + arg++; + SKIPWS (arg); + } + + if (unspec) + { + if (var[0] == 'n' && var[1] == 'o' && var[2] == '-') + { + val = 0; + var += 3; + var_len -= 3; + } + else + val = 1; + } + else if (isdigit ((unsigned char) *arg)) + { + val = atoi (arg); + while (isdigit ((unsigned char) *arg)) + arg++; + SKIPWS (arg); + } + + for (un = uparam_names; un->name; un++) + if (strlen (un->name) == var_len + && strncmp (var, un->name, var_len) == 0) + { + if (unspec && !un->is_bool) + __argp_failure (state, 0, 0, + dgettext (state->root_argp->argp_domain, + "\ +%.*s: ARGP_HELP_FMT parameter requires a value"), + (int) var_len, var); + else if (val < 0) + __argp_failure (state, 0, 0, + dgettext (state->root_argp->argp_domain, + "\ +%.*s: ARGP_HELP_FMT parameter must be positive"), + (int) var_len, var); + else + *(int *)((char *)&new_params + un->uparams_offs) = val; + break; + } + if (! un->name) + __argp_failure (state, 0, 0, + dgettext (state->root_argp->argp_domain, "\ +%.*s: Unknown ARGP_HELP_FMT parameter"), + (int) var_len, var); + + var = arg; + if (*var == ',') + var++; + } + else if (*var) + { + __argp_failure (state, 0, 0, + dgettext (state->root_argp->argp_domain, + "Garbage in ARGP_HELP_FMT: %s"), var); + break; + } + } + validate_uparams (state, &new_params); + } +} + +/* Returns true if OPT hasn't been marked invisible. Visibility only affects + whether OPT is displayed or used in sorting, not option shadowing. */ +#define ovisible(opt) (! ((opt)->flags & OPTION_HIDDEN)) + +/* Returns true if OPT is an alias for an earlier option. */ +#define oalias(opt) ((opt)->flags & OPTION_ALIAS) + +/* Returns true if OPT is a documentation-only entry. */ +#define odoc(opt) ((opt)->flags & OPTION_DOC) + +/* Returns true if OPT should not be translated */ +#define onotrans(opt) ((opt)->flags & OPTION_NO_TRANS) + +/* Returns true if OPT is the end-of-list marker for a list of options. */ +#define oend(opt) __option_is_end (opt) + +/* Returns true if OPT has a short option. */ +#define oshort(opt) __option_is_short (opt) + +/* + The help format for a particular option is like: + + -xARG, -yARG, --long1=ARG, --long2=ARG Documentation... + + Where ARG will be omitted if there's no argument, for this option, or + will be surrounded by "[" and "]" appropriately if the argument is + optional. The documentation string is word-wrapped appropriately, and if + the list of options is long enough, it will be started on a separate line. + If there are no short options for a given option, the first long option is + indented slightly in a way that's supposed to make most long options appear + to be in a separate column. + + For example, the following output (from ps): + + -p PID, --pid=PID List the process PID + --pgrp=PGRP List processes in the process group PGRP + -P, -x, --no-parent Include processes without parents + -Q, --all-fields Don't elide unusable fields (normally if there's + some reason ps can't print a field for any + process, it's removed from the output entirely) + -r, --reverse, --gratuitously-long-reverse-option + Reverse the order of any sort + --session[=SID] Add the processes from the session SID (which + defaults to the sid of the current process) + + Here are some more options: + -f ZOT, --foonly=ZOT Glork a foonly + -z, --zaza Snit a zar + + -?, --help Give this help list + --usage Give a short usage message + -V, --version Print program version + + The struct argp_option array for the above could look like: + + { + {"pid", 'p', "PID", 0, "List the process PID"}, + {"pgrp", OPT_PGRP, "PGRP", 0, "List processes in the process group PGRP"}, + {"no-parent", 'P', 0, 0, "Include processes without parents"}, + {0, 'x', 0, OPTION_ALIAS}, + {"all-fields",'Q', 0, 0, "Don't elide unusable fields (normally" + " if there's some reason ps can't" + " print a field for any process, it's" + " removed from the output entirely)" }, + {"reverse", 'r', 0, 0, "Reverse the order of any sort"}, + {"gratuitously-long-reverse-option", 0, 0, OPTION_ALIAS}, + {"session", OPT_SESS, "SID", OPTION_ARG_OPTIONAL, + "Add the processes from the session" + " SID (which defaults to the sid of" + " the current process)" }, + + {0,0,0,0, "Here are some more options:"}, + {"foonly", 'f', "ZOT", 0, "Glork a foonly"}, + {"zaza", 'z', 0, 0, "Snit a zar"}, + + {0} + } + + Note that the last three options are automatically supplied by argp_parse, + unless you tell it not to with ARGP_NO_HELP. + +*/ + +/* Returns true if CH occurs between BEG and END. */ +static int +find_char (char ch, char *beg, char *end) +{ + while (beg < end) + if (*beg == ch) + return 1; + else + beg++; + return 0; +} + +struct hol_cluster; /* fwd decl */ + +struct hol_entry +{ + /* First option. */ + const struct argp_option *opt; + /* Number of options (including aliases). */ + unsigned num; + + /* A pointers into the HOL's short_options field, to the first short option + letter for this entry. The order of the characters following this point + corresponds to the order of options pointed to by OPT, and there are at + most NUM. A short option recorded in an option following OPT is only + valid if it occurs in the right place in SHORT_OPTIONS (otherwise it's + probably been shadowed by some other entry). */ + char *short_options; + + /* Entries are sorted by their group first, in the order: + 1, 2, ..., n, 0, -m, ..., -2, -1 + and then alphabetically within each group. The default is 0. */ + int group; + + /* The cluster of options this entry belongs to, or 0 if none. */ + struct hol_cluster *cluster; + + /* The argp from which this option came. */ + const struct argp *argp; + + /* Position in the array */ + unsigned ord; +}; + +/* A cluster of entries to reflect the argp tree structure. */ +struct hol_cluster +{ + /* A descriptive header printed before options in this cluster. */ + const char *header; + + /* Used to order clusters within the same group with the same parent, + according to the order in which they occurred in the parent argp's child + list. */ + int index; + + /* How to sort this cluster with respect to options and other clusters at the + same depth (clusters always follow options in the same group). */ + int group; + + /* The cluster to which this cluster belongs, or 0 if it's at the base + level. */ + struct hol_cluster *parent; + + /* The argp from which this cluster is (eventually) derived. */ + const struct argp *argp; + + /* The distance this cluster is from the root. */ + int depth; + + /* Clusters in a given hol are kept in a linked list, to make freeing them + possible. */ + struct hol_cluster *next; +}; + +/* A list of options for help. */ +struct hol +{ + /* An array of hol_entry's. */ + struct hol_entry *entries; + /* The number of entries in this hol. If this field is zero, the others + are undefined. */ + unsigned num_entries; + + /* A string containing all short options in this HOL. Each entry contains + pointers into this string, so the order can't be messed with blindly. */ + char *short_options; + + /* Clusters of entries in this hol. */ + struct hol_cluster *clusters; +}; + +/* Create a struct hol from the options in ARGP. CLUSTER is the + hol_cluster in which these entries occur, or 0, if at the root. */ +static struct hol * +make_hol (const struct argp *argp, struct hol_cluster *cluster) +{ + char *so; + const struct argp_option *o; + const struct argp_option *opts = argp->options; + struct hol_entry *entry; + unsigned num_short_options = 0; + struct hol *hol = malloc (sizeof (struct hol)); + + assert (hol); + + hol->num_entries = 0; + hol->clusters = 0; + + if (opts) + { + int cur_group = 0; + + /* The first option must not be an alias. */ + assert (! oalias (opts)); + + /* Calculate the space needed. */ + for (o = opts; ! oend (o); o++) + { + if (! oalias (o)) + hol->num_entries++; + if (oshort (o)) + num_short_options++; /* This is an upper bound. */ + } + + hol->entries = malloc (sizeof (struct hol_entry) * hol->num_entries); + hol->short_options = malloc (num_short_options + 1); + + assert (hol->entries && hol->short_options); + if (SIZE_MAX <= UINT_MAX) + assert (hol->num_entries <= SIZE_MAX / sizeof (struct hol_entry)); + + /* Fill in the entries. */ + so = hol->short_options; + for (o = opts, entry = hol->entries; ! oend (o); entry++) + { + entry->opt = o; + entry->num = 0; + entry->short_options = so; + entry->group = cur_group = + o->group + ? o->group + : ((!o->name && !o->key) + ? cur_group + 1 + : cur_group); + entry->cluster = cluster; + entry->argp = argp; + + do + { + entry->num++; + if (oshort (o) && ! find_char (o->key, hol->short_options, so)) + /* O has a valid short option which hasn't already been used.*/ + *so++ = o->key; + o++; + } + while (! oend (o) && oalias (o)); + } + *so = '\0'; /* null terminated so we can find the length */ + } + + return hol; +} + +/* Add a new cluster to HOL, with the given GROUP and HEADER (taken from the + associated argp child list entry), INDEX, and PARENT, and return a pointer + to it. ARGP is the argp that this cluster results from. */ +static struct hol_cluster * +hol_add_cluster (struct hol *hol, int group, const char *header, int index, + struct hol_cluster *parent, const struct argp *argp) +{ + struct hol_cluster *cl = malloc (sizeof (struct hol_cluster)); + if (cl) + { + cl->group = group; + cl->header = header; + + cl->index = index; + cl->parent = parent; + cl->argp = argp; + cl->depth = parent ? parent->depth + 1 : 0; + + cl->next = hol->clusters; + hol->clusters = cl; + } + return cl; +} + +/* Free HOL and any resources it uses. */ +static void +hol_free (struct hol *hol) +{ + struct hol_cluster *cl = hol->clusters; + + while (cl) + { + struct hol_cluster *next = cl->next; + free (cl); + cl = next; + } + + if (hol->num_entries > 0) + { + free (hol->entries); + free (hol->short_options); + } + + free (hol); +} + +static int +hol_entry_short_iterate (const struct hol_entry *entry, + int (*func)(const struct argp_option *opt, + const struct argp_option *real, + const char *domain, void *cookie), + const char *domain, void *cookie) +{ + unsigned nopts; + int val = 0; + const struct argp_option *opt, *real = entry->opt; + char *so = entry->short_options; + + for (opt = real, nopts = entry->num; nopts > 0 && !val; opt++, nopts--) + if (oshort (opt) && *so == opt->key) + { + if (!oalias (opt)) + real = opt; + if (ovisible (opt)) + val = (*func)(opt, real, domain, cookie); + so++; + } + + return val; +} + +static inline int +#if __GNUC__ >= 3 +__attribute__ ((always_inline)) +#endif +hol_entry_long_iterate (const struct hol_entry *entry, + int (*func)(const struct argp_option *opt, + const struct argp_option *real, + const char *domain, void *cookie), + const char *domain, void *cookie) +{ + unsigned nopts; + int val = 0; + const struct argp_option *opt, *real = entry->opt; + + for (opt = real, nopts = entry->num; nopts > 0 && !val; opt++, nopts--) + if (opt->name) + { + if (!oalias (opt)) + real = opt; + if (ovisible (opt)) + val = (*func)(opt, real, domain, cookie); + } + + return val; +} + +/* Iterator that returns true for the first short option. */ +static int +until_short (const struct argp_option *opt, const struct argp_option *real, + const char *domain, void *cookie) +{ + return oshort (opt) ? opt->key : 0; +} + +/* Returns the first valid short option in ENTRY, or 0 if there is none. */ +static char +hol_entry_first_short (const struct hol_entry *entry) +{ + return hol_entry_short_iterate (entry, until_short, + entry->argp->argp_domain, 0); +} + +/* Returns the first valid long option in ENTRY, or 0 if there is none. */ +static const char * +hol_entry_first_long (const struct hol_entry *entry) +{ + const struct argp_option *opt; + unsigned num; + for (opt = entry->opt, num = entry->num; num > 0; opt++, num--) + if (opt->name && ovisible (opt)) + return opt->name; + return 0; +} + +/* Returns the entry in HOL with the long option name NAME, or 0 if there is + none. */ +static struct hol_entry * +hol_find_entry (struct hol *hol, const char *name) +{ + struct hol_entry *entry = hol->entries; + unsigned num_entries = hol->num_entries; + + while (num_entries-- > 0) + { + const struct argp_option *opt = entry->opt; + unsigned num_opts = entry->num; + + while (num_opts-- > 0) + if (opt->name && ovisible (opt) && strcmp (opt->name, name) == 0) + return entry; + else + opt++; + + entry++; + } + + return 0; +} + +/* If an entry with the long option NAME occurs in HOL, set it's special + sort position to GROUP. */ +static void +hol_set_group (struct hol *hol, const char *name, int group) +{ + struct hol_entry *entry = hol_find_entry (hol, name); + if (entry) + entry->group = group; +} + +/* Order by group: 0, 1, 2, ..., n, -m, ..., -2, -1. + EQ is what to return if GROUP1 and GROUP2 are the same. */ +static int +group_cmp (int group1, int group2, int eq) +{ + if (group1 == group2) + return eq; + else if ((group1 < 0 && group2 < 0) || (group1 >= 0 && group2 >= 0)) + return group1 - group2; + else + return group2 - group1; +} + +/* Compare clusters CL1 & CL2 by the order that they should appear in + output. */ +static int +hol_cluster_cmp (const struct hol_cluster *cl1, const struct hol_cluster *cl2) +{ + /* If one cluster is deeper than the other, use its ancestor at the same + level, so that finding the common ancestor is straightforward. + + clN->depth > 0 means that clN->parent != NULL (see hol_add_cluster) */ + while (cl1->depth > cl2->depth) + cl1 = cl1->parent; + while (cl2->depth > cl1->depth) + cl2 = cl2->parent; + + /* Now reduce both clusters to their ancestors at the point where both have + a common parent; these can be directly compared. */ + while (cl1->parent != cl2->parent) + cl1 = cl1->parent, cl2 = cl2->parent; + + return group_cmp (cl1->group, cl2->group, cl2->index - cl1->index); +} + +/* Return the ancestor of CL that's just below the root (i.e., has a parent + of 0). */ +static struct hol_cluster * +hol_cluster_base (struct hol_cluster *cl) +{ + while (cl->parent) + cl = cl->parent; + return cl; +} + +/* Return true if CL1 is a child of CL2. */ +static int +hol_cluster_is_child (const struct hol_cluster *cl1, + const struct hol_cluster *cl2) +{ + while (cl1 && cl1 != cl2) + cl1 = cl1->parent; + return cl1 == cl2; +} + +/* Given the name of an OPTION_DOC option, modifies NAME to start at the tail + that should be used for comparisons, and returns true iff it should be + treated as a non-option. */ +static int +canon_doc_option (const char **name) +{ + int non_opt; + + if (!*name) + non_opt = 1; + else + { + /* Skip initial whitespace. */ + while (isspace ((unsigned char) **name)) + (*name)++; + /* Decide whether this looks like an option (leading '-') or not. */ + non_opt = (**name != '-'); + /* Skip until part of name used for sorting. */ + while (**name && !isalnum ((unsigned char) **name)) + (*name)++; + } + return non_opt; +} + +#define HOL_ENTRY_PTRCMP(a,b) ((a)->ord < (b)->ord ? -1 : 1) + +/* Order ENTRY1 & ENTRY2 by the order which they should appear in a help + listing. */ +static int +hol_entry_cmp (const struct hol_entry *entry1, + const struct hol_entry *entry2) +{ + /* The group numbers by which the entries should be ordered; if either is + in a cluster, then this is just the group within the cluster. */ + int group1 = entry1->group, group2 = entry2->group; + int rc; + + if (entry1->cluster != entry2->cluster) + { + /* The entries are not within the same cluster, so we can't compare them + directly, we have to use the appropriate clustering level too. */ + if (! entry1->cluster) + /* ENTRY1 is at the "base level", not in a cluster, so we have to + compare it's group number with that of the base cluster in which + ENTRY2 resides. Note that if they're in the same group, the + clustered option always comes laster. */ + return group_cmp (group1, hol_cluster_base (entry2->cluster)->group, -1); + else if (! entry2->cluster) + /* Likewise, but ENTRY2's not in a cluster. */ + return group_cmp (hol_cluster_base (entry1->cluster)->group, group2, 1); + else + /* Both entries are in clusters, we can just compare the clusters. */ + return (rc = hol_cluster_cmp (entry1->cluster, entry2->cluster)) ? + rc : HOL_ENTRY_PTRCMP (entry1, entry2); + } + else if (group1 == group2) + /* The entries are both in the same cluster and group, so compare them + alphabetically. */ + { + int short1 = hol_entry_first_short (entry1); + int short2 = hol_entry_first_short (entry2); + int doc1 = odoc (entry1->opt); + int doc2 = odoc (entry2->opt); + const char *long1 = hol_entry_first_long (entry1); + const char *long2 = hol_entry_first_long (entry2); + + if (doc1) + doc1 = canon_doc_option (&long1); + if (doc2) + doc2 = canon_doc_option (&long2); + + if (doc1 != doc2) + /* "documentation" options always follow normal options (or + documentation options that *look* like normal options). */ + return doc1 - doc2; + else if (!short1 && !short2 && long1 && long2) + /* Only long options. */ + return (rc = __strcasecmp (long1, long2)) ? + rc : HOL_ENTRY_PTRCMP (entry1, entry2); + else + /* Compare short/short, long/short, short/long, using the first + character of long options. Entries without *any* valid + options (such as options with OPTION_HIDDEN set) will be put + first, but as they're not displayed, it doesn't matter where + they are. */ + { + unsigned char first1 = short1 ? short1 : long1 ? *long1 : 0; + unsigned char first2 = short2 ? short2 : long2 ? *long2 : 0; + /* Use tolower, not _tolower, since only the former is + guaranteed to work on something already lower case. */ + int lower_cmp = tolower (first1) - tolower (first2); + /* Compare ignoring case, except when the options are both the + same letter, in which case lower-case always comes first. */ + return lower_cmp ? lower_cmp : + (rc = first2 - first1) ? + rc : HOL_ENTRY_PTRCMP (entry1, entry2); + } + } + else + /* Within the same cluster, but not the same group, so just compare + groups. */ + return group_cmp (group1, group2, HOL_ENTRY_PTRCMP (entry1, entry2)); +} + +/* Version of hol_entry_cmp with correct signature for qsort. */ +static int +hol_entry_qcmp (const void *entry1_v, const void *entry2_v) +{ + return hol_entry_cmp (entry1_v, entry2_v); +} + +/* Sort HOL by group and alphabetically by option name (with short options + taking precedence over long). Since the sorting is for display purposes + only, the shadowing of options isn't effected. */ +static void +hol_sort (struct hol *hol) +{ + if (hol->num_entries > 0) + { + unsigned i; + struct hol_entry *e; + for (i = 0, e = hol->entries; i < hol->num_entries; i++, e++) + e->ord = i; + qsort (hol->entries, hol->num_entries, sizeof (struct hol_entry), + hol_entry_qcmp); + } +} + +/* Append MORE to HOL, destroying MORE in the process. Options in HOL shadow + any in MORE with the same name. */ +static void +hol_append (struct hol *hol, struct hol *more) +{ + struct hol_cluster **cl_end = &hol->clusters; + + /* Steal MORE's cluster list, and add it to the end of HOL's. */ + while (*cl_end) + cl_end = &(*cl_end)->next; + *cl_end = more->clusters; + more->clusters = 0; + + /* Merge entries. */ + if (more->num_entries > 0) + { + if (hol->num_entries == 0) + { + hol->num_entries = more->num_entries; + hol->entries = more->entries; + hol->short_options = more->short_options; + more->num_entries = 0; /* Mark MORE's fields as invalid. */ + } + else + /* Append the entries in MORE to those in HOL, taking care to only add + non-shadowed SHORT_OPTIONS values. */ + { + unsigned left; + char *so, *more_so; + struct hol_entry *e; + unsigned num_entries = hol->num_entries + more->num_entries; + struct hol_entry *entries = + malloc (num_entries * sizeof (struct hol_entry)); + unsigned hol_so_len = strlen (hol->short_options); + char *short_options = + malloc (hol_so_len + strlen (more->short_options) + 1); + + assert (entries && short_options); + if (SIZE_MAX <= UINT_MAX) + assert (num_entries <= SIZE_MAX / sizeof (struct hol_entry)); + + __mempcpy (__mempcpy (entries, hol->entries, + hol->num_entries * sizeof (struct hol_entry)), + more->entries, + more->num_entries * sizeof (struct hol_entry)); + + __mempcpy (short_options, hol->short_options, hol_so_len); + + /* Fix up the short options pointers from HOL. */ + for (e = entries, left = hol->num_entries; left > 0; e++, left--) + e->short_options = + short_options + (e->short_options - hol->short_options); + + /* Now add the short options from MORE, fixing up its entries + too. */ + so = short_options + hol_so_len; + more_so = more->short_options; + for (left = more->num_entries; left > 0; e++, left--) + { + int opts_left; + const struct argp_option *opt; + + e->short_options = so; + + for (opts_left = e->num, opt = e->opt; opts_left; opt++, opts_left--) + { + int ch = *more_so; + if (oshort (opt) && ch == opt->key) + /* The next short option in MORE_SO, CH, is from OPT. */ + { + if (! find_char (ch, short_options, + short_options + hol_so_len)) + /* The short option CH isn't shadowed by HOL's options, + so add it to the sum. */ + *so++ = ch; + more_so++; + } + } + } + + *so = '\0'; + + free (hol->entries); + free (hol->short_options); + + hol->entries = entries; + hol->num_entries = num_entries; + hol->short_options = short_options; + } + } + + hol_free (more); +} + +/* Inserts enough spaces to make sure STREAM is at column COL. */ +static void +indent_to (argp_fmtstream_t stream, unsigned col) +{ + int needed = col - __argp_fmtstream_point (stream); + while (needed-- > 0) + __argp_fmtstream_putc (stream, ' '); +} + +/* Output to STREAM either a space, or a newline if there isn't room for at + least ENSURE characters before the right margin. */ +static void +space (argp_fmtstream_t stream, size_t ensure) +{ + if (__argp_fmtstream_point (stream) + ensure + >= __argp_fmtstream_rmargin (stream)) + __argp_fmtstream_putc (stream, '\n'); + else + __argp_fmtstream_putc (stream, ' '); +} + +/* If the option REAL has an argument, we print it in using the printf + format REQ_FMT or OPT_FMT depending on whether it's a required or + optional argument. */ +static void +arg (const struct argp_option *real, const char *req_fmt, const char *opt_fmt, + const char *domain, argp_fmtstream_t stream) +{ + if (real->arg) + { + if (real->flags & OPTION_ARG_OPTIONAL) + __argp_fmtstream_printf (stream, opt_fmt, + dgettext (domain, real->arg)); + else + __argp_fmtstream_printf (stream, req_fmt, + dgettext (domain, real->arg)); + } +} + +/* Helper functions for hol_entry_help. */ + +/* State used during the execution of hol_help. */ +struct hol_help_state +{ + /* PREV_ENTRY should contain the previous entry printed, or 0. */ + struct hol_entry *prev_entry; + + /* If an entry is in a different group from the previous one, and SEP_GROUPS + is true, then a blank line will be printed before any output. */ + int sep_groups; + + /* True if a duplicate option argument was suppressed (only ever set if + UPARAMS.dup_args is false). */ + int suppressed_dup_arg; +}; + +/* Some state used while printing a help entry (used to communicate with + helper functions). See the doc for hol_entry_help for more info, as most + of the fields are copied from its arguments. */ +struct pentry_state +{ + const struct hol_entry *entry; + argp_fmtstream_t stream; + struct hol_help_state *hhstate; + + /* True if nothing's been printed so far. */ + int first; + + /* If non-zero, the state that was used to print this help. */ + const struct argp_state *state; +}; + +/* If a user doc filter should be applied to DOC, do so. */ +static const char * +filter_doc (const char *doc, int key, const struct argp *argp, + const struct argp_state *state) +{ + if (argp->help_filter) + /* We must apply a user filter to this output. */ + { + void *input = __argp_input (argp, state); + return (*argp->help_filter) (key, doc, input); + } + else + /* No filter. */ + return doc; +} + +/* Prints STR as a header line, with the margin lines set appropriately, and + notes the fact that groups should be separated with a blank line. ARGP is + the argp that should dictate any user doc filtering to take place. Note + that the previous wrap margin isn't restored, but the left margin is reset + to 0. */ +static void +print_header (const char *str, const struct argp *argp, + struct pentry_state *pest) +{ + const char *tstr = dgettext (argp->argp_domain, str); + const char *fstr = filter_doc (tstr, ARGP_KEY_HELP_HEADER, argp, pest->state); + + if (fstr) + { + if (*fstr) + { + if (pest->hhstate->prev_entry) + /* Precede with a blank line. */ + __argp_fmtstream_putc (pest->stream, '\n'); + indent_to (pest->stream, uparams.header_col); + __argp_fmtstream_set_lmargin (pest->stream, uparams.header_col); + __argp_fmtstream_set_wmargin (pest->stream, uparams.header_col); + __argp_fmtstream_puts (pest->stream, fstr); + __argp_fmtstream_set_lmargin (pest->stream, 0); + __argp_fmtstream_putc (pest->stream, '\n'); + } + + pest->hhstate->sep_groups = 1; /* Separate subsequent groups. */ + } + + if (fstr != tstr) + free ((char *) fstr); +} + +/* Inserts a comma if this isn't the first item on the line, and then makes + sure we're at least to column COL. If this *is* the first item on a line, + prints any pending whitespace/headers that should precede this line. Also + clears FIRST. */ +static void +comma (unsigned col, struct pentry_state *pest) +{ + if (pest->first) + { + const struct hol_entry *pe = pest->hhstate->prev_entry; + const struct hol_cluster *cl = pest->entry->cluster; + + if (pest->hhstate->sep_groups && pe && pest->entry->group != pe->group) + __argp_fmtstream_putc (pest->stream, '\n'); + + if (cl && cl->header && *cl->header + && (!pe + || (pe->cluster != cl + && !hol_cluster_is_child (pe->cluster, cl)))) + /* If we're changing clusters, then this must be the start of the + ENTRY's cluster unless that is an ancestor of the previous one + (in which case we had just popped into a sub-cluster for a bit). + If so, then print the cluster's header line. */ + { + int old_wm = __argp_fmtstream_wmargin (pest->stream); + print_header (cl->header, cl->argp, pest); + __argp_fmtstream_set_wmargin (pest->stream, old_wm); + } + + pest->first = 0; + } + else + __argp_fmtstream_puts (pest->stream, ", "); + + indent_to (pest->stream, col); +} + +/* Print help for ENTRY to STREAM. */ +static void +hol_entry_help (struct hol_entry *entry, const struct argp_state *state, + argp_fmtstream_t stream, struct hol_help_state *hhstate) +{ + unsigned num; + const struct argp_option *real = entry->opt, *opt; + char *so = entry->short_options; + int have_long_opt = 0; /* We have any long options. */ + /* Saved margins. */ + int old_lm = __argp_fmtstream_set_lmargin (stream, 0); + int old_wm = __argp_fmtstream_wmargin (stream); + /* PEST is a state block holding some of our variables that we'd like to + share with helper functions. */ + struct pentry_state pest; + + pest.entry = entry; + pest.stream = stream; + pest.hhstate = hhstate; + pest.first = 1; + pest.state = state; + + if (! odoc (real)) + for (opt = real, num = entry->num; num > 0; opt++, num--) + if (opt->name && ovisible (opt)) + { + have_long_opt = 1; + break; + } + + /* First emit short options. */ + __argp_fmtstream_set_wmargin (stream, uparams.short_opt_col); /* For truly bizarre cases. */ + for (opt = real, num = entry->num; num > 0; opt++, num--) + if (oshort (opt) && opt->key == *so) + /* OPT has a valid (non shadowed) short option. */ + { + if (ovisible (opt)) + { + comma (uparams.short_opt_col, &pest); + __argp_fmtstream_putc (stream, '-'); + __argp_fmtstream_putc (stream, *so); + if (!have_long_opt || uparams.dup_args) + arg (real, " %s", "[%s]", state->root_argp->argp_domain, stream); + else if (real->arg) + hhstate->suppressed_dup_arg = 1; + } + so++; + } + + /* Now, long options. */ + if (odoc (real)) + /* A "documentation" option. */ + { + __argp_fmtstream_set_wmargin (stream, uparams.doc_opt_col); + for (opt = real, num = entry->num; num > 0; opt++, num--) + if (opt->name && *opt->name && ovisible (opt)) + { + comma (uparams.doc_opt_col, &pest); + /* Calling dgettext here isn't quite right, since sorting will + have been done on the original; but documentation options + should be pretty rare anyway... */ + __argp_fmtstream_puts (stream, + onotrans (opt) ? + opt->name : + dgettext (state->root_argp->argp_domain, + opt->name)); + } + } + else + /* A real long option. */ + { + int first_long_opt = 1; + + __argp_fmtstream_set_wmargin (stream, uparams.long_opt_col); + for (opt = real, num = entry->num; num > 0; opt++, num--) + if (opt->name && ovisible (opt)) + { + comma (uparams.long_opt_col, &pest); + __argp_fmtstream_printf (stream, "--%s", opt->name); + if (first_long_opt || uparams.dup_args) + arg (real, "=%s", "[=%s]", state->root_argp->argp_domain, + stream); + else if (real->arg) + hhstate->suppressed_dup_arg = 1; + } + } + + /* Next, documentation strings. */ + __argp_fmtstream_set_lmargin (stream, 0); + + if (pest.first) + { + /* Didn't print any switches, what's up? */ + if (!oshort (real) && !real->name) + /* This is a group header, print it nicely. */ + print_header (real->doc, entry->argp, &pest); + else + /* Just a totally shadowed option or null header; print nothing. */ + goto cleanup; /* Just return, after cleaning up. */ + } + else + { + const char *tstr = real->doc ? dgettext (state->root_argp->argp_domain, + real->doc) : 0; + const char *fstr = filter_doc (tstr, real->key, entry->argp, state); + if (fstr && *fstr) + { + unsigned int col = __argp_fmtstream_point (stream); + + __argp_fmtstream_set_lmargin (stream, uparams.opt_doc_col); + __argp_fmtstream_set_wmargin (stream, uparams.opt_doc_col); + + if (col > (unsigned int) (uparams.opt_doc_col + 3)) + __argp_fmtstream_putc (stream, '\n'); + else if (col >= (unsigned int) uparams.opt_doc_col) + __argp_fmtstream_puts (stream, " "); + else + indent_to (stream, uparams.opt_doc_col); + + __argp_fmtstream_puts (stream, fstr); + } + if (fstr && fstr != tstr) + free ((char *) fstr); + + /* Reset the left margin. */ + __argp_fmtstream_set_lmargin (stream, 0); + __argp_fmtstream_putc (stream, '\n'); + } + + hhstate->prev_entry = entry; + +cleanup: + __argp_fmtstream_set_lmargin (stream, old_lm); + __argp_fmtstream_set_wmargin (stream, old_wm); +} + +/* Output a long help message about the options in HOL to STREAM. */ +static void +hol_help (struct hol *hol, const struct argp_state *state, + argp_fmtstream_t stream) +{ + unsigned num; + struct hol_entry *entry; + struct hol_help_state hhstate = { 0, 0, 0 }; + + for (entry = hol->entries, num = hol->num_entries; num > 0; entry++, num--) + hol_entry_help (entry, state, stream, &hhstate); + + if (hhstate.suppressed_dup_arg && uparams.dup_args_note) + { + const char *tstr = dgettext (state->root_argp->argp_domain, "\ +Mandatory or optional arguments to long options are also mandatory or \ +optional for any corresponding short options."); + const char *fstr = filter_doc (tstr, ARGP_KEY_HELP_DUP_ARGS_NOTE, + state ? state->root_argp : 0, state); + if (fstr && *fstr) + { + __argp_fmtstream_putc (stream, '\n'); + __argp_fmtstream_puts (stream, fstr); + __argp_fmtstream_putc (stream, '\n'); + } + if (fstr && fstr != tstr) + free ((char *) fstr); + } +} + +/* Helper functions for hol_usage. */ + +/* If OPT is a short option without an arg, append its key to the string + pointer pointer to by COOKIE, and advance the pointer. */ +static int +add_argless_short_opt (const struct argp_option *opt, + const struct argp_option *real, + const char *domain, void *cookie) +{ + char **snao_end = cookie; + if (!(opt->arg || real->arg) + && !((opt->flags | real->flags) & OPTION_NO_USAGE)) + *(*snao_end)++ = opt->key; + return 0; +} + +/* If OPT is a short option with an arg, output a usage entry for it to the + stream pointed at by COOKIE. */ +static int +usage_argful_short_opt (const struct argp_option *opt, + const struct argp_option *real, + const char *domain, void *cookie) +{ + argp_fmtstream_t stream = cookie; + const char *arg = opt->arg; + int flags = opt->flags | real->flags; + + if (! arg) + arg = real->arg; + + if (arg && !(flags & OPTION_NO_USAGE)) + { + arg = dgettext (domain, arg); + + if (flags & OPTION_ARG_OPTIONAL) + __argp_fmtstream_printf (stream, " [-%c[%s]]", opt->key, arg); + else + { + /* Manually do line wrapping so that it (probably) won't + get wrapped at the embedded space. */ + space (stream, 6 + strlen (arg)); + __argp_fmtstream_printf (stream, "[-%c %s]", opt->key, arg); + } + } + + return 0; +} + +/* Output a usage entry for the long option opt to the stream pointed at by + COOKIE. */ +static int +usage_long_opt (const struct argp_option *opt, + const struct argp_option *real, + const char *domain, void *cookie) +{ + argp_fmtstream_t stream = cookie; + const char *arg = opt->arg; + int flags = opt->flags | real->flags; + + if (! arg) + arg = real->arg; + + if (! (flags & OPTION_NO_USAGE) && !odoc (opt)) + { + if (arg) + { + arg = dgettext (domain, arg); + if (flags & OPTION_ARG_OPTIONAL) + __argp_fmtstream_printf (stream, " [--%s[=%s]]", opt->name, arg); + else + __argp_fmtstream_printf (stream, " [--%s=%s]", opt->name, arg); + } + else + __argp_fmtstream_printf (stream, " [--%s]", opt->name); + } + + return 0; +} + +/* Print a short usage description for the arguments in HOL to STREAM. */ +static void +hol_usage (struct hol *hol, argp_fmtstream_t stream) +{ + if (hol->num_entries > 0) + { + unsigned nentries; + struct hol_entry *entry; + char *short_no_arg_opts = alloca (strlen (hol->short_options) + 1); + char *snao_end = short_no_arg_opts; + + /* First we put a list of short options without arguments. */ + for (entry = hol->entries, nentries = hol->num_entries + ; nentries > 0 + ; entry++, nentries--) + hol_entry_short_iterate (entry, add_argless_short_opt, + entry->argp->argp_domain, &snao_end); + if (snao_end > short_no_arg_opts) + { + *snao_end++ = 0; + __argp_fmtstream_printf (stream, " [-%s]", short_no_arg_opts); + } + + /* Now a list of short options *with* arguments. */ + for (entry = hol->entries, nentries = hol->num_entries + ; nentries > 0 + ; entry++, nentries--) + hol_entry_short_iterate (entry, usage_argful_short_opt, + entry->argp->argp_domain, stream); + + /* Finally, a list of long options (whew!). */ + for (entry = hol->entries, nentries = hol->num_entries + ; nentries > 0 + ; entry++, nentries--) + hol_entry_long_iterate (entry, usage_long_opt, + entry->argp->argp_domain, stream); + } +} + +/* Make a HOL containing all levels of options in ARGP. CLUSTER is the + cluster in which ARGP's entries should be clustered, or 0. */ +static struct hol * +argp_hol (const struct argp *argp, struct hol_cluster *cluster) +{ + const struct argp_child *child = argp->children; + struct hol *hol = make_hol (argp, cluster); + if (child) + while (child->argp) + { + struct hol_cluster *child_cluster = + ((child->group || child->header) + /* Put CHILD->argp within its own cluster. */ + ? hol_add_cluster (hol, child->group, child->header, + child - argp->children, cluster, argp) + /* Just merge it into the parent's cluster. */ + : cluster); + hol_append (hol, argp_hol (child->argp, child_cluster)) ; + child++; + } + return hol; +} + +/* Calculate how many different levels with alternative args strings exist in + ARGP. */ +static size_t +argp_args_levels (const struct argp *argp) +{ + size_t levels = 0; + const struct argp_child *child = argp->children; + + if (argp->args_doc && strchr (argp->args_doc, '\n')) + levels++; + + if (child) + while (child->argp) + levels += argp_args_levels ((child++)->argp); + + return levels; +} + +/* Print all the non-option args documented in ARGP to STREAM. Any output is + preceded by a space. LEVELS is a pointer to a byte vector the length + returned by argp_args_levels; it should be initialized to zero, and + updated by this routine for the next call if ADVANCE is true. True is + returned as long as there are more patterns to output. */ +static int +argp_args_usage (const struct argp *argp, const struct argp_state *state, + char **levels, int advance, argp_fmtstream_t stream) +{ + char *our_level = *levels; + int multiple = 0; + const struct argp_child *child = argp->children; + const char *tdoc = dgettext (argp->argp_domain, argp->args_doc), *nl = 0; + const char *fdoc = filter_doc (tdoc, ARGP_KEY_HELP_ARGS_DOC, argp, state); + + if (fdoc) + { + const char *cp = fdoc; + nl = __strchrnul (cp, '\n'); + if (*nl != '\0') + /* This is a "multi-level" args doc; advance to the correct position + as determined by our state in LEVELS, and update LEVELS. */ + { + int i; + multiple = 1; + for (i = 0; i < *our_level; i++) + cp = nl + 1, nl = __strchrnul (cp, '\n'); + (*levels)++; + } + + /* Manually do line wrapping so that it (probably) won't get wrapped at + any embedded spaces. */ + space (stream, 1 + nl - cp); + + __argp_fmtstream_write (stream, cp, nl - cp); + } + if (fdoc && fdoc != tdoc) + free ((char *)fdoc); /* Free user's modified doc string. */ + + if (child) + while (child->argp) + advance = !argp_args_usage ((child++)->argp, state, levels, advance, stream); + + if (advance && multiple) + { + /* Need to increment our level. */ + if (*nl) + /* There's more we can do here. */ + { + (*our_level)++; + advance = 0; /* Our parent shouldn't advance also. */ + } + else if (*our_level > 0) + /* We had multiple levels, but used them up; reset to zero. */ + *our_level = 0; + } + + return !advance; +} + +/* Print the documentation for ARGP to STREAM; if POST is false, then + everything preceding a '\v' character in the documentation strings (or + the whole string, for those with none) is printed, otherwise, everything + following the '\v' character (nothing for strings without). Each separate + bit of documentation is separated a blank line, and if PRE_BLANK is true, + then the first is as well. If FIRST_ONLY is true, only the first + occurrence is output. Returns true if anything was output. */ +static int +argp_doc (const struct argp *argp, const struct argp_state *state, + int post, int pre_blank, int first_only, + argp_fmtstream_t stream) +{ + const char *text; + const char *inp_text; + size_t inp_text_len = 0; + const char *trans_text; + void *input = 0; + int anything = 0; + const struct argp_child *child = argp->children; + + if (argp->doc) + { + char *vt = strchr (argp->doc, '\v'); + if (vt) + { + if (post) + inp_text = vt + 1; + else + { + inp_text_len = vt - argp->doc; + inp_text = __strndup (argp->doc, inp_text_len); + } + } + else + inp_text = post ? 0 : argp->doc; + trans_text = inp_text ? dgettext (argp->argp_domain, inp_text) : NULL; + } + else + trans_text = inp_text = 0; + + if (argp->help_filter) + /* We have to filter the doc strings. */ + { + input = __argp_input (argp, state); + text = + (*argp->help_filter) (post + ? ARGP_KEY_HELP_POST_DOC + : ARGP_KEY_HELP_PRE_DOC, + trans_text, input); + } + else + text = (const char *) trans_text; + + if (text) + { + if (pre_blank) + __argp_fmtstream_putc (stream, '\n'); + + __argp_fmtstream_puts (stream, text); + + if (__argp_fmtstream_point (stream) > __argp_fmtstream_lmargin (stream)) + __argp_fmtstream_putc (stream, '\n'); + + anything = 1; + } + + if (text && text != trans_text) + free ((char *) text); /* Free TEXT returned from the help filter. */ + + if (inp_text && inp_text_len) + free ((char *) inp_text); /* We copied INP_TEXT, so free it now. */ + + if (post && argp->help_filter) + /* Now see if we have to output an ARGP_KEY_HELP_EXTRA text. */ + { + text = (*argp->help_filter) (ARGP_KEY_HELP_EXTRA, 0, input); + if (text) + { + if (anything || pre_blank) + __argp_fmtstream_putc (stream, '\n'); + __argp_fmtstream_puts (stream, text); + free ((char *) text); + if (__argp_fmtstream_point (stream) + > __argp_fmtstream_lmargin (stream)) + __argp_fmtstream_putc (stream, '\n'); + anything = 1; + } + } + + if (child) + while (child->argp && !(first_only && anything)) + anything |= + argp_doc ((child++)->argp, state, + post, anything || pre_blank, first_only, + stream); + + return anything; +} + +/* Output a usage message for ARGP to STREAM. If called from + argp_state_help, STATE is the relevant parsing state. FLAGS are from the + set ARGP_HELP_*. NAME is what to use wherever a "program name" is + needed. */ +static void +_help (const struct argp *argp, const struct argp_state *state, FILE *stream, + unsigned flags, char *name) +{ + int anything = 0; /* Whether we've output anything. */ + struct hol *hol = 0; + argp_fmtstream_t fs; + + if (! stream) + return; + +#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) + __flockfile (stream); +#endif + + if (! uparams.valid) + fill_in_uparams (state); + + fs = __argp_make_fmtstream (stream, 0, uparams.rmargin, 0); + if (! fs) + { +#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) + __funlockfile (stream); +#endif + return; + } + + if (flags & (ARGP_HELP_USAGE | ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG)) + { + hol = argp_hol (argp, 0); + + /* If present, these options always come last. */ + hol_set_group (hol, "help", -1); + hol_set_group (hol, "version", -1); + + hol_sort (hol); + } + + if (flags & (ARGP_HELP_USAGE | ARGP_HELP_SHORT_USAGE)) + /* Print a short "Usage:" message. */ + { + int first_pattern = 1, more_patterns; + size_t num_pattern_levels = argp_args_levels (argp); + char *pattern_levels = alloca (num_pattern_levels); + + memset (pattern_levels, 0, num_pattern_levels); + + do + { + int old_lm; + int old_wm = __argp_fmtstream_set_wmargin (fs, uparams.usage_indent); + char *levels = pattern_levels; + + if (first_pattern) + __argp_fmtstream_printf (fs, "%s %s", + dgettext (argp->argp_domain, "Usage:"), + name); + else + __argp_fmtstream_printf (fs, "%s %s", + dgettext (argp->argp_domain, " or: "), + name); + + /* We set the lmargin as well as the wmargin, because hol_usage + manually wraps options with newline to avoid annoying breaks. */ + old_lm = __argp_fmtstream_set_lmargin (fs, uparams.usage_indent); + + if (flags & ARGP_HELP_SHORT_USAGE) + /* Just show where the options go. */ + { + if (hol->num_entries > 0) + __argp_fmtstream_puts (fs, dgettext (argp->argp_domain, + " [OPTION...]")); + } + else + /* Actually print the options. */ + { + hol_usage (hol, fs); + flags |= ARGP_HELP_SHORT_USAGE; /* But only do so once. */ + } + + more_patterns = argp_args_usage (argp, state, &levels, 1, fs); + + __argp_fmtstream_set_wmargin (fs, old_wm); + __argp_fmtstream_set_lmargin (fs, old_lm); + + __argp_fmtstream_putc (fs, '\n'); + anything = 1; + + first_pattern = 0; + } + while (more_patterns); + } + + if (flags & ARGP_HELP_PRE_DOC) + anything |= argp_doc (argp, state, 0, 0, 1, fs); + + if (flags & ARGP_HELP_SEE) + { + __argp_fmtstream_printf (fs, dgettext (argp->argp_domain, "\ +Try '%s --help' or '%s --usage' for more information.\n"), + name, name); + anything = 1; + } + + if (flags & ARGP_HELP_LONG) + /* Print a long, detailed help message. */ + { + /* Print info about all the options. */ + if (hol->num_entries > 0) + { + if (anything) + __argp_fmtstream_putc (fs, '\n'); + hol_help (hol, state, fs); + anything = 1; + } + } + + if (flags & ARGP_HELP_POST_DOC) + /* Print any documentation strings at the end. */ + anything |= argp_doc (argp, state, 1, anything, 0, fs); + + if ((flags & ARGP_HELP_BUG_ADDR) && argp_program_bug_address) + { + if (anything) + __argp_fmtstream_putc (fs, '\n'); + __argp_fmtstream_printf (fs, dgettext (argp->argp_domain, + "Report bugs to %s.\n"), + argp_program_bug_address); + anything = 1; + } + +#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) + __funlockfile (stream); +#endif + + if (hol) + hol_free (hol); + + __argp_fmtstream_free (fs); +} + +/* Output a usage message for ARGP to STREAM. FLAGS are from the set + ARGP_HELP_*. NAME is what to use wherever a "program name" is needed. */ +void __argp_help (const struct argp *argp, FILE *stream, + unsigned flags, char *name) +{ + struct argp_state state; + memset (&state, 0, sizeof state); + state.root_argp = argp; + _help (argp, &state, stream, flags, name); +} +#ifdef weak_alias +weak_alias (__argp_help, argp_help) +#endif + +#if ! (defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME) +char * +__argp_short_program_name (void) +{ +# if HAVE_DECL_PROGRAM_INVOCATION_NAME + return __argp_base_name (program_invocation_name); +# else + /* FIXME: What now? Miles suggests that it is better to use NULL, + but currently the value is passed on directly to fputs_unlocked, + so that requires more changes. */ +# if __GNUC__ +# warning No reasonable value to return +# endif /* __GNUC__ */ + return ""; +# endif +} +#endif + +/* Output, if appropriate, a usage message for STATE to STREAM. FLAGS are + from the set ARGP_HELP_*. */ +void +__argp_state_help (const struct argp_state *state, FILE *stream, unsigned flags) +{ + if ((!state || ! (state->flags & ARGP_NO_ERRS)) && stream) + { + if (state && (state->flags & ARGP_LONG_ONLY)) + flags |= ARGP_HELP_LONG_ONLY; + + _help (state ? state->root_argp : 0, state, stream, flags, + state ? state->name : __argp_short_program_name ()); + + if (!state || ! (state->flags & ARGP_NO_EXIT)) + { + if (flags & ARGP_HELP_EXIT_ERR) + exit (argp_err_exit_status); + if (flags & ARGP_HELP_EXIT_OK) + exit (0); + } + } +} +#ifdef weak_alias +weak_alias (__argp_state_help, argp_state_help) +#endif + +/* If appropriate, print the printf string FMT and following args, preceded + by the program name and ':', to stderr, and followed by a "Try ... --help" + message, then exit (1). */ +void +__argp_error (const struct argp_state *state, const char *fmt, ...) +{ + if (!state || !(state->flags & ARGP_NO_ERRS)) + { + FILE *stream = state ? state->err_stream : stderr; + + if (stream) + { + va_list ap; + +#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) + __flockfile (stream); +#endif + + va_start (ap, fmt); + +#ifdef USE_IN_LIBIO + if (_IO_fwide (stream, 0) > 0) + { + char *buf; + + if (__asprintf (&buf, fmt, ap) < 0) + buf = NULL; + + __fwprintf (stream, L"%s: %s\n", + state ? state->name : __argp_short_program_name (), + buf); + + free (buf); + } + else +#endif + { + fputs_unlocked (state + ? state->name : __argp_short_program_name (), + stream); + putc_unlocked (':', stream); + putc_unlocked (' ', stream); + + vfprintf (stream, fmt, ap); + + putc_unlocked ('\n', stream); + } + + __argp_state_help (state, stream, ARGP_HELP_STD_ERR); + + va_end (ap); + +#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) + __funlockfile (stream); +#endif + } + } +} +#ifdef weak_alias +weak_alias (__argp_error, argp_error) +#endif + +/* Similar to the standard gnu error-reporting function error(), but will + respect the ARGP_NO_EXIT and ARGP_NO_ERRS flags in STATE, and will print + to STATE->err_stream. This is useful for argument parsing code that is + shared between program startup (when exiting is desired) and runtime + option parsing (when typically an error code is returned instead). The + difference between this function and argp_error is that the latter is for + *parsing errors*, and the former is for other problems that occur during + parsing but don't reflect a (syntactic) problem with the input. */ +void +__argp_failure (const struct argp_state *state, int status, int errnum, + const char *fmt, ...) +{ + if (!state || !(state->flags & ARGP_NO_ERRS)) + { + FILE *stream = state ? state->err_stream : stderr; + + if (stream) + { +#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) + __flockfile (stream); +#endif + +#ifdef USE_IN_LIBIO + if (_IO_fwide (stream, 0) > 0) + __fwprintf (stream, L"%s", + state ? state->name : __argp_short_program_name ()); + else +#endif + fputs_unlocked (state + ? state->name : __argp_short_program_name (), + stream); + + if (fmt) + { + va_list ap; + + va_start (ap, fmt); +#ifdef USE_IN_LIBIO + if (_IO_fwide (stream, 0) > 0) + { + char *buf; + + if (__asprintf (&buf, fmt, ap) < 0) + buf = NULL; + + __fwprintf (stream, L": %s", buf); + + free (buf); + } + else +#endif + { + putc_unlocked (':', stream); + putc_unlocked (' ', stream); + + vfprintf (stream, fmt, ap); + } + + va_end (ap); + } + + if (errnum) + { + char buf[200]; + +#ifdef USE_IN_LIBIO + if (_IO_fwide (stream, 0) > 0) + __fwprintf (stream, L": %s", + __strerror_r (errnum, buf, sizeof (buf))); + else +#endif + { + char const *s = NULL; + putc_unlocked (':', stream); + putc_unlocked (' ', stream); +#if _LIBC || (HAVE_DECL_STRERROR_R && STRERROR_R_CHAR_P && !defined strerror_r) + s = __strerror_r (errnum, buf, sizeof buf); +#elif HAVE_DECL_STRERROR_R + if (__strerror_r (errnum, buf, sizeof buf) == 0) + s = buf; +#endif +#if !_LIBC + if (! s && ! (s = strerror (errnum))) + s = dgettext (state->root_argp->argp_domain, + "Unknown system error"); +#endif + fputs (s, stream); + } + } + +#ifdef USE_IN_LIBIO + if (_IO_fwide (stream, 0) > 0) + putwc_unlocked (L'\n', stream); + else +#endif + putc_unlocked ('\n', stream); + +#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) + __funlockfile (stream); +#endif + + if (status && (!state || !(state->flags & ARGP_NO_EXIT))) + exit (status); + } + } +} +#ifdef weak_alias +weak_alias (__argp_failure, argp_failure) +#endif diff --git a/gnulib/lib/argp-namefrob.h b/gnulib/lib/argp-namefrob.h new file mode 100644 index 0000000..a6df978 --- /dev/null +++ b/gnulib/lib/argp-namefrob.h @@ -0,0 +1,157 @@ +/* Name frobnication for compiling argp outside of glibc + Copyright (C) 1997, 2003, 2007, 2009-2012 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Written by Miles Bader <miles@gnu.ai.mit.edu>. + + 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 <http://www.gnu.org/licenses/>. */ + +#if !_LIBC +/* This code is written for inclusion in gnu-libc, and uses names in the + namespace reserved for libc. If we're not compiling in libc, define those + names to be the normal ones instead. */ + +/* argp-parse functions */ +#undef __argp_parse +#define __argp_parse argp_parse +#undef __option_is_end +#define __option_is_end _option_is_end +#undef __option_is_short +#define __option_is_short _option_is_short +#undef __argp_input +#define __argp_input _argp_input + +/* argp-help functions */ +#undef __argp_help +#define __argp_help argp_help +#undef __argp_error +#define __argp_error argp_error +#undef __argp_failure +#define __argp_failure argp_failure +#undef __argp_state_help +#define __argp_state_help argp_state_help +#undef __argp_usage +#define __argp_usage argp_usage + +/* argp-fmtstream functions */ +#undef __argp_make_fmtstream +#define __argp_make_fmtstream argp_make_fmtstream +#undef __argp_fmtstream_free +#define __argp_fmtstream_free argp_fmtstream_free +#undef __argp_fmtstream_putc +#define __argp_fmtstream_putc argp_fmtstream_putc +#undef __argp_fmtstream_puts +#define __argp_fmtstream_puts argp_fmtstream_puts +#undef __argp_fmtstream_write +#define __argp_fmtstream_write argp_fmtstream_write +#undef __argp_fmtstream_printf +#define __argp_fmtstream_printf argp_fmtstream_printf +#undef __argp_fmtstream_set_lmargin +#define __argp_fmtstream_set_lmargin argp_fmtstream_set_lmargin +#undef __argp_fmtstream_set_rmargin +#define __argp_fmtstream_set_rmargin argp_fmtstream_set_rmargin +#undef __argp_fmtstream_set_wmargin +#define __argp_fmtstream_set_wmargin argp_fmtstream_set_wmargin +#undef __argp_fmtstream_point +#define __argp_fmtstream_point argp_fmtstream_point +#undef __argp_fmtstream_update +#define __argp_fmtstream_update _argp_fmtstream_update +#undef __argp_fmtstream_ensure +#define __argp_fmtstream_ensure _argp_fmtstream_ensure +#undef __argp_fmtstream_lmargin +#define __argp_fmtstream_lmargin argp_fmtstream_lmargin +#undef __argp_fmtstream_rmargin +#define __argp_fmtstream_rmargin argp_fmtstream_rmargin +#undef __argp_fmtstream_wmargin +#define __argp_fmtstream_wmargin argp_fmtstream_wmargin + +/* normal libc functions we call */ +#undef __flockfile +#define __flockfile flockfile +#undef __funlockfile +#define __funlockfile funlockfile +#undef __mempcpy +#define __mempcpy mempcpy +#undef __sleep +#define __sleep sleep +#undef __strcasecmp +#define __strcasecmp strcasecmp +#undef __strchrnul +#define __strchrnul strchrnul +#undef __strerror_r +#define __strerror_r strerror_r +#undef __strndup +#define __strndup strndup +#undef __vsnprintf +#define __vsnprintf vsnprintf + +#if defined(HAVE_DECL_CLEARERR_UNLOCKED) && !HAVE_DECL_CLEARERR_UNLOCKED +# define clearerr_unlocked(x) clearerr (x) +#endif +#if defined(HAVE_DECL_FEOF_UNLOCKED) && !HAVE_DECL_FEOF_UNLOCKED +# define feof_unlocked(x) feof (x) +#endif +#if defined(HAVE_DECL_FERROR_UNLOCKED) && !HAVE_DECL_FERROR_UNLOCKED +# define ferror_unlocked(x) ferror (x) +#endif +#if defined(HAVE_DECL_FFLUSH_UNLOCKED) && !HAVE_DECL_FFLUSH_UNLOCKED +# define fflush_unlocked(x) fflush (x) +#endif +#if defined(HAVE_DECL_FGETS_UNLOCKED) && !HAVE_DECL_FGETS_UNLOCKED +# define fgets_unlocked(x,y,z) fgets (x,y,z) +#endif +#if defined(HAVE_DECL_FPUTC_UNLOCKED) && !HAVE_DECL_FPUTC_UNLOCKED +# define fputc_unlocked(x,y) fputc (x,y) +#endif +#if defined(HAVE_DECL_FPUTS_UNLOCKED) && !HAVE_DECL_FPUTS_UNLOCKED +# define fputs_unlocked(x,y) fputs (x,y) +#endif +#if defined(HAVE_DECL_FREAD_UNLOCKED) && !HAVE_DECL_FREAD_UNLOCKED +# define fread_unlocked(w,x,y,z) fread (w,x,y,z) +#endif +#if defined(HAVE_DECL_FWRITE_UNLOCKED) && !HAVE_DECL_FWRITE_UNLOCKED +# define fwrite_unlocked(w,x,y,z) fwrite (w,x,y,z) +#endif +#if defined(HAVE_DECL_GETC_UNLOCKED) && !HAVE_DECL_GETC_UNLOCKED +# define getc_unlocked(x) getc (x) +#endif +#if defined(HAVE_DECL_GETCHAR_UNLOCKED) && !HAVE_DECL_GETCHAR_UNLOCKED +# define getchar_unlocked() getchar () +#endif +#if defined(HAVE_DECL_PUTC_UNLOCKED) && !HAVE_DECL_PUTC_UNLOCKED +# define putc_unlocked(x,y) putc (x,y) +#endif +#if defined(HAVE_DECL_PUTCHAR_UNLOCKED) && !HAVE_DECL_PUTCHAR_UNLOCKED +# define putchar_unlocked(x) putchar (x) +#endif + +#endif /* !_LIBC */ + +#ifndef __set_errno +# define __set_errno(e) (errno = (e)) +#endif + +#if defined GNULIB_ARGP_DISABLE_DIRNAME +# define __argp_base_name(arg) arg +#elif defined GNULIB_ARGP_EXTERN_BASENAME +extern char *__argp_base_name (const char *arg); +#else +# include "dirname.h" +# define __argp_base_name last_component +#endif + +#if defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME +# define __argp_short_program_name() (program_invocation_short_name) +#else +extern char *__argp_short_program_name (void); +#endif diff --git a/gnulib/lib/argp-parse.c b/gnulib/lib/argp-parse.c new file mode 100644 index 0000000..3b411d4 --- /dev/null +++ b/gnulib/lib/argp-parse.c @@ -0,0 +1,953 @@ +/* Hierarchical argument parsing, layered over getopt + Copyright (C) 1995-2000, 2002-2004, 2009-2012 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Written by Miles Bader <miles@gnu.ai.mit.edu>. + + 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 <http://www.gnu.org/licenses/>. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <alloca.h> +#include <stdalign.h> +#include <stddef.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <limits.h> +#include <getopt.h> +#include <getopt_int.h> + +#ifdef _LIBC +# include <libintl.h> +# undef dgettext +# define dgettext(domain, msgid) \ + INTUSE(__dcgettext) (domain, msgid, LC_MESSAGES) +#else +# include "gettext.h" +#endif +#define N_(msgid) msgid + +#include "argp.h" +#include "argp-namefrob.h" + +#define alignto(n, d) ((((n) + (d) - 1) / (d)) * (d)) + +/* Getopt return values. */ +#define KEY_END (-1) /* The end of the options. */ +#define KEY_ARG 1 /* A non-option argument. */ +#define KEY_ERR '?' /* An error parsing the options. */ + +/* The meta-argument used to prevent any further arguments being interpreted + as options. */ +#define QUOTE "--" + +/* The number of bits we steal in a long-option value for our own use. */ +#define GROUP_BITS CHAR_BIT + +/* The number of bits available for the user value. */ +#define USER_BITS ((sizeof ((struct option *)0)->val * CHAR_BIT) - GROUP_BITS) +#define USER_MASK ((1 << USER_BITS) - 1) + +/* EZ alias for ARGP_ERR_UNKNOWN. */ +#define EBADKEY ARGP_ERR_UNKNOWN + +/* Default options. */ + +/* When argp is given the --HANG switch, _ARGP_HANG is set and argp will sleep + for one second intervals, decrementing _ARGP_HANG until it's zero. Thus + you can force the program to continue by attaching a debugger and setting + it to 0 yourself. */ +static volatile int _argp_hang; + +#define OPT_PROGNAME -2 +#define OPT_USAGE -3 +#define OPT_HANG -4 + +static const struct argp_option argp_default_options[] = +{ + {"help", '?', 0, 0, N_("give this help list"), -1}, + {"usage", OPT_USAGE, 0, 0, N_("give a short usage message"), 0}, + {"program-name",OPT_PROGNAME,N_("NAME"), OPTION_HIDDEN, N_("set the program name"), 0}, + {"HANG", OPT_HANG, N_("SECS"), OPTION_ARG_OPTIONAL | OPTION_HIDDEN, + N_("hang for SECS seconds (default 3600)"), 0}, + {NULL, 0, 0, 0, NULL, 0} +}; + +static error_t +argp_default_parser (int key, char *arg, struct argp_state *state) +{ + switch (key) + { + case '?': + __argp_state_help (state, state->out_stream, ARGP_HELP_STD_HELP); + break; + case OPT_USAGE: + __argp_state_help (state, state->out_stream, + ARGP_HELP_USAGE | ARGP_HELP_EXIT_OK); + break; + + case OPT_PROGNAME: /* Set the program name. */ +#if defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_NAME + program_invocation_name = arg; +#endif + /* [Note that some systems only have PROGRAM_INVOCATION_SHORT_NAME (aka + __PROGNAME), in which case, PROGRAM_INVOCATION_NAME is just defined + to be that, so we have to be a bit careful here.] */ + + /* Update what we use for messages. */ + state->name = __argp_base_name (arg); + +#if defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME + program_invocation_short_name = state->name; +#endif + + if ((state->flags & (ARGP_PARSE_ARGV0 | ARGP_NO_ERRS)) + == ARGP_PARSE_ARGV0) + /* Update what getopt uses too. */ + state->argv[0] = arg; + + break; + + case OPT_HANG: + _argp_hang = atoi (arg ? arg : "3600"); + while (_argp_hang-- > 0) + __sleep (1); + break; + + default: + return EBADKEY; + } + return 0; +} + +static const struct argp argp_default_argp = + {argp_default_options, &argp_default_parser, NULL, NULL, NULL, NULL, "libc"}; + + +static const struct argp_option argp_version_options[] = +{ + {"version", 'V', 0, 0, N_("print program version"), -1}, + {NULL, 0, 0, 0, NULL, 0} +}; + +static error_t +argp_version_parser (int key, char *arg, struct argp_state *state) +{ + switch (key) + { + case 'V': + if (argp_program_version_hook) + (*argp_program_version_hook) (state->out_stream, state); + else if (argp_program_version) + fprintf (state->out_stream, "%s\n", argp_program_version); + else + __argp_error (state, "%s", + dgettext (state->root_argp->argp_domain, + "(PROGRAM ERROR) No version known!?")); + if (! (state->flags & ARGP_NO_EXIT)) + exit (0); + break; + default: + return EBADKEY; + } + return 0; +} + +static const struct argp argp_version_argp = + {argp_version_options, &argp_version_parser, NULL, NULL, NULL, NULL, "libc"}; + +/* Returns the offset into the getopt long options array LONG_OPTIONS of a + long option with called NAME, or -1 if none is found. Passing NULL as + NAME will return the number of options. */ +static int +find_long_option (struct option *long_options, const char *name) +{ + struct option *l = long_options; + while (l->name != NULL) + if (name != NULL && strcmp (l->name, name) == 0) + return l - long_options; + else + l++; + if (name == NULL) + return l - long_options; + else + return -1; +} + + +/* The state of a "group" during parsing. Each group corresponds to a + particular argp structure from the tree of such descending from the top + level argp passed to argp_parse. */ +struct group +{ + /* This group's parsing function. */ + argp_parser_t parser; + + /* Which argp this group is from. */ + const struct argp *argp; + + /* Points to the point in SHORT_OPTS corresponding to the end of the short + options for this group. We use it to determine from which group a + particular short options is from. */ + char *short_end; + + /* The number of non-option args successfully handled by this parser. */ + unsigned args_processed; + + /* This group's parser's parent's group. */ + struct group *parent; + unsigned parent_index; /* And the our position in the parent. */ + + /* These fields are swapped into and out of the state structure when + calling this group's parser. */ + void *input, **child_inputs; + void *hook; +}; + +/* Call GROUP's parser with KEY and ARG, swapping any group-specific info + from STATE before calling, and back into state afterwards. If GROUP has + no parser, EBADKEY is returned. */ +static error_t +group_parse (struct group *group, struct argp_state *state, int key, char *arg) +{ + if (group->parser) + { + error_t err; + state->hook = group->hook; + state->input = group->input; + state->child_inputs = group->child_inputs; + state->arg_num = group->args_processed; + err = (*group->parser)(key, arg, state); + group->hook = state->hook; + return err; + } + else + return EBADKEY; +} + +struct parser +{ + const struct argp *argp; + + /* SHORT_OPTS is the getopt short options string for the union of all the + groups of options. */ + char *short_opts; + /* LONG_OPTS is the array of getop long option structures for the union of + all the groups of options. */ + struct option *long_opts; + /* OPT_DATA is the getopt data used for the re-entrant getopt. */ + struct _getopt_data opt_data; + + /* States of the various parsing groups. */ + struct group *groups; + /* The end of the GROUPS array. */ + struct group *egroup; + /* A vector containing storage for the CHILD_INPUTS field in all groups. */ + void **child_inputs; + + /* True if we think using getopt is still useful; if false, then + remaining arguments are just passed verbatim with ARGP_KEY_ARG. This is + cleared whenever getopt returns KEY_END, but may be set again if the user + moves the next argument pointer backwards. */ + int try_getopt; + + /* State block supplied to parsing routines. */ + struct argp_state state; + + /* Memory used by this parser. */ + void *storage; +}; + +/* The next usable entries in the various parser tables being filled in by + convert_options. */ +struct parser_convert_state +{ + struct parser *parser; + char *short_end; + struct option *long_end; + void **child_inputs_end; +}; + +/* Converts all options in ARGP (which is put in GROUP) and ancestors + into getopt options stored in SHORT_OPTS and LONG_OPTS; SHORT_END and + CVT->LONG_END are the points at which new options are added. Returns the + next unused group entry. CVT holds state used during the conversion. */ +static struct group * +convert_options (const struct argp *argp, + struct group *parent, unsigned parent_index, + struct group *group, struct parser_convert_state *cvt) +{ + /* REAL is the most recent non-alias value of OPT. */ + const struct argp_option *real = argp->options; + const struct argp_child *children = argp->children; + + if (real || argp->parser) + { + const struct argp_option *opt; + + if (real) + for (opt = real; !__option_is_end (opt); opt++) + { + if (! (opt->flags & OPTION_ALIAS)) + /* OPT isn't an alias, so we can use values from it. */ + real = opt; + + if (! (real->flags & OPTION_DOC)) + /* A real option (not just documentation). */ + { + if (__option_is_short (opt)) + /* OPT can be used as a short option. */ + { + *cvt->short_end++ = opt->key; + if (real->arg) + { + *cvt->short_end++ = ':'; + if (real->flags & OPTION_ARG_OPTIONAL) + *cvt->short_end++ = ':'; + } + *cvt->short_end = '\0'; /* keep 0 terminated */ + } + + if (opt->name + && find_long_option (cvt->parser->long_opts, opt->name) < 0) + /* OPT can be used as a long option. */ + { + cvt->long_end->name = opt->name; + cvt->long_end->has_arg = + (real->arg + ? (real->flags & OPTION_ARG_OPTIONAL + ? optional_argument + : required_argument) + : no_argument); + cvt->long_end->flag = 0; + /* we add a disambiguating code to all the user's + values (which is removed before we actually call + the function to parse the value); this means that + the user loses use of the high 8 bits in all his + values (the sign of the lower bits is preserved + however)... */ + cvt->long_end->val = + ((opt->key ? opt->key : real->key) & USER_MASK) + + (((group - cvt->parser->groups) + 1) << USER_BITS); + + /* Keep the LONG_OPTS list terminated. */ + (++cvt->long_end)->name = NULL; + } + } + } + + group->parser = argp->parser; + group->argp = argp; + group->short_end = cvt->short_end; + group->args_processed = 0; + group->parent = parent; + group->parent_index = parent_index; + group->input = 0; + group->hook = 0; + group->child_inputs = 0; + + if (children) + /* Assign GROUP's CHILD_INPUTS field some space from + CVT->child_inputs_end.*/ + { + unsigned num_children = 0; + while (children[num_children].argp) + num_children++; + group->child_inputs = cvt->child_inputs_end; + cvt->child_inputs_end += num_children; + } + + parent = group++; + } + else + parent = 0; + + if (children) + { + unsigned index = 0; + while (children->argp) + group = + convert_options (children++->argp, parent, index++, group, cvt); + } + + return group; +} + +/* Find the merged set of getopt options, with keys appropriately prefixed. */ +static void +parser_convert (struct parser *parser, const struct argp *argp, int flags) +{ + struct parser_convert_state cvt; + + cvt.parser = parser; + cvt.short_end = parser->short_opts; + cvt.long_end = parser->long_opts; + cvt.child_inputs_end = parser->child_inputs; + + if (flags & ARGP_IN_ORDER) + *cvt.short_end++ = '-'; + else if (flags & ARGP_NO_ARGS) + *cvt.short_end++ = '+'; + *cvt.short_end = '\0'; + + cvt.long_end->name = NULL; + + parser->argp = argp; + + if (argp) + parser->egroup = convert_options (argp, 0, 0, parser->groups, &cvt); + else + parser->egroup = parser->groups; /* No parsers at all! */ +} + +/* Lengths of various parser fields which we will allocated. */ +struct parser_sizes +{ + size_t short_len; /* Getopt short options string. */ + size_t long_len; /* Getopt long options vector. */ + size_t num_groups; /* Group structures we allocate. */ + size_t num_child_inputs; /* Child input slots. */ +}; + +/* For ARGP, increments the NUM_GROUPS field in SZS by the total number of + argp structures descended from it, and the SHORT_LEN & LONG_LEN fields by + the maximum lengths of the resulting merged getopt short options string and + long-options array, respectively. */ +static void +calc_sizes (const struct argp *argp, struct parser_sizes *szs) +{ + const struct argp_child *child = argp->children; + const struct argp_option *opt = argp->options; + + if (opt || argp->parser) + { + szs->num_groups++; + if (opt) + { + int num_opts = 0; + while (!__option_is_end (opt++)) + num_opts++; + szs->short_len += num_opts * 3; /* opt + up to 2 ':'s */ + szs->long_len += num_opts; + } + } + + if (child) + while (child->argp) + { + calc_sizes ((child++)->argp, szs); + szs->num_child_inputs++; + } +} + +/* Initializes PARSER to parse ARGP in a manner described by FLAGS. */ +static error_t +parser_init (struct parser *parser, const struct argp *argp, + int argc, char **argv, int flags, void *input) +{ + error_t err = 0; + struct group *group; + struct parser_sizes szs; + struct _getopt_data opt_data = _GETOPT_DATA_INITIALIZER; + char *storage; + size_t glen, gsum; + size_t clen, csum; + size_t llen, lsum; + size_t slen, ssum; + + szs.short_len = (flags & ARGP_NO_ARGS) ? 0 : 1; + szs.long_len = 0; + szs.num_groups = 0; + szs.num_child_inputs = 0; + + if (argp) + calc_sizes (argp, &szs); + + /* Lengths of the various bits of storage used by PARSER. */ + glen = (szs.num_groups + 1) * sizeof (struct group); + clen = szs.num_child_inputs * sizeof (void *); + llen = (szs.long_len + 1) * sizeof (struct option); + slen = szs.short_len + 1; + + /* Sums of previous lengths, properly aligned. There's no need to + align gsum, since struct group is aligned at least as strictly as + void * (since it contains a void * member). And there's no need + to align lsum, since struct option is aligned at least as + strictly as char. */ + gsum = glen; + csum = alignto (gsum + clen, alignof (struct option)); + lsum = csum + llen; + ssum = lsum + slen; + + parser->storage = malloc (ssum); + if (! parser->storage) + return ENOMEM; + + storage = parser->storage; + parser->groups = parser->storage; + parser->child_inputs = (void **) (storage + gsum); + parser->long_opts = (struct option *) (storage + csum); + parser->short_opts = storage + lsum; + parser->opt_data = opt_data; + + memset (parser->child_inputs, 0, clen); + parser_convert (parser, argp, flags); + + memset (&parser->state, 0, sizeof (struct argp_state)); + parser->state.root_argp = parser->argp; + parser->state.argc = argc; + parser->state.argv = argv; + parser->state.flags = flags; + parser->state.err_stream = stderr; + parser->state.out_stream = stdout; + parser->state.next = 0; /* Tell getopt to initialize. */ + parser->state.pstate = parser; + + parser->try_getopt = 1; + + /* Call each parser for the first time, giving it a chance to propagate + values to child parsers. */ + if (parser->groups < parser->egroup) + parser->groups->input = input; + for (group = parser->groups; + group < parser->egroup && (!err || err == EBADKEY); + group++) + { + if (group->parent) + /* If a child parser, get the initial input value from the parent. */ + group->input = group->parent->child_inputs[group->parent_index]; + + if (!group->parser + && group->argp->children && group->argp->children->argp) + /* For the special case where no parsing function is supplied for an + argp, propagate its input to its first child, if any (this just + makes very simple wrapper argps more convenient). */ + group->child_inputs[0] = group->input; + + err = group_parse (group, &parser->state, ARGP_KEY_INIT, 0); + } + if (err == EBADKEY) + err = 0; /* Some parser didn't understand. */ + + if (err) + return err; + + if (parser->state.flags & ARGP_NO_ERRS) + { + parser->opt_data.opterr = 0; + if (parser->state.flags & ARGP_PARSE_ARGV0) + /* getopt always skips ARGV[0], so we have to fake it out. As long + as OPTERR is 0, then it shouldn't actually try to access it. */ + parser->state.argv--, parser->state.argc++; + } + else + parser->opt_data.opterr = 1; /* Print error messages. */ + + if (parser->state.argv == argv && argv[0]) + /* There's an argv[0]; use it for messages. */ + parser->state.name = __argp_base_name (argv[0]); + else + parser->state.name = __argp_short_program_name (); + + return 0; +} + +/* Free any storage consumed by PARSER (but not PARSER itself). */ +static error_t +parser_finalize (struct parser *parser, + error_t err, int arg_ebadkey, int *end_index) +{ + struct group *group; + + if (err == EBADKEY && arg_ebadkey) + /* Suppress errors generated by unparsed arguments. */ + err = 0; + + if (! err) + { + if (parser->state.next == parser->state.argc) + /* We successfully parsed all arguments! Call all the parsers again, + just a few more times... */ + { + for (group = parser->groups; + group < parser->egroup && (!err || err==EBADKEY); + group++) + if (group->args_processed == 0) + err = group_parse (group, &parser->state, ARGP_KEY_NO_ARGS, 0); + for (group = parser->egroup - 1; + group >= parser->groups && (!err || err==EBADKEY); + group--) + err = group_parse (group, &parser->state, ARGP_KEY_END, 0); + + if (err == EBADKEY) + err = 0; /* Some parser didn't understand. */ + + /* Tell the user that all arguments are parsed. */ + if (end_index) + *end_index = parser->state.next; + } + else if (end_index) + /* Return any remaining arguments to the user. */ + *end_index = parser->state.next; + else + /* No way to return the remaining arguments, they must be bogus. */ + { + if (!(parser->state.flags & ARGP_NO_ERRS) + && parser->state.err_stream) + fprintf (parser->state.err_stream, + dgettext (parser->argp->argp_domain, + "%s: Too many arguments\n"), + parser->state.name); + err = EBADKEY; + } + } + + /* Okay, we're all done, with either an error or success; call the parsers + to indicate which one. */ + + if (err) + { + /* Maybe print an error message. */ + if (err == EBADKEY) + /* An appropriate message describing what the error was should have + been printed earlier. */ + __argp_state_help (&parser->state, parser->state.err_stream, + ARGP_HELP_STD_ERR); + + /* Since we didn't exit, give each parser an error indication. */ + for (group = parser->groups; group < parser->egroup; group++) + group_parse (group, &parser->state, ARGP_KEY_ERROR, 0); + } + else + /* Notify parsers of success, and propagate back values from parsers. */ + { + /* We pass over the groups in reverse order so that child groups are + given a chance to do there processing before passing back a value to + the parent. */ + for (group = parser->egroup - 1 + ; group >= parser->groups && (!err || err == EBADKEY) + ; group--) + err = group_parse (group, &parser->state, ARGP_KEY_SUCCESS, 0); + if (err == EBADKEY) + err = 0; /* Some parser didn't understand. */ + } + + /* Call parsers once more, to do any final cleanup. Errors are ignored. */ + for (group = parser->egroup - 1; group >= parser->groups; group--) + group_parse (group, &parser->state, ARGP_KEY_FINI, 0); + + if (err == EBADKEY) + err = EINVAL; + + free (parser->storage); + + return err; +} + +/* Call the user parsers to parse the non-option argument VAL, at the current + position, returning any error. The state NEXT pointer is assumed to have + been adjusted (by getopt) to point after this argument; this function will + adjust it correctly to reflect however many args actually end up being + consumed. */ +static error_t +parser_parse_arg (struct parser *parser, char *val) +{ + /* Save the starting value of NEXT, first adjusting it so that the arg + we're parsing is again the front of the arg vector. */ + int index = --parser->state.next; + error_t err = EBADKEY; + struct group *group; + int key = 0; /* Which of ARGP_KEY_ARG[S] we used. */ + + /* Try to parse the argument in each parser. */ + for (group = parser->groups + ; group < parser->egroup && err == EBADKEY + ; group++) + { + parser->state.next++; /* For ARGP_KEY_ARG, consume the arg. */ + key = ARGP_KEY_ARG; + err = group_parse (group, &parser->state, key, val); + + if (err == EBADKEY) + /* This parser doesn't like ARGP_KEY_ARG; try ARGP_KEY_ARGS instead. */ + { + parser->state.next--; /* For ARGP_KEY_ARGS, put back the arg. */ + key = ARGP_KEY_ARGS; + err = group_parse (group, &parser->state, key, 0); + } + } + + if (! err) + { + if (key == ARGP_KEY_ARGS) + /* The default for ARGP_KEY_ARGS is to assume that if NEXT isn't + changed by the user, *all* arguments should be considered + consumed. */ + parser->state.next = parser->state.argc; + + if (parser->state.next > index) + /* Remember that we successfully processed a non-option + argument -- but only if the user hasn't gotten tricky and set + the clock back. */ + (--group)->args_processed += (parser->state.next - index); + else + /* The user wants to reparse some args, give getopt another try. */ + parser->try_getopt = 1; + } + + return err; +} + +/* Call the user parsers to parse the option OPT, with argument VAL, at the + current position, returning any error. */ +static error_t +parser_parse_opt (struct parser *parser, int opt, char *val) +{ + /* The group key encoded in the high bits; 0 for short opts or + group_number + 1 for long opts. */ + int group_key = opt >> USER_BITS; + error_t err = EBADKEY; + + if (group_key == 0) + /* A short option. By comparing OPT's position in SHORT_OPTS to the + various starting positions in each group's SHORT_END field, we can + determine which group OPT came from. */ + { + struct group *group; + char *short_index = strchr (parser->short_opts, opt); + + if (short_index) + for (group = parser->groups; group < parser->egroup; group++) + if (group->short_end > short_index) + { + err = group_parse (group, &parser->state, opt, + parser->opt_data.optarg); + break; + } + } + else + /* A long option. We use shifts instead of masking for extracting + the user value in order to preserve the sign. */ + err = + group_parse (&parser->groups[group_key - 1], &parser->state, + (opt << GROUP_BITS) >> GROUP_BITS, + parser->opt_data.optarg); + + if (err == EBADKEY) + /* At least currently, an option not recognized is an error in the + parser, because we pre-compute which parser is supposed to deal + with each option. */ + { + static const char bad_key_err[] = + N_("(PROGRAM ERROR) Option should have been recognized!?"); + if (group_key == 0) + __argp_error (&parser->state, "-%c: %s", opt, + dgettext (parser->argp->argp_domain, bad_key_err)); + else + { + struct option *long_opt = parser->long_opts; + while (long_opt->val != opt && long_opt->name) + long_opt++; + __argp_error (&parser->state, "--%s: %s", + long_opt->name ? long_opt->name : "???", + dgettext (parser->argp->argp_domain, bad_key_err)); + } + } + + return err; +} + +/* Parse the next argument in PARSER (as indicated by PARSER->state.next). + Any error from the parsers is returned, and *ARGP_EBADKEY indicates + whether a value of EBADKEY is due to an unrecognized argument (which is + generally not fatal). */ +static error_t +parser_parse_next (struct parser *parser, int *arg_ebadkey) +{ + int opt; + error_t err = 0; + + if (parser->state.quoted && parser->state.next < parser->state.quoted) + /* The next argument pointer has been moved to before the quoted + region, so pretend we never saw the quoting "--", and give getopt + another chance. If the user hasn't removed it, getopt will just + process it again. */ + parser->state.quoted = 0; + + if (parser->try_getopt && !parser->state.quoted) + /* Give getopt a chance to parse this. */ + { + /* Put it back in OPTIND for getopt. */ + parser->opt_data.optind = parser->state.next; + /* Distinguish KEY_ERR from a real option. */ + parser->opt_data.optopt = KEY_END; + if (parser->state.flags & ARGP_LONG_ONLY) + opt = _getopt_long_only_r (parser->state.argc, parser->state.argv, + parser->short_opts, parser->long_opts, 0, + &parser->opt_data); + else + opt = _getopt_long_r (parser->state.argc, parser->state.argv, + parser->short_opts, parser->long_opts, 0, + &parser->opt_data); + /* And see what getopt did. */ + parser->state.next = parser->opt_data.optind; + + if (opt == KEY_END) + /* Getopt says there are no more options, so stop using + getopt; we'll continue if necessary on our own. */ + { + parser->try_getopt = 0; + if (parser->state.next > 1 + && strcmp (parser->state.argv[parser->state.next - 1], QUOTE) + == 0) + /* Not only is this the end of the options, but it's a + "quoted" region, which may have args that *look* like + options, so we definitely shouldn't try to use getopt past + here, whatever happens. */ + parser->state.quoted = parser->state.next; + } + else if (opt == KEY_ERR && parser->opt_data.optopt != KEY_END) + /* KEY_ERR can have the same value as a valid user short + option, but in the case of a real error, getopt sets OPTOPT + to the offending character, which can never be KEY_END. */ + { + *arg_ebadkey = 0; + return EBADKEY; + } + } + else + opt = KEY_END; + + if (opt == KEY_END) + { + /* We're past what getopt considers the options. */ + if (parser->state.next >= parser->state.argc + || (parser->state.flags & ARGP_NO_ARGS)) + /* Indicate that we're done. */ + { + *arg_ebadkey = 1; + return EBADKEY; + } + else + /* A non-option arg; simulate what getopt might have done. */ + { + opt = KEY_ARG; + parser->opt_data.optarg = parser->state.argv[parser->state.next++]; + } + } + + if (opt == KEY_ARG) + /* A non-option argument; try each parser in turn. */ + err = parser_parse_arg (parser, parser->opt_data.optarg); + else + err = parser_parse_opt (parser, opt, parser->opt_data.optarg); + + if (err == EBADKEY) + *arg_ebadkey = (opt == KEY_END || opt == KEY_ARG); + + return err; +} + +/* Parse the options strings in ARGC & ARGV according to the argp in ARGP. + FLAGS is one of the ARGP_ flags above. If END_INDEX is non-NULL, the + index in ARGV of the first unparsed option is returned in it. If an + unknown option is present, EINVAL is returned; if some parser routine + returned a non-zero value, it is returned; otherwise 0 is returned. */ +error_t +__argp_parse (const struct argp *argp, int argc, char **argv, unsigned flags, + int *end_index, void *input) +{ + error_t err; + struct parser parser; + + /* If true, then err == EBADKEY is a result of a non-option argument failing + to be parsed (which in some cases isn't actually an error). */ + int arg_ebadkey = 0; + +#ifndef _LIBC + if (!(flags & ARGP_PARSE_ARGV0)) + { +#ifdef HAVE_DECL_PROGRAM_INVOCATION_NAME + if (!program_invocation_name) + program_invocation_name = argv[0]; +#endif +#ifdef HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME + if (!program_invocation_short_name) + program_invocation_short_name = __argp_base_name (argv[0]); +#endif + } +#endif + + if (! (flags & ARGP_NO_HELP)) + /* Add our own options. */ + { + struct argp_child *child = alloca (4 * sizeof (struct argp_child)); + struct argp *top_argp = alloca (sizeof (struct argp)); + + /* TOP_ARGP has no options, it just serves to group the user & default + argps. */ + memset (top_argp, 0, sizeof (*top_argp)); + top_argp->children = child; + + memset (child, 0, 4 * sizeof (struct argp_child)); + + if (argp) + (child++)->argp = argp; + (child++)->argp = &argp_default_argp; + if (argp_program_version || argp_program_version_hook) + (child++)->argp = &argp_version_argp; + child->argp = 0; + + argp = top_argp; + } + + /* Construct a parser for these arguments. */ + err = parser_init (&parser, argp, argc, argv, flags, input); + + if (! err) + /* Parse! */ + { + while (! err) + err = parser_parse_next (&parser, &arg_ebadkey); + err = parser_finalize (&parser, err, arg_ebadkey, end_index); + } + + return err; +} +#ifdef weak_alias +weak_alias (__argp_parse, argp_parse) +#endif + +/* Return the input field for ARGP in the parser corresponding to STATE; used + by the help routines. */ +void * +__argp_input (const struct argp *argp, const struct argp_state *state) +{ + if (state) + { + struct group *group; + struct parser *parser = state->pstate; + + for (group = parser->groups; group < parser->egroup; group++) + if (group->argp == argp) + return group->input; + } + + return 0; +} +#ifdef weak_alias +weak_alias (__argp_input, _argp_input) +#endif diff --git a/gnulib/lib/argp-pin.c b/gnulib/lib/argp-pin.c new file mode 100644 index 0000000..aab8160 --- /dev/null +++ b/gnulib/lib/argp-pin.c @@ -0,0 +1,26 @@ +/* Full and short program names for argp module + Copyright (C) 2005, 2009-2012 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 <http://www.gnu.org/licenses/>. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#ifndef HAVE_PROGRAM_INVOCATION_SHORT_NAME +char *program_invocation_short_name = 0; +#endif +#ifndef HAVE_PROGRAM_INVOCATION_NAME +char *program_invocation_name = 0; +#endif diff --git a/gnulib/lib/argp-pv.c b/gnulib/lib/argp-pv.c new file mode 100644 index 0000000..1d5a010 --- /dev/null +++ b/gnulib/lib/argp-pv.c @@ -0,0 +1,34 @@ +/* Default definition for ARGP_PROGRAM_VERSION. + Copyright (C) 1996-1997, 1999, 2006, 2009-2012 Free Software Foundation, + Inc. + This file is part of the GNU C Library. + Written by Miles Bader <miles@gnu.ai.mit.edu>. + + 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 <http://www.gnu.org/licenses/>. */ + +/* If set by the user program to a non-zero value, then a default option + --version is added (unless the ARGP_NO_HELP flag is used), which will + print this string followed by a newline and exit (unless the + ARGP_NO_EXIT flag is used). Overridden by ARGP_PROGRAM_VERSION_HOOK. */ +const char *argp_program_version +/* This variable should be zero-initialized. On most systems, putting it into + BSS is sufficient. Not so on MacOS X 10.3 and 10.4, see + <http://lists.gnu.org/archive/html/bug-gnulib/2009-01/msg00329.html> + <http://lists.gnu.org/archive/html/bug-gnulib/2009-08/msg00096.html>. */ +#if defined __ELF__ + /* On ELF systems, variables in BSS behave well. */ +#else + = (const char *) 0 +#endif + ; diff --git a/gnulib/lib/argp-pvh.c b/gnulib/lib/argp-pvh.c new file mode 100644 index 0000000..5c858b3 --- /dev/null +++ b/gnulib/lib/argp-pvh.c @@ -0,0 +1,31 @@ +/* Default definition for ARGP_PROGRAM_VERSION_HOOK. + Copyright (C) 1996-1997, 1999, 2004, 2009-2012 Free Software Foundation, + Inc. + This file is part of the GNU C Library. + Written by Miles Bader <miles@gnu.ai.mit.edu>. + + 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 <http://www.gnu.org/licenses/>. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include "argp.h" + +/* If set by the user program to a non-zero value, then a default option + --version is added (unless the ARGP_NO_HELP flag is used), which calls + this function with a stream to print the version to and a pointer to the + current parsing state, and then exits (unless the ARGP_NO_EXIT flag is + used). This variable takes precedent over ARGP_PROGRAM_VERSION. */ +void (*argp_program_version_hook) (FILE *stream, struct argp_state *state) = NULL; diff --git a/gnulib/lib/argp-xinl.c b/gnulib/lib/argp-xinl.c new file mode 100644 index 0000000..7d45fcb --- /dev/null +++ b/gnulib/lib/argp-xinl.c @@ -0,0 +1,42 @@ +/* Real definitions for extern inline functions in argp.h + Copyright (C) 1997-1998, 2004, 2009-2012 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Written by Miles Bader <miles@gnu.ai.mit.edu>. + + 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 <http://www.gnu.org/licenses/>. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#if defined _LIBC || defined HAVE_FEATURES_H +# include <features.h> +#endif + +#ifndef __USE_EXTERN_INLINES +# define __USE_EXTERN_INLINES 1 +#endif +#define ARGP_EI +#undef __OPTIMIZE__ +#define __OPTIMIZE__ 1 +#include "argp.h" + +/* Add weak aliases. */ +#if _LIBC - 0 && defined (weak_alias) + +weak_alias (__argp_usage, argp_usage) +weak_alias (__option_is_short, _option_is_short) +weak_alias (__option_is_end, _option_is_end) + +#endif diff --git a/gnulib/lib/argp.h b/gnulib/lib/argp.h new file mode 100644 index 0000000..c0c68a6 --- /dev/null +++ b/gnulib/lib/argp.h @@ -0,0 +1,645 @@ +/* Hierarchical argument parsing, layered over getopt. + Copyright (C) 1995-1999, 2003-2012 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Written by Miles Bader <miles@gnu.ai.mit.edu>. + + 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 <http://www.gnu.org/licenses/>. */ + +#ifndef _ARGP_H +#define _ARGP_H + +#include <stdio.h> +#include <ctype.h> +#include <getopt.h> +#include <limits.h> + +#define __need_error_t +#include <errno.h> + +#ifndef __THROW +# define __THROW +#endif +#ifndef __NTH +# define __NTH(fct) fct __THROW +#endif + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The __-protected variants of the attributes 'format' and 'printf' are + accepted by gcc versions 2.6.4 (effectively 2.7) and later. + We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because + gnulib and libintl do '#define printf __printf__' when they override + the 'printf' function. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) +#else +# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ +#endif + +/* GCC 2.95 and later have "__restrict"; C99 compilers have + "restrict", and "configure" may have defined "restrict". + Other compilers use __restrict, __restrict__, and _Restrict, and + 'configure' might #define 'restrict' to those words. */ +#ifndef __restrict +# if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__)) +# if 199901L <= __STDC_VERSION__ +# define __restrict restrict +# else +# define __restrict +# endif +# endif +#endif + +#ifndef __error_t_defined +typedef int error_t; +# define __error_t_defined +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* A description of a particular option. A pointer to an array of + these is passed in the OPTIONS field of an argp structure. Each option + entry can correspond to one long option and/or one short option; more + names for the same option can be added by following an entry in an option + array with options having the OPTION_ALIAS flag set. */ +struct argp_option +{ + /* The long option name. For more than one name for the same option, you + can use following options with the OPTION_ALIAS flag set. */ + const char *name; + + /* What key is returned for this option. If > 0 and printable, then it's + also accepted as a short option. */ + int key; + + /* If non-NULL, this is the name of the argument associated with this + option, which is required unless the OPTION_ARG_OPTIONAL flag is set. */ + const char *arg; + + /* OPTION_ flags. */ + int flags; + + /* The doc string for this option. If both NAME and KEY are 0, This string + will be printed outdented from the normal option column, making it + useful as a group header (it will be the first thing printed in its + group); in this usage, it's conventional to end the string with a ':'. + + Write the initial value as N_("TEXT") if you want xgettext to collect + it into a POT file. */ + const char *doc; + + /* The group this option is in. In a long help message, options are sorted + alphabetically within each group, and the groups presented in the order + 0, 1, 2, ..., n, -m, ..., -2, -1. Every entry in an options array with + if this field 0 will inherit the group number of the previous entry, or + zero if it's the first one, unless its a group header (NAME and KEY both + 0), in which case, the previous entry + 1 is the default. Automagic + options such as --help are put into group -1. */ + int group; +}; + +/* The argument associated with this option is optional. */ +#define OPTION_ARG_OPTIONAL 0x1 + +/* This option isn't displayed in any help messages. */ +#define OPTION_HIDDEN 0x2 + +/* This option is an alias for the closest previous non-alias option. This + means that it will be displayed in the same help entry, and will inherit + fields other than NAME and KEY from the aliased option. */ +#define OPTION_ALIAS 0x4 + +/* This option isn't actually an option (and so should be ignored by the + actual option parser), but rather an arbitrary piece of documentation that + should be displayed in much the same manner as the options. If this flag + is set, then the option NAME field is displayed unmodified (e.g., no '--' + prefix is added) at the left-margin (where a *short* option would normally + be displayed), and the documentation string in the normal place. The NAME + field will be translated using gettext, unless OPTION_NO_TRANS is set (see + below). For purposes of sorting, any leading whitespace and punctuation is + ignored, except that if the first non-whitespace character is not '-', this + entry is displayed after all options (and OPTION_DOC entries with a leading + '-') in the same group. */ +#define OPTION_DOC 0x8 + +/* This option shouldn't be included in "long" usage messages (but is still + included in help messages). This is mainly intended for options that are + completely documented in an argp's ARGS_DOC field, in which case including + the option in the generic usage list would be redundant. For instance, + if ARGS_DOC is "FOO BAR\n-x BLAH", and the '-x' option's purpose is to + distinguish these two cases, -x should probably be marked + OPTION_NO_USAGE. */ +#define OPTION_NO_USAGE 0x10 + +/* Valid only in conjunction with OPTION_DOC. This option disables translation + of option name. */ +#define OPTION_NO_TRANS 0x20 + + +struct argp; /* fwd declare this type */ +struct argp_state; /* " */ +struct argp_child; /* " */ + +/* The type of a pointer to an argp parsing function. */ +typedef error_t (*argp_parser_t) (int key, char *arg, + struct argp_state *state); + +/* What to return for unrecognized keys. For special ARGP_KEY_ keys, such + returns will simply be ignored. For user keys, this error will be turned + into EINVAL (if the call to argp_parse is such that errors are propagated + back to the user instead of exiting); returning EINVAL itself would result + in an immediate stop to parsing in *all* cases. */ +#define ARGP_ERR_UNKNOWN E2BIG /* Hurd should never need E2BIG. XXX */ + +/* Special values for the KEY argument to an argument parsing function. + ARGP_ERR_UNKNOWN should be returned if they aren't understood. + + The sequence of keys to a parsing function is either (where each + uppercased word should be prefixed by 'ARGP_KEY_' and opt is a user key): + + INIT opt... NO_ARGS END SUCCESS -- No non-option arguments at all + or INIT (opt | ARG)... END SUCCESS -- All non-option args parsed + or INIT (opt | ARG)... SUCCESS -- Some non-option arg unrecognized + + The third case is where every parser returned ARGP_KEY_UNKNOWN for an + argument, in which case parsing stops at that argument (returning the + unparsed arguments to the caller of argp_parse if requested, or stopping + with an error message if not). + + If an error occurs (either detected by argp, or because the parsing + function returned an error value), then the parser is called with + ARGP_KEY_ERROR, and no further calls are made. */ + +/* This is not an option at all, but rather a command line argument. If a + parser receiving this key returns success, the fact is recorded, and the + ARGP_KEY_NO_ARGS case won't be used. HOWEVER, if while processing the + argument, a parser function decrements the NEXT field of the state it's + passed, the option won't be considered processed; this is to allow you to + actually modify the argument (perhaps into an option), and have it + processed again. */ +#define ARGP_KEY_ARG 0 +/* There are remaining arguments not parsed by any parser, which may be found + starting at (STATE->argv + STATE->next). If success is returned, but + STATE->next left untouched, it's assumed that all arguments were consume, + otherwise, the parser should adjust STATE->next to reflect any arguments + consumed. */ +#define ARGP_KEY_ARGS 0x1000006 +/* There are no more command line arguments at all. */ +#define ARGP_KEY_END 0x1000001 +/* Because it's common to want to do some special processing if there aren't + any non-option args, user parsers are called with this key if they didn't + successfully process any non-option arguments. Called just before + ARGP_KEY_END (where more general validity checks on previously parsed + arguments can take place). */ +#define ARGP_KEY_NO_ARGS 0x1000002 +/* Passed in before any parsing is done. Afterwards, the values of each + element of the CHILD_INPUT field, if any, in the state structure is + copied to each child's state to be the initial value of the INPUT field. */ +#define ARGP_KEY_INIT 0x1000003 +/* Use after all other keys, including SUCCESS & END. */ +#define ARGP_KEY_FINI 0x1000007 +/* Passed in when parsing has successfully been completed (even if there are + still arguments remaining). */ +#define ARGP_KEY_SUCCESS 0x1000004 +/* Passed in if an error occurs. */ +#define ARGP_KEY_ERROR 0x1000005 + +/* An argp structure contains a set of options declarations, a function to + deal with parsing one, documentation string, a possible vector of child + argp's, and perhaps a function to filter help output. When actually + parsing options, getopt is called with the union of all the argp + structures chained together through their CHILD pointers, with conflicts + being resolved in favor of the first occurrence in the chain. */ +struct argp +{ + /* An array of argp_option structures, terminated by an entry with both + NAME and KEY having a value of 0. */ + const struct argp_option *options; + + /* What to do with an option from this structure. KEY is the key + associated with the option, and ARG is any associated argument (NULL if + none was supplied). If KEY isn't understood, ARGP_ERR_UNKNOWN should be + returned. If a non-zero, non-ARGP_ERR_UNKNOWN value is returned, then + parsing is stopped immediately, and that value is returned from + argp_parse(). For special (non-user-supplied) values of KEY, see the + ARGP_KEY_ definitions below. */ + argp_parser_t parser; + + /* A string describing what other arguments are wanted by this program. It + is only used by argp_usage to print the "Usage:" message. If it + contains newlines, the strings separated by them are considered + alternative usage patterns, and printed on separate lines (lines after + the first are prefix by " or: " instead of "Usage:"). */ + const char *args_doc; + + /* If non-NULL, a string containing extra text to be printed before and + after the options in a long help message (separated by a vertical tab + '\v' character). + Write the initial value as N_("BEFORE-TEXT") "\v" N_("AFTER-TEXT") if + you want xgettext to collect the two pieces of text into a POT file. */ + const char *doc; + + /* A vector of argp_children structures, terminated by a member with a 0 + argp field, pointing to child argps should be parsed with this one. Any + conflicts are resolved in favor of this argp, or early argps in the + CHILDREN list. This field is useful if you use libraries that supply + their own argp structure, which you want to use in conjunction with your + own. */ + const struct argp_child *children; + + /* If non-zero, this should be a function to filter the output of help + messages. KEY is either a key from an option, in which case TEXT is + that option's help text, or a special key from the ARGP_KEY_HELP_ + defines, below, describing which other help text TEXT is. The function + should return either TEXT, if it should be used as-is, a replacement + string, which should be malloced, and will be freed by argp, or NULL, + meaning "print nothing". The value for TEXT is *after* any translation + has been done, so if any of the replacement text also needs translation, + that should be done by the filter function. INPUT is either the input + supplied to argp_parse, or NULL, if argp_help was called directly. */ + char *(*help_filter) (int __key, const char *__text, void *__input); + + /* If non-zero the strings used in the argp library are translated using + the domain described by this string. Otherwise the currently installed + default domain is used. */ + const char *argp_domain; +}; + +/* Possible KEY arguments to a help filter function. */ +#define ARGP_KEY_HELP_PRE_DOC 0x2000001 /* Help text preceding options. */ +#define ARGP_KEY_HELP_POST_DOC 0x2000002 /* Help text following options. */ +#define ARGP_KEY_HELP_HEADER 0x2000003 /* Option header string. */ +#define ARGP_KEY_HELP_EXTRA 0x2000004 /* After all other documentation; + TEXT is NULL for this key. */ +/* Explanatory note emitted when duplicate option arguments have been + suppressed. */ +#define ARGP_KEY_HELP_DUP_ARGS_NOTE 0x2000005 +#define ARGP_KEY_HELP_ARGS_DOC 0x2000006 /* Argument doc string. */ + +/* When an argp has a non-zero CHILDREN field, it should point to a vector of + argp_child structures, each of which describes a subsidiary argp. */ +struct argp_child +{ + /* The child parser. */ + const struct argp *argp; + + /* Flags for this child. */ + int flags; + + /* If non-zero, an optional header to be printed in help output before the + child options. As a side-effect, a non-zero value forces the child + options to be grouped together; to achieve this effect without actually + printing a header string, use a value of "". */ + const char *header; + + /* Where to group the child options relative to the other ("consolidated") + options in the parent argp; the values are the same as the GROUP field + in argp_option structs, but all child-groupings follow parent options at + a particular group level. If both this field and HEADER are zero, then + they aren't grouped at all, but rather merged with the parent options + (merging the child's grouping levels with the parents). */ + int group; +}; + +/* Parsing state. This is provided to parsing functions called by argp, + which may examine and, as noted, modify fields. */ +struct argp_state +{ + /* The top level ARGP being parsed. */ + const struct argp *root_argp; + + /* The argument vector being parsed. May be modified. */ + int argc; + char **argv; + + /* The index in ARGV of the next arg that to be parsed. May be modified. */ + int next; + + /* The flags supplied to argp_parse. May be modified. */ + unsigned flags; + + /* While calling a parsing function with a key of ARGP_KEY_ARG, this is the + number of the current arg, starting at zero, and incremented after each + such call returns. At all other times, this is the number of such + arguments that have been processed. */ + unsigned arg_num; + + /* If non-zero, the index in ARGV of the first argument following a special + '--' argument (which prevents anything following being interpreted as an + option). Only set once argument parsing has proceeded past this point. */ + int quoted; + + /* An arbitrary pointer passed in from the user. */ + void *input; + /* Values to pass to child parsers. This vector will be the same length as + the number of children for the current parser. */ + void **child_inputs; + + /* For the parser's use. Initialized to 0. */ + void *hook; + + /* The name used when printing messages. This is initialized to ARGV[0], + or PROGRAM_INVOCATION_NAME if that is unavailable. */ + char *name; + + /* Streams used when argp prints something. */ + FILE *err_stream; /* For errors; initialized to stderr. */ + FILE *out_stream; /* For information; initialized to stdout. */ + + void *pstate; /* Private, for use by argp. */ +}; + +/* Flags for argp_parse (note that the defaults are those that are + convenient for program command line parsing): */ + +/* Don't ignore the first element of ARGV. Normally (and always unless + ARGP_NO_ERRS is set) the first element of the argument vector is + skipped for option parsing purposes, as it corresponds to the program name + in a command line. */ +#define ARGP_PARSE_ARGV0 0x01 + +/* Don't print error messages for unknown options to stderr; unless this flag + is set, ARGP_PARSE_ARGV0 is ignored, as ARGV[0] is used as the program + name in the error messages. This flag implies ARGP_NO_EXIT (on the + assumption that silent exiting upon errors is bad behaviour). */ +#define ARGP_NO_ERRS 0x02 + +/* Don't parse any non-option args. Normally non-option args are parsed by + calling the parse functions with a key of ARGP_KEY_ARG, and the actual arg + as the value. Since it's impossible to know which parse function wants to + handle it, each one is called in turn, until one returns 0 or an error + other than ARGP_ERR_UNKNOWN; if an argument is handled by no one, the + argp_parse returns prematurely (but with a return value of 0). If all + args have been parsed without error, all parsing functions are called one + last time with a key of ARGP_KEY_END. This flag needn't normally be set, + as the normal behavior is to stop parsing as soon as some argument can't + be handled. */ +#define ARGP_NO_ARGS 0x04 + +/* Parse options and arguments in the same order they occur on the command + line -- normally they're rearranged so that all options come first. */ +#define ARGP_IN_ORDER 0x08 + +/* Don't provide the standard long option --help, which causes usage and + option help information to be output to stdout, and exit (0) called. */ +#define ARGP_NO_HELP 0x10 + +/* Don't exit on errors (they may still result in error messages). */ +#define ARGP_NO_EXIT 0x20 + +/* Use the gnu getopt "long-only" rules for parsing arguments. */ +#define ARGP_LONG_ONLY 0x40 + +/* Turns off any message-printing/exiting options. */ +#define ARGP_SILENT (ARGP_NO_EXIT | ARGP_NO_ERRS | ARGP_NO_HELP) + +/* Parse the options strings in ARGC & ARGV according to the options in ARGP. + FLAGS is one of the ARGP_ flags above. If ARG_INDEX is non-NULL, the + index in ARGV of the first unparsed option is returned in it. If an + unknown option is present, ARGP_ERR_UNKNOWN is returned; if some parser + routine returned a non-zero value, it is returned; otherwise 0 is + returned. This function may also call exit unless the ARGP_NO_HELP flag + is set. INPUT is a pointer to a value to be passed in to the parser. */ +extern error_t argp_parse (const struct argp *__restrict __argp, + int /*argc*/, char **__restrict /*argv*/, + unsigned __flags, int *__restrict __arg_index, + void *__restrict __input); +extern error_t __argp_parse (const struct argp *__restrict __argp, + int /*argc*/, char **__restrict /*argv*/, + unsigned __flags, int *__restrict __arg_index, + void *__restrict __input); + +/* Global variables. */ + +/* GNULIB makes sure both program_invocation_name and + program_invocation_short_name are available */ +#ifdef GNULIB_PROGRAM_INVOCATION_NAME +extern char *program_invocation_name; +# undef HAVE_DECL_PROGRAM_INVOCATION_NAME +# define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +#endif + +#ifdef GNULIB_PROGRAM_INVOCATION_SHORT_NAME +extern char *program_invocation_short_name; +# undef HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME +# define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +#endif + +/* If defined or set by the user program to a non-zero value, then a default + option --version is added (unless the ARGP_NO_HELP flag is used), which + will print this string followed by a newline and exit (unless the + ARGP_NO_EXIT flag is used). Overridden by ARGP_PROGRAM_VERSION_HOOK. */ +extern const char *argp_program_version; + +/* If defined or set by the user program to a non-zero value, then a default + option --version is added (unless the ARGP_NO_HELP flag is used), which + calls this function with a stream to print the version to and a pointer to + the current parsing state, and then exits (unless the ARGP_NO_EXIT flag is + used). This variable takes precedent over ARGP_PROGRAM_VERSION. */ +extern void (*argp_program_version_hook) (FILE *__restrict __stream, + struct argp_state *__restrict + __state); + +/* If defined or set by the user program, it should point to string that is + the bug-reporting address for the program. It will be printed by + argp_help if the ARGP_HELP_BUG_ADDR flag is set (as it is by various + standard help messages), embedded in a sentence that says something like + "Report bugs to ADDR." */ +extern const char *argp_program_bug_address; + +/* The exit status that argp will use when exiting due to a parsing error. + If not defined or set by the user program, this defaults to EX_USAGE from + <sysexits.h>. */ +extern error_t argp_err_exit_status; + +/* Flags for argp_help. */ +#define ARGP_HELP_USAGE 0x01 /* a Usage: message. */ +#define ARGP_HELP_SHORT_USAGE 0x02 /* " but don't actually print options. */ +#define ARGP_HELP_SEE 0x04 /* a "Try ... for more help" message. */ +#define ARGP_HELP_LONG 0x08 /* a long help message. */ +#define ARGP_HELP_PRE_DOC 0x10 /* doc string preceding long help. */ +#define ARGP_HELP_POST_DOC 0x20 /* doc string following long help. */ +#define ARGP_HELP_DOC (ARGP_HELP_PRE_DOC | ARGP_HELP_POST_DOC) +#define ARGP_HELP_BUG_ADDR 0x40 /* bug report address */ +#define ARGP_HELP_LONG_ONLY 0x80 /* modify output appropriately to + reflect ARGP_LONG_ONLY mode. */ + +/* These ARGP_HELP flags are only understood by argp_state_help. */ +#define ARGP_HELP_EXIT_ERR 0x100 /* Call exit(1) instead of returning. */ +#define ARGP_HELP_EXIT_OK 0x200 /* Call exit(0) instead of returning. */ + +/* The standard thing to do after a program command line parsing error, if an + error message has already been printed. */ +#define ARGP_HELP_STD_ERR \ + (ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR) +/* The standard thing to do after a program command line parsing error, if no + more specific error message has been printed. */ +#define ARGP_HELP_STD_USAGE \ + (ARGP_HELP_SHORT_USAGE | ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR) +/* The standard thing to do in response to a --help option. */ +#define ARGP_HELP_STD_HELP \ + (ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG | ARGP_HELP_EXIT_OK \ + | ARGP_HELP_DOC | ARGP_HELP_BUG_ADDR) + +/* Output a usage message for ARGP to STREAM. FLAGS are from the set + ARGP_HELP_*. */ +extern void argp_help (const struct argp *__restrict __argp, + FILE *__restrict __stream, + unsigned __flags, char *__restrict __name); +extern void __argp_help (const struct argp *__restrict __argp, + FILE *__restrict __stream, unsigned __flags, + char *__name); + +/* The following routines are intended to be called from within an argp + parsing routine (thus taking an argp_state structure as the first + argument). They may or may not print an error message and exit, depending + on the flags in STATE -- in any case, the caller should be prepared for + them *not* to exit, and should return an appropriate error after calling + them. [argp_usage & argp_error should probably be called argp_state_..., + but they're used often enough that they should be short] */ + +/* Output, if appropriate, a usage message for STATE to STREAM. FLAGS are + from the set ARGP_HELP_*. */ +extern void argp_state_help (const struct argp_state *__restrict __state, + FILE *__restrict __stream, + unsigned int __flags); +extern void __argp_state_help (const struct argp_state *__restrict __state, + FILE *__restrict __stream, + unsigned int __flags); + +#if _LIBC || !defined __USE_EXTERN_INLINES +/* Possibly output the standard usage message for ARGP to stderr and exit. */ +extern void argp_usage (const struct argp_state *__state); +extern void __argp_usage (const struct argp_state *__state); +#endif + +/* If appropriate, print the printf string FMT and following args, preceded + by the program name and ':', to stderr, and followed by a "Try ... --help" + message, then exit (1). */ +extern void argp_error (const struct argp_state *__restrict __state, + const char *__restrict __fmt, ...) + _GL_ATTRIBUTE_FORMAT ((__printf__, 2, 3)); +extern void __argp_error (const struct argp_state *__restrict __state, + const char *__restrict __fmt, ...) + _GL_ATTRIBUTE_FORMAT ((__printf__, 2, 3)); + +/* Similar to the standard gnu error-reporting function error(), but will + respect the ARGP_NO_EXIT and ARGP_NO_ERRS flags in STATE, and will print + to STATE->err_stream. This is useful for argument parsing code that is + shared between program startup (when exiting is desired) and runtime + option parsing (when typically an error code is returned instead). The + difference between this function and argp_error is that the latter is for + *parsing errors*, and the former is for other problems that occur during + parsing but don't reflect a (syntactic) problem with the input. */ +extern void argp_failure (const struct argp_state *__restrict __state, + int __status, int __errnum, + const char *__restrict __fmt, ...) + _GL_ATTRIBUTE_FORMAT ((__printf__, 4, 5)); +extern void __argp_failure (const struct argp_state *__restrict __state, + int __status, int __errnum, + const char *__restrict __fmt, ...) + _GL_ATTRIBUTE_FORMAT ((__printf__, 4, 5)); + +#if _LIBC || !defined __USE_EXTERN_INLINES +/* Returns true if the option OPT is a valid short option. */ +extern int _option_is_short (const struct argp_option *__opt) __THROW; +extern int __option_is_short (const struct argp_option *__opt) __THROW; + +/* Returns true if the option OPT is in fact the last (unused) entry in an + options array. */ +extern int _option_is_end (const struct argp_option *__opt) __THROW; +extern int __option_is_end (const struct argp_option *__opt) __THROW; +#endif + +/* Return the input field for ARGP in the parser corresponding to STATE; used + by the help routines. */ +extern void *_argp_input (const struct argp *__restrict __argp, + const struct argp_state *__restrict __state) + __THROW; +extern void *__argp_input (const struct argp *__restrict __argp, + const struct argp_state *__restrict __state) + __THROW; + +#ifdef __USE_EXTERN_INLINES + +# if !_LIBC +# define __argp_usage argp_usage +# define __argp_state_help argp_state_help +# define __option_is_short _option_is_short +# define __option_is_end _option_is_end +# endif + +# ifndef ARGP_EI +# ifdef __GNUC__ + /* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 + inline semantics, unless -fgnu89-inline is used. It defines a macro + __GNUC_STDC_INLINE__ to indicate this situation or a macro + __GNUC_GNU_INLINE__ to indicate the opposite situation. + GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline + semantics but warns, unless -fgnu89-inline is used: + warning: C99 inline functions are not supported; using GNU89 + warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute + It defines a macro __GNUC_GNU_INLINE__ to indicate this situation. */ +# if defined __GNUC_STDC_INLINE__ +# define ARGP_EI __inline__ +# elif defined __GNUC_GNU_INLINE__ +# define ARGP_EI extern __inline__ __attribute__ ((__gnu_inline__)) +# else +# define ARGP_EI extern __inline__ +# endif +# else + /* With other compilers, assume the ISO C99 meaning of 'inline', if + the compiler supports 'inline' at all. */ +# define ARGP_EI inline +# endif +# endif + +ARGP_EI void +__argp_usage (const struct argp_state *__state) +{ + __argp_state_help (__state, stderr, ARGP_HELP_STD_USAGE); +} + +ARGP_EI int +__NTH (__option_is_short (const struct argp_option *__opt)) +{ + if (__opt->flags & OPTION_DOC) + return 0; + else + { + int __key = __opt->key; + return __key > 0 && __key <= UCHAR_MAX && isprint (__key); + } +} + +ARGP_EI int +__NTH (__option_is_end (const struct argp_option *__opt)) +{ + return !__opt->key && !__opt->name && !__opt->doc && !__opt->group; +} + +# if !_LIBC +# undef __argp_usage +# undef __argp_state_help +# undef __option_is_short +# undef __option_is_end +# endif +#endif /* Use extern inlines. */ + +#ifdef __cplusplus +} +#endif + +#endif /* argp.h */ diff --git a/gnulib/lib/asnprintf.c b/gnulib/lib/asnprintf.c new file mode 100644 index 0000000..f6f70c9 --- /dev/null +++ b/gnulib/lib/asnprintf.c @@ -0,0 +1,34 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006, 2009-2012 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, see <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include "vasnprintf.h" + +#include <stdarg.h> + +char * +asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) +{ + va_list args; + char *result; + + va_start (args, format); + result = vasnprintf (resultbuf, lengthp, format, args); + va_end (args); + return result; +} diff --git a/gnulib/lib/basename-lgpl.c b/gnulib/lib/basename-lgpl.c new file mode 100644 index 0000000..43ef8c2 --- /dev/null +++ b/gnulib/lib/basename-lgpl.c @@ -0,0 +1,75 @@ +/* basename.c -- return the last element in a file name + + Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2012 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 <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include "dirname.h" + +#include <string.h> + +/* Return the address of the last file name component of NAME. If + NAME has no relative file name components because it is a file + system root, return the empty string. */ + +char * +last_component (char const *name) +{ + char const *base = name + FILE_SYSTEM_PREFIX_LEN (name); + char const *p; + bool saw_slash = false; + + while (ISSLASH (*base)) + base++; + + for (p = base; *p; p++) + { + if (ISSLASH (*p)) + saw_slash = true; + else if (saw_slash) + { + base = p; + saw_slash = false; + } + } + + return (char *) base; +} + +/* Return the length of the basename NAME. Typically NAME is the + value returned by base_name or last_component. Act like strlen + (NAME), except omit all trailing slashes. */ + +size_t +base_len (char const *name) +{ + size_t len; + size_t prefix_len = FILE_SYSTEM_PREFIX_LEN (name); + + for (len = strlen (name); 1 < len && ISSLASH (name[len - 1]); len--) + continue; + + if (DOUBLE_SLASH_IS_DISTINCT_ROOT && len == 1 + && ISSLASH (name[0]) && ISSLASH (name[1]) && ! name[2]) + return 2; + + if (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE && prefix_len + && len == prefix_len && ISSLASH (name[prefix_len])) + return prefix_len + 1; + + return len; +} diff --git a/gnulib/lib/dirname-lgpl.c b/gnulib/lib/dirname-lgpl.c new file mode 100644 index 0000000..2895cbc --- /dev/null +++ b/gnulib/lib/dirname-lgpl.c @@ -0,0 +1,86 @@ +/* dirname.c -- return all but the last element in a file name + + Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2012 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 <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include "dirname.h" + +#include <stdlib.h> +#include <string.h> + +/* Return the length of the prefix of FILE that will be used by + dir_name. If FILE is in the working directory, this returns zero + even though 'dir_name (FILE)' will return ".". Works properly even + if there are trailing slashes (by effectively ignoring them). */ + +size_t +dir_len (char const *file) +{ + size_t prefix_length = FILE_SYSTEM_PREFIX_LEN (file); + size_t length; + + /* Advance prefix_length beyond important leading slashes. */ + prefix_length += (prefix_length != 0 + ? (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE + && ISSLASH (file[prefix_length])) + : (ISSLASH (file[0]) + ? ((DOUBLE_SLASH_IS_DISTINCT_ROOT + && ISSLASH (file[1]) && ! ISSLASH (file[2]) + ? 2 : 1)) + : 0)); + + /* Strip the basename and any redundant slashes before it. */ + for (length = last_component (file) - file; + prefix_length < length; length--) + if (! ISSLASH (file[length - 1])) + break; + return length; +} + + +/* In general, we can't use the builtin 'dirname' function if available, + since it has different meanings in different environments. + In some environments the builtin 'dirname' modifies its argument. + + Return the leading directories part of FILE, allocated with malloc. + Works properly even if there are trailing slashes (by effectively + ignoring them). Return NULL on failure. + + If lstat (FILE) would succeed, then { chdir (dir_name (FILE)); + lstat (base_name (FILE)); } will access the same file. Likewise, + if the sequence { chdir (dir_name (FILE)); + rename (base_name (FILE), "foo"); } succeeds, you have renamed FILE + to "foo" in the same directory FILE was in. */ + +char * +mdir_name (char const *file) +{ + size_t length = dir_len (file); + bool append_dot = (length == 0 + || (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE + && length == FILE_SYSTEM_PREFIX_LEN (file) + && file[2] != '\0' && ! ISSLASH (file[2]))); + char *dir = malloc (length + append_dot + 1); + if (!dir) + return NULL; + memcpy (dir, file, length); + if (append_dot) + dir[length++] = '.'; + dir[length] = '\0'; + return dir; +} diff --git a/gnulib/lib/dirname.h b/gnulib/lib/dirname.h new file mode 100644 index 0000000..51a685c --- /dev/null +++ b/gnulib/lib/dirname.h @@ -0,0 +1,46 @@ +/* Take file names apart into directory and base names. + + Copyright (C) 1998, 2001, 2003-2006, 2009-2012 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 <http://www.gnu.org/licenses/>. */ + +#ifndef DIRNAME_H_ +# define DIRNAME_H_ 1 + +# include <stdbool.h> +# include <stddef.h> +# include "dosname.h" + +# ifndef DIRECTORY_SEPARATOR +# define DIRECTORY_SEPARATOR '/' +# endif + +# ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT +# define DOUBLE_SLASH_IS_DISTINCT_ROOT 0 +# endif + +# if GNULIB_DIRNAME +char *base_name (char const *file); +char *dir_name (char const *file); +# endif + +char *mdir_name (char const *file); +size_t base_len (char const *file) _GL_ATTRIBUTE_PURE; +size_t dir_len (char const *file) _GL_ATTRIBUTE_PURE; +char *last_component (char const *file) _GL_ATTRIBUTE_PURE; + +bool strip_trailing_slashes (char *file); + +#endif /* not DIRNAME_H_ */ diff --git a/gnulib/lib/dosname.h b/gnulib/lib/dosname.h new file mode 100644 index 0000000..0468ce4 --- /dev/null +++ b/gnulib/lib/dosname.h @@ -0,0 +1,53 @@ +/* File names on MS-DOS/Windows systems. + + Copyright (C) 2000-2001, 2004-2006, 2009-2012 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 <http://www.gnu.org/licenses/>. + + From Paul Eggert and Jim Meyering. */ + +#ifndef _DOSNAME_H +#define _DOSNAME_H + +#if (defined _WIN32 || defined __WIN32__ || \ + defined __MSDOS__ || defined __CYGWIN__ || \ + defined __EMX__ || defined __DJGPP__) + /* This internal macro assumes ASCII, but all hosts that support drive + letters use ASCII. */ +# define _IS_DRIVE_LETTER(C) (((unsigned int) (C) | ('a' - 'A')) - 'a' \ + <= 'z' - 'a') +# define FILE_SYSTEM_PREFIX_LEN(Filename) \ + (_IS_DRIVE_LETTER ((Filename)[0]) && (Filename)[1] == ':' ? 2 : 0) +# ifndef __CYGWIN__ +# define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 1 +# endif +# define ISSLASH(C) ((C) == '/' || (C) == '\\') +#else +# define FILE_SYSTEM_PREFIX_LEN(Filename) 0 +# define ISSLASH(C) ((C) == '/') +#endif + +#ifndef FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE +# define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +#endif + +#if FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE +# define IS_ABSOLUTE_FILE_NAME(F) ISSLASH ((F)[FILE_SYSTEM_PREFIX_LEN (F)]) +# else +# define IS_ABSOLUTE_FILE_NAME(F) \ + (ISSLASH ((F)[0]) || FILE_SYSTEM_PREFIX_LEN (F) != 0) +#endif +#define IS_RELATIVE_FILE_NAME(F) (! IS_ABSOLUTE_FILE_NAME (F)) + +#endif /* DOSNAME_H_ */ diff --git a/gnulib/lib/errno.in.h b/gnulib/lib/errno.in.h new file mode 100644 index 0000000..2f42612 --- /dev/null +++ b/gnulib/lib/errno.in.h @@ -0,0 +1,232 @@ +/* A POSIX-like <errno.h>. + + Copyright (C) 2008-2012 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, see <http://www.gnu.org/licenses/>. */ + +#ifndef _@GUARD_PREFIX@_ERRNO_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_ERRNO_H@ + +#ifndef _@GUARD_PREFIX@_ERRNO_H +#define _@GUARD_PREFIX@_ERRNO_H + + +/* On native Windows platforms, many macros are not defined. */ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + +/* These are the same values as defined by MSVC 10, for interoperability. */ + +# ifndef ENOMSG +# define ENOMSG 122 +# define GNULIB_defined_ENOMSG 1 +# endif + +# ifndef EIDRM +# define EIDRM 111 +# define GNULIB_defined_EIDRM 1 +# endif + +# ifndef ENOLINK +# define ENOLINK 121 +# define GNULIB_defined_ENOLINK 1 +# endif + +# ifndef EPROTO +# define EPROTO 134 +# define GNULIB_defined_EPROTO 1 +# endif + +# ifndef EBADMSG +# define EBADMSG 104 +# define GNULIB_defined_EBADMSG 1 +# endif + +# ifndef EOVERFLOW +# define EOVERFLOW 132 +# define GNULIB_defined_EOVERFLOW 1 +# endif + +# ifndef ENOTSUP +# define ENOTSUP 129 +# define GNULIB_defined_ENOTSUP 1 +# endif + +# ifndef ENETRESET +# define ENETRESET 117 +# define GNULIB_defined_ENETRESET 1 +# endif + +# ifndef ECONNABORTED +# define ECONNABORTED 106 +# define GNULIB_defined_ECONNABORTED 1 +# endif + +# ifndef ECANCELED +# define ECANCELED 105 +# define GNULIB_defined_ECANCELED 1 +# endif + +# ifndef EINPROGRESS +# define EINPROGRESS 112 +# define EALREADY 103 +# define ENOTSOCK 128 +# define EDESTADDRREQ 109 +# define EMSGSIZE 115 +# define EPROTOTYPE 136 +# define ENOPROTOOPT 123 +# define EPROTONOSUPPORT 135 +# define EOPNOTSUPP 130 +# define EAFNOSUPPORT 102 +# define EADDRINUSE 100 +# define EADDRNOTAVAIL 101 +# define ENETDOWN 116 +# define ENETUNREACH 118 +# define ECONNRESET 108 +# define ENOBUFS 119 +# define EISCONN 113 +# define ENOTCONN 126 +# define ETIMEDOUT 138 +# define ECONNREFUSED 107 +# define ELOOP 114 +# define EHOSTUNREACH 110 +# define EWOULDBLOCK 140 +# define ETXTBSY 139 +# define ENODATA 120 /* not required by POSIX */ +# define ENOSR 124 /* not required by POSIX */ +# define ENOSTR 125 /* not required by POSIX */ +# define ENOTRECOVERABLE 127 /* not required by POSIX */ +# define EOWNERDEAD 133 /* not required by POSIX */ +# define ETIME 137 /* not required by POSIX */ +# define EOTHER 131 /* not required by POSIX */ +# define GNULIB_defined_ESOCK 1 +# endif + +/* These are intentionally the same values as the WSA* error numbers, defined + in <winsock2.h>. */ +# define ESOCKTNOSUPPORT 10044 /* not required by POSIX */ +# define EPFNOSUPPORT 10046 /* not required by POSIX */ +# define ESHUTDOWN 10058 /* not required by POSIX */ +# define ETOOMANYREFS 10059 /* not required by POSIX */ +# define EHOSTDOWN 10064 /* not required by POSIX */ +# define EPROCLIM 10067 /* not required by POSIX */ +# define EUSERS 10068 /* not required by POSIX */ +# define EDQUOT 10069 +# define ESTALE 10070 +# define EREMOTE 10071 /* not required by POSIX */ +# define GNULIB_defined_EWINSOCK 1 + +# endif + + +/* On OSF/1 5.1, when _XOPEN_SOURCE_EXTENDED is not defined, the macros + EMULTIHOP, ENOLINK, EOVERFLOW are not defined. */ +# if @EMULTIHOP_HIDDEN@ +# define EMULTIHOP @EMULTIHOP_VALUE@ +# define GNULIB_defined_EMULTIHOP 1 +# endif +# if @ENOLINK_HIDDEN@ +# define ENOLINK @ENOLINK_VALUE@ +# define GNULIB_defined_ENOLINK 1 +# endif +# if @EOVERFLOW_HIDDEN@ +# define EOVERFLOW @EOVERFLOW_VALUE@ +# define GNULIB_defined_EOVERFLOW 1 +# endif + + +/* On OpenBSD 4.0 and on native Windows, the macros ENOMSG, EIDRM, ENOLINK, + EPROTO, EMULTIHOP, EBADMSG, EOVERFLOW, ENOTSUP, ECANCELED are not defined. + Likewise, on NonStop Kernel, EDQUOT is not defined. + Define them here. Values >= 2000 seem safe to use: Solaris ESTALE = 151, + HP-UX EWOULDBLOCK = 246, IRIX EDQUOT = 1133. + + Note: When one of these systems defines some of these macros some day, + binaries will have to be recompiled so that they recognizes the new + errno values from the system. */ + +# ifndef ENOMSG +# define ENOMSG 2000 +# define GNULIB_defined_ENOMSG 1 +# endif + +# ifndef EIDRM +# define EIDRM 2001 +# define GNULIB_defined_EIDRM 1 +# endif + +# ifndef ENOLINK +# define ENOLINK 2002 +# define GNULIB_defined_ENOLINK 1 +# endif + +# ifndef EPROTO +# define EPROTO 2003 +# define GNULIB_defined_EPROTO 1 +# endif + +# ifndef EMULTIHOP +# define EMULTIHOP 2004 +# define GNULIB_defined_EMULTIHOP 1 +# endif + +# ifndef EBADMSG +# define EBADMSG 2005 +# define GNULIB_defined_EBADMSG 1 +# endif + +# ifndef EOVERFLOW +# define EOVERFLOW 2006 +# define GNULIB_defined_EOVERFLOW 1 +# endif + +# ifndef ENOTSUP +# define ENOTSUP 2007 +# define GNULIB_defined_ENOTSUP 1 +# endif + +# ifndef ENETRESET +# define ENETRESET 2011 +# define GNULIB_defined_ENETRESET 1 +# endif + +# ifndef ECONNABORTED +# define ECONNABORTED 2012 +# define GNULIB_defined_ECONNABORTED 1 +# endif + +# ifndef ESTALE +# define ESTALE 2009 +# define GNULIB_defined_ESTALE 1 +# endif + +# ifndef EDQUOT +# define EDQUOT 2010 +# define GNULIB_defined_EDQUOT 1 +# endif + +# ifndef ECANCELED +# define ECANCELED 2008 +# define GNULIB_defined_ECANCELED 1 +# endif + + +#endif /* _@GUARD_PREFIX@_ERRNO_H */ +#endif /* _@GUARD_PREFIX@_ERRNO_H */ diff --git a/gnulib/lib/float+.h b/gnulib/lib/float+.h new file mode 100644 index 0000000..75e56a1 --- /dev/null +++ b/gnulib/lib/float+.h @@ -0,0 +1,147 @@ +/* Supplemental information about the floating-point formats. + Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2007. + + 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, see <http://www.gnu.org/licenses/>. */ + +#ifndef _FLOATPLUS_H +#define _FLOATPLUS_H + +#include <float.h> +#include <limits.h> + +/* Number of bits in the mantissa of a floating-point number, including the + "hidden bit". */ +#if FLT_RADIX == 2 +# define FLT_MANT_BIT FLT_MANT_DIG +# define DBL_MANT_BIT DBL_MANT_DIG +# define LDBL_MANT_BIT LDBL_MANT_DIG +#elif FLT_RADIX == 4 +# define FLT_MANT_BIT (FLT_MANT_DIG * 2) +# define DBL_MANT_BIT (DBL_MANT_DIG * 2) +# define LDBL_MANT_BIT (LDBL_MANT_DIG * 2) +#elif FLT_RADIX == 16 +# define FLT_MANT_BIT (FLT_MANT_DIG * 4) +# define DBL_MANT_BIT (DBL_MANT_DIG * 4) +# define LDBL_MANT_BIT (LDBL_MANT_DIG * 4) +#endif + +/* Bit mask that can be used to mask the exponent, as an unsigned number. */ +#define FLT_EXP_MASK ((FLT_MAX_EXP - FLT_MIN_EXP) | 7) +#define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7) +#define LDBL_EXP_MASK ((LDBL_MAX_EXP - LDBL_MIN_EXP) | 7) + +/* Number of bits used for the exponent of a floating-point number, including + the exponent's sign. */ +#define FLT_EXP_BIT \ + (FLT_EXP_MASK < 0x100 ? 8 : \ + FLT_EXP_MASK < 0x200 ? 9 : \ + FLT_EXP_MASK < 0x400 ? 10 : \ + FLT_EXP_MASK < 0x800 ? 11 : \ + FLT_EXP_MASK < 0x1000 ? 12 : \ + FLT_EXP_MASK < 0x2000 ? 13 : \ + FLT_EXP_MASK < 0x4000 ? 14 : \ + FLT_EXP_MASK < 0x8000 ? 15 : \ + FLT_EXP_MASK < 0x10000 ? 16 : \ + FLT_EXP_MASK < 0x20000 ? 17 : \ + FLT_EXP_MASK < 0x40000 ? 18 : \ + FLT_EXP_MASK < 0x80000 ? 19 : \ + FLT_EXP_MASK < 0x100000 ? 20 : \ + FLT_EXP_MASK < 0x200000 ? 21 : \ + FLT_EXP_MASK < 0x400000 ? 22 : \ + FLT_EXP_MASK < 0x800000 ? 23 : \ + FLT_EXP_MASK < 0x1000000 ? 24 : \ + FLT_EXP_MASK < 0x2000000 ? 25 : \ + FLT_EXP_MASK < 0x4000000 ? 26 : \ + FLT_EXP_MASK < 0x8000000 ? 27 : \ + FLT_EXP_MASK < 0x10000000 ? 28 : \ + FLT_EXP_MASK < 0x20000000 ? 29 : \ + FLT_EXP_MASK < 0x40000000 ? 30 : \ + FLT_EXP_MASK <= 0x7fffffff ? 31 : \ + 32) +#define DBL_EXP_BIT \ + (DBL_EXP_MASK < 0x100 ? 8 : \ + DBL_EXP_MASK < 0x200 ? 9 : \ + DBL_EXP_MASK < 0x400 ? 10 : \ + DBL_EXP_MASK < 0x800 ? 11 : \ + DBL_EXP_MASK < 0x1000 ? 12 : \ + DBL_EXP_MASK < 0x2000 ? 13 : \ + DBL_EXP_MASK < 0x4000 ? 14 : \ + DBL_EXP_MASK < 0x8000 ? 15 : \ + DBL_EXP_MASK < 0x10000 ? 16 : \ + DBL_EXP_MASK < 0x20000 ? 17 : \ + DBL_EXP_MASK < 0x40000 ? 18 : \ + DBL_EXP_MASK < 0x80000 ? 19 : \ + DBL_EXP_MASK < 0x100000 ? 20 : \ + DBL_EXP_MASK < 0x200000 ? 21 : \ + DBL_EXP_MASK < 0x400000 ? 22 : \ + DBL_EXP_MASK < 0x800000 ? 23 : \ + DBL_EXP_MASK < 0x1000000 ? 24 : \ + DBL_EXP_MASK < 0x2000000 ? 25 : \ + DBL_EXP_MASK < 0x4000000 ? 26 : \ + DBL_EXP_MASK < 0x8000000 ? 27 : \ + DBL_EXP_MASK < 0x10000000 ? 28 : \ + DBL_EXP_MASK < 0x20000000 ? 29 : \ + DBL_EXP_MASK < 0x40000000 ? 30 : \ + DBL_EXP_MASK <= 0x7fffffff ? 31 : \ + 32) +#define LDBL_EXP_BIT \ + (LDBL_EXP_MASK < 0x100 ? 8 : \ + LDBL_EXP_MASK < 0x200 ? 9 : \ + LDBL_EXP_MASK < 0x400 ? 10 : \ + LDBL_EXP_MASK < 0x800 ? 11 : \ + LDBL_EXP_MASK < 0x1000 ? 12 : \ + LDBL_EXP_MASK < 0x2000 ? 13 : \ + LDBL_EXP_MASK < 0x4000 ? 14 : \ + LDBL_EXP_MASK < 0x8000 ? 15 : \ + LDBL_EXP_MASK < 0x10000 ? 16 : \ + LDBL_EXP_MASK < 0x20000 ? 17 : \ + LDBL_EXP_MASK < 0x40000 ? 18 : \ + LDBL_EXP_MASK < 0x80000 ? 19 : \ + LDBL_EXP_MASK < 0x100000 ? 20 : \ + LDBL_EXP_MASK < 0x200000 ? 21 : \ + LDBL_EXP_MASK < 0x400000 ? 22 : \ + LDBL_EXP_MASK < 0x800000 ? 23 : \ + LDBL_EXP_MASK < 0x1000000 ? 24 : \ + LDBL_EXP_MASK < 0x2000000 ? 25 : \ + LDBL_EXP_MASK < 0x4000000 ? 26 : \ + LDBL_EXP_MASK < 0x8000000 ? 27 : \ + LDBL_EXP_MASK < 0x10000000 ? 28 : \ + LDBL_EXP_MASK < 0x20000000 ? 29 : \ + LDBL_EXP_MASK < 0x40000000 ? 30 : \ + LDBL_EXP_MASK <= 0x7fffffff ? 31 : \ + 32) + +/* Number of bits used for a floating-point number: the mantissa (not + counting the "hidden bit", since it may or may not be explicit), the + exponent, and the sign. */ +#define FLT_TOTAL_BIT ((FLT_MANT_BIT - 1) + FLT_EXP_BIT + 1) +#define DBL_TOTAL_BIT ((DBL_MANT_BIT - 1) + DBL_EXP_BIT + 1) +#define LDBL_TOTAL_BIT ((LDBL_MANT_BIT - 1) + LDBL_EXP_BIT + 1) + +/* Number of bytes used for a floating-point number. + This can be smaller than the 'sizeof'. For example, on i386 systems, + 'long double' most often have LDBL_MANT_BIT = 64, LDBL_EXP_BIT = 16, hence + LDBL_TOTAL_BIT = 80 bits, i.e. 10 bytes of consecutive memory, but + sizeof (long double) = 12 or = 16. */ +#define SIZEOF_FLT ((FLT_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) +#define SIZEOF_DBL ((DBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) +#define SIZEOF_LDBL ((LDBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) + +/* Verify that SIZEOF_FLT <= sizeof (float) etc. */ +typedef int verify_sizeof_flt[SIZEOF_FLT <= sizeof (float) ? 1 : -1]; +typedef int verify_sizeof_dbl[SIZEOF_DBL <= sizeof (double) ? 1 : - 1]; +typedef int verify_sizeof_ldbl[SIZEOF_LDBL <= sizeof (long double) ? 1 : - 1]; + +#endif /* _FLOATPLUS_H */ diff --git a/gnulib/lib/float.c b/gnulib/lib/float.c new file mode 100644 index 0000000..ea31866 --- /dev/null +++ b/gnulib/lib/float.c @@ -0,0 +1,33 @@ +/* Auxiliary definitions for <float.h>. + Copyright (C) 2011-2012 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2011. + + 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 <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <float.h> + +#if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__ +const union gl_long_double_union gl_LDBL_MAX = + { { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL } }; +#elif defined __i386__ +const union gl_long_double_union gl_LDBL_MAX = + { { 0xFFFFFFFF, 0xFFFFFFFF, 32766 } }; +#else +/* This declaration is solely to ensure that after preprocessing + this file is never empty. */ +typedef int dummy; +#endif diff --git a/gnulib/lib/float.in.h b/gnulib/lib/float.in.h new file mode 100644 index 0000000..b420510 --- /dev/null +++ b/gnulib/lib/float.in.h @@ -0,0 +1,188 @@ +/* A correct <float.h>. + + Copyright (C) 2007-2012 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 <http://www.gnu.org/licenses/>. */ + +#ifndef _@GUARD_PREFIX@_FLOAT_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_FLOAT_H@ + +#ifndef _@GUARD_PREFIX@_FLOAT_H +#define _@GUARD_PREFIX@_FLOAT_H + +/* 'long double' properties. */ + +#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) +/* Number of mantissa units, in base FLT_RADIX. */ +# undef LDBL_MANT_DIG +# define LDBL_MANT_DIG 64 +/* Number of decimal digits that is sufficient for representing a number. */ +# undef LDBL_DIG +# define LDBL_DIG 18 +/* x-1 where x is the smallest representable number > 1. */ +# undef LDBL_EPSILON +# define LDBL_EPSILON 1.0842021724855044340E-19L +/* Minimum e such that FLT_RADIX^(e-1) is a normalized number. */ +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP (-16381) +/* Maximum e such that FLT_RADIX^(e-1) is a representable finite number. */ +# undef LDBL_MAX_EXP +# define LDBL_MAX_EXP 16384 +/* Minimum positive normalized number. */ +# undef LDBL_MIN +# define LDBL_MIN 3.3621031431120935063E-4932L +/* Maximum representable finite number. */ +# undef LDBL_MAX +# define LDBL_MAX 1.1897314953572317650E+4932L +/* Minimum e such that 10^e is in the range of normalized numbers. */ +# undef LDBL_MIN_10_EXP +# define LDBL_MIN_10_EXP (-4931) +/* Maximum e such that 10^e is in the range of representable finite numbers. */ +# undef LDBL_MAX_10_EXP +# define LDBL_MAX_10_EXP 4932 +#endif + +/* On FreeBSD/x86 6.4, the 'long double' type really has only 53 bits of + precision in the compiler but 64 bits of precision at runtime. See + <http://lists.gnu.org/archive/html/bug-gnulib/2008-07/msg00063.html>. */ +#if defined __i386__ && defined __FreeBSD__ +/* Number of mantissa units, in base FLT_RADIX. */ +# undef LDBL_MANT_DIG +# define LDBL_MANT_DIG 64 +/* Number of decimal digits that is sufficient for representing a number. */ +# undef LDBL_DIG +# define LDBL_DIG 18 +/* x-1 where x is the smallest representable number > 1. */ +# undef LDBL_EPSILON +# define LDBL_EPSILON 1.084202172485504434007452800869941711426e-19L /* 2^-63 */ +/* Minimum e such that FLT_RADIX^(e-1) is a normalized number. */ +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP (-16381) +/* Maximum e such that FLT_RADIX^(e-1) is a representable finite number. */ +# undef LDBL_MAX_EXP +# define LDBL_MAX_EXP 16384 +/* Minimum positive normalized number. */ +# undef LDBL_MIN +# define LDBL_MIN 3.3621031431120935E-4932L /* = 0x1p-16382L */ +/* Maximum representable finite number. */ +# undef LDBL_MAX +/* LDBL_MAX is represented as { 0xFFFFFFFF, 0xFFFFFFFF, 32766 }. + But the largest literal that GCC allows us to write is + 0x0.fffffffffffff8p16384L = { 0xFFFFF800, 0xFFFFFFFF, 32766 }. + So, define it like this through a reference to an external variable + + const unsigned int LDBL_MAX[3] = { 0xFFFFFFFF, 0xFFFFFFFF, 32766 }; + extern const long double LDBL_MAX; + + Unfortunately, this is not a constant expression. */ +union gl_long_double_union + { + struct { unsigned int lo; unsigned int hi; unsigned int exponent; } xd; + long double ld; + }; +extern const union gl_long_double_union gl_LDBL_MAX; +# define LDBL_MAX (gl_LDBL_MAX.ld) +/* Minimum e such that 10^e is in the range of normalized numbers. */ +# undef LDBL_MIN_10_EXP +# define LDBL_MIN_10_EXP (-4931) +/* Maximum e such that 10^e is in the range of representable finite numbers. */ +# undef LDBL_MAX_10_EXP +# define LDBL_MAX_10_EXP 4932 +#endif + +/* On AIX 7.1 with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_MAX are + wrong. + On Linux/PowerPC with gcc 4.4, the value of LDBL_MAX is wrong. */ +#if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP DBL_MIN_EXP +# undef LDBL_MIN_10_EXP +# define LDBL_MIN_10_EXP DBL_MIN_10_EXP +# undef LDBL_MIN +# define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */ +#endif +#if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__ +# undef LDBL_MAX +/* LDBL_MAX is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xFFFFFFFF }. + It is not easy to define: + #define LDBL_MAX 1.79769313486231580793728971405302307166e308L + is too small, whereas + #define LDBL_MAX 1.79769313486231580793728971405302307167e308L + is too large. Apparently a bug in GCC decimal-to-binary conversion. + Also, I can't get values larger than + #define LDBL63 ((long double) (1ULL << 63)) + #define LDBL882 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) + #define LDBL945 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) + #define LDBL1008 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) + #define LDBL_MAX (LDBL1008 * 65535.0L + LDBL945 * (long double) 9223372036821221375ULL + LDBL882 * (long double) 4611686018427387904ULL) + which is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xF8000000 }. + So, define it like this through a reference to an external variable + + const double LDBL_MAX[2] = { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL }; + extern const long double LDBL_MAX; + + or through a pointer cast + + #define LDBL_MAX \ + (*(const long double *) (double[]) { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL }) + + Unfortunately, this is not a constant expression, and the latter expression + does not work well when GCC is optimizing.. */ +union gl_long_double_union + { + struct { double hi; double lo; } dd; + long double ld; + }; +extern const union gl_long_double_union gl_LDBL_MAX; +# define LDBL_MAX (gl_LDBL_MAX.ld) +#endif + +/* On IRIX 6.5, with cc, the value of LDBL_MANT_DIG is wrong. + On IRIX 6.5, with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_EPSILON + are wrong. */ +#if defined __sgi && (LDBL_MANT_DIG >= 106) +# undef LDBL_MANT_DIG +# define LDBL_MANT_DIG 106 +# if defined __GNUC__ +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP DBL_MIN_EXP +# undef LDBL_MIN_10_EXP +# define LDBL_MIN_10_EXP DBL_MIN_10_EXP +# undef LDBL_MIN +# define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */ +# undef LDBL_EPSILON +# define LDBL_EPSILON 2.46519032881566189191165176650870696773e-32L /* 2^-105 */ +# endif +#endif + +#if @REPLACE_ITOLD@ +/* Pull in a function that fixes the 'int' to 'long double' conversion + of glibc 2.7. */ +extern +# ifdef __cplusplus +"C" +# endif +void _Qp_itoq (long double *, int); +static void (*_gl_float_fix_itold) (long double *, int) = _Qp_itoq; +#endif + +#endif /* _@GUARD_PREFIX@_FLOAT_H */ +#endif /* _@GUARD_PREFIX@_FLOAT_H */ diff --git a/gnulib/lib/getopt.c b/gnulib/lib/getopt.c new file mode 100644 index 0000000..4342a34 --- /dev/null +++ b/gnulib/lib/getopt.c @@ -0,0 +1,1245 @@ +/* Getopt for GNU. + NOTE: getopt is part of the C library, so if you don't know what + "Keep this file name-space clean" means, talk to drepper@gnu.org + before changing it! + Copyright (C) 1987-1996, 1998-2004, 2006, 2008-2012 Free Software + Foundation, Inc. + This file is part of the GNU C Library. + + 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 <http://www.gnu.org/licenses/>. */ + +#ifndef _LIBC +# include <config.h> +#endif + +#include "getopt.h" + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#ifdef _LIBC +# include <libintl.h> +#else +# include "gettext.h" +# define _(msgid) gettext (msgid) +#endif + +#if defined _LIBC && defined USE_IN_LIBIO +# include <wchar.h> +#endif + +/* This version of 'getopt' appears to the caller like standard Unix 'getopt' + but it behaves differently for the user, since it allows the user + to intersperse the options with the other arguments. + + As 'getopt_long' works, it permutes the elements of ARGV so that, + when it is done, all the options precede everything else. Thus + all application programs are extended to handle flexible argument order. + + Using 'getopt' or setting the environment variable POSIXLY_CORRECT + disables permutation. + Then the behavior is completely standard. + + GNU application programs can use a third alternative mode in which + they can distinguish the relative order of options and other arguments. */ + +#include "getopt_int.h" + +/* For communication from 'getopt' to the caller. + When 'getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when 'ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + +char *optarg; + +/* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to 'getopt'. + + On entry to 'getopt', zero means this is the first call; initialize. + + When 'getopt' returns -1, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, 'optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + +/* 1003.2 says this must be 1 before any call. */ +int optind = 1; + +/* Callers store zero here to inhibit the error message + for unrecognized options. */ + +int opterr = 1; + +/* Set to an option character which was unrecognized. + This must be initialized on some systems to avoid linking in the + system's own getopt implementation. */ + +int optopt = '?'; + +/* Keep a global copy of all internal members of getopt_data. */ + +static struct _getopt_data getopt_data; + + +#if defined HAVE_DECL_GETENV && !HAVE_DECL_GETENV +extern char *getenv (); +#endif + +#ifdef _LIBC +/* Stored original parameters. + XXX This is no good solution. We should rather copy the args so + that we can compare them later. But we must not use malloc(3). */ +extern int __libc_argc; +extern char **__libc_argv; + +/* Bash 2.0 gives us an environment variable containing flags + indicating ARGV elements that should not be considered arguments. */ + +# ifdef USE_NONOPTION_FLAGS +/* Defined in getopt_init.c */ +extern char *__getopt_nonoption_flags; +# endif + +# ifdef USE_NONOPTION_FLAGS +# define SWAP_FLAGS(ch1, ch2) \ + if (d->__nonoption_flags_len > 0) \ + { \ + char __tmp = __getopt_nonoption_flags[ch1]; \ + __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \ + __getopt_nonoption_flags[ch2] = __tmp; \ + } +# else +# define SWAP_FLAGS(ch1, ch2) +# endif +#else /* !_LIBC */ +# define SWAP_FLAGS(ch1, ch2) +#endif /* _LIBC */ + +/* Exchange two adjacent subsequences of ARGV. + One subsequence is elements [first_nonopt,last_nonopt) + which contains all the non-options that have been skipped so far. + The other is elements [last_nonopt,optind), which contains all + the options processed since those non-options were skipped. + + 'first_nonopt' and 'last_nonopt' are relocated so that they describe + the new indices of the non-options in ARGV after they are moved. */ + +static void +exchange (char **argv, struct _getopt_data *d) +{ + int bottom = d->__first_nonopt; + int middle = d->__last_nonopt; + int top = d->optind; + char *tem; + + /* Exchange the shorter segment with the far end of the longer segment. + That puts the shorter segment into the right place. + It leaves the longer segment in the right place overall, + but it consists of two parts that need to be swapped next. */ + +#if defined _LIBC && defined USE_NONOPTION_FLAGS + /* First make sure the handling of the '__getopt_nonoption_flags' + string can work normally. Our top argument must be in the range + of the string. */ + if (d->__nonoption_flags_len > 0 && top >= d->__nonoption_flags_max_len) + { + /* We must extend the array. The user plays games with us and + presents new arguments. */ + char *new_str = malloc (top + 1); + if (new_str == NULL) + d->__nonoption_flags_len = d->__nonoption_flags_max_len = 0; + else + { + memset (__mempcpy (new_str, __getopt_nonoption_flags, + d->__nonoption_flags_max_len), + '\0', top + 1 - d->__nonoption_flags_max_len); + d->__nonoption_flags_max_len = top + 1; + __getopt_nonoption_flags = new_str; + } + } +#endif + + while (top > middle && middle > bottom) + { + if (top - middle > middle - bottom) + { + /* Bottom segment is the short one. */ + int len = middle - bottom; + register int i; + + /* Swap it with the top part of the top segment. */ + for (i = 0; i < len; i++) + { + tem = argv[bottom + i]; + argv[bottom + i] = argv[top - (middle - bottom) + i]; + argv[top - (middle - bottom) + i] = tem; + SWAP_FLAGS (bottom + i, top - (middle - bottom) + i); + } + /* Exclude the moved bottom segment from further swapping. */ + top -= len; + } + else + { + /* Top segment is the short one. */ + int len = top - middle; + register int i; + + /* Swap it with the bottom part of the bottom segment. */ + for (i = 0; i < len; i++) + { + tem = argv[bottom + i]; + argv[bottom + i] = argv[middle + i]; + argv[middle + i] = tem; + SWAP_FLAGS (bottom + i, middle + i); + } + /* Exclude the moved top segment from further swapping. */ + bottom += len; + } + } + + /* Update records for the slots the non-options now occupy. */ + + d->__first_nonopt += (d->optind - d->__last_nonopt); + d->__last_nonopt = d->optind; +} + +/* Initialize the internal data when the first call is made. */ + +static const char * +_getopt_initialize (int argc _GL_UNUSED, + char **argv _GL_UNUSED, const char *optstring, + struct _getopt_data *d, int posixly_correct) +{ + /* Start processing options with ARGV-element 1 (since ARGV-element 0 + is the program name); the sequence of previously skipped + non-option ARGV-elements is empty. */ + + d->__first_nonopt = d->__last_nonopt = d->optind; + + d->__nextchar = NULL; + + d->__posixly_correct = posixly_correct || !!getenv ("POSIXLY_CORRECT"); + + /* Determine how to handle the ordering of options and nonoptions. */ + + if (optstring[0] == '-') + { + d->__ordering = RETURN_IN_ORDER; + ++optstring; + } + else if (optstring[0] == '+') + { + d->__ordering = REQUIRE_ORDER; + ++optstring; + } + else if (d->__posixly_correct) + d->__ordering = REQUIRE_ORDER; + else + d->__ordering = PERMUTE; + +#if defined _LIBC && defined USE_NONOPTION_FLAGS + if (!d->__posixly_correct + && argc == __libc_argc && argv == __libc_argv) + { + if (d->__nonoption_flags_max_len == 0) + { + if (__getopt_nonoption_flags == NULL + || __getopt_nonoption_flags[0] == '\0') + d->__nonoption_flags_max_len = -1; + else + { + const char *orig_str = __getopt_nonoption_flags; + int len = d->__nonoption_flags_max_len = strlen (orig_str); + if (d->__nonoption_flags_max_len < argc) + d->__nonoption_flags_max_len = argc; + __getopt_nonoption_flags = + (char *) malloc (d->__nonoption_flags_max_len); + if (__getopt_nonoption_flags == NULL) + d->__nonoption_flags_max_len = -1; + else + memset (__mempcpy (__getopt_nonoption_flags, orig_str, len), + '\0', d->__nonoption_flags_max_len - len); + } + } + d->__nonoption_flags_len = d->__nonoption_flags_max_len; + } + else + d->__nonoption_flags_len = 0; +#endif + + return optstring; +} + +/* Scan elements of ARGV (whose length is ARGC) for option characters + given in OPTSTRING. + + If an element of ARGV starts with '-', and is not exactly "-" or "--", + then it is an option element. The characters of this element + (aside from the initial '-') are option characters. If 'getopt' + is called repeatedly, it returns successively each of the option characters + from each of the option elements. + + If 'getopt' finds another option character, it returns that character, + updating 'optind' and 'nextchar' so that the next call to 'getopt' can + resume the scan with the following option character or ARGV-element. + + If there are no more option characters, 'getopt' returns -1. + Then 'optind' is the index in ARGV of the first ARGV-element + that is not an option. (The ARGV-elements have been permuted + so that those that are not options now come last.) + + OPTSTRING is a string containing the legitimate option characters. + If an option character is seen that is not listed in OPTSTRING, + return '?' after printing an error message. If you set 'opterr' to + zero, the error message is suppressed but we still return '?'. + + If a char in OPTSTRING is followed by a colon, that means it wants an arg, + so the following text in the same ARGV-element, or the text of the following + ARGV-element, is returned in 'optarg'. Two colons mean an option that + wants an optional arg; if there is text in the current ARGV-element, + it is returned in 'optarg', otherwise 'optarg' is set to zero. + + If OPTSTRING starts with '-' or '+', it requests different methods of + handling the non-option ARGV-elements. + See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. + + Long-named options begin with '--' instead of '-'. + Their names may be abbreviated as long as the abbreviation is unique + or is an exact match for some defined option. If they have an + argument, it follows the option name in the same ARGV-element, separated + from the option name by a '=', or else the in next ARGV-element. + When 'getopt' finds a long-named option, it returns 0 if that option's + 'flag' field is nonzero, the value of the option's 'val' field + if the 'flag' field is zero. + + The elements of ARGV aren't really const, because we permute them. + But we pretend they're const in the prototype to be compatible + with other systems. + + LONGOPTS is a vector of 'struct option' terminated by an + element containing a name which is zero. + + LONGIND returns the index in LONGOPT of the long-named option found. + It is only valid when a long-named option has been found by the most + recent call. + + If LONG_ONLY is nonzero, '-' as well as '--' can introduce + long-named options. */ + +int +_getopt_internal_r (int argc, char **argv, const char *optstring, + const struct option *longopts, int *longind, + int long_only, struct _getopt_data *d, int posixly_correct) +{ + int print_errors = d->opterr; + + if (argc < 1) + return -1; + + d->optarg = NULL; + + if (d->optind == 0 || !d->__initialized) + { + if (d->optind == 0) + d->optind = 1; /* Don't scan ARGV[0], the program name. */ + optstring = _getopt_initialize (argc, argv, optstring, d, + posixly_correct); + d->__initialized = 1; + } + else if (optstring[0] == '-' || optstring[0] == '+') + optstring++; + if (optstring[0] == ':') + print_errors = 0; + + /* Test whether ARGV[optind] points to a non-option argument. + Either it does not have option syntax, or there is an environment flag + from the shell indicating it is not an option. The later information + is only used when the used in the GNU libc. */ +#if defined _LIBC && defined USE_NONOPTION_FLAGS +# define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0' \ + || (d->optind < d->__nonoption_flags_len \ + && __getopt_nonoption_flags[d->optind] == '1')) +#else +# define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0') +#endif + + if (d->__nextchar == NULL || *d->__nextchar == '\0') + { + /* Advance to the next ARGV-element. */ + + /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been + moved back by the user (who may also have changed the arguments). */ + if (d->__last_nonopt > d->optind) + d->__last_nonopt = d->optind; + if (d->__first_nonopt > d->optind) + d->__first_nonopt = d->optind; + + if (d->__ordering == PERMUTE) + { + /* If we have just processed some options following some non-options, + exchange them so that the options come first. */ + + if (d->__first_nonopt != d->__last_nonopt + && d->__last_nonopt != d->optind) + exchange ((char **) argv, d); + else if (d->__last_nonopt != d->optind) + d->__first_nonopt = d->optind; + + /* Skip any additional non-options + and extend the range of non-options previously skipped. */ + + while (d->optind < argc && NONOPTION_P) + d->optind++; + d->__last_nonopt = d->optind; + } + + /* The special ARGV-element '--' means premature end of options. + Skip it like a null option, + then exchange with previous non-options as if it were an option, + then skip everything else like a non-option. */ + + if (d->optind != argc && !strcmp (argv[d->optind], "--")) + { + d->optind++; + + if (d->__first_nonopt != d->__last_nonopt + && d->__last_nonopt != d->optind) + exchange ((char **) argv, d); + else if (d->__first_nonopt == d->__last_nonopt) + d->__first_nonopt = d->optind; + d->__last_nonopt = argc; + + d->optind = argc; + } + + /* If we have done all the ARGV-elements, stop the scan + and back over any non-options that we skipped and permuted. */ + + if (d->optind == argc) + { + /* Set the next-arg-index to point at the non-options + that we previously skipped, so the caller will digest them. */ + if (d->__first_nonopt != d->__last_nonopt) + d->optind = d->__first_nonopt; + return -1; + } + + /* If we have come to a non-option and did not permute it, + either stop the scan or describe it to the caller and pass it by. */ + + if (NONOPTION_P) + { + if (d->__ordering == REQUIRE_ORDER) + return -1; + d->optarg = argv[d->optind++]; + return 1; + } + + /* We have found another option-ARGV-element. + Skip the initial punctuation. */ + + d->__nextchar = (argv[d->optind] + 1 + + (longopts != NULL && argv[d->optind][1] == '-')); + } + + /* Decode the current option-ARGV-element. */ + + /* Check whether the ARGV-element is a long option. + + If long_only and the ARGV-element has the form "-f", where f is + a valid short option, don't consider it an abbreviated form of + a long option that starts with f. Otherwise there would be no + way to give the -f short option. + + On the other hand, if there's a long option "fubar" and + the ARGV-element is "-fu", do consider that an abbreviation of + the long option, just like "--fu", and not "-f" with arg "u". + + This distinction seems to be the most useful approach. */ + + if (longopts != NULL + && (argv[d->optind][1] == '-' + || (long_only && (argv[d->optind][2] + || !strchr (optstring, argv[d->optind][1]))))) + { + char *nameend; + unsigned int namelen; + const struct option *p; + const struct option *pfound = NULL; + struct option_list + { + const struct option *p; + struct option_list *next; + } *ambig_list = NULL; + int exact = 0; + int indfound = -1; + int option_index; + + for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++) + /* Do nothing. */ ; + namelen = nameend - d->__nextchar; + + /* Test all long options for either exact match + or abbreviated matches. */ + for (p = longopts, option_index = 0; p->name; p++, option_index++) + if (!strncmp (p->name, d->__nextchar, namelen)) + { + if (namelen == (unsigned int) strlen (p->name)) + { + /* Exact match found. */ + pfound = p; + indfound = option_index; + exact = 1; + break; + } + else if (pfound == NULL) + { + /* First nonexact match found. */ + pfound = p; + indfound = option_index; + } + else if (long_only + || pfound->has_arg != p->has_arg + || pfound->flag != p->flag + || pfound->val != p->val) + { + /* Second or later nonexact match found. */ + struct option_list *newp = malloc (sizeof (*newp)); + newp->p = p; + newp->next = ambig_list; + ambig_list = newp; + } + } + + if (ambig_list != NULL && !exact) + { + if (print_errors) + { + struct option_list first; + first.p = pfound; + first.next = ambig_list; + ambig_list = &first; + +#if defined _LIBC && defined USE_IN_LIBIO + char *buf = NULL; + size_t buflen = 0; + + FILE *fp = open_memstream (&buf, &buflen); + if (fp != NULL) + { + fprintf (fp, + _("%s: option '%s' is ambiguous; possibilities:"), + argv[0], argv[d->optind]); + + do + { + fprintf (fp, " '--%s'", ambig_list->p->name); + ambig_list = ambig_list->next; + } + while (ambig_list != NULL); + + fputc_unlocked ('\n', fp); + + if (__builtin_expect (fclose (fp) != EOF, 1)) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } + } +#else + fprintf (stderr, + _("%s: option '%s' is ambiguous; possibilities:"), + argv[0], argv[d->optind]); + do + { + fprintf (stderr, " '--%s'", ambig_list->p->name); + ambig_list = ambig_list->next; + } + while (ambig_list != NULL); + + fputc ('\n', stderr); +#endif + } + d->__nextchar += strlen (d->__nextchar); + d->optind++; + d->optopt = 0; + return '?'; + } + + while (ambig_list != NULL) + { + struct option_list *pn = ambig_list->next; + free (ambig_list); + ambig_list = pn; + } + + if (pfound != NULL) + { + option_index = indfound; + d->optind++; + if (*nameend) + { + /* Don't test has_arg with >, because some C compilers don't + allow it to be used on enums. */ + if (pfound->has_arg) + d->optarg = nameend + 1; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + int n; +#endif + + if (argv[d->optind - 1][1] == '-') + { + /* --option */ +#if defined _LIBC && defined USE_IN_LIBIO + n = __asprintf (&buf, _("\ +%s: option '--%s' doesn't allow an argument\n"), + argv[0], pfound->name); +#else + fprintf (stderr, _("\ +%s: option '--%s' doesn't allow an argument\n"), + argv[0], pfound->name); +#endif + } + else + { + /* +option or -option */ +#if defined _LIBC && defined USE_IN_LIBIO + n = __asprintf (&buf, _("\ +%s: option '%c%s' doesn't allow an argument\n"), + argv[0], argv[d->optind - 1][0], + pfound->name); +#else + fprintf (stderr, _("\ +%s: option '%c%s' doesn't allow an argument\n"), + argv[0], argv[d->optind - 1][0], + pfound->name); +#endif + } + +#if defined _LIBC && defined USE_IN_LIBIO + if (n >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 + |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#endif + } + + d->__nextchar += strlen (d->__nextchar); + + d->optopt = pfound->val; + return '?'; + } + } + else if (pfound->has_arg == 1) + { + if (d->optind < argc) + d->optarg = argv[d->optind++]; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, _("\ +%s: option '--%s' requires an argument\n"), + argv[0], pfound->name) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 + |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, + _("%s: option '--%s' requires an argument\n"), + argv[0], pfound->name); +#endif + } + d->__nextchar += strlen (d->__nextchar); + d->optopt = pfound->val; + return optstring[0] == ':' ? ':' : '?'; + } + } + d->__nextchar += strlen (d->__nextchar); + if (longind != NULL) + *longind = option_index; + if (pfound->flag) + { + *(pfound->flag) = pfound->val; + return 0; + } + return pfound->val; + } + + /* Can't find it as a long option. If this is not getopt_long_only, + or the option starts with '--' or is not a valid short + option, then it's an error. + Otherwise interpret it as a short option. */ + if (!long_only || argv[d->optind][1] == '-' + || strchr (optstring, *d->__nextchar) == NULL) + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + int n; +#endif + + if (argv[d->optind][1] == '-') + { + /* --option */ +#if defined _LIBC && defined USE_IN_LIBIO + n = __asprintf (&buf, _("%s: unrecognized option '--%s'\n"), + argv[0], d->__nextchar); +#else + fprintf (stderr, _("%s: unrecognized option '--%s'\n"), + argv[0], d->__nextchar); +#endif + } + else + { + /* +option or -option */ +#if defined _LIBC && defined USE_IN_LIBIO + n = __asprintf (&buf, _("%s: unrecognized option '%c%s'\n"), + argv[0], argv[d->optind][0], d->__nextchar); +#else + fprintf (stderr, _("%s: unrecognized option '%c%s'\n"), + argv[0], argv[d->optind][0], d->__nextchar); +#endif + } + +#if defined _LIBC && defined USE_IN_LIBIO + if (n >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#endif + } + d->__nextchar = (char *) ""; + d->optind++; + d->optopt = 0; + return '?'; + } + } + + /* Look at and handle the next short option-character. */ + + { + char c = *d->__nextchar++; + const char *temp = strchr (optstring, c); + + /* Increment 'optind' when we start to process its last character. */ + if (*d->__nextchar == '\0') + ++d->optind; + + if (temp == NULL || c == ':' || c == ';') + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + int n; +#endif + +#if defined _LIBC && defined USE_IN_LIBIO + n = __asprintf (&buf, _("%s: invalid option -- '%c'\n"), + argv[0], c); +#else + fprintf (stderr, _("%s: invalid option -- '%c'\n"), argv[0], c); +#endif + +#if defined _LIBC && defined USE_IN_LIBIO + if (n >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#endif + } + d->optopt = c; + return '?'; + } + /* Convenience. Treat POSIX -W foo same as long option --foo */ + if (temp[0] == 'W' && temp[1] == ';') + { + char *nameend; + const struct option *p; + const struct option *pfound = NULL; + int exact = 0; + int ambig = 0; + int indfound = 0; + int option_index; + + if (longopts == NULL) + goto no_longs; + + /* This is an option that requires an argument. */ + if (*d->__nextchar != '\0') + { + d->optarg = d->__nextchar; + /* If we end this ARGV-element by taking the rest as an arg, + we must advance to the next element now. */ + d->optind++; + } + else if (d->optind == argc) + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, + _("%s: option requires an argument -- '%c'\n"), + argv[0], c) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, + _("%s: option requires an argument -- '%c'\n"), + argv[0], c); +#endif + } + d->optopt = c; + if (optstring[0] == ':') + c = ':'; + else + c = '?'; + return c; + } + else + /* We already incremented 'd->optind' once; + increment it again when taking next ARGV-elt as argument. */ + d->optarg = argv[d->optind++]; + + /* optarg is now the argument, see if it's in the + table of longopts. */ + + for (d->__nextchar = nameend = d->optarg; *nameend && *nameend != '='; + nameend++) + /* Do nothing. */ ; + + /* Test all long options for either exact match + or abbreviated matches. */ + for (p = longopts, option_index = 0; p->name; p++, option_index++) + if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar)) + { + if ((unsigned int) (nameend - d->__nextchar) == strlen (p->name)) + { + /* Exact match found. */ + pfound = p; + indfound = option_index; + exact = 1; + break; + } + else if (pfound == NULL) + { + /* First nonexact match found. */ + pfound = p; + indfound = option_index; + } + else if (long_only + || pfound->has_arg != p->has_arg + || pfound->flag != p->flag + || pfound->val != p->val) + /* Second or later nonexact match found. */ + ambig = 1; + } + if (ambig && !exact) + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, _("%s: option '-W %s' is ambiguous\n"), + argv[0], d->optarg) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, _("%s: option '-W %s' is ambiguous\n"), + argv[0], d->optarg); +#endif + } + d->__nextchar += strlen (d->__nextchar); + d->optind++; + return '?'; + } + if (pfound != NULL) + { + option_index = indfound; + if (*nameend) + { + /* Don't test has_arg with >, because some C compilers don't + allow it to be used on enums. */ + if (pfound->has_arg) + d->optarg = nameend + 1; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, _("\ +%s: option '-W %s' doesn't allow an argument\n"), + argv[0], pfound->name) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 + |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, _("\ +%s: option '-W %s' doesn't allow an argument\n"), + argv[0], pfound->name); +#endif + } + + d->__nextchar += strlen (d->__nextchar); + return '?'; + } + } + else if (pfound->has_arg == 1) + { + if (d->optind < argc) + d->optarg = argv[d->optind++]; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, _("\ +%s: option '-W %s' requires an argument\n"), + argv[0], pfound->name) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 + |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, _("\ +%s: option '-W %s' requires an argument\n"), + argv[0], pfound->name); +#endif + } + d->__nextchar += strlen (d->__nextchar); + return optstring[0] == ':' ? ':' : '?'; + } + } + else + d->optarg = NULL; + d->__nextchar += strlen (d->__nextchar); + if (longind != NULL) + *longind = option_index; + if (pfound->flag) + { + *(pfound->flag) = pfound->val; + return 0; + } + return pfound->val; + } + + no_longs: + d->__nextchar = NULL; + return 'W'; /* Let the application handle it. */ + } + if (temp[1] == ':') + { + if (temp[2] == ':') + { + /* This is an option that accepts an argument optionally. */ + if (*d->__nextchar != '\0') + { + d->optarg = d->__nextchar; + d->optind++; + } + else + d->optarg = NULL; + d->__nextchar = NULL; + } + else + { + /* This is an option that requires an argument. */ + if (*d->__nextchar != '\0') + { + d->optarg = d->__nextchar; + /* If we end this ARGV-element by taking the rest as an arg, + we must advance to the next element now. */ + d->optind++; + } + else if (d->optind == argc) + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, _("\ +%s: option requires an argument -- '%c'\n"), + argv[0], c) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, + _("%s: option requires an argument -- '%c'\n"), + argv[0], c); +#endif + } + d->optopt = c; + if (optstring[0] == ':') + c = ':'; + else + c = '?'; + } + else + /* We already incremented 'optind' once; + increment it again when taking next ARGV-elt as argument. */ + d->optarg = argv[d->optind++]; + d->__nextchar = NULL; + } + } + return c; + } +} + +int +_getopt_internal (int argc, char **argv, const char *optstring, + const struct option *longopts, int *longind, int long_only, + int posixly_correct) +{ + int result; + + getopt_data.optind = optind; + getopt_data.opterr = opterr; + + result = _getopt_internal_r (argc, argv, optstring, longopts, + longind, long_only, &getopt_data, + posixly_correct); + + optind = getopt_data.optind; + optarg = getopt_data.optarg; + optopt = getopt_data.optopt; + + return result; +} + +/* glibc gets a LSB-compliant getopt. + Standalone applications get a POSIX-compliant getopt. */ +#if _LIBC +enum { POSIXLY_CORRECT = 0 }; +#else +enum { POSIXLY_CORRECT = 1 }; +#endif + +int +getopt (int argc, char *const *argv, const char *optstring) +{ + return _getopt_internal (argc, (char **) argv, optstring, + (const struct option *) 0, + (int *) 0, + 0, POSIXLY_CORRECT); +} + +#ifdef _LIBC +int +__posix_getopt (int argc, char *const *argv, const char *optstring) +{ + return _getopt_internal (argc, argv, optstring, + (const struct option *) 0, + (int *) 0, + 0, 1); +} +#endif + + +#ifdef TEST + +/* Compile with -DTEST to make an executable for use in testing + the above definition of 'getopt'. */ + +int +main (int argc, char **argv) +{ + int c; + int digit_optind = 0; + + while (1) + { + int this_option_optind = optind ? optind : 1; + + c = getopt (argc, argv, "abc:d:0123456789"); + if (c == -1) + break; + + switch (c) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (digit_optind != 0 && digit_optind != this_option_optind) + printf ("digits occur in two different argv-elements.\n"); + digit_optind = this_option_optind; + printf ("option %c\n", c); + break; + + case 'a': + printf ("option a\n"); + break; + + case 'b': + printf ("option b\n"); + break; + + case 'c': + printf ("option c with value '%s'\n", optarg); + break; + + case '?': + break; + + default: + printf ("?? getopt returned character code 0%o ??\n", c); + } + } + + if (optind < argc) + { + printf ("non-option ARGV-elements: "); + while (optind < argc) + printf ("%s ", argv[optind++]); + printf ("\n"); + } + + exit (0); +} + +#endif /* TEST */ diff --git a/gnulib/lib/getopt.in.h b/gnulib/lib/getopt.in.h new file mode 100644 index 0000000..06b6dfc --- /dev/null +++ b/gnulib/lib/getopt.in.h @@ -0,0 +1,253 @@ +/* Declarations for getopt. + Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2007, 2009-2012 Free Software + Foundation, Inc. + This file is part of the GNU C Library. + + 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 <http://www.gnu.org/licenses/>. */ + +#ifndef _@GUARD_PREFIX@_GETOPT_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* The include_next requires a split double-inclusion guard. We must + also inform the replacement unistd.h to not recursively use + <getopt.h>; our definitions will be present soon enough. */ +#if @HAVE_GETOPT_H@ +# define _GL_SYSTEM_GETOPT +# @INCLUDE_NEXT@ @NEXT_GETOPT_H@ +# undef _GL_SYSTEM_GETOPT +#endif + +#ifndef _@GUARD_PREFIX@_GETOPT_H + +#ifndef __need_getopt +# define _@GUARD_PREFIX@_GETOPT_H 1 +#endif + +/* Standalone applications should #define __GETOPT_PREFIX to an + identifier that prefixes the external functions and variables + defined in this header. When this happens, include the + headers that might declare getopt so that they will not cause + confusion if included after this file (if the system had <getopt.h>, + we have already included it). Then systematically rename + identifiers so that they do not collide with the system functions + and variables. Renaming avoids problems with some compilers and + linkers. */ +#if defined __GETOPT_PREFIX && !defined __need_getopt +# if !@HAVE_GETOPT_H@ +# include <stdlib.h> +# include <stdio.h> +# include <unistd.h> +# endif +# undef __need_getopt +# undef getopt +# undef getopt_long +# undef getopt_long_only +# undef optarg +# undef opterr +# undef optind +# undef optopt +# undef option +# define __GETOPT_CONCAT(x, y) x ## y +# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y) +# define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y) +# define getopt __GETOPT_ID (getopt) +# define getopt_long __GETOPT_ID (getopt_long) +# define getopt_long_only __GETOPT_ID (getopt_long_only) +# define optarg __GETOPT_ID (optarg) +# define opterr __GETOPT_ID (opterr) +# define optind __GETOPT_ID (optind) +# define optopt __GETOPT_ID (optopt) +# define option __GETOPT_ID (option) +# define _getopt_internal __GETOPT_ID (getopt_internal) +#endif + +/* Standalone applications get correct prototypes for getopt_long and + getopt_long_only; they declare "char **argv". libc uses prototypes + with "char *const *argv" that are incorrect because getopt_long and + getopt_long_only can permute argv; this is required for backward + compatibility (e.g., for LSB 2.0.1). + + This used to be '#if defined __GETOPT_PREFIX && !defined __need_getopt', + but it caused redefinition warnings if both unistd.h and getopt.h were + included, since unistd.h includes getopt.h having previously defined + __need_getopt. + + The only place where __getopt_argv_const is used is in definitions + of getopt_long and getopt_long_only below, but these are visible + only if __need_getopt is not defined, so it is quite safe to rewrite + the conditional as follows: +*/ +#if !defined __need_getopt +# if defined __GETOPT_PREFIX +# define __getopt_argv_const /* empty */ +# else +# define __getopt_argv_const const +# endif +#endif + +/* If __GNU_LIBRARY__ is not already defined, either we are being used + standalone, or this is the first header included in the source file. + If we are being used with glibc, we need to include <features.h>, but + that does not exist if we are standalone. So: if __GNU_LIBRARY__ is + not defined, include <ctype.h>, which will pull in <features.h> for us + if it's from glibc. (Why ctype.h? It's guaranteed to exist and it + doesn't flood the namespace with stuff the way some other headers do.) */ +#if !defined __GNU_LIBRARY__ +# include <ctype.h> +#endif + +#ifndef __THROW +# ifndef __GNUC_PREREQ +# define __GNUC_PREREQ(maj, min) (0) +# endif +# if defined __cplusplus && __GNUC_PREREQ (2,8) +# define __THROW throw () +# else +# define __THROW +# endif +#endif + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* For communication from 'getopt' to the caller. + When 'getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when 'ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + +extern char *optarg; + +/* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to 'getopt'. + + On entry to 'getopt', zero means this is the first call; initialize. + + When 'getopt' returns -1, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, 'optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + +extern int optind; + +/* Callers store zero here to inhibit the error message 'getopt' prints + for unrecognized options. */ + +extern int opterr; + +/* Set to an option character which was unrecognized. */ + +extern int optopt; + +#ifndef __need_getopt +/* Describe the long-named options requested by the application. + The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector + of 'struct option' terminated by an element containing a name which is + zero. + + The field 'has_arg' is: + no_argument (or 0) if the option does not take an argument, + required_argument (or 1) if the option requires an argument, + optional_argument (or 2) if the option takes an optional argument. + + If the field 'flag' is not NULL, it points to a variable that is set + to the value given in the field 'val' when the option is found, but + left unchanged if the option is not found. + + To have a long-named option do something other than set an 'int' to + a compiled-in constant, such as set a value from 'optarg', set the + option's 'flag' field to zero and its 'val' field to a nonzero + value (the equivalent single-letter option character, if there is + one). For long options that have a zero 'flag' field, 'getopt' + returns the contents of the 'val' field. */ + +# if !GNULIB_defined_struct_option +struct option +{ + const char *name; + /* has_arg can't be an enum because some compilers complain about + type mismatches in all the code that assumes it is an int. */ + int has_arg; + int *flag; + int val; +}; +# define GNULIB_defined_struct_option 1 +# endif + +/* Names for the values of the 'has_arg' field of 'struct option'. */ + +# define no_argument 0 +# define required_argument 1 +# define optional_argument 2 +#endif /* need getopt */ + + +/* Get definitions and prototypes for functions to process the + arguments in ARGV (ARGC of them, minus the program name) for + options given in OPTS. + + Return the option character from OPTS just read. Return -1 when + there are no more options. For unrecognized options, or options + missing arguments, 'optopt' is set to the option letter, and '?' is + returned. + + The OPTS string is a list of characters which are recognized option + letters, optionally followed by colons, specifying that that letter + takes an argument, to be placed in 'optarg'. + + If a letter in OPTS is followed by two colons, its argument is + optional. This behavior is specific to the GNU 'getopt'. + + The argument '--' causes premature termination of argument + scanning, explicitly telling 'getopt' that there are no more + options. + + If OPTS begins with '-', then non-option arguments are treated as + arguments to the option '\1'. This behavior is specific to the GNU + 'getopt'. If OPTS begins with '+', or POSIXLY_CORRECT is set in + the environment, then do not permute arguments. */ + +extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) + __THROW _GL_ARG_NONNULL ((2, 3)); + +#ifndef __need_getopt +extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind) + __THROW _GL_ARG_NONNULL ((2, 3)); +extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind) + __THROW _GL_ARG_NONNULL ((2, 3)); + +#endif + +#ifdef __cplusplus +} +#endif + +/* Make sure we later can get all the definitions and declarations. */ +#undef __need_getopt + +#endif /* _@GUARD_PREFIX@_GETOPT_H */ +#endif /* _@GUARD_PREFIX@_GETOPT_H */ diff --git a/gnulib/lib/getopt1.c b/gnulib/lib/getopt1.c new file mode 100644 index 0000000..fb2a8f5 --- /dev/null +++ b/gnulib/lib/getopt1.c @@ -0,0 +1,170 @@ +/* getopt_long and getopt_long_only entry points for GNU getopt. + Copyright (C) 1987-1994, 1996-1998, 2004, 2006, 2009-2012 Free Software + Foundation, Inc. + This file is part of the GNU C Library. + + 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 <http://www.gnu.org/licenses/>. */ + +#ifdef _LIBC +# include <getopt.h> +#else +# include <config.h> +# include "getopt.h" +#endif +#include "getopt_int.h" + +#include <stdio.h> + +/* This needs to come after some library #include + to get __GNU_LIBRARY__ defined. */ +#ifdef __GNU_LIBRARY__ +#include <stdlib.h> +#endif + +#ifndef NULL +#define NULL 0 +#endif + +int +getopt_long (int argc, char *__getopt_argv_const *argv, const char *options, + const struct option *long_options, int *opt_index) +{ + return _getopt_internal (argc, (char **) argv, options, long_options, + opt_index, 0, 0); +} + +int +_getopt_long_r (int argc, char **argv, const char *options, + const struct option *long_options, int *opt_index, + struct _getopt_data *d) +{ + return _getopt_internal_r (argc, argv, options, long_options, opt_index, + 0, d, 0); +} + +/* Like getopt_long, but '-' as well as '--' can indicate a long option. + If an option that starts with '-' (not '--') doesn't match a long option, + but does match a short option, it is parsed as a short option + instead. */ + +int +getopt_long_only (int argc, char *__getopt_argv_const *argv, + const char *options, + const struct option *long_options, int *opt_index) +{ + return _getopt_internal (argc, (char **) argv, options, long_options, + opt_index, 1, 0); +} + +int +_getopt_long_only_r (int argc, char **argv, const char *options, + const struct option *long_options, int *opt_index, + struct _getopt_data *d) +{ + return _getopt_internal_r (argc, argv, options, long_options, opt_index, + 1, d, 0); +} + + +#ifdef TEST + +#include <stdio.h> + +int +main (int argc, char **argv) +{ + int c; + int digit_optind = 0; + + while (1) + { + int this_option_optind = optind ? optind : 1; + int option_index = 0; + static const struct option long_options[] = + { + {"add", 1, 0, 0}, + {"append", 0, 0, 0}, + {"delete", 1, 0, 0}, + {"verbose", 0, 0, 0}, + {"create", 0, 0, 0}, + {"file", 1, 0, 0}, + {0, 0, 0, 0} + }; + + c = getopt_long (argc, argv, "abc:d:0123456789", + long_options, &option_index); + if (c == -1) + break; + + switch (c) + { + case 0: + printf ("option %s", long_options[option_index].name); + if (optarg) + printf (" with arg %s", optarg); + printf ("\n"); + break; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (digit_optind != 0 && digit_optind != this_option_optind) + printf ("digits occur in two different argv-elements.\n"); + digit_optind = this_option_optind; + printf ("option %c\n", c); + break; + + case 'a': + printf ("option a\n"); + break; + + case 'b': + printf ("option b\n"); + break; + + case 'c': + printf ("option c with value '%s'\n", optarg); + break; + + case 'd': + printf ("option d with value '%s'\n", optarg); + break; + + case '?': + break; + + default: + printf ("?? getopt returned character code 0%o ??\n", c); + } + } + + if (optind < argc) + { + printf ("non-option ARGV-elements: "); + while (optind < argc) + printf ("%s ", argv[optind++]); + printf ("\n"); + } + + exit (0); +} + +#endif /* TEST */ diff --git a/gnulib/lib/getopt_int.h b/gnulib/lib/getopt_int.h new file mode 100644 index 0000000..2da020c --- /dev/null +++ b/gnulib/lib/getopt_int.h @@ -0,0 +1,135 @@ +/* Internal declarations for getopt. + Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2004, 2009-2012 Free Software + Foundation, Inc. + This file is part of the GNU C Library. + + 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 <http://www.gnu.org/licenses/>. */ + +#ifndef _GETOPT_INT_H +#define _GETOPT_INT_H 1 + +#include <getopt.h> + +extern int _getopt_internal (int ___argc, char **___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind, + int __long_only, int __posixly_correct); + + +/* Reentrant versions which can handle parsing multiple argument + vectors at the same time. */ + +/* Describe how to deal with options that follow non-option ARGV-elements. + + If the caller did not specify anything, + the default is REQUIRE_ORDER if the environment variable + POSIXLY_CORRECT is defined, PERMUTE otherwise. + + REQUIRE_ORDER means don't recognize them as options; + stop option processing when the first non-option is seen. + This is what Unix does. + This mode of operation is selected by either setting the environment + variable POSIXLY_CORRECT, or using '+' as the first character + of the list of option characters, or by calling getopt. + + PERMUTE is the default. We permute the contents of ARGV as we + scan, so that eventually all the non-options are at the end. + This allows options to be given in any order, even with programs + that were not written to expect this. + + RETURN_IN_ORDER is an option available to programs that were + written to expect options and other ARGV-elements in any order + and that care about the ordering of the two. We describe each + non-option ARGV-element as if it were the argument of an option + with character code 1. Using '-' as the first character of the + list of option characters selects this mode of operation. + + The special argument '--' forces an end of option-scanning regardless + of the value of 'ordering'. In the case of RETURN_IN_ORDER, only + '--' can cause 'getopt' to return -1 with 'optind' != ARGC. */ + +enum __ord + { + REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER + }; + +/* Data type for reentrant functions. */ +struct _getopt_data +{ + /* These have exactly the same meaning as the corresponding global + variables, except that they are used for the reentrant + versions of getopt. */ + int optind; + int opterr; + int optopt; + char *optarg; + + /* Internal members. */ + + /* True if the internal members have been initialized. */ + int __initialized; + + /* The next char to be scanned in the option-element + in which the last option character we returned was found. + This allows us to pick up the scan where we left off. + + If this is zero, or a null string, it means resume the scan + by advancing to the next ARGV-element. */ + char *__nextchar; + + /* See __ord above. */ + enum __ord __ordering; + + /* If the POSIXLY_CORRECT environment variable is set + or getopt was called. */ + int __posixly_correct; + + + /* Handle permutation of arguments. */ + + /* Describe the part of ARGV that contains non-options that have + been skipped. 'first_nonopt' is the index in ARGV of the first + of them; 'last_nonopt' is the index after the last of them. */ + + int __first_nonopt; + int __last_nonopt; + +#if defined _LIBC && defined USE_NONOPTION_FLAGS + int __nonoption_flags_max_len; + int __nonoption_flags_len; +#endif +}; + +/* The initializer is necessary to set OPTIND and OPTERR to their + default values and to clear the initialization flag. */ +#define _GETOPT_DATA_INITIALIZER { 1, 1 } + +extern int _getopt_internal_r (int ___argc, char **___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind, + int __long_only, struct _getopt_data *__data, + int __posixly_correct); + +extern int _getopt_long_r (int ___argc, char **___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind, + struct _getopt_data *__data); + +extern int _getopt_long_only_r (int ___argc, char **___argv, + const char *__shortopts, + const struct option *__longopts, + int *__longind, + struct _getopt_data *__data); + +#endif /* getopt_int.h */ diff --git a/gnulib/lib/gettext.h b/gnulib/lib/gettext.h new file mode 100644 index 0000000..75875cd --- /dev/null +++ b/gnulib/lib/gettext.h @@ -0,0 +1,285 @@ +/* Convenience header for conditional use of GNU <libintl.h>. + Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2012 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, see <http://www.gnu.org/licenses/>. */ + +#ifndef _LIBGETTEXT_H +#define _LIBGETTEXT_H 1 + +/* NLS can be disabled through the configure --disable-nls option. */ +#if ENABLE_NLS + +/* Get declarations of GNU message catalog functions. */ +# include <libintl.h> + +/* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by + the gettext() and ngettext() macros. This is an alternative to calling + textdomain(), and is useful for libraries. */ +# ifdef DEFAULT_TEXT_DOMAIN +# undef gettext +# define gettext(Msgid) \ + dgettext (DEFAULT_TEXT_DOMAIN, Msgid) +# undef ngettext +# define ngettext(Msgid1, Msgid2, N) \ + dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N) +# endif + +#else + +/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which + chokes if dcgettext is defined as a macro. So include it now, to make + later inclusions of <locale.h> a NOP. We don't include <libintl.h> + as well because people using "gettext.h" will not include <libintl.h>, + and also including <libintl.h> would fail on SunOS 4, whereas <locale.h> + is OK. */ +#if defined(__sun) +# include <locale.h> +#endif + +/* Many header files from the libstdc++ coming with g++ 3.3 or newer include + <libintl.h>, which chokes if dcgettext is defined as a macro. So include + it now, to make later inclusions of <libintl.h> a NOP. */ +#if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3) +# include <cstdlib> +# if (__GLIBC__ >= 2 && !defined __UCLIBC__) || _GLIBCXX_HAVE_LIBINTL_H +# include <libintl.h> +# endif +#endif + +/* Disabled NLS. + The casts to 'const char *' serve the purpose of producing warnings + for invalid uses of the value returned from these functions. + On pre-ANSI systems without 'const', the config.h file is supposed to + contain "#define const". */ +# undef gettext +# define gettext(Msgid) ((const char *) (Msgid)) +# undef dgettext +# define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid)) +# undef dcgettext +# define dcgettext(Domainname, Msgid, Category) \ + ((void) (Category), dgettext (Domainname, Msgid)) +# undef ngettext +# define ngettext(Msgid1, Msgid2, N) \ + ((N) == 1 \ + ? ((void) (Msgid2), (const char *) (Msgid1)) \ + : ((void) (Msgid1), (const char *) (Msgid2))) +# undef dngettext +# define dngettext(Domainname, Msgid1, Msgid2, N) \ + ((void) (Domainname), ngettext (Msgid1, Msgid2, N)) +# undef dcngettext +# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ + ((void) (Category), dngettext (Domainname, Msgid1, Msgid2, N)) +# undef textdomain +# define textdomain(Domainname) ((const char *) (Domainname)) +# undef bindtextdomain +# define bindtextdomain(Domainname, Dirname) \ + ((void) (Domainname), (const char *) (Dirname)) +# undef bind_textdomain_codeset +# define bind_textdomain_codeset(Domainname, Codeset) \ + ((void) (Domainname), (const char *) (Codeset)) + +#endif + +/* Prefer gnulib's setlocale override over libintl's setlocale override. */ +#ifdef GNULIB_defined_setlocale +# undef setlocale +# define setlocale rpl_setlocale +#endif + +/* A pseudo function call that serves as a marker for the automated + extraction of messages, but does not call gettext(). The run-time + translation is done at a different place in the code. + The argument, String, should be a literal string. Concatenated strings + and other string expressions won't work. + The macro's expansion is not parenthesized, so that it is suitable as + initializer for static 'char[]' or 'const char[]' variables. */ +#define gettext_noop(String) String + +/* The separator between msgctxt and msgid in a .mo file. */ +#define GETTEXT_CONTEXT_GLUE "\004" + +/* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a + MSGID. MSGCTXT and MSGID must be string literals. MSGCTXT should be + short and rarely need to change. + The letter 'p' stands for 'particular' or 'special'. */ +#ifdef DEFAULT_TEXT_DOMAIN +# define pgettext(Msgctxt, Msgid) \ + pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) +#else +# define pgettext(Msgctxt, Msgid) \ + pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) +#endif +#define dpgettext(Domainname, Msgctxt, Msgid) \ + pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) +#define dcpgettext(Domainname, Msgctxt, Msgid, Category) \ + pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category) +#ifdef DEFAULT_TEXT_DOMAIN +# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ + npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) +#else +# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ + npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) +#endif +#define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ + npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) +#define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \ + npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category) + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static const char * +pgettext_aux (const char *domain, + const char *msg_ctxt_id, const char *msgid, + int category) +{ + const char *translation = dcgettext (domain, msg_ctxt_id, category); + if (translation == msg_ctxt_id) + return msgid; + else + return translation; +} + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static const char * +npgettext_aux (const char *domain, + const char *msg_ctxt_id, const char *msgid, + const char *msgid_plural, unsigned long int n, + int category) +{ + const char *translation = + dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); + if (translation == msg_ctxt_id || translation == msgid_plural) + return (n == 1 ? msgid : msgid_plural); + else + return translation; +} + +/* The same thing extended for non-constant arguments. Here MSGCTXT and MSGID + can be arbitrary expressions. But for string literals these macros are + less efficient than those above. */ + +#include <string.h> + +#define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS \ + (((__GNUC__ >= 3 || __GNUG__ >= 2) && !defined __STRICT_ANSI__) \ + /* || __STDC_VERSION__ >= 199901L */ ) + +#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS +#include <stdlib.h> +#endif + +#define pgettext_expr(Msgctxt, Msgid) \ + dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES) +#define dpgettext_expr(Domainname, Msgctxt, Msgid) \ + dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES) + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static const char * +dcpgettext_expr (const char *domain, + const char *msgctxt, const char *msgid, + int category) +{ + size_t msgctxt_len = strlen (msgctxt) + 1; + size_t msgid_len = strlen (msgid) + 1; + const char *translation; +#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + char msg_ctxt_id[msgctxt_len + msgid_len]; +#else + char buf[1024]; + char *msg_ctxt_id = + (msgctxt_len + msgid_len <= sizeof (buf) + ? buf + : (char *) malloc (msgctxt_len + msgid_len)); + if (msg_ctxt_id != NULL) +#endif + { + memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); + msg_ctxt_id[msgctxt_len - 1] = '\004'; + memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); + translation = dcgettext (domain, msg_ctxt_id, category); +#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + if (msg_ctxt_id != buf) + free (msg_ctxt_id); +#endif + if (translation != msg_ctxt_id) + return translation; + } + return msgid; +} + +#define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \ + dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) +#define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ + dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static const char * +dcnpgettext_expr (const char *domain, + const char *msgctxt, const char *msgid, + const char *msgid_plural, unsigned long int n, + int category) +{ + size_t msgctxt_len = strlen (msgctxt) + 1; + size_t msgid_len = strlen (msgid) + 1; + const char *translation; +#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + char msg_ctxt_id[msgctxt_len + msgid_len]; +#else + char buf[1024]; + char *msg_ctxt_id = + (msgctxt_len + msgid_len <= sizeof (buf) + ? buf + : (char *) malloc (msgctxt_len + msgid_len)); + if (msg_ctxt_id != NULL) +#endif + { + memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); + msg_ctxt_id[msgctxt_len - 1] = '\004'; + memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); + translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); +#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + if (msg_ctxt_id != buf) + free (msg_ctxt_id); +#endif + if (!(translation == msg_ctxt_id || translation == msgid_plural)) + return translation; + } + return (n == 1 ? msgid : msgid_plural); +} + +#endif /* _LIBGETTEXT_H */ diff --git a/gnulib/lib/intprops.h b/gnulib/lib/intprops.h new file mode 100644 index 0000000..2485c78 --- /dev/null +++ b/gnulib/lib/intprops.h @@ -0,0 +1,319 @@ +/* intprops.h -- properties of integer types + + Copyright (C) 2001-2005, 2009-2012 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 <http://www.gnu.org/licenses/>. */ + +/* Written by Paul Eggert. */ + +#ifndef _GL_INTPROPS_H +#define _GL_INTPROPS_H + +#include <limits.h> + +/* Return an integer value, converted to the same type as the integer + expression E after integer type promotion. V is the unconverted value. */ +#define _GL_INT_CONVERT(e, v) (0 * (e) + (v)) + +/* Act like _GL_INT_CONVERT (E, -V) but work around a bug in IRIX 6.5 cc; see + <http://lists.gnu.org/archive/html/bug-gnulib/2011-05/msg00406.html>. */ +#define _GL_INT_NEGATE_CONVERT(e, v) (0 * (e) - (v)) + +/* The extra casts in the following macros work around compiler bugs, + e.g., in Cray C 5.0.3.0. */ + +/* True if the arithmetic type T is an integer type. bool counts as + an integer. */ +#define TYPE_IS_INTEGER(t) ((t) 1.5 == 1) + +/* True if negative values of the signed integer type T use two's + complement, ones' complement, or signed magnitude representation, + respectively. Much GNU code assumes two's complement, but some + people like to be portable to all possible C hosts. */ +#define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1) +#define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0) +#define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1) + +/* True if the signed integer expression E uses two's complement. */ +#define _GL_INT_TWOS_COMPLEMENT(e) (~ _GL_INT_CONVERT (e, 0) == -1) + +/* True if the arithmetic type T is signed. */ +#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) + +/* Return 1 if the integer expression E, after integer promotion, has + a signed type. */ +#define _GL_INT_SIGNED(e) (_GL_INT_NEGATE_CONVERT (e, 1) < 0) + + +/* Minimum and maximum values for integer types and expressions. These + macros have undefined behavior if T is signed and has padding bits. + If this is a problem for you, please let us know how to fix it for + your host. */ + +/* The maximum and minimum values for the integer type T. */ +#define TYPE_MINIMUM(t) \ + ((t) (! TYPE_SIGNED (t) \ + ? (t) 0 \ + : TYPE_SIGNED_MAGNITUDE (t) \ + ? ~ (t) 0 \ + : ~ TYPE_MAXIMUM (t))) +#define TYPE_MAXIMUM(t) \ + ((t) (! TYPE_SIGNED (t) \ + ? (t) -1 \ + : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) + +/* The maximum and minimum values for the type of the expression E, + after integer promotion. E should not have side effects. */ +#define _GL_INT_MINIMUM(e) \ + (_GL_INT_SIGNED (e) \ + ? - _GL_INT_TWOS_COMPLEMENT (e) - _GL_SIGNED_INT_MAXIMUM (e) \ + : _GL_INT_CONVERT (e, 0)) +#define _GL_INT_MAXIMUM(e) \ + (_GL_INT_SIGNED (e) \ + ? _GL_SIGNED_INT_MAXIMUM (e) \ + : _GL_INT_NEGATE_CONVERT (e, 1)) +#define _GL_SIGNED_INT_MAXIMUM(e) \ + (((_GL_INT_CONVERT (e, 1) << (sizeof ((e) + 0) * CHAR_BIT - 2)) - 1) * 2 + 1) + + +/* Return 1 if the __typeof__ keyword works. This could be done by + 'configure', but for now it's easier to do it by hand. */ +#if 2 <= __GNUC__ || 0x5110 <= __SUNPRO_C +# define _GL_HAVE___TYPEOF__ 1 +#else +# define _GL_HAVE___TYPEOF__ 0 +#endif + +/* Return 1 if the integer type or expression T might be signed. Return 0 + if it is definitely unsigned. This macro does not evaluate its argument, + and expands to an integer constant expression. */ +#if _GL_HAVE___TYPEOF__ +# define _GL_SIGNED_TYPE_OR_EXPR(t) TYPE_SIGNED (__typeof__ (t)) +#else +# define _GL_SIGNED_TYPE_OR_EXPR(t) 1 +#endif + +/* Bound on length of the string representing an unsigned integer + value representable in B bits. log10 (2.0) < 146/485. The + smallest value of B where this bound is not tight is 2621. */ +#define INT_BITS_STRLEN_BOUND(b) (((b) * 146 + 484) / 485) + +/* Bound on length of the string representing an integer type or expression T. + Subtract 1 for the sign bit if T is signed, and then add 1 more for + a minus sign if needed. + + Because _GL_SIGNED_TYPE_OR_EXPR sometimes returns 0 when its argument is + signed, this macro may overestimate the true bound by one byte when + applied to unsigned types of size 2, 4, 16, ... bytes. */ +#define INT_STRLEN_BOUND(t) \ + (INT_BITS_STRLEN_BOUND (sizeof (t) * CHAR_BIT \ + - _GL_SIGNED_TYPE_OR_EXPR (t)) \ + + _GL_SIGNED_TYPE_OR_EXPR (t)) + +/* Bound on buffer size needed to represent an integer type or expression T, + including the terminating null. */ +#define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1) + + +/* Range overflow checks. + + The INT_<op>_RANGE_OVERFLOW macros return 1 if the corresponding C + operators might not yield numerically correct answers due to + arithmetic overflow. They do not rely on undefined or + implementation-defined behavior. Their implementations are simple + and straightforward, but they are a bit harder to use than the + INT_<op>_OVERFLOW macros described below. + + Example usage: + + long int i = ...; + long int j = ...; + if (INT_MULTIPLY_RANGE_OVERFLOW (i, j, LONG_MIN, LONG_MAX)) + printf ("multiply would overflow"); + else + printf ("product is %ld", i * j); + + Restrictions on *_RANGE_OVERFLOW macros: + + These macros do not check for all possible numerical problems or + undefined or unspecified behavior: they do not check for division + by zero, for bad shift counts, or for shifting negative numbers. + + These macros may evaluate their arguments zero or multiple times, + so the arguments should not have side effects. The arithmetic + arguments (including the MIN and MAX arguments) must be of the same + integer type after the usual arithmetic conversions, and the type + must have minimum value MIN and maximum MAX. Unsigned types should + use a zero MIN of the proper type. + + These macros are tuned for constant MIN and MAX. For commutative + operations such as A + B, they are also tuned for constant B. */ + +/* Return 1 if A + B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. */ +#define INT_ADD_RANGE_OVERFLOW(a, b, min, max) \ + ((b) < 0 \ + ? (a) < (min) - (b) \ + : (max) - (b) < (a)) + +/* Return 1 if A - B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. */ +#define INT_SUBTRACT_RANGE_OVERFLOW(a, b, min, max) \ + ((b) < 0 \ + ? (max) + (b) < (a) \ + : (a) < (min) + (b)) + +/* Return 1 if - A would overflow in [MIN,MAX] arithmetic. + See above for restrictions. */ +#define INT_NEGATE_RANGE_OVERFLOW(a, min, max) \ + ((min) < 0 \ + ? (a) < - (max) \ + : 0 < (a)) + +/* Return 1 if A * B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. Avoid && and || as they tickle + bugs in Sun C 5.11 2010/08/13 and other compilers; see + <http://lists.gnu.org/archive/html/bug-gnulib/2011-05/msg00401.html>. */ +#define INT_MULTIPLY_RANGE_OVERFLOW(a, b, min, max) \ + ((b) < 0 \ + ? ((a) < 0 \ + ? (a) < (max) / (b) \ + : (b) == -1 \ + ? 0 \ + : (min) / (b) < (a)) \ + : (b) == 0 \ + ? 0 \ + : ((a) < 0 \ + ? (a) < (min) / (b) \ + : (max) / (b) < (a))) + +/* Return 1 if A / B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. Do not check for division by zero. */ +#define INT_DIVIDE_RANGE_OVERFLOW(a, b, min, max) \ + ((min) < 0 && (b) == -1 && (a) < - (max)) + +/* Return 1 if A % B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. Do not check for division by zero. + Mathematically, % should never overflow, but on x86-like hosts + INT_MIN % -1 traps, and the C standard permits this, so treat this + as an overflow too. */ +#define INT_REMAINDER_RANGE_OVERFLOW(a, b, min, max) \ + INT_DIVIDE_RANGE_OVERFLOW (a, b, min, max) + +/* Return 1 if A << B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. Here, MIN and MAX are for A only, and B need + not be of the same type as the other arguments. The C standard says that + behavior is undefined for shifts unless 0 <= B < wordwidth, and that when + A is negative then A << B has undefined behavior and A >> B has + implementation-defined behavior, but do not check these other + restrictions. */ +#define INT_LEFT_SHIFT_RANGE_OVERFLOW(a, b, min, max) \ + ((a) < 0 \ + ? (a) < (min) >> (b) \ + : (max) >> (b) < (a)) + + +/* The _GL*_OVERFLOW macros have the same restrictions as the + *_RANGE_OVERFLOW macros, except that they do not assume that operands + (e.g., A and B) have the same type as MIN and MAX. Instead, they assume + that the result (e.g., A + B) has that type. */ +#define _GL_ADD_OVERFLOW(a, b, min, max) \ + ((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max) \ + : (a) < 0 ? (b) <= (a) + (b) \ + : (b) < 0 ? (a) <= (a) + (b) \ + : (a) + (b) < (b)) +#define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ + ((min) < 0 ? INT_SUBTRACT_RANGE_OVERFLOW (a, b, min, max) \ + : (a) < 0 ? 1 \ + : (b) < 0 ? (a) - (b) <= (a) \ + : (a) < (b)) +#define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ + (((min) == 0 && (((a) < 0 && 0 < (b)) || ((b) < 0 && 0 < (a)))) \ + || INT_MULTIPLY_RANGE_OVERFLOW (a, b, min, max)) +#define _GL_DIVIDE_OVERFLOW(a, b, min, max) \ + ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ + : (a) < 0 ? (b) <= (a) + (b) - 1 \ + : (b) < 0 && (a) + (b) <= (a)) +#define _GL_REMAINDER_OVERFLOW(a, b, min, max) \ + ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ + : (a) < 0 ? (a) % (b) != ((max) - (b) + 1) % (b) \ + : (b) < 0 && ! _GL_UNSIGNED_NEG_MULTIPLE (a, b, max)) + +/* Return a nonzero value if A is a mathematical multiple of B, where + A is unsigned, B is negative, and MAX is the maximum value of A's + type. A's type must be the same as (A % B)'s type. Normally (A % + -B == 0) suffices, but things get tricky if -B would overflow. */ +#define _GL_UNSIGNED_NEG_MULTIPLE(a, b, max) \ + (((b) < -_GL_SIGNED_INT_MAXIMUM (b) \ + ? (_GL_SIGNED_INT_MAXIMUM (b) == (max) \ + ? (a) \ + : (a) % (_GL_INT_CONVERT (a, _GL_SIGNED_INT_MAXIMUM (b)) + 1)) \ + : (a) % - (b)) \ + == 0) + + +/* Integer overflow checks. + + The INT_<op>_OVERFLOW macros return 1 if the corresponding C operators + might not yield numerically correct answers due to arithmetic overflow. + They work correctly on all known practical hosts, and do not rely + on undefined behavior due to signed arithmetic overflow. + + Example usage: + + long int i = ...; + long int j = ...; + if (INT_MULTIPLY_OVERFLOW (i, j)) + printf ("multiply would overflow"); + else + printf ("product is %ld", i * j); + + These macros do not check for all possible numerical problems or + undefined or unspecified behavior: they do not check for division + by zero, for bad shift counts, or for shifting negative numbers. + + These macros may evaluate their arguments zero or multiple times, so the + arguments should not have side effects. + + These macros are tuned for their last argument being a constant. + + Return 1 if the integer expressions A * B, A - B, -A, A * B, A / B, + A % B, and A << B would overflow, respectively. */ + +#define INT_ADD_OVERFLOW(a, b) \ + _GL_BINARY_OP_OVERFLOW (a, b, _GL_ADD_OVERFLOW) +#define INT_SUBTRACT_OVERFLOW(a, b) \ + _GL_BINARY_OP_OVERFLOW (a, b, _GL_SUBTRACT_OVERFLOW) +#define INT_NEGATE_OVERFLOW(a) \ + INT_NEGATE_RANGE_OVERFLOW (a, _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) +#define INT_MULTIPLY_OVERFLOW(a, b) \ + _GL_BINARY_OP_OVERFLOW (a, b, _GL_MULTIPLY_OVERFLOW) +#define INT_DIVIDE_OVERFLOW(a, b) \ + _GL_BINARY_OP_OVERFLOW (a, b, _GL_DIVIDE_OVERFLOW) +#define INT_REMAINDER_OVERFLOW(a, b) \ + _GL_BINARY_OP_OVERFLOW (a, b, _GL_REMAINDER_OVERFLOW) +#define INT_LEFT_SHIFT_OVERFLOW(a, b) \ + INT_LEFT_SHIFT_RANGE_OVERFLOW (a, b, \ + _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) + +/* Return 1 if the expression A <op> B would overflow, + where OP_RESULT_OVERFLOW (A, B, MIN, MAX) does the actual test, + assuming MIN and MAX are the minimum and maximum for the result type. + Arguments should be free of side effects. */ +#define _GL_BINARY_OP_OVERFLOW(a, b, op_result_overflow) \ + op_result_overflow (a, b, \ + _GL_INT_MINIMUM (0 * (b) + (a)), \ + _GL_INT_MAXIMUM (0 * (b) + (a))) + +#endif /* _GL_INTPROPS_H */ diff --git a/gnulib/lib/itold.c b/gnulib/lib/itold.c new file mode 100644 index 0000000..95ff7e1 --- /dev/null +++ b/gnulib/lib/itold.c @@ -0,0 +1,28 @@ +/* Replacement for 'int' to 'long double' conversion routine. + Copyright (C) 2011-2012 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2011. + + 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 <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <float.h> + +void +_Qp_itoq (long double *result, int a) +{ + /* Convert from 'int' to 'double', then from 'double' to 'long double'. */ + *result = (double) a; +} diff --git a/gnulib/lib/malloc.c b/gnulib/lib/malloc.c new file mode 100644 index 0000000..e0d5c89 --- /dev/null +++ b/gnulib/lib/malloc.c @@ -0,0 +1,56 @@ +/* malloc() function that is glibc compatible. + + Copyright (C) 1997-1998, 2006-2007, 2009-2012 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, see <http://www.gnu.org/licenses/>. */ + +/* written by Jim Meyering and Bruno Haible */ + +#define _GL_USE_STDLIB_ALLOC 1 +#include <config.h> +/* Only the AC_FUNC_MALLOC macro defines 'malloc' already in config.h. */ +#ifdef malloc +# define NEED_MALLOC_GNU 1 +# undef malloc +/* Whereas the gnulib module 'malloc-gnu' defines HAVE_MALLOC_GNU. */ +#elif GNULIB_MALLOC_GNU && !HAVE_MALLOC_GNU +# define NEED_MALLOC_GNU 1 +#endif + +#include <stdlib.h> + +#include <errno.h> + +/* Allocate an N-byte block of memory from the heap. + If N is zero, allocate a 1-byte block. */ + +void * +rpl_malloc (size_t n) +{ + void *result; + +#if NEED_MALLOC_GNU + if (n == 0) + n = 1; +#endif + + result = malloc (n); + +#if !HAVE_MALLOC_POSIX + if (result == NULL) + errno = ENOMEM; +#endif + + return result; +} diff --git a/gnulib/lib/memchr.c b/gnulib/lib/memchr.c new file mode 100644 index 0000000..b8fb0ef --- /dev/null +++ b/gnulib/lib/memchr.c @@ -0,0 +1,172 @@ +/* Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2004, 2006, 2008-2012 + Free Software Foundation, Inc. + + Based on strlen implementation by Torbjorn Granlund (tege@sics.se), + with help from Dan Sahlin (dan@sics.se) and + commentary by Jim Blandy (jimb@ai.mit.edu); + adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu), + and implemented by Roland McGrath (roland@ai.mit.edu). + +NOTE: The canonical source of this file is maintained with the GNU C Library. +Bugs can be reported to bug-glibc@prep.ai.mit.edu. + +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 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 <http://www.gnu.org/licenses/>. */ + +#ifndef _LIBC +# include <config.h> +#endif + +#include <string.h> + +#include <stddef.h> + +#if defined _LIBC +# include <memcopy.h> +#else +# define reg_char char +#endif + +#include <limits.h> + +#if HAVE_BP_SYM_H || defined _LIBC +# include <bp-sym.h> +#else +# define BP_SYM(sym) sym +#endif + +#undef __memchr +#ifdef _LIBC +# undef memchr +#endif + +#ifndef weak_alias +# define __memchr memchr +#endif + +/* Search no more than N bytes of S for C. */ +void * +__memchr (void const *s, int c_in, size_t n) +{ + /* On 32-bit hardware, choosing longword to be a 32-bit unsigned + long instead of a 64-bit uintmax_t tends to give better + performance. On 64-bit hardware, unsigned long is generally 64 + bits already. Change this typedef to experiment with + performance. */ + typedef unsigned long int longword; + + const unsigned char *char_ptr; + const longword *longword_ptr; + longword repeated_one; + longword repeated_c; + unsigned reg_char c; + + c = (unsigned char) c_in; + + /* Handle the first few bytes by reading one byte at a time. + Do this until CHAR_PTR is aligned on a longword boundary. */ + for (char_ptr = (const unsigned char *) s; + n > 0 && (size_t) char_ptr % sizeof (longword) != 0; + --n, ++char_ptr) + if (*char_ptr == c) + return (void *) char_ptr; + + longword_ptr = (const longword *) char_ptr; + + /* All these elucidatory comments refer to 4-byte longwords, + but the theory applies equally well to any size longwords. */ + + /* Compute auxiliary longword values: + repeated_one is a value which has a 1 in every byte. + repeated_c has c in every byte. */ + repeated_one = 0x01010101; + repeated_c = c | (c << 8); + repeated_c |= repeated_c << 16; + if (0xffffffffU < (longword) -1) + { + repeated_one |= repeated_one << 31 << 1; + repeated_c |= repeated_c << 31 << 1; + if (8 < sizeof (longword)) + { + size_t i; + + for (i = 64; i < sizeof (longword) * 8; i *= 2) + { + repeated_one |= repeated_one << i; + repeated_c |= repeated_c << i; + } + } + } + + /* Instead of the traditional loop which tests each byte, we will test a + longword at a time. The tricky part is testing if *any of the four* + bytes in the longword in question are equal to c. We first use an xor + with repeated_c. This reduces the task to testing whether *any of the + four* bytes in longword1 is zero. + + We compute tmp = + ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). + That is, we perform the following operations: + 1. Subtract repeated_one. + 2. & ~longword1. + 3. & a mask consisting of 0x80 in every byte. + Consider what happens in each byte: + - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, + and step 3 transforms it into 0x80. A carry can also be propagated + to more significant bytes. + - If a byte of longword1 is nonzero, let its lowest 1 bit be at + position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, + the byte ends in a single bit of value 0 and k bits of value 1. + After step 2, the result is just k bits of value 1: 2^k - 1. After + step 3, the result is 0. And no carry is produced. + So, if longword1 has only non-zero bytes, tmp is zero. + Whereas if longword1 has a zero byte, call j the position of the least + significant zero byte. Then the result has a zero at positions 0, ..., + j-1 and a 0x80 at position j. We cannot predict the result at the more + significant bytes (positions j+1..3), but it does not matter since we + already have a non-zero bit at position 8*j+7. + + So, the test whether any byte in longword1 is zero is equivalent to + testing whether tmp is nonzero. */ + + while (n >= sizeof (longword)) + { + longword longword1 = *longword_ptr ^ repeated_c; + + if ((((longword1 - repeated_one) & ~longword1) + & (repeated_one << 7)) != 0) + break; + longword_ptr++; + n -= sizeof (longword); + } + + char_ptr = (const unsigned char *) longword_ptr; + + /* At this point, we know that either n < sizeof (longword), or one of the + sizeof (longword) bytes starting at char_ptr is == c. On little-endian + machines, we could determine the first such byte without any further + memory accesses, just by looking at the tmp result from the last loop + iteration. But this does not work on big-endian machines. Choose code + that works in both cases. */ + + for (; n > 0; --n, ++char_ptr) + { + if (*char_ptr == c) + return (void *) char_ptr; + } + + return NULL; +} +#ifdef weak_alias +weak_alias (__memchr, BP_SYM (memchr)) +#endif diff --git a/gnulib/lib/memchr.valgrind b/gnulib/lib/memchr.valgrind new file mode 100644 index 0000000..60f247e --- /dev/null +++ b/gnulib/lib/memchr.valgrind @@ -0,0 +1,14 @@ +# Suppress a valgrind message about use of uninitialized memory in memchr(). +# POSIX states that when the character is found, memchr must not read extra +# bytes in an overestimated length (for example, where memchr is used to +# implement strnlen). However, we use a safe word read to provide a speedup. +{ + memchr-value4 + Memcheck:Value4 + fun:rpl_memchr +} +{ + memchr-value8 + Memcheck:Value8 + fun:rpl_memchr +} diff --git a/gnulib/lib/mempcpy.c b/gnulib/lib/mempcpy.c new file mode 100644 index 0000000..a97fe42 --- /dev/null +++ b/gnulib/lib/mempcpy.c @@ -0,0 +1,28 @@ +/* Copy memory area and return pointer after last written byte. + Copyright (C) 2003, 2007, 2009-2012 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, see <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <string.h> + +/* Copy N bytes of SRC to DEST, return pointer to bytes after the + last written byte. */ +void * +mempcpy (void *dest, const void *src, size_t n) +{ + return (char *) memcpy (dest, src, n) + n; +} diff --git a/gnulib/lib/printf-args.c b/gnulib/lib/printf-args.c new file mode 100644 index 0000000..47b20dc --- /dev/null +++ b/gnulib/lib/printf-args.c @@ -0,0 +1,187 @@ +/* Decomposed printf argument list. + Copyright (C) 1999, 2002-2003, 2005-2007, 2009-2012 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, see <http://www.gnu.org/licenses/>. */ + +/* This file can be parametrized with the following macros: + ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. + PRINTF_FETCHARGS Name of the function to be defined. + STATIC Set to 'static' to declare the function static. */ + +#ifndef PRINTF_FETCHARGS +# include <config.h> +#endif + +/* Specification. */ +#ifndef PRINTF_FETCHARGS +# include "printf-args.h" +#endif + +#ifdef STATIC +STATIC +#endif +int +PRINTF_FETCHARGS (va_list args, arguments *a) +{ + size_t i; + argument *ap; + + for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++) + switch (ap->type) + { + case TYPE_SCHAR: + ap->a.a_schar = va_arg (args, /*signed char*/ int); + break; + case TYPE_UCHAR: + ap->a.a_uchar = va_arg (args, /*unsigned char*/ int); + break; + case TYPE_SHORT: + ap->a.a_short = va_arg (args, /*short*/ int); + break; + case TYPE_USHORT: + ap->a.a_ushort = va_arg (args, /*unsigned short*/ int); + break; + case TYPE_INT: + ap->a.a_int = va_arg (args, int); + break; + case TYPE_UINT: + ap->a.a_uint = va_arg (args, unsigned int); + break; + case TYPE_LONGINT: + ap->a.a_longint = va_arg (args, long int); + break; + case TYPE_ULONGINT: + ap->a.a_ulongint = va_arg (args, unsigned long int); + break; +#if HAVE_LONG_LONG_INT + case TYPE_LONGLONGINT: + ap->a.a_longlongint = va_arg (args, long long int); + break; + case TYPE_ULONGLONGINT: + ap->a.a_ulonglongint = va_arg (args, unsigned long long int); + break; +#endif + case TYPE_DOUBLE: + ap->a.a_double = va_arg (args, double); + break; + case TYPE_LONGDOUBLE: + ap->a.a_longdouble = va_arg (args, long double); + break; + case TYPE_CHAR: + ap->a.a_char = va_arg (args, int); + break; +#if HAVE_WINT_T + case TYPE_WIDE_CHAR: + /* Although ISO C 99 7.24.1.(2) says that wint_t is "unchanged by + default argument promotions", this is not the case in mingw32, + where wint_t is 'unsigned short'. */ + ap->a.a_wide_char = + (sizeof (wint_t) < sizeof (int) + ? (wint_t) va_arg (args, int) + : va_arg (args, wint_t)); + break; +#endif + case TYPE_STRING: + ap->a.a_string = va_arg (args, const char *); + /* A null pointer is an invalid argument for "%s", but in practice + it occurs quite frequently in printf statements that produce + debug output. Use a fallback in this case. */ + if (ap->a.a_string == NULL) + ap->a.a_string = "(NULL)"; + break; +#if HAVE_WCHAR_T + case TYPE_WIDE_STRING: + ap->a.a_wide_string = va_arg (args, const wchar_t *); + /* A null pointer is an invalid argument for "%ls", but in practice + it occurs quite frequently in printf statements that produce + debug output. Use a fallback in this case. */ + if (ap->a.a_wide_string == NULL) + { + static const wchar_t wide_null_string[] = + { + (wchar_t)'(', + (wchar_t)'N', (wchar_t)'U', (wchar_t)'L', (wchar_t)'L', + (wchar_t)')', + (wchar_t)0 + }; + ap->a.a_wide_string = wide_null_string; + } + break; +#endif + case TYPE_POINTER: + ap->a.a_pointer = va_arg (args, void *); + break; + case TYPE_COUNT_SCHAR_POINTER: + ap->a.a_count_schar_pointer = va_arg (args, signed char *); + break; + case TYPE_COUNT_SHORT_POINTER: + ap->a.a_count_short_pointer = va_arg (args, short *); + break; + case TYPE_COUNT_INT_POINTER: + ap->a.a_count_int_pointer = va_arg (args, int *); + break; + case TYPE_COUNT_LONGINT_POINTER: + ap->a.a_count_longint_pointer = va_arg (args, long int *); + break; +#if HAVE_LONG_LONG_INT + case TYPE_COUNT_LONGLONGINT_POINTER: + ap->a.a_count_longlongint_pointer = va_arg (args, long long int *); + break; +#endif +#if ENABLE_UNISTDIO + /* The unistdio extensions. */ + case TYPE_U8_STRING: + ap->a.a_u8_string = va_arg (args, const uint8_t *); + /* A null pointer is an invalid argument for "%U", but in practice + it occurs quite frequently in printf statements that produce + debug output. Use a fallback in this case. */ + if (ap->a.a_u8_string == NULL) + { + static const uint8_t u8_null_string[] = + { '(', 'N', 'U', 'L', 'L', ')', 0 }; + ap->a.a_u8_string = u8_null_string; + } + break; + case TYPE_U16_STRING: + ap->a.a_u16_string = va_arg (args, const uint16_t *); + /* A null pointer is an invalid argument for "%lU", but in practice + it occurs quite frequently in printf statements that produce + debug output. Use a fallback in this case. */ + if (ap->a.a_u16_string == NULL) + { + static const uint16_t u16_null_string[] = + { '(', 'N', 'U', 'L', 'L', ')', 0 }; + ap->a.a_u16_string = u16_null_string; + } + break; + case TYPE_U32_STRING: + ap->a.a_u32_string = va_arg (args, const uint32_t *); + /* A null pointer is an invalid argument for "%llU", but in practice + it occurs quite frequently in printf statements that produce + debug output. Use a fallback in this case. */ + if (ap->a.a_u32_string == NULL) + { + static const uint32_t u32_null_string[] = + { '(', 'N', 'U', 'L', 'L', ')', 0 }; + ap->a.a_u32_string = u32_null_string; + } + break; +#endif + default: + /* Unknown type. */ + return -1; + } + return 0; +} diff --git a/gnulib/lib/printf-args.h b/gnulib/lib/printf-args.h new file mode 100644 index 0000000..aa811af --- /dev/null +++ b/gnulib/lib/printf-args.h @@ -0,0 +1,158 @@ +/* Decomposed printf argument list. + Copyright (C) 1999, 2002-2003, 2006-2007, 2011-2012 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, see <http://www.gnu.org/licenses/>. */ + +#ifndef _PRINTF_ARGS_H +#define _PRINTF_ARGS_H + +/* This file can be parametrized with the following macros: + ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. + PRINTF_FETCHARGS Name of the function to be declared. + STATIC Set to 'static' to declare the function static. */ + +/* Default parameters. */ +#ifndef PRINTF_FETCHARGS +# define PRINTF_FETCHARGS printf_fetchargs +#endif + +/* Get size_t. */ +#include <stddef.h> + +/* Get wchar_t. */ +#if HAVE_WCHAR_T +# include <stddef.h> +#endif + +/* Get wint_t. */ +#if HAVE_WINT_T +# include <wchar.h> +#endif + +/* Get va_list. */ +#include <stdarg.h> + + +/* Argument types */ +typedef enum +{ + TYPE_NONE, + TYPE_SCHAR, + TYPE_UCHAR, + TYPE_SHORT, + TYPE_USHORT, + TYPE_INT, + TYPE_UINT, + TYPE_LONGINT, + TYPE_ULONGINT, +#if HAVE_LONG_LONG_INT + TYPE_LONGLONGINT, + TYPE_ULONGLONGINT, +#endif + TYPE_DOUBLE, + TYPE_LONGDOUBLE, + TYPE_CHAR, +#if HAVE_WINT_T + TYPE_WIDE_CHAR, +#endif + TYPE_STRING, +#if HAVE_WCHAR_T + TYPE_WIDE_STRING, +#endif + TYPE_POINTER, + TYPE_COUNT_SCHAR_POINTER, + TYPE_COUNT_SHORT_POINTER, + TYPE_COUNT_INT_POINTER, + TYPE_COUNT_LONGINT_POINTER +#if HAVE_LONG_LONG_INT +, TYPE_COUNT_LONGLONGINT_POINTER +#endif +#if ENABLE_UNISTDIO + /* The unistdio extensions. */ +, TYPE_U8_STRING +, TYPE_U16_STRING +, TYPE_U32_STRING +#endif +} arg_type; + +/* Polymorphic argument */ +typedef struct +{ + arg_type type; + union + { + signed char a_schar; + unsigned char a_uchar; + short a_short; + unsigned short a_ushort; + int a_int; + unsigned int a_uint; + long int a_longint; + unsigned long int a_ulongint; +#if HAVE_LONG_LONG_INT + long long int a_longlongint; + unsigned long long int a_ulonglongint; +#endif + float a_float; + double a_double; + long double a_longdouble; + int a_char; +#if HAVE_WINT_T + wint_t a_wide_char; +#endif + const char* a_string; +#if HAVE_WCHAR_T + const wchar_t* a_wide_string; +#endif + void* a_pointer; + signed char * a_count_schar_pointer; + short * a_count_short_pointer; + int * a_count_int_pointer; + long int * a_count_longint_pointer; +#if HAVE_LONG_LONG_INT + long long int * a_count_longlongint_pointer; +#endif +#if ENABLE_UNISTDIO + /* The unistdio extensions. */ + const uint8_t * a_u8_string; + const uint16_t * a_u16_string; + const uint32_t * a_u32_string; +#endif + } + a; +} +argument; + +/* Number of directly allocated arguments (no malloc() needed). */ +#define N_DIRECT_ALLOC_ARGUMENTS 7 + +typedef struct +{ + size_t count; + argument *arg; + argument direct_alloc_arg[N_DIRECT_ALLOC_ARGUMENTS]; +} +arguments; + + +/* Fetch the arguments, putting them into a. */ +#ifdef STATIC +STATIC +#else +extern +#endif +int PRINTF_FETCHARGS (va_list args, arguments *a); + +#endif /* _PRINTF_ARGS_H */ diff --git a/gnulib/lib/printf-parse.c b/gnulib/lib/printf-parse.c new file mode 100644 index 0000000..308a175 --- /dev/null +++ b/gnulib/lib/printf-parse.c @@ -0,0 +1,638 @@ +/* Formatted output to strings. + Copyright (C) 1999-2000, 2002-2003, 2006-2012 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, see <http://www.gnu.org/licenses/>. */ + +/* This file can be parametrized with the following macros: + CHAR_T The element type of the format string. + CHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters + in the format string are ASCII. + DIRECTIVE Structure denoting a format directive. + Depends on CHAR_T. + DIRECTIVES Structure denoting the set of format directives of a + format string. Depends on CHAR_T. + PRINTF_PARSE Function that parses a format string. + Depends on CHAR_T. + STATIC Set to 'static' to declare the function static. + ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. */ + +#ifndef PRINTF_PARSE +# include <config.h> +#endif + +/* Specification. */ +#ifndef PRINTF_PARSE +# include "printf-parse.h" +#endif + +/* Default parameters. */ +#ifndef PRINTF_PARSE +# define PRINTF_PARSE printf_parse +# define CHAR_T char +# define DIRECTIVE char_directive +# define DIRECTIVES char_directives +#endif + +/* Get size_t, NULL. */ +#include <stddef.h> + +/* Get intmax_t. */ +#if defined IN_LIBINTL || defined IN_LIBASPRINTF +# if HAVE_STDINT_H_WITH_UINTMAX +# include <stdint.h> +# endif +# if HAVE_INTTYPES_H_WITH_UINTMAX +# include <inttypes.h> +# endif +#else +# include <stdint.h> +#endif + +/* malloc(), realloc(), free(). */ +#include <stdlib.h> + +/* memcpy(). */ +#include <string.h> + +/* errno. */ +#include <errno.h> + +/* Checked size_t computations. */ +#include "xsize.h" + +#if CHAR_T_ONLY_ASCII +/* c_isascii(). */ +# include "c-ctype.h" +#endif + +#ifdef STATIC +STATIC +#endif +int +PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) +{ + const CHAR_T *cp = format; /* pointer into format */ + size_t arg_posn = 0; /* number of regular arguments consumed */ + size_t d_allocated; /* allocated elements of d->dir */ + size_t a_allocated; /* allocated elements of a->arg */ + size_t max_width_length = 0; + size_t max_precision_length = 0; + + d->count = 0; + d_allocated = N_DIRECT_ALLOC_DIRECTIVES; + d->dir = d->direct_alloc_dir; + + a->count = 0; + a_allocated = N_DIRECT_ALLOC_ARGUMENTS; + a->arg = a->direct_alloc_arg; + +#define REGISTER_ARG(_index_,_type_) \ + { \ + size_t n = (_index_); \ + if (n >= a_allocated) \ + { \ + size_t memory_size; \ + argument *memory; \ + \ + a_allocated = xtimes (a_allocated, 2); \ + if (a_allocated <= n) \ + a_allocated = xsum (n, 1); \ + memory_size = xtimes (a_allocated, sizeof (argument)); \ + if (size_overflow_p (memory_size)) \ + /* Overflow, would lead to out of memory. */ \ + goto out_of_memory; \ + memory = (argument *) (a->arg != a->direct_alloc_arg \ + ? realloc (a->arg, memory_size) \ + : malloc (memory_size)); \ + if (memory == NULL) \ + /* Out of memory. */ \ + goto out_of_memory; \ + if (a->arg == a->direct_alloc_arg) \ + memcpy (memory, a->arg, a->count * sizeof (argument)); \ + a->arg = memory; \ + } \ + while (a->count <= n) \ + a->arg[a->count++].type = TYPE_NONE; \ + if (a->arg[n].type == TYPE_NONE) \ + a->arg[n].type = (_type_); \ + else if (a->arg[n].type != (_type_)) \ + /* Ambiguous type for positional argument. */ \ + goto error; \ + } + + while (*cp != '\0') + { + CHAR_T c = *cp++; + if (c == '%') + { + size_t arg_index = ARG_NONE; + DIRECTIVE *dp = &d->dir[d->count]; /* pointer to next directive */ + + /* Initialize the next directive. */ + dp->dir_start = cp - 1; + dp->flags = 0; + dp->width_start = NULL; + dp->width_end = NULL; + dp->width_arg_index = ARG_NONE; + dp->precision_start = NULL; + dp->precision_end = NULL; + dp->precision_arg_index = ARG_NONE; + dp->arg_index = ARG_NONE; + + /* Test for positional argument. */ + if (*cp >= '0' && *cp <= '9') + { + const CHAR_T *np; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + ; + if (*np == '$') + { + size_t n = 0; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + n = xsum (xtimes (n, 10), *np - '0'); + if (n == 0) + /* Positional argument 0. */ + goto error; + if (size_overflow_p (n)) + /* n too large, would lead to out of memory later. */ + goto error; + arg_index = n - 1; + cp = np + 1; + } + } + + /* Read the flags. */ + for (;;) + { + if (*cp == '\'') + { + dp->flags |= FLAG_GROUP; + cp++; + } + else if (*cp == '-') + { + dp->flags |= FLAG_LEFT; + cp++; + } + else if (*cp == '+') + { + dp->flags |= FLAG_SHOWSIGN; + cp++; + } + else if (*cp == ' ') + { + dp->flags |= FLAG_SPACE; + cp++; + } + else if (*cp == '#') + { + dp->flags |= FLAG_ALT; + cp++; + } + else if (*cp == '0') + { + dp->flags |= FLAG_ZERO; + cp++; + } +#if __GLIBC__ >= 2 && !defined __UCLIBC__ + else if (*cp == 'I') + { + dp->flags |= FLAG_LOCALIZED; + cp++; + } +#endif + else + break; + } + + /* Parse the field width. */ + if (*cp == '*') + { + dp->width_start = cp; + cp++; + dp->width_end = cp; + if (max_width_length < 1) + max_width_length = 1; + + /* Test for positional argument. */ + if (*cp >= '0' && *cp <= '9') + { + const CHAR_T *np; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + ; + if (*np == '$') + { + size_t n = 0; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + n = xsum (xtimes (n, 10), *np - '0'); + if (n == 0) + /* Positional argument 0. */ + goto error; + if (size_overflow_p (n)) + /* n too large, would lead to out of memory later. */ + goto error; + dp->width_arg_index = n - 1; + cp = np + 1; + } + } + if (dp->width_arg_index == ARG_NONE) + { + dp->width_arg_index = arg_posn++; + if (dp->width_arg_index == ARG_NONE) + /* arg_posn wrapped around. */ + goto error; + } + REGISTER_ARG (dp->width_arg_index, TYPE_INT); + } + else if (*cp >= '0' && *cp <= '9') + { + size_t width_length; + + dp->width_start = cp; + for (; *cp >= '0' && *cp <= '9'; cp++) + ; + dp->width_end = cp; + width_length = dp->width_end - dp->width_start; + if (max_width_length < width_length) + max_width_length = width_length; + } + + /* Parse the precision. */ + if (*cp == '.') + { + cp++; + if (*cp == '*') + { + dp->precision_start = cp - 1; + cp++; + dp->precision_end = cp; + if (max_precision_length < 2) + max_precision_length = 2; + + /* Test for positional argument. */ + if (*cp >= '0' && *cp <= '9') + { + const CHAR_T *np; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + ; + if (*np == '$') + { + size_t n = 0; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + n = xsum (xtimes (n, 10), *np - '0'); + if (n == 0) + /* Positional argument 0. */ + goto error; + if (size_overflow_p (n)) + /* n too large, would lead to out of memory + later. */ + goto error; + dp->precision_arg_index = n - 1; + cp = np + 1; + } + } + if (dp->precision_arg_index == ARG_NONE) + { + dp->precision_arg_index = arg_posn++; + if (dp->precision_arg_index == ARG_NONE) + /* arg_posn wrapped around. */ + goto error; + } + REGISTER_ARG (dp->precision_arg_index, TYPE_INT); + } + else + { + size_t precision_length; + + dp->precision_start = cp - 1; + for (; *cp >= '0' && *cp <= '9'; cp++) + ; + dp->precision_end = cp; + precision_length = dp->precision_end - dp->precision_start; + if (max_precision_length < precision_length) + max_precision_length = precision_length; + } + } + + { + arg_type type; + + /* Parse argument type/size specifiers. */ + { + int flags = 0; + + for (;;) + { + if (*cp == 'h') + { + flags |= (1 << (flags & 1)); + cp++; + } + else if (*cp == 'L') + { + flags |= 4; + cp++; + } + else if (*cp == 'l') + { + flags += 8; + cp++; + } + else if (*cp == 'j') + { + if (sizeof (intmax_t) > sizeof (long)) + { + /* intmax_t = long long */ + flags += 16; + } + else if (sizeof (intmax_t) > sizeof (int)) + { + /* intmax_t = long */ + flags += 8; + } + cp++; + } + else if (*cp == 'z' || *cp == 'Z') + { + /* 'z' is standardized in ISO C 99, but glibc uses 'Z' + because the warning facility in gcc-2.95.2 understands + only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784). */ + if (sizeof (size_t) > sizeof (long)) + { + /* size_t = long long */ + flags += 16; + } + else if (sizeof (size_t) > sizeof (int)) + { + /* size_t = long */ + flags += 8; + } + cp++; + } + else if (*cp == 't') + { + if (sizeof (ptrdiff_t) > sizeof (long)) + { + /* ptrdiff_t = long long */ + flags += 16; + } + else if (sizeof (ptrdiff_t) > sizeof (int)) + { + /* ptrdiff_t = long */ + flags += 8; + } + cp++; + } +#if defined __APPLE__ && defined __MACH__ + /* On MacOS X 10.3, PRIdMAX is defined as "qd". + We cannot change it to "lld" because PRIdMAX must also + be understood by the system's printf routines. */ + else if (*cp == 'q') + { + if (64 / 8 > sizeof (long)) + { + /* int64_t = long long */ + flags += 16; + } + else + { + /* int64_t = long */ + flags += 8; + } + cp++; + } +#endif +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + /* On native Windows, PRIdMAX is defined as "I64d". + We cannot change it to "lld" because PRIdMAX must also + be understood by the system's printf routines. */ + else if (*cp == 'I' && cp[1] == '6' && cp[2] == '4') + { + if (64 / 8 > sizeof (long)) + { + /* __int64 = long long */ + flags += 16; + } + else + { + /* __int64 = long */ + flags += 8; + } + cp += 3; + } +#endif + else + break; + } + + /* Read the conversion character. */ + c = *cp++; + switch (c) + { + case 'd': case 'i': +#if HAVE_LONG_LONG_INT + /* If 'long long' exists and is larger than 'long': */ + if (flags >= 16 || (flags & 4)) + type = TYPE_LONGLONGINT; + else +#endif + /* If 'long long' exists and is the same as 'long', we parse + "lld" into TYPE_LONGINT. */ + if (flags >= 8) + type = TYPE_LONGINT; + else if (flags & 2) + type = TYPE_SCHAR; + else if (flags & 1) + type = TYPE_SHORT; + else + type = TYPE_INT; + break; + case 'o': case 'u': case 'x': case 'X': +#if HAVE_LONG_LONG_INT + /* If 'long long' exists and is larger than 'long': */ + if (flags >= 16 || (flags & 4)) + type = TYPE_ULONGLONGINT; + else +#endif + /* If 'unsigned long long' exists and is the same as + 'unsigned long', we parse "llu" into TYPE_ULONGINT. */ + if (flags >= 8) + type = TYPE_ULONGINT; + else if (flags & 2) + type = TYPE_UCHAR; + else if (flags & 1) + type = TYPE_USHORT; + else + type = TYPE_UINT; + break; + case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': + case 'a': case 'A': + if (flags >= 16 || (flags & 4)) + type = TYPE_LONGDOUBLE; + else + type = TYPE_DOUBLE; + break; + case 'c': + if (flags >= 8) +#if HAVE_WINT_T + type = TYPE_WIDE_CHAR; +#else + goto error; +#endif + else + type = TYPE_CHAR; + break; +#if HAVE_WINT_T + case 'C': + type = TYPE_WIDE_CHAR; + c = 'c'; + break; +#endif + case 's': + if (flags >= 8) +#if HAVE_WCHAR_T + type = TYPE_WIDE_STRING; +#else + goto error; +#endif + else + type = TYPE_STRING; + break; +#if HAVE_WCHAR_T + case 'S': + type = TYPE_WIDE_STRING; + c = 's'; + break; +#endif + case 'p': + type = TYPE_POINTER; + break; + case 'n': +#if HAVE_LONG_LONG_INT + /* If 'long long' exists and is larger than 'long': */ + if (flags >= 16 || (flags & 4)) + type = TYPE_COUNT_LONGLONGINT_POINTER; + else +#endif + /* If 'long long' exists and is the same as 'long', we parse + "lln" into TYPE_COUNT_LONGINT_POINTER. */ + if (flags >= 8) + type = TYPE_COUNT_LONGINT_POINTER; + else if (flags & 2) + type = TYPE_COUNT_SCHAR_POINTER; + else if (flags & 1) + type = TYPE_COUNT_SHORT_POINTER; + else + type = TYPE_COUNT_INT_POINTER; + break; +#if ENABLE_UNISTDIO + /* The unistdio extensions. */ + case 'U': + if (flags >= 16) + type = TYPE_U32_STRING; + else if (flags >= 8) + type = TYPE_U16_STRING; + else + type = TYPE_U8_STRING; + break; +#endif + case '%': + type = TYPE_NONE; + break; + default: + /* Unknown conversion character. */ + goto error; + } + } + + if (type != TYPE_NONE) + { + dp->arg_index = arg_index; + if (dp->arg_index == ARG_NONE) + { + dp->arg_index = arg_posn++; + if (dp->arg_index == ARG_NONE) + /* arg_posn wrapped around. */ + goto error; + } + REGISTER_ARG (dp->arg_index, type); + } + dp->conversion = c; + dp->dir_end = cp; + } + + d->count++; + if (d->count >= d_allocated) + { + size_t memory_size; + DIRECTIVE *memory; + + d_allocated = xtimes (d_allocated, 2); + memory_size = xtimes (d_allocated, sizeof (DIRECTIVE)); + if (size_overflow_p (memory_size)) + /* Overflow, would lead to out of memory. */ + goto out_of_memory; + memory = (DIRECTIVE *) (d->dir != d->direct_alloc_dir + ? realloc (d->dir, memory_size) + : malloc (memory_size)); + if (memory == NULL) + /* Out of memory. */ + goto out_of_memory; + if (d->dir == d->direct_alloc_dir) + memcpy (memory, d->dir, d->count * sizeof (DIRECTIVE)); + d->dir = memory; + } + } +#if CHAR_T_ONLY_ASCII + else if (!c_isascii (c)) + { + /* Non-ASCII character. Not supported. */ + goto error; + } +#endif + } + d->dir[d->count].dir_start = cp; + + d->max_width_length = max_width_length; + d->max_precision_length = max_precision_length; + return 0; + +error: + if (a->arg != a->direct_alloc_arg) + free (a->arg); + if (d->dir != d->direct_alloc_dir) + free (d->dir); + errno = EINVAL; + return -1; + +out_of_memory: + if (a->arg != a->direct_alloc_arg) + free (a->arg); + if (d->dir != d->direct_alloc_dir) + free (d->dir); + errno = ENOMEM; + return -1; +} + +#undef PRINTF_PARSE +#undef DIRECTIVES +#undef DIRECTIVE +#undef CHAR_T_ONLY_ASCII +#undef CHAR_T diff --git a/gnulib/lib/printf-parse.h b/gnulib/lib/printf-parse.h new file mode 100644 index 0000000..577099a --- /dev/null +++ b/gnulib/lib/printf-parse.h @@ -0,0 +1,193 @@ +/* Parse printf format string. + Copyright (C) 1999, 2002-2003, 2005, 2007, 2010-2012 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, see <http://www.gnu.org/licenses/>. */ + +#ifndef _PRINTF_PARSE_H +#define _PRINTF_PARSE_H + +/* This file can be parametrized with the following macros: + ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. + STATIC Set to 'static' to declare the function static. */ + +#if HAVE_FEATURES_H +# include <features.h> /* for __GLIBC__, __UCLIBC__ */ +#endif + +#include "printf-args.h" + + +/* Flags */ +#define FLAG_GROUP 1 /* ' flag */ +#define FLAG_LEFT 2 /* - flag */ +#define FLAG_SHOWSIGN 4 /* + flag */ +#define FLAG_SPACE 8 /* space flag */ +#define FLAG_ALT 16 /* # flag */ +#define FLAG_ZERO 32 +#if __GLIBC__ >= 2 && !defined __UCLIBC__ +# define FLAG_LOCALIZED 64 /* I flag, uses localized digits */ +#endif + +/* arg_index value indicating that no argument is consumed. */ +#define ARG_NONE (~(size_t)0) + +/* xxx_directive: A parsed directive. + xxx_directives: A parsed format string. */ + +/* Number of directly allocated directives (no malloc() needed). */ +#define N_DIRECT_ALLOC_DIRECTIVES 7 + +/* A parsed directive. */ +typedef struct +{ + const char* dir_start; + const char* dir_end; + int flags; + const char* width_start; + const char* width_end; + size_t width_arg_index; + const char* precision_start; + const char* precision_end; + size_t precision_arg_index; + char conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ + size_t arg_index; +} +char_directive; + +/* A parsed format string. */ +typedef struct +{ + size_t count; + char_directive *dir; + size_t max_width_length; + size_t max_precision_length; + char_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; +} +char_directives; + +#if ENABLE_UNISTDIO + +/* A parsed directive. */ +typedef struct +{ + const uint8_t* dir_start; + const uint8_t* dir_end; + int flags; + const uint8_t* width_start; + const uint8_t* width_end; + size_t width_arg_index; + const uint8_t* precision_start; + const uint8_t* precision_end; + size_t precision_arg_index; + uint8_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ + size_t arg_index; +} +u8_directive; + +/* A parsed format string. */ +typedef struct +{ + size_t count; + u8_directive *dir; + size_t max_width_length; + size_t max_precision_length; + u8_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; +} +u8_directives; + +/* A parsed directive. */ +typedef struct +{ + const uint16_t* dir_start; + const uint16_t* dir_end; + int flags; + const uint16_t* width_start; + const uint16_t* width_end; + size_t width_arg_index; + const uint16_t* precision_start; + const uint16_t* precision_end; + size_t precision_arg_index; + uint16_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ + size_t arg_index; +} +u16_directive; + +/* A parsed format string. */ +typedef struct +{ + size_t count; + u16_directive *dir; + size_t max_width_length; + size_t max_precision_length; + u16_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; +} +u16_directives; + +/* A parsed directive. */ +typedef struct +{ + const uint32_t* dir_start; + const uint32_t* dir_end; + int flags; + const uint32_t* width_start; + const uint32_t* width_end; + size_t width_arg_index; + const uint32_t* precision_start; + const uint32_t* precision_end; + size_t precision_arg_index; + uint32_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ + size_t arg_index; +} +u32_directive; + +/* A parsed format string. */ +typedef struct +{ + size_t count; + u32_directive *dir; + size_t max_width_length; + size_t max_precision_length; + u32_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; +} +u32_directives; + +#endif + + +/* Parses the format string. Fills in the number N of directives, and fills + in directives[0], ..., directives[N-1], and sets directives[N].dir_start + to the end of the format string. Also fills in the arg_type fields of the + arguments and the needed count of arguments. */ +#if ENABLE_UNISTDIO +extern int + ulc_printf_parse (const char *format, char_directives *d, arguments *a); +extern int + u8_printf_parse (const uint8_t *format, u8_directives *d, arguments *a); +extern int + u16_printf_parse (const uint16_t *format, u16_directives *d, + arguments *a); +extern int + u32_printf_parse (const uint32_t *format, u32_directives *d, + arguments *a); +#else +# ifdef STATIC +STATIC +# else +extern +# endif +int printf_parse (const char *format, char_directives *d, arguments *a); +#endif + +#endif /* _PRINTF_PARSE_H */ diff --git a/gnulib/lib/rawmemchr.c b/gnulib/lib/rawmemchr.c new file mode 100644 index 0000000..c94a0e1 --- /dev/null +++ b/gnulib/lib/rawmemchr.c @@ -0,0 +1,136 @@ +/* Searching in a string. + Copyright (C) 2008-2012 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 <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <string.h> + +/* Find the first occurrence of C in S. */ +void * +rawmemchr (const void *s, int c_in) +{ + /* On 32-bit hardware, choosing longword to be a 32-bit unsigned + long instead of a 64-bit uintmax_t tends to give better + performance. On 64-bit hardware, unsigned long is generally 64 + bits already. Change this typedef to experiment with + performance. */ + typedef unsigned long int longword; + + const unsigned char *char_ptr; + const longword *longword_ptr; + longword repeated_one; + longword repeated_c; + unsigned char c; + + c = (unsigned char) c_in; + + /* Handle the first few bytes by reading one byte at a time. + Do this until CHAR_PTR is aligned on a longword boundary. */ + for (char_ptr = (const unsigned char *) s; + (size_t) char_ptr % sizeof (longword) != 0; + ++char_ptr) + if (*char_ptr == c) + return (void *) char_ptr; + + longword_ptr = (const longword *) char_ptr; + + /* All these elucidatory comments refer to 4-byte longwords, + but the theory applies equally well to any size longwords. */ + + /* Compute auxiliary longword values: + repeated_one is a value which has a 1 in every byte. + repeated_c has c in every byte. */ + repeated_one = 0x01010101; + repeated_c = c | (c << 8); + repeated_c |= repeated_c << 16; + if (0xffffffffU < (longword) -1) + { + repeated_one |= repeated_one << 31 << 1; + repeated_c |= repeated_c << 31 << 1; + if (8 < sizeof (longword)) + { + size_t i; + + for (i = 64; i < sizeof (longword) * 8; i *= 2) + { + repeated_one |= repeated_one << i; + repeated_c |= repeated_c << i; + } + } + } + + /* Instead of the traditional loop which tests each byte, we will + test a longword at a time. The tricky part is testing if *any of + the four* bytes in the longword in question are equal to NUL or + c. We first use an xor with repeated_c. This reduces the task + to testing whether *any of the four* bytes in longword1 is zero. + + We compute tmp = + ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). + That is, we perform the following operations: + 1. Subtract repeated_one. + 2. & ~longword1. + 3. & a mask consisting of 0x80 in every byte. + Consider what happens in each byte: + - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, + and step 3 transforms it into 0x80. A carry can also be propagated + to more significant bytes. + - If a byte of longword1 is nonzero, let its lowest 1 bit be at + position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, + the byte ends in a single bit of value 0 and k bits of value 1. + After step 2, the result is just k bits of value 1: 2^k - 1. After + step 3, the result is 0. And no carry is produced. + So, if longword1 has only non-zero bytes, tmp is zero. + Whereas if longword1 has a zero byte, call j the position of the least + significant zero byte. Then the result has a zero at positions 0, ..., + j-1 and a 0x80 at position j. We cannot predict the result at the more + significant bytes (positions j+1..3), but it does not matter since we + already have a non-zero bit at position 8*j+7. + + The test whether any byte in longword1 is zero is equivalent + to testing whether tmp is nonzero. + + This test can read beyond the end of a string, depending on where + C_IN is encountered. However, this is considered safe since the + initialization phase ensured that the read will be aligned, + therefore, the read will not cross page boundaries and will not + cause a fault. */ + + while (1) + { + longword longword1 = *longword_ptr ^ repeated_c; + + if ((((longword1 - repeated_one) & ~longword1) + & (repeated_one << 7)) != 0) + break; + longword_ptr++; + } + + char_ptr = (const unsigned char *) longword_ptr; + + /* At this point, we know that one of the sizeof (longword) bytes + starting at char_ptr is == c. On little-endian machines, we + could determine the first such byte without any further memory + accesses, just by looking at the tmp result from the last loop + iteration. But this does not work on big-endian machines. + Choose code that works in both cases. */ + + char_ptr = (unsigned char *) longword_ptr; + while (*char_ptr != c) + char_ptr++; + return (void *) char_ptr; +} diff --git a/gnulib/lib/rawmemchr.valgrind b/gnulib/lib/rawmemchr.valgrind new file mode 100644 index 0000000..6363923 --- /dev/null +++ b/gnulib/lib/rawmemchr.valgrind @@ -0,0 +1,12 @@ +# Suppress a valgrind message about use of uninitialized memory in rawmemchr(). +# This use is OK because it provides only a speedup. +{ + rawmemchr-value4 + Memcheck:Value4 + fun:rawmemchr +} +{ + rawmemchr-value8 + Memcheck:Value8 + fun:rawmemchr +} diff --git a/gnulib/lib/size_max.h b/gnulib/lib/size_max.h new file mode 100644 index 0000000..9642441 --- /dev/null +++ b/gnulib/lib/size_max.h @@ -0,0 +1,30 @@ +/* size_max.h -- declare SIZE_MAX through system headers + Copyright (C) 2005-2006, 2009-2012 Free Software Foundation, Inc. + Written by Simon Josefsson. + + 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, see <http://www.gnu.org/licenses/>. */ + +#ifndef GNULIB_SIZE_MAX_H +#define GNULIB_SIZE_MAX_H + +/* Get SIZE_MAX declaration on systems like Solaris 7/8/9. */ +# include <limits.h> +/* Get SIZE_MAX declaration on systems like glibc 2. */ +# if HAVE_STDINT_H +# include <stdint.h> +# endif +/* On systems where these include files don't define it, SIZE_MAX is defined + in config.h. */ + +#endif /* GNULIB_SIZE_MAX_H */ diff --git a/gnulib/lib/sleep.c b/gnulib/lib/sleep.c new file mode 100644 index 0000000..9a4b940 --- /dev/null +++ b/gnulib/lib/sleep.c @@ -0,0 +1,76 @@ +/* Pausing execution of the current thread. + Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2007. + + 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 <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <unistd.h> + +#include <limits.h> + +#include "verify.h" + +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include <windows.h> + +unsigned int +sleep (unsigned int seconds) +{ + unsigned int remaining; + + /* Sleep for 1 second many times, because + 1. Sleep is not interruptible by Ctrl-C, + 2. we want to avoid arithmetic overflow while multiplying with 1000. */ + for (remaining = seconds; remaining > 0; remaining--) + Sleep (1000); + + return remaining; +} + +#elif HAVE_SLEEP + +# undef sleep + +/* Guarantee unlimited sleep and a reasonable return value. Cygwin + 1.5.x rejects attempts to sleep more than 49.7 days (2**32 + milliseconds), but uses uninitialized memory which results in a + garbage answer. Similarly, Linux 2.6.9 with glibc 2.3.4 has a too + small return value when asked to sleep more than 24.85 days. */ +unsigned int +rpl_sleep (unsigned int seconds) +{ + /* This requires int larger than 16 bits. */ + verify (UINT_MAX / 24 / 24 / 60 / 60); + const unsigned int limit = 24 * 24 * 60 * 60; + while (limit < seconds) + { + unsigned int result; + seconds -= limit; + result = sleep (limit); + if (result) + return seconds + result; + } + return sleep (seconds); +} + +#else /* !HAVE_SLEEP */ + + #error "Please port gnulib sleep.c to your platform, possibly using usleep() or select(), then report this to bug-gnulib." + +#endif diff --git a/gnulib/lib/stdalign.in.h b/gnulib/lib/stdalign.in.h new file mode 100644 index 0000000..8fba694 --- /dev/null +++ b/gnulib/lib/stdalign.in.h @@ -0,0 +1,90 @@ +/* A substitute for ISO C11 <stdalign.h>. + + Copyright 2011-2012 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, see <http://www.gnu.org/licenses/>. */ + +/* Written by Paul Eggert and Bruno Haible. */ + +#ifndef _GL_STDALIGN_H +#define _GL_STDALIGN_H + +/* ISO C11 <stdalign.h> for platforms that lack it. + + References: + ISO C11 (latest free draft + <http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf>) + sections 6.5.3.4, 6.7.5, 7.15. + C++11 (latest free draft + <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf>) + section 18.10. */ + +/* alignof (TYPE), also known as _Alignof (TYPE), yields the alignment + requirement of a structure member (i.e., slot or field) that is of + type TYPE, as an integer constant expression. + + This differs from GCC's __alignof__ operator, which can yield a + better-performing alignment for an object of that type. For + example, on x86 with GCC, __alignof__ (double) and __alignof__ + (long long) are 8, whereas alignof (double) and alignof (long long) + are 4 unless the option '-malign-double' is used. + + The result cannot be used as a value for an 'enum' constant, if you + want to be portable to HP-UX 10.20 cc and AIX 3.2.5 xlc. */ +#include <stddef.h> +#if defined __cplusplus + template <class __t> struct __alignof_helper { char __a; __t __b; }; +# define _Alignof(type) offsetof (__alignof_helper<type>, __b) +#else +# define _Alignof(type) offsetof (struct { char __a; type __b; }, __b) +#endif +#define alignof _Alignof +#define __alignof_is_defined 1 + +/* alignas (A), also known as _Alignas (A), aligns a variable or type + to the alignment A, where A is an integer constant expression. For + example: + + int alignas (8) foo; + struct s { int a; int alignas (8) bar; }; + + aligns the address of FOO and the offset of BAR to be multiples of 8. + + A should be a power of two that is at least the type's alignment + and at most the implementation's alignment limit. This limit is + 2**28 on typical GNUish hosts, and 2**13 on MSVC. To be portable + to MSVC through at least version 10.0, A should be an integer + constant, as MSVC does not support expressions such as 1 << 3. + To be portable to Sun C 5.11, do not align auto variables to + anything stricter than their default alignment. + + The following C11 requirements are not supported here: + + - If A is zero, alignas has no effect. + - alignas can be used multiple times; the strictest one wins. + - alignas (TYPE) is equivalent to alignas (alignof (TYPE)). + + */ + +#if __GNUC__ || __IBMC__ || __IBMCPP__ || 0x5110 <= __SUNPRO_C +# define _Alignas(a) __attribute__ ((__aligned__ (a))) +#elif 1300 <= _MSC_VER +# define _Alignas(a) __declspec (align (a)) +#endif +#ifdef _Alignas +# define alignas _Alignas +# define __alignas_is_defined 1 +#endif + +#endif /* _GL_STDALIGN_H */ diff --git a/gnulib/lib/stdbool.in.h b/gnulib/lib/stdbool.in.h new file mode 100644 index 0000000..ed1f9aa --- /dev/null +++ b/gnulib/lib/stdbool.in.h @@ -0,0 +1,121 @@ +/* Copyright (C) 2001-2003, 2006-2012 Free Software Foundation, Inc. + Written by Bruno Haible <haible@clisp.cons.org>, 2001. + + 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, see <http://www.gnu.org/licenses/>. */ + +#ifndef _GL_STDBOOL_H +#define _GL_STDBOOL_H + +/* ISO C 99 <stdbool.h> for platforms that lack it. */ + +/* Usage suggestions: + + Programs that use <stdbool.h> should be aware of some limitations + and standards compliance issues. + + Standards compliance: + + - <stdbool.h> must be #included before 'bool', 'false', 'true' + can be used. + + - You cannot assume that sizeof (bool) == 1. + + - Programs should not undefine the macros bool, true, and false, + as C99 lists that as an "obsolescent feature". + + Limitations of this substitute, when used in a C89 environment: + + - <stdbool.h> must be #included before the '_Bool' type can be used. + + - You cannot assume that _Bool is a typedef; it might be a macro. + + - Bit-fields of type 'bool' are not supported. Portable code + should use 'unsigned int foo : 1;' rather than 'bool foo : 1;'. + + - In C99, casts and automatic conversions to '_Bool' or 'bool' are + performed in such a way that every nonzero value gets converted + to 'true', and zero gets converted to 'false'. This doesn't work + with this substitute. With this substitute, only the values 0 and 1 + give the expected result when converted to _Bool' or 'bool'. + + - C99 allows the use of (_Bool)0.0 in constant expressions, but + this substitute cannot always provide this property. + + Also, it is suggested that programs use 'bool' rather than '_Bool'; + this isn't required, but 'bool' is more common. */ + + +/* 7.16. Boolean type and values */ + +/* BeOS <sys/socket.h> already #defines false 0, true 1. We use the same + definitions below, but temporarily we have to #undef them. */ +#if defined __BEOS__ && !defined __HAIKU__ +# include <OS.h> /* defines bool but not _Bool */ +# undef false +# undef true +#endif + +/* For the sake of symbolic names in gdb, we define true and false as + enum constants, not only as macros. + It is tempting to write + typedef enum { false = 0, true = 1 } _Bool; + so that gdb prints values of type 'bool' symbolically. But if we do + this, values of type '_Bool' may promote to 'int' or 'unsigned int' + (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__ && !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. */ +# if !@HAVE__BOOL@ +typedef bool _Bool; +# endif +#else +# if !defined __GNUC__ + /* If @HAVE__BOOL@: + Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when + the built-in _Bool type is used. See + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html + Similar bugs are likely with other compilers as well; this file + wouldn't be used if <stdbool.h> was working. + So we override the _Bool type. + If !@HAVE__BOOL@: + Need to define _Bool ourselves. As 'signed char' or as an enum type? + Use of a typedef, with SunPRO C, leads to a stupid + "warning: _Bool is a keyword in ISO C99". + Use of an enum type, with IRIX cc, leads to a stupid + "warning(1185): enumerated type mixed with another type". + Even the existence of an enum type, without a typedef, + "Invalid enumerator. (badenum)" with HP-UX cc on Tru64. + The only benefit of the enum, debuggability, is not important + with these compilers. So use 'signed char' and no enum. */ +# define _Bool signed char +# else + /* With this compiler, trust the _Bool type if the compiler has it. */ +# if !@HAVE__BOOL@ +typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool; +# endif +# endif +#endif +#define bool _Bool + +/* The other macros must be usable in preprocessor directives. */ +#define false 0 +#define true 1 +#define __bool_true_false_are_defined 1 + +#endif /* _GL_STDBOOL_H */ diff --git a/gnulib/lib/stddef.in.h b/gnulib/lib/stddef.in.h new file mode 100644 index 0000000..17fcaea --- /dev/null +++ b/gnulib/lib/stddef.in.h @@ -0,0 +1,86 @@ +/* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues. + + Copyright (C) 2009-2012 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, see <http://www.gnu.org/licenses/>. */ + +/* Written by Eric Blake. */ + +/* + * POSIX 2008 <stddef.h> for platforms that have issues. + * <http://www.opengroup.org/susv3xbd/stddef.h.html> + */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +#if defined __need_wchar_t || defined __need_size_t \ + || defined __need_ptrdiff_t || defined __need_NULL \ + || defined __need_wint_t +/* Special invocation convention inside gcc header files. In + particular, gcc provides a version of <stddef.h> that blindly + redefines NULL even when __need_wint_t was defined, even though + wint_t is not normally provided by <stddef.h>. Hence, we must + remember if special invocation has ever been used to obtain wint_t, + in which case we need to clean up NULL yet again. */ + +# if !(defined _@GUARD_PREFIX@_STDDEF_H && defined _GL_STDDEF_WINT_T) +# ifdef __need_wint_t +# undef _@GUARD_PREFIX@_STDDEF_H +# define _GL_STDDEF_WINT_T +# endif +# @INCLUDE_NEXT@ @NEXT_STDDEF_H@ +# endif + +#else +/* Normal invocation convention. */ + +# ifndef _@GUARD_PREFIX@_STDDEF_H + +/* The include_next requires a split double-inclusion guard. */ + +# @INCLUDE_NEXT@ @NEXT_STDDEF_H@ + +# ifndef _@GUARD_PREFIX@_STDDEF_H +# define _@GUARD_PREFIX@_STDDEF_H + +/* On NetBSD 5.0, the definition of NULL lacks proper parentheses. */ +#if @REPLACE_NULL@ +# undef NULL +# ifdef __cplusplus + /* ISO C++ says that the macro NULL must expand to an integer constant + expression, hence '((void *) 0)' is not allowed in C++. */ +# if __GNUG__ >= 3 + /* GNU C++ has a __null macro that behaves like an integer ('int' or + 'long') but has the same size as a pointer. Use that, to avoid + warnings. */ +# define NULL __null +# else +# define NULL 0L +# endif +# else +# define NULL ((void *) 0) +# endif +#endif + +/* Some platforms lack wchar_t. */ +#if !@HAVE_WCHAR_T@ +# define wchar_t int +#endif + +# endif /* _@GUARD_PREFIX@_STDDEF_H */ +# endif /* _@GUARD_PREFIX@_STDDEF_H */ +#endif /* __need_XXX */ diff --git a/gnulib/lib/stdint.in.h b/gnulib/lib/stdint.in.h new file mode 100644 index 0000000..8e4c822 --- /dev/null +++ b/gnulib/lib/stdint.in.h @@ -0,0 +1,619 @@ +/* Copyright (C) 2001-2002, 2004-2012 Free Software Foundation, Inc. + Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood. + This file is part of gnulib. + + 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, see <http://www.gnu.org/licenses/>. */ + +/* + * ISO C 99 <stdint.h> for platforms that lack it. + * <http://www.opengroup.org/susv3xbd/stdint.h.html> + */ + +#ifndef _@GUARD_PREFIX@_STDINT_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* When including a system file that in turn includes <inttypes.h>, + use the system <inttypes.h>, not our substitute. This avoids + problems with (for example) VMS, whose <sys/bitypes.h> includes + <inttypes.h>. */ +#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H + +/* On Android (Bionic libc), <sys/types.h> includes this file before + having defined 'time_t'. Therefore in this case avoid including + other system header files; just include the system's <stdint.h>. + Ideally we should test __BIONIC__ here, but it is only defined after + <sys/cdefs.h> has been included; hence test __ANDROID__ instead. */ +#if defined __ANDROID__ \ + && defined _SYS_TYPES_H_ && !defined _SSIZE_T_DEFINED_ +# @INCLUDE_NEXT@ @NEXT_STDINT_H@ +#else + +/* Get those types that are already defined in other system include + files, so that we can "#define int8_t signed char" below without + worrying about a later system include file containing a "typedef + signed char int8_t;" that will get messed up by our macro. Our + macros should all be consistent with the system versions, except + for the "fast" types and macros, which we recommend against using + in public interfaces due to compiler differences. */ + +#if @HAVE_STDINT_H@ +# if defined __sgi && ! defined __c99 + /* Bypass IRIX's <stdint.h> if in C89 mode, since it merely annoys users + with "This header file is to be used only for c99 mode compilations" + diagnostics. */ +# define __STDINT_H__ +# endif + + /* Some pre-C++11 <stdint.h> implementations need this. */ +# ifdef __cplusplus +# ifndef __STDC_CONSTANT_MACROS +# define __STDC_CONSTANT_MACROS 1 +# endif +# ifndef __STDC_LIMIT_MACROS +# define __STDC_LIMIT_MACROS 1 +# endif +# endif + + /* Other systems may have an incomplete or buggy <stdint.h>. + Include it before <inttypes.h>, since any "#include <stdint.h>" + in <inttypes.h> would reinclude us, skipping our contents because + _@GUARD_PREFIX@_STDINT_H is defined. + The include_next requires a split double-inclusion guard. */ +# @INCLUDE_NEXT@ @NEXT_STDINT_H@ +#endif + +#if ! defined _@GUARD_PREFIX@_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H +#define _@GUARD_PREFIX@_STDINT_H + +/* <sys/types.h> defines some of the stdint.h types as well, on glibc, + IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>). + AIX 5.2 <sys/types.h> isn't needed and causes troubles. + MacOS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but + relies on the system <stdint.h> definitions, so include + <sys/types.h> after @NEXT_STDINT_H@. */ +#if @HAVE_SYS_TYPES_H@ && ! defined _AIX +# include <sys/types.h> +#endif + +/* Get LONG_MIN, LONG_MAX, ULONG_MAX. */ +#include <limits.h> + +#if @HAVE_INTTYPES_H@ + /* In OpenBSD 3.8, <inttypes.h> includes <machine/types.h>, which defines + int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__. + <inttypes.h> also defines intptr_t and uintptr_t. */ +# include <inttypes.h> +#elif @HAVE_SYS_INTTYPES_H@ + /* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and + the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX. */ +# include <sys/inttypes.h> +#endif + +#if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__ + /* Linux libc4 >= 4.6.7 and libc5 have a <sys/bitypes.h> that defines + int{8,16,32,64}_t and __BIT_TYPES_DEFINED__. In libc5 >= 5.2.2 it is + included by <sys/types.h>. */ +# include <sys/bitypes.h> +#endif + +#undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H + +/* Minimum and maximum values for an integer type under the usual assumption. + Return an unspecified value if BITS == 0, adding a check to pacify + picky compilers. */ + +#define _STDINT_MIN(signed, bits, zero) \ + ((signed) ? (- ((zero) + 1) << ((bits) ? (bits) - 1 : 0)) : (zero)) + +#define _STDINT_MAX(signed, bits, zero) \ + ((signed) \ + ? ~ _STDINT_MIN (signed, bits, zero) \ + : /* The expression for the unsigned case. The subtraction of (signed) \ + is a nop in the unsigned case and avoids "signed integer overflow" \ + warnings in the signed case. */ \ + ((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1) + +#if !GNULIB_defined_stdint_types + +/* 7.18.1.1. Exact-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. */ + +#undef int8_t +#undef uint8_t +typedef signed char gl_int8_t; +typedef unsigned char gl_uint8_t; +#define int8_t gl_int8_t +#define uint8_t gl_uint8_t + +#undef int16_t +#undef uint16_t +typedef short int gl_int16_t; +typedef unsigned short int gl_uint16_t; +#define int16_t gl_int16_t +#define uint16_t gl_uint16_t + +#undef int32_t +#undef uint32_t +typedef int gl_int32_t; +typedef unsigned int gl_uint32_t; +#define int32_t gl_int32_t +#define uint32_t gl_uint32_t + +/* If the system defines INT64_MAX, assume int64_t works. That way, + if the underlying platform defines int64_t to be a 64-bit long long + int, the code below won't mistakenly define it to be a 64-bit long + int, which would mess up C++ name mangling. We must use #ifdef + rather than #if, to avoid an error with HP-UX 10.20 cc. */ + +#ifdef INT64_MAX +# define GL_INT64_T +#else +/* Do not undefine int64_t if gnulib is not being used with 64-bit + types, since otherwise it breaks platforms like Tandem/NSK. */ +# if LONG_MAX >> 31 >> 31 == 1 +# undef int64_t +typedef long int gl_int64_t; +# define int64_t gl_int64_t +# define GL_INT64_T +# elif defined _MSC_VER +# undef int64_t +typedef __int64 gl_int64_t; +# define int64_t gl_int64_t +# define GL_INT64_T +# elif @HAVE_LONG_LONG_INT@ +# undef int64_t +typedef long long int gl_int64_t; +# define int64_t gl_int64_t +# define GL_INT64_T +# endif +#endif + +#ifdef UINT64_MAX +# define GL_UINT64_T +#else +# if ULONG_MAX >> 31 >> 31 >> 1 == 1 +# undef uint64_t +typedef unsigned long int gl_uint64_t; +# define uint64_t gl_uint64_t +# define GL_UINT64_T +# elif defined _MSC_VER +# undef uint64_t +typedef unsigned __int64 gl_uint64_t; +# define uint64_t gl_uint64_t +# define GL_UINT64_T +# elif @HAVE_UNSIGNED_LONG_LONG_INT@ +# undef uint64_t +typedef unsigned long long int gl_uint64_t; +# define uint64_t gl_uint64_t +# define GL_UINT64_T +# endif +#endif + +/* Avoid collision with Solaris 2.5.1 <pthread.h> etc. */ +#define _UINT8_T +#define _UINT32_T +#define _UINT64_T + + +/* 7.18.1.2. Minimum-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types + are the same as the corresponding N_t types. */ + +#undef int_least8_t +#undef uint_least8_t +#undef int_least16_t +#undef uint_least16_t +#undef int_least32_t +#undef uint_least32_t +#undef int_least64_t +#undef uint_least64_t +#define int_least8_t int8_t +#define uint_least8_t uint8_t +#define int_least16_t int16_t +#define uint_least16_t uint16_t +#define int_least32_t int32_t +#define uint_least32_t uint32_t +#ifdef GL_INT64_T +# define int_least64_t int64_t +#endif +#ifdef GL_UINT64_T +# define uint_least64_t uint64_t +#endif + +/* 7.18.1.3. Fastest minimum-width integer types */ + +/* Note: Other <stdint.h> substitutes may define these types differently. + It is not recommended to use these types in public header files. */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types + are taken from the same list of types. Assume that 'long int' + is fast enough for all narrower integers. */ + +#undef int_fast8_t +#undef uint_fast8_t +#undef int_fast16_t +#undef uint_fast16_t +#undef int_fast32_t +#undef uint_fast32_t +#undef int_fast64_t +#undef uint_fast64_t +typedef long int gl_int_fast8_t; +typedef unsigned long int gl_uint_fast8_t; +typedef long int gl_int_fast16_t; +typedef unsigned long int gl_uint_fast16_t; +typedef long int gl_int_fast32_t; +typedef unsigned long int gl_uint_fast32_t; +#define int_fast8_t gl_int_fast8_t +#define uint_fast8_t gl_uint_fast8_t +#define int_fast16_t gl_int_fast16_t +#define uint_fast16_t gl_uint_fast16_t +#define int_fast32_t gl_int_fast32_t +#define uint_fast32_t gl_uint_fast32_t +#ifdef GL_INT64_T +# define int_fast64_t int64_t +#endif +#ifdef GL_UINT64_T +# define uint_fast64_t uint64_t +#endif + +/* 7.18.1.4. Integer types capable of holding object pointers */ + +#undef intptr_t +#undef uintptr_t +typedef long int gl_intptr_t; +typedef unsigned long int gl_uintptr_t; +#define intptr_t gl_intptr_t +#define uintptr_t gl_uintptr_t + +/* 7.18.1.5. Greatest-width integer types */ + +/* Note: These types are compiler dependent. It may be unwise to use them in + public header files. */ + +/* If the system defines INTMAX_MAX, assume that intmax_t works, and + similarly for UINTMAX_MAX and uintmax_t. This avoids problems with + assuming one type where another is used by the system. */ + +#ifndef INTMAX_MAX +# undef INTMAX_C +# undef intmax_t +# if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 +typedef long long int gl_intmax_t; +# define intmax_t gl_intmax_t +# elif defined GL_INT64_T +# define intmax_t int64_t +# else +typedef long int gl_intmax_t; +# define intmax_t gl_intmax_t +# endif +#endif + +#ifndef UINTMAX_MAX +# undef UINTMAX_C +# undef uintmax_t +# if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 +typedef unsigned long long int gl_uintmax_t; +# define uintmax_t gl_uintmax_t +# elif defined GL_UINT64_T +# define uintmax_t uint64_t +# else +typedef unsigned long int gl_uintmax_t; +# define uintmax_t gl_uintmax_t +# endif +#endif + +/* Verify that intmax_t and uintmax_t have the same size. Too much code + breaks if this is not the case. If this check fails, the reason is likely + to be found in the autoconf macros. */ +typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t) + ? 1 : -1]; + +#define GNULIB_defined_stdint_types 1 +#endif /* !GNULIB_defined_stdint_types */ + +/* 7.18.2. Limits of specified-width integer types */ + +/* 7.18.2.1. Limits of exact-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. */ + +#undef INT8_MIN +#undef INT8_MAX +#undef UINT8_MAX +#define INT8_MIN (~ INT8_MAX) +#define INT8_MAX 127 +#define UINT8_MAX 255 + +#undef INT16_MIN +#undef INT16_MAX +#undef UINT16_MAX +#define INT16_MIN (~ INT16_MAX) +#define INT16_MAX 32767 +#define UINT16_MAX 65535 + +#undef INT32_MIN +#undef INT32_MAX +#undef UINT32_MAX +#define INT32_MIN (~ INT32_MAX) +#define INT32_MAX 2147483647 +#define UINT32_MAX 4294967295U + +#if defined GL_INT64_T && ! defined INT64_MAX +/* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0 + evaluates the latter incorrectly in preprocessor expressions. */ +# define INT64_MIN (- INTMAX_C (1) << 63) +# define INT64_MAX INTMAX_C (9223372036854775807) +#endif + +#if defined GL_UINT64_T && ! defined UINT64_MAX +# define UINT64_MAX UINTMAX_C (18446744073709551615) +#endif + +/* 7.18.2.2. Limits of minimum-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types + are the same as the corresponding N_t types. */ + +#undef INT_LEAST8_MIN +#undef INT_LEAST8_MAX +#undef UINT_LEAST8_MAX +#define INT_LEAST8_MIN INT8_MIN +#define INT_LEAST8_MAX INT8_MAX +#define UINT_LEAST8_MAX UINT8_MAX + +#undef INT_LEAST16_MIN +#undef INT_LEAST16_MAX +#undef UINT_LEAST16_MAX +#define INT_LEAST16_MIN INT16_MIN +#define INT_LEAST16_MAX INT16_MAX +#define UINT_LEAST16_MAX UINT16_MAX + +#undef INT_LEAST32_MIN +#undef INT_LEAST32_MAX +#undef UINT_LEAST32_MAX +#define INT_LEAST32_MIN INT32_MIN +#define INT_LEAST32_MAX INT32_MAX +#define UINT_LEAST32_MAX UINT32_MAX + +#undef INT_LEAST64_MIN +#undef INT_LEAST64_MAX +#ifdef GL_INT64_T +# define INT_LEAST64_MIN INT64_MIN +# define INT_LEAST64_MAX INT64_MAX +#endif + +#undef UINT_LEAST64_MAX +#ifdef GL_UINT64_T +# define UINT_LEAST64_MAX UINT64_MAX +#endif + +/* 7.18.2.3. Limits of fastest minimum-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types + are taken from the same list of types. */ + +#undef INT_FAST8_MIN +#undef INT_FAST8_MAX +#undef UINT_FAST8_MAX +#define INT_FAST8_MIN LONG_MIN +#define INT_FAST8_MAX LONG_MAX +#define UINT_FAST8_MAX ULONG_MAX + +#undef INT_FAST16_MIN +#undef INT_FAST16_MAX +#undef UINT_FAST16_MAX +#define INT_FAST16_MIN LONG_MIN +#define INT_FAST16_MAX LONG_MAX +#define UINT_FAST16_MAX ULONG_MAX + +#undef INT_FAST32_MIN +#undef INT_FAST32_MAX +#undef UINT_FAST32_MAX +#define INT_FAST32_MIN LONG_MIN +#define INT_FAST32_MAX LONG_MAX +#define UINT_FAST32_MAX ULONG_MAX + +#undef INT_FAST64_MIN +#undef INT_FAST64_MAX +#ifdef GL_INT64_T +# define INT_FAST64_MIN INT64_MIN +# define INT_FAST64_MAX INT64_MAX +#endif + +#undef UINT_FAST64_MAX +#ifdef GL_UINT64_T +# define UINT_FAST64_MAX UINT64_MAX +#endif + +/* 7.18.2.4. Limits of integer types capable of holding object pointers */ + +#undef INTPTR_MIN +#undef INTPTR_MAX +#undef UINTPTR_MAX +#define INTPTR_MIN LONG_MIN +#define INTPTR_MAX LONG_MAX +#define UINTPTR_MAX ULONG_MAX + +/* 7.18.2.5. Limits of greatest-width integer types */ + +#ifndef INTMAX_MAX +# undef INTMAX_MIN +# ifdef INT64_MAX +# define INTMAX_MIN INT64_MIN +# define INTMAX_MAX INT64_MAX +# else +# define INTMAX_MIN INT32_MIN +# define INTMAX_MAX INT32_MAX +# endif +#endif + +#ifndef UINTMAX_MAX +# ifdef UINT64_MAX +# define UINTMAX_MAX UINT64_MAX +# else +# define UINTMAX_MAX UINT32_MAX +# endif +#endif + +/* 7.18.3. Limits of other integer types */ + +/* ptrdiff_t limits */ +#undef PTRDIFF_MIN +#undef PTRDIFF_MAX +#if @APPLE_UNIVERSAL_BUILD@ +# ifdef _LP64 +# define PTRDIFF_MIN _STDINT_MIN (1, 64, 0l) +# define PTRDIFF_MAX _STDINT_MAX (1, 64, 0l) +# else +# define PTRDIFF_MIN _STDINT_MIN (1, 32, 0) +# define PTRDIFF_MAX _STDINT_MAX (1, 32, 0) +# endif +#else +# define PTRDIFF_MIN \ + _STDINT_MIN (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) +# define PTRDIFF_MAX \ + _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) +#endif + +/* sig_atomic_t limits */ +#undef SIG_ATOMIC_MIN +#undef SIG_ATOMIC_MAX +#define SIG_ATOMIC_MIN \ + _STDINT_MIN (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ + 0@SIG_ATOMIC_T_SUFFIX@) +#define SIG_ATOMIC_MAX \ + _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ + 0@SIG_ATOMIC_T_SUFFIX@) + + +/* size_t limit */ +#undef SIZE_MAX +#if @APPLE_UNIVERSAL_BUILD@ +# ifdef _LP64 +# define SIZE_MAX _STDINT_MAX (0, 64, 0ul) +# else +# define SIZE_MAX _STDINT_MAX (0, 32, 0ul) +# endif +#else +# define SIZE_MAX _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@) +#endif + +/* wchar_t limits */ +/* Get WCHAR_MIN, WCHAR_MAX. + This include is not on the top, above, because on OSF/1 4.0 we have a + sequence of nested includes + <wchar.h> -> <stdio.h> -> <getopt.h> -> <stdlib.h>, and the latter includes + <stdint.h> and assumes its types are already defined. */ +#if @HAVE_WCHAR_H@ && ! (defined WCHAR_MIN && defined WCHAR_MAX) + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +# include <stddef.h> +# include <stdio.h> +# include <time.h> +# define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H +# include <wchar.h> +# undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H +#endif +#undef WCHAR_MIN +#undef WCHAR_MAX +#define WCHAR_MIN \ + _STDINT_MIN (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) +#define WCHAR_MAX \ + _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) + +/* wint_t limits */ +#undef WINT_MIN +#undef WINT_MAX +#define WINT_MIN \ + _STDINT_MIN (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) +#define WINT_MAX \ + _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) + +/* 7.18.4. Macros for integer constants */ + +/* 7.18.4.1. Macros for minimum-width integer constants */ +/* According to ISO C 99 Technical Corrigendum 1 */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits, and int is 32 bits. */ + +#undef INT8_C +#undef UINT8_C +#define INT8_C(x) x +#define UINT8_C(x) x + +#undef INT16_C +#undef UINT16_C +#define INT16_C(x) x +#define UINT16_C(x) x + +#undef INT32_C +#undef UINT32_C +#define INT32_C(x) x +#define UINT32_C(x) x ## U + +#undef INT64_C +#undef UINT64_C +#if LONG_MAX >> 31 >> 31 == 1 +# define INT64_C(x) x##L +#elif defined _MSC_VER +# define INT64_C(x) x##i64 +#elif @HAVE_LONG_LONG_INT@ +# define INT64_C(x) x##LL +#endif +#if ULONG_MAX >> 31 >> 31 >> 1 == 1 +# define UINT64_C(x) x##UL +#elif defined _MSC_VER +# define UINT64_C(x) x##ui64 +#elif @HAVE_UNSIGNED_LONG_LONG_INT@ +# define UINT64_C(x) x##ULL +#endif + +/* 7.18.4.2. Macros for greatest-width integer constants */ + +#ifndef INTMAX_C +# if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 +# define INTMAX_C(x) x##LL +# elif defined GL_INT64_T +# define INTMAX_C(x) INT64_C(x) +# else +# define INTMAX_C(x) x##L +# endif +#endif + +#ifndef UINTMAX_C +# if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 +# define UINTMAX_C(x) x##ULL +# elif defined GL_UINT64_T +# define UINTMAX_C(x) UINT64_C(x) +# else +# define UINTMAX_C(x) x##UL +# endif +#endif + +#endif /* _@GUARD_PREFIX@_STDINT_H */ +#endif /* !(defined __ANDROID__ && ...) */ +#endif /* !defined _@GUARD_PREFIX@_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */ diff --git a/gnulib/lib/stdio.in.h b/gnulib/lib/stdio.in.h new file mode 100644 index 0000000..9dc7c4a --- /dev/null +++ b/gnulib/lib/stdio.in.h @@ -0,0 +1,1349 @@ +/* A GNU-like <stdio.h>. + + Copyright (C) 2004, 2007-2012 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, see <http://www.gnu.org/licenses/>. */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +#if defined __need_FILE || defined __need___FILE || defined _GL_ALREADY_INCLUDING_STDIO_H +/* Special invocation convention: + - Inside glibc header files. + - On OSF/1 5.1 we have a sequence of nested includes + <stdio.h> -> <getopt.h> -> <ctype.h> -> <sys/localedef.h> -> + <sys/lc_core.h> -> <nl_types.h> -> <mesg.h> -> <stdio.h>. + In this situation, the functions are not yet declared, therefore we cannot + provide the C++ aliases. */ + +#@INCLUDE_NEXT@ @NEXT_STDIO_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _@GUARD_PREFIX@_STDIO_H + +#define _GL_ALREADY_INCLUDING_STDIO_H + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_STDIO_H@ + +#undef _GL_ALREADY_INCLUDING_STDIO_H + +#ifndef _@GUARD_PREFIX@_STDIO_H +#define _@GUARD_PREFIX@_STDIO_H + +/* Get va_list. Needed on many systems, including glibc 2.8. */ +#include <stdarg.h> + +#include <stddef.h> + +/* Get off_t and ssize_t. Needed on many systems, including glibc 2.8 + and eglibc 2.11.2. */ +#include <sys/types.h> + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The __-protected variants of the attributes 'format' and 'printf' are + accepted by gcc versions 2.6.4 (effectively 2.7) and later. + We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because + gnulib and libintl do '#define printf __printf__' when they override + the 'printf' function. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) +#else +# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ +#endif + +/* _GL_ATTRIBUTE_FORMAT_PRINTF + indicates to GCC that the function takes a format string and arguments, + where the format string directives are the ones standardized by ISO C99 + and POSIX. */ +#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) +# define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__gnu_printf__, formatstring_parameter, first_argument)) +#else +# define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument)) +#endif + +/* _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_PRINTF, + except that it indicates to GCC that the supported format string directives + are the ones of the system printf(), rather than the ones standardized by + ISO C99 and POSIX. */ +#define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument)) + +/* _GL_ATTRIBUTE_FORMAT_SCANF + indicates to GCC that the function takes a format string and arguments, + where the format string directives are the ones standardized by ISO C99 + and POSIX. */ +#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) +# define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__gnu_scanf__, formatstring_parameter, first_argument)) +#else +# define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) +#endif + +/* _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_SCANF, + except that it indicates to GCC that the supported format string directives + are the ones of the system scanf(), rather than the ones standardized by + ISO C99 and POSIX. */ +#define _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) + +/* Solaris 10 declares renameat in <unistd.h>, not in <stdio.h>. */ +/* But in any case avoid namespace pollution on glibc systems. */ +#if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && defined __sun \ + && ! defined __GLIBC__ +# include <unistd.h> +#endif + + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + +/* Macros for stringification. */ +#define _GL_STDIO_STRINGIZE(token) #token +#define _GL_STDIO_MACROEXPAND_AND_STRINGIZE(token) _GL_STDIO_STRINGIZE(token) + + +#if @GNULIB_DPRINTF@ +# if @REPLACE_DPRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define dprintf rpl_dprintf +# endif +_GL_FUNCDECL_RPL (dprintf, int, (int fd, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (dprintf, int, (int fd, const char *format, ...)); +# else +# if !@HAVE_DPRINTF@ +_GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *format, ...)); +# endif +_GL_CXXALIASWARN (dprintf); +#elif defined GNULIB_POSIXCHECK +# undef dprintf +# if HAVE_RAW_DECL_DPRINTF +_GL_WARN_ON_USE (dprintf, "dprintf is unportable - " + "use gnulib module dprintf for portability"); +# endif +#endif + +#if @GNULIB_FCLOSE@ +/* Close STREAM and its underlying file descriptor. */ +# if @REPLACE_FCLOSE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define fclose rpl_fclose +# endif +_GL_FUNCDECL_RPL (fclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fclose, int, (FILE *stream)); +# else +_GL_CXXALIAS_SYS (fclose, int, (FILE *stream)); +# endif +_GL_CXXALIASWARN (fclose); +#elif defined GNULIB_POSIXCHECK +# undef fclose +/* Assume fclose is always declared. */ +_GL_WARN_ON_USE (fclose, "fclose is not always POSIX compliant - " + "use gnulib module fclose for portable POSIX compliance"); +#endif + +#if @GNULIB_FDOPEN@ +# if @REPLACE_FDOPEN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fdopen +# define fdopen rpl_fdopen +# endif +_GL_FUNCDECL_RPL (fdopen, FILE *, (int fd, const char *mode) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (fdopen, FILE *, (int fd, const char *mode)); +# else +_GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode)); +# endif +_GL_CXXALIASWARN (fdopen); +#elif defined GNULIB_POSIXCHECK +# undef fdopen +/* Assume fdopen is always declared. */ +_GL_WARN_ON_USE (fdopen, "fdopen on native Windows platforms is not POSIX compliant - " + "use gnulib module fdopen for portability"); +#endif + +#if @GNULIB_FFLUSH@ +/* Flush all pending data on STREAM according to POSIX rules. Both + output and seekable input streams are supported. + Note! LOSS OF DATA can occur if fflush is applied on an input stream + that is _not_seekable_ or on an update stream that is _not_seekable_ + and in which the most recent operation was input. Seekability can + be tested with lseek(fileno(fp),0,SEEK_CUR). */ +# if @REPLACE_FFLUSH@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define fflush rpl_fflush +# endif +_GL_FUNCDECL_RPL (fflush, int, (FILE *gl_stream)); +_GL_CXXALIAS_RPL (fflush, int, (FILE *gl_stream)); +# else +_GL_CXXALIAS_SYS (fflush, int, (FILE *gl_stream)); +# endif +_GL_CXXALIASWARN (fflush); +#elif defined GNULIB_POSIXCHECK +# undef fflush +/* Assume fflush is always declared. */ +_GL_WARN_ON_USE (fflush, "fflush is not always POSIX compliant - " + "use gnulib module fflush for portable POSIX compliance"); +#endif + +#if @GNULIB_FGETC@ +# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fgetc +# define fgetc rpl_fgetc +# endif +_GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fgetc, int, (FILE *stream)); +# else +_GL_CXXALIAS_SYS (fgetc, int, (FILE *stream)); +# endif +_GL_CXXALIASWARN (fgetc); +#endif + +#if @GNULIB_FGETS@ +# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fgets +# define fgets rpl_fgets +# endif +_GL_FUNCDECL_RPL (fgets, char *, (char *s, int n, FILE *stream) + _GL_ARG_NONNULL ((1, 3))); +_GL_CXXALIAS_RPL (fgets, char *, (char *s, int n, FILE *stream)); +# else +_GL_CXXALIAS_SYS (fgets, char *, (char *s, int n, FILE *stream)); +# endif +_GL_CXXALIASWARN (fgets); +#endif + +#if @GNULIB_FOPEN@ +# if @REPLACE_FOPEN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fopen +# define fopen rpl_fopen +# endif +_GL_FUNCDECL_RPL (fopen, FILE *, (const char *filename, const char *mode) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (fopen, FILE *, (const char *filename, const char *mode)); +# else +_GL_CXXALIAS_SYS (fopen, FILE *, (const char *filename, const char *mode)); +# endif +_GL_CXXALIASWARN (fopen); +#elif defined GNULIB_POSIXCHECK +# undef fopen +/* Assume fopen is always declared. */ +_GL_WARN_ON_USE (fopen, "fopen on native Windows platforms is not POSIX compliant - " + "use gnulib module fopen for portability"); +#endif + +#if @GNULIB_FPRINTF_POSIX@ || @GNULIB_FPRINTF@ +# if (@GNULIB_FPRINTF_POSIX@ && @REPLACE_FPRINTF@) \ + || (@GNULIB_FPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define fprintf rpl_fprintf +# endif +# define GNULIB_overrides_fprintf 1 +# if @GNULIB_FPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ +_GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((1, 2))); +# else +_GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 3) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_RPL (fprintf, int, (FILE *fp, const char *format, ...)); +# else +_GL_CXXALIAS_SYS (fprintf, int, (FILE *fp, const char *format, ...)); +# endif +_GL_CXXALIASWARN (fprintf); +#endif +#if !@GNULIB_FPRINTF_POSIX@ && defined GNULIB_POSIXCHECK +# if !GNULIB_overrides_fprintf +# undef fprintf +# endif +/* Assume fprintf is always declared. */ +_GL_WARN_ON_USE (fprintf, "fprintf is not always POSIX compliant - " + "use gnulib module fprintf-posix for portable " + "POSIX compliance"); +#endif + +#if @GNULIB_FPURGE@ +/* Discard all pending buffered I/O data on STREAM. + STREAM must not be wide-character oriented. + When discarding pending output, the file position is set back to where it + was before the write calls. When discarding pending input, the file + position is advanced to match the end of the previously read input. + Return 0 if successful. Upon error, return -1 and set errno. */ +# if @REPLACE_FPURGE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define fpurge rpl_fpurge +# endif +_GL_FUNCDECL_RPL (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fpurge, int, (FILE *gl_stream)); +# else +# if !@HAVE_DECL_FPURGE@ +_GL_FUNCDECL_SYS (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (fpurge, int, (FILE *gl_stream)); +# endif +_GL_CXXALIASWARN (fpurge); +#elif defined GNULIB_POSIXCHECK +# undef fpurge +# if HAVE_RAW_DECL_FPURGE +_GL_WARN_ON_USE (fpurge, "fpurge is not always present - " + "use gnulib module fpurge for portability"); +# endif +#endif + +#if @GNULIB_FPUTC@ +# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fputc +# define fputc rpl_fputc +# endif +_GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (fputc, int, (int c, FILE *stream)); +# else +_GL_CXXALIAS_SYS (fputc, int, (int c, FILE *stream)); +# endif +_GL_CXXALIASWARN (fputc); +#endif + +#if @GNULIB_FPUTS@ +# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fputs +# define fputs rpl_fputs +# endif +_GL_FUNCDECL_RPL (fputs, int, (const char *string, FILE *stream) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (fputs, int, (const char *string, FILE *stream)); +# else +_GL_CXXALIAS_SYS (fputs, int, (const char *string, FILE *stream)); +# endif +_GL_CXXALIASWARN (fputs); +#endif + +#if @GNULIB_FREAD@ +# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fread +# define fread rpl_fread +# endif +_GL_FUNCDECL_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream) + _GL_ARG_NONNULL ((4))); +_GL_CXXALIAS_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream)); +# else +_GL_CXXALIAS_SYS (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream)); +# endif +_GL_CXXALIASWARN (fread); +#endif + +#if @GNULIB_FREOPEN@ +# if @REPLACE_FREOPEN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef freopen +# define freopen rpl_freopen +# endif +_GL_FUNCDECL_RPL (freopen, FILE *, + (const char *filename, const char *mode, FILE *stream) + _GL_ARG_NONNULL ((2, 3))); +_GL_CXXALIAS_RPL (freopen, FILE *, + (const char *filename, const char *mode, FILE *stream)); +# else +_GL_CXXALIAS_SYS (freopen, FILE *, + (const char *filename, const char *mode, FILE *stream)); +# endif +_GL_CXXALIASWARN (freopen); +#elif defined GNULIB_POSIXCHECK +# undef freopen +/* Assume freopen is always declared. */ +_GL_WARN_ON_USE (freopen, + "freopen on native Windows platforms is not POSIX compliant - " + "use gnulib module freopen for portability"); +#endif + +#if @GNULIB_FSCANF@ +# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fscanf +# define fscanf rpl_fscanf +# endif +_GL_FUNCDECL_RPL (fscanf, int, (FILE *stream, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 3) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (fscanf, int, (FILE *stream, const char *format, ...)); +# else +_GL_CXXALIAS_SYS (fscanf, int, (FILE *stream, const char *format, ...)); +# endif +_GL_CXXALIASWARN (fscanf); +#endif + + +/* Set up the following warnings, based on which modules are in use. + GNU Coding Standards discourage the use of fseek, since it imposes + an arbitrary limitation on some 32-bit hosts. Remember that the + fseek module depends on the fseeko module, so we only have three + cases to consider: + + 1. The developer is not using either module. Issue a warning under + GNULIB_POSIXCHECK for both functions, to remind them that both + functions have bugs on some systems. _GL_NO_LARGE_FILES has no + impact on this warning. + + 2. The developer is using both modules. They may be unaware of the + arbitrary limitations of fseek, so issue a warning under + GNULIB_POSIXCHECK. On the other hand, they may be using both + modules intentionally, so the developer can define + _GL_NO_LARGE_FILES in the compilation units where the use of fseek + is safe, to silence the warning. + + 3. The developer is using the fseeko module, but not fseek. Gnulib + guarantees that fseek will still work around platform bugs in that + case, but we presume that the developer is aware of the pitfalls of + fseek and was trying to avoid it, so issue a warning even when + GNULIB_POSIXCHECK is undefined. Again, _GL_NO_LARGE_FILES can be + defined to silence the warning in particular compilation units. + In C++ compilations with GNULIB_NAMESPACE, in order to avoid that + fseek gets defined as a macro, it is recommended that the developer + uses the fseek module, even if he is not calling the fseek function. + + Most gnulib clients that perform stream operations should fall into + category 3. */ + +#if @GNULIB_FSEEK@ +# if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES +# define _GL_FSEEK_WARN /* Category 2, above. */ +# undef fseek +# endif +# if @REPLACE_FSEEK@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fseek +# define fseek rpl_fseek +# endif +_GL_FUNCDECL_RPL (fseek, int, (FILE *fp, long offset, int whence) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fseek, int, (FILE *fp, long offset, int whence)); +# else +_GL_CXXALIAS_SYS (fseek, int, (FILE *fp, long offset, int whence)); +# endif +_GL_CXXALIASWARN (fseek); +#endif + +#if @GNULIB_FSEEKO@ +# if !@GNULIB_FSEEK@ && !defined _GL_NO_LARGE_FILES +# define _GL_FSEEK_WARN /* Category 3, above. */ +# undef fseek +# endif +# if @REPLACE_FSEEKO@ +/* Provide an fseeko function that is aware of a preceding fflush(), and which + detects pipes. */ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fseeko +# define fseeko rpl_fseeko +# endif +_GL_FUNCDECL_RPL (fseeko, int, (FILE *fp, off_t offset, int whence) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fseeko, int, (FILE *fp, off_t offset, int whence)); +# else +# if ! @HAVE_DECL_FSEEKO@ +_GL_FUNCDECL_SYS (fseeko, int, (FILE *fp, off_t offset, int whence) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (fseeko, int, (FILE *fp, off_t offset, int whence)); +# endif +_GL_CXXALIASWARN (fseeko); +#elif defined GNULIB_POSIXCHECK +# define _GL_FSEEK_WARN /* Category 1, above. */ +# undef fseek +# undef fseeko +# if HAVE_RAW_DECL_FSEEKO +_GL_WARN_ON_USE (fseeko, "fseeko is unportable - " + "use gnulib module fseeko for portability"); +# endif +#endif + +#ifdef _GL_FSEEK_WARN +# undef _GL_FSEEK_WARN +/* Here, either fseek is undefined (but C89 guarantees that it is + declared), or it is defined as rpl_fseek (declared above). */ +_GL_WARN_ON_USE (fseek, "fseek cannot handle files larger than 4 GB " + "on 32-bit platforms - " + "use fseeko function for handling of large files"); +#endif + + +/* ftell, ftello. See the comments on fseek/fseeko. */ + +#if @GNULIB_FTELL@ +# if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES +# define _GL_FTELL_WARN /* Category 2, above. */ +# undef ftell +# endif +# if @REPLACE_FTELL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ftell +# define ftell rpl_ftell +# endif +_GL_FUNCDECL_RPL (ftell, long, (FILE *fp) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (ftell, long, (FILE *fp)); +# else +_GL_CXXALIAS_SYS (ftell, long, (FILE *fp)); +# endif +_GL_CXXALIASWARN (ftell); +#endif + +#if @GNULIB_FTELLO@ +# if !@GNULIB_FTELL@ && !defined _GL_NO_LARGE_FILES +# define _GL_FTELL_WARN /* Category 3, above. */ +# undef ftell +# endif +# if @REPLACE_FTELLO@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ftello +# define ftello rpl_ftello +# endif +_GL_FUNCDECL_RPL (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (ftello, off_t, (FILE *fp)); +# else +# if ! @HAVE_DECL_FTELLO@ +_GL_FUNCDECL_SYS (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (ftello, off_t, (FILE *fp)); +# endif +_GL_CXXALIASWARN (ftello); +#elif defined GNULIB_POSIXCHECK +# define _GL_FTELL_WARN /* Category 1, above. */ +# undef ftell +# undef ftello +# if HAVE_RAW_DECL_FTELLO +_GL_WARN_ON_USE (ftello, "ftello is unportable - " + "use gnulib module ftello for portability"); +# endif +#endif + +#ifdef _GL_FTELL_WARN +# undef _GL_FTELL_WARN +/* Here, either ftell is undefined (but C89 guarantees that it is + declared), or it is defined as rpl_ftell (declared above). */ +_GL_WARN_ON_USE (ftell, "ftell cannot handle files larger than 4 GB " + "on 32-bit platforms - " + "use ftello function for handling of large files"); +#endif + + +#if @GNULIB_FWRITE@ +# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fwrite +# define fwrite rpl_fwrite +# endif +_GL_FUNCDECL_RPL (fwrite, size_t, + (const void *ptr, size_t s, size_t n, FILE *stream) + _GL_ARG_NONNULL ((1, 4))); +_GL_CXXALIAS_RPL (fwrite, size_t, + (const void *ptr, size_t s, size_t n, FILE *stream)); +# else +_GL_CXXALIAS_SYS (fwrite, size_t, + (const void *ptr, size_t s, size_t n, FILE *stream)); + +/* Work around glibc bug 11959 + <http://sources.redhat.com/bugzilla/show_bug.cgi?id=11959>, + which sometimes causes an unwanted diagnostic for fwrite calls. + This affects only function declaration attributes, so it's not + needed for C++. */ +# if !defined __cplusplus && 0 < __USE_FORTIFY_LEVEL +static inline size_t _GL_ARG_NONNULL ((1, 4)) +rpl_fwrite (const void *ptr, size_t s, size_t n, FILE *stream) +{ + size_t r = fwrite (ptr, s, n, stream); + (void) r; + return r; +} +# undef fwrite +# define fwrite rpl_fwrite +# endif +# endif +_GL_CXXALIASWARN (fwrite); +#endif + +#if @GNULIB_GETC@ +# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getc +# define getc rpl_fgetc +# endif +_GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL_1 (getc, rpl_fgetc, int, (FILE *stream)); +# else +_GL_CXXALIAS_SYS (getc, int, (FILE *stream)); +# endif +_GL_CXXALIASWARN (getc); +#endif + +#if @GNULIB_GETCHAR@ +# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getchar +# define getchar rpl_getchar +# endif +_GL_FUNCDECL_RPL (getchar, int, (void)); +_GL_CXXALIAS_RPL (getchar, int, (void)); +# else +_GL_CXXALIAS_SYS (getchar, int, (void)); +# endif +_GL_CXXALIASWARN (getchar); +#endif + +#if @GNULIB_GETDELIM@ +/* Read input, up to (and including) the next occurrence of DELIMITER, from + STREAM, store it in *LINEPTR (and NUL-terminate it). + *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE + bytes of space. It is realloc'd as necessary. + Return the number of bytes read and stored at *LINEPTR (not including the + NUL terminator), or -1 on error or EOF. */ +# if @REPLACE_GETDELIM@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getdelim +# define getdelim rpl_getdelim +# endif +_GL_FUNCDECL_RPL (getdelim, ssize_t, + (char **lineptr, size_t *linesize, int delimiter, + FILE *stream) + _GL_ARG_NONNULL ((1, 2, 4))); +_GL_CXXALIAS_RPL (getdelim, ssize_t, + (char **lineptr, size_t *linesize, int delimiter, + FILE *stream)); +# else +# if !@HAVE_DECL_GETDELIM@ +_GL_FUNCDECL_SYS (getdelim, ssize_t, + (char **lineptr, size_t *linesize, int delimiter, + FILE *stream) + _GL_ARG_NONNULL ((1, 2, 4))); +# endif +_GL_CXXALIAS_SYS (getdelim, ssize_t, + (char **lineptr, size_t *linesize, int delimiter, + FILE *stream)); +# endif +_GL_CXXALIASWARN (getdelim); +#elif defined GNULIB_POSIXCHECK +# undef getdelim +# if HAVE_RAW_DECL_GETDELIM +_GL_WARN_ON_USE (getdelim, "getdelim is unportable - " + "use gnulib module getdelim for portability"); +# endif +#endif + +#if @GNULIB_GETLINE@ +/* Read a line, up to (and including) the next newline, from STREAM, store it + in *LINEPTR (and NUL-terminate it). + *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE + bytes of space. It is realloc'd as necessary. + Return the number of bytes read and stored at *LINEPTR (not including the + NUL terminator), or -1 on error or EOF. */ +# if @REPLACE_GETLINE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getline +# define getline rpl_getline +# endif +_GL_FUNCDECL_RPL (getline, ssize_t, + (char **lineptr, size_t *linesize, FILE *stream) + _GL_ARG_NONNULL ((1, 2, 3))); +_GL_CXXALIAS_RPL (getline, ssize_t, + (char **lineptr, size_t *linesize, FILE *stream)); +# else +# if !@HAVE_DECL_GETLINE@ +_GL_FUNCDECL_SYS (getline, ssize_t, + (char **lineptr, size_t *linesize, FILE *stream) + _GL_ARG_NONNULL ((1, 2, 3))); +# endif +_GL_CXXALIAS_SYS (getline, ssize_t, + (char **lineptr, size_t *linesize, FILE *stream)); +# endif +# if @HAVE_DECL_GETLINE@ +_GL_CXXALIASWARN (getline); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getline +# if HAVE_RAW_DECL_GETLINE +_GL_WARN_ON_USE (getline, "getline is unportable - " + "use gnulib module getline for portability"); +# endif +#endif + +#if @GNULIB_GETS@ +# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef gets +# define gets rpl_gets +# endif +_GL_FUNCDECL_RPL (gets, char *, (char *s) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (gets, char *, (char *s)); +# else +_GL_CXXALIAS_SYS (gets, char *, (char *s)); +# undef gets +# endif +_GL_CXXALIASWARN (gets); +/* It is very rare that the developer ever has full control of stdin, + so any use of gets warrants an unconditional warning. Assume it is + always declared, since it is required by C89. */ +_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); +#endif + + +#if @GNULIB_OBSTACK_PRINTF@ || @GNULIB_OBSTACK_PRINTF_POSIX@ +struct obstack; +/* Grow an obstack with formatted output. Return the number of + bytes added to OBS. No trailing nul byte is added, and the + object should be closed with obstack_finish before use. Upon + memory allocation error, call obstack_alloc_failed_handler. Upon + other error, return -1. */ +# if @REPLACE_OBSTACK_PRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define obstack_printf rpl_obstack_printf +# endif +_GL_FUNCDECL_RPL (obstack_printf, int, + (struct obstack *obs, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (obstack_printf, int, + (struct obstack *obs, const char *format, ...)); +# else +# if !@HAVE_DECL_OBSTACK_PRINTF@ +_GL_FUNCDECL_SYS (obstack_printf, int, + (struct obstack *obs, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (obstack_printf, int, + (struct obstack *obs, const char *format, ...)); +# endif +_GL_CXXALIASWARN (obstack_printf); +# if @REPLACE_OBSTACK_PRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define obstack_vprintf rpl_obstack_vprintf +# endif +_GL_FUNCDECL_RPL (obstack_vprintf, int, + (struct obstack *obs, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (obstack_vprintf, int, + (struct obstack *obs, const char *format, va_list args)); +# else +# if !@HAVE_DECL_OBSTACK_PRINTF@ +_GL_FUNCDECL_SYS (obstack_vprintf, int, + (struct obstack *obs, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (obstack_vprintf, int, + (struct obstack *obs, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (obstack_vprintf); +#endif + +#if @GNULIB_PCLOSE@ +# if !@HAVE_PCLOSE@ +_GL_FUNCDECL_SYS (pclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pclose, int, (FILE *stream)); +_GL_CXXALIASWARN (pclose); +#elif defined GNULIB_POSIXCHECK +# undef pclose +# if HAVE_RAW_DECL_PCLOSE +_GL_WARN_ON_USE (pclose, "pclose is unportable - " + "use gnulib module pclose for more portability"); +# endif +#endif + +#if @GNULIB_PERROR@ +/* Print a message to standard error, describing the value of ERRNO, + (if STRING is not NULL and not empty) prefixed with STRING and ": ", + and terminated with a newline. */ +# if @REPLACE_PERROR@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define perror rpl_perror +# endif +_GL_FUNCDECL_RPL (perror, void, (const char *string)); +_GL_CXXALIAS_RPL (perror, void, (const char *string)); +# else +_GL_CXXALIAS_SYS (perror, void, (const char *string)); +# endif +_GL_CXXALIASWARN (perror); +#elif defined GNULIB_POSIXCHECK +# undef perror +/* Assume perror is always declared. */ +_GL_WARN_ON_USE (perror, "perror is not always POSIX compliant - " + "use gnulib module perror for portability"); +#endif + +#if @GNULIB_POPEN@ +# if @REPLACE_POPEN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef popen +# define popen rpl_popen +# endif +_GL_FUNCDECL_RPL (popen, FILE *, (const char *cmd, const char *mode) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (popen, FILE *, (const char *cmd, const char *mode)); +# else +# if !@HAVE_POPEN@ +_GL_FUNCDECL_SYS (popen, FILE *, (const char *cmd, const char *mode) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (popen, FILE *, (const char *cmd, const char *mode)); +# endif +_GL_CXXALIASWARN (popen); +#elif defined GNULIB_POSIXCHECK +# undef popen +# if HAVE_RAW_DECL_POPEN +_GL_WARN_ON_USE (popen, "popen is buggy on some platforms - " + "use gnulib module popen or pipe for more portability"); +# endif +#endif + +#if @GNULIB_PRINTF_POSIX@ || @GNULIB_PRINTF@ +# if (@GNULIB_PRINTF_POSIX@ && @REPLACE_PRINTF@) \ + || (@GNULIB_PRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) +# if defined __GNUC__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +/* Don't break __attribute__((format(printf,M,N))). */ +# define printf __printf__ +# endif +# if @GNULIB_PRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ +_GL_FUNCDECL_RPL_1 (__printf__, int, + (const char *format, ...) + __asm__ (@ASM_SYMBOL_PREFIX@ + _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) + _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2) + _GL_ARG_NONNULL ((1))); +# else +_GL_FUNCDECL_RPL_1 (__printf__, int, + (const char *format, ...) + __asm__ (@ASM_SYMBOL_PREFIX@ + _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) + _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 2) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_RPL_1 (printf, __printf__, int, (const char *format, ...)); +# else +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define printf rpl_printf +# endif +_GL_FUNCDECL_RPL (printf, int, + (const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (printf, int, (const char *format, ...)); +# endif +# define GNULIB_overrides_printf 1 +# else +_GL_CXXALIAS_SYS (printf, int, (const char *format, ...)); +# endif +_GL_CXXALIASWARN (printf); +#endif +#if !@GNULIB_PRINTF_POSIX@ && defined GNULIB_POSIXCHECK +# if !GNULIB_overrides_printf +# undef printf +# endif +/* Assume printf is always declared. */ +_GL_WARN_ON_USE (printf, "printf is not always POSIX compliant - " + "use gnulib module printf-posix for portable " + "POSIX compliance"); +#endif + +#if @GNULIB_PUTC@ +# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef putc +# define putc rpl_fputc +# endif +_GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL_1 (putc, rpl_fputc, int, (int c, FILE *stream)); +# else +_GL_CXXALIAS_SYS (putc, int, (int c, FILE *stream)); +# endif +_GL_CXXALIASWARN (putc); +#endif + +#if @GNULIB_PUTCHAR@ +# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef putchar +# define putchar rpl_putchar +# endif +_GL_FUNCDECL_RPL (putchar, int, (int c)); +_GL_CXXALIAS_RPL (putchar, int, (int c)); +# else +_GL_CXXALIAS_SYS (putchar, int, (int c)); +# endif +_GL_CXXALIASWARN (putchar); +#endif + +#if @GNULIB_PUTS@ +# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef puts +# define puts rpl_puts +# endif +_GL_FUNCDECL_RPL (puts, int, (const char *string) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (puts, int, (const char *string)); +# else +_GL_CXXALIAS_SYS (puts, int, (const char *string)); +# endif +_GL_CXXALIASWARN (puts); +#endif + +#if @GNULIB_REMOVE@ +# if @REPLACE_REMOVE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef remove +# define remove rpl_remove +# endif +_GL_FUNCDECL_RPL (remove, int, (const char *name) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (remove, int, (const char *name)); +# else +_GL_CXXALIAS_SYS (remove, int, (const char *name)); +# endif +_GL_CXXALIASWARN (remove); +#elif defined GNULIB_POSIXCHECK +# undef remove +/* Assume remove is always declared. */ +_GL_WARN_ON_USE (remove, "remove cannot handle directories on some platforms - " + "use gnulib module remove for more portability"); +#endif + +#if @GNULIB_RENAME@ +# if @REPLACE_RENAME@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef rename +# define rename rpl_rename +# endif +_GL_FUNCDECL_RPL (rename, int, + (const char *old_filename, const char *new_filename) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (rename, int, + (const char *old_filename, const char *new_filename)); +# else +_GL_CXXALIAS_SYS (rename, int, + (const char *old_filename, const char *new_filename)); +# endif +_GL_CXXALIASWARN (rename); +#elif defined GNULIB_POSIXCHECK +# undef rename +/* Assume rename is always declared. */ +_GL_WARN_ON_USE (rename, "rename is buggy on some platforms - " + "use gnulib module rename for more portability"); +#endif + +#if @GNULIB_RENAMEAT@ +# if @REPLACE_RENAMEAT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef renameat +# define renameat rpl_renameat +# endif +_GL_FUNCDECL_RPL (renameat, int, + (int fd1, char const *file1, int fd2, char const *file2) + _GL_ARG_NONNULL ((2, 4))); +_GL_CXXALIAS_RPL (renameat, int, + (int fd1, char const *file1, int fd2, char const *file2)); +# else +# if !@HAVE_RENAMEAT@ +_GL_FUNCDECL_SYS (renameat, int, + (int fd1, char const *file1, int fd2, char const *file2) + _GL_ARG_NONNULL ((2, 4))); +# endif +_GL_CXXALIAS_SYS (renameat, int, + (int fd1, char const *file1, int fd2, char const *file2)); +# endif +_GL_CXXALIASWARN (renameat); +#elif defined GNULIB_POSIXCHECK +# undef renameat +# if HAVE_RAW_DECL_RENAMEAT +_GL_WARN_ON_USE (renameat, "renameat is not portable - " + "use gnulib module renameat for portability"); +# endif +#endif + +#if @GNULIB_SCANF@ +# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ +# if defined __GNUC__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef scanf +/* Don't break __attribute__((format(scanf,M,N))). */ +# define scanf __scanf__ +# endif +_GL_FUNCDECL_RPL_1 (__scanf__, int, + (const char *format, ...) + __asm__ (@ASM_SYMBOL_PREFIX@ + _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_scanf)) + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL_1 (scanf, __scanf__, int, (const char *format, ...)); +# else +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef scanf +# define scanf rpl_scanf +# endif +_GL_FUNCDECL_RPL (scanf, int, (const char *format, ...) + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (scanf, int, (const char *format, ...)); +# endif +# else +_GL_CXXALIAS_SYS (scanf, int, (const char *format, ...)); +# endif +_GL_CXXALIASWARN (scanf); +#endif + +#if @GNULIB_SNPRINTF@ +# if @REPLACE_SNPRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define snprintf rpl_snprintf +# endif +_GL_FUNCDECL_RPL (snprintf, int, + (char *str, size_t size, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4) + _GL_ARG_NONNULL ((3))); +_GL_CXXALIAS_RPL (snprintf, int, + (char *str, size_t size, const char *format, ...)); +# else +# if !@HAVE_DECL_SNPRINTF@ +_GL_FUNCDECL_SYS (snprintf, int, + (char *str, size_t size, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4) + _GL_ARG_NONNULL ((3))); +# endif +_GL_CXXALIAS_SYS (snprintf, int, + (char *str, size_t size, const char *format, ...)); +# endif +_GL_CXXALIASWARN (snprintf); +#elif defined GNULIB_POSIXCHECK +# undef snprintf +# if HAVE_RAW_DECL_SNPRINTF +_GL_WARN_ON_USE (snprintf, "snprintf is unportable - " + "use gnulib module snprintf for portability"); +# endif +#endif + +/* Some people would argue that sprintf should be handled like gets + (for example, OpenBSD issues a link warning for both functions), + since both can cause security holes due to buffer overruns. + However, we believe that sprintf can be used safely, and is more + efficient than snprintf in those safe cases; and as proof of our + belief, we use sprintf in several gnulib modules. So this header + intentionally avoids adding a warning to sprintf except when + GNULIB_POSIXCHECK is defined. */ + +#if @GNULIB_SPRINTF_POSIX@ +# if @REPLACE_SPRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define sprintf rpl_sprintf +# endif +_GL_FUNCDECL_RPL (sprintf, int, (char *str, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (sprintf, int, (char *str, const char *format, ...)); +# else +_GL_CXXALIAS_SYS (sprintf, int, (char *str, const char *format, ...)); +# endif +_GL_CXXALIASWARN (sprintf); +#elif defined GNULIB_POSIXCHECK +# undef sprintf +/* Assume sprintf is always declared. */ +_GL_WARN_ON_USE (sprintf, "sprintf is not always POSIX compliant - " + "use gnulib module sprintf-posix for portable " + "POSIX compliance"); +#endif + +#if @GNULIB_TMPFILE@ +# if @REPLACE_TMPFILE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define tmpfile rpl_tmpfile +# endif +_GL_FUNCDECL_RPL (tmpfile, FILE *, (void)); +_GL_CXXALIAS_RPL (tmpfile, FILE *, (void)); +# else +_GL_CXXALIAS_SYS (tmpfile, FILE *, (void)); +# endif +_GL_CXXALIASWARN (tmpfile); +#elif defined GNULIB_POSIXCHECK +# undef tmpfile +# if HAVE_RAW_DECL_TMPFILE +_GL_WARN_ON_USE (tmpfile, "tmpfile is not usable on mingw - " + "use gnulib module tmpfile for portability"); +# endif +#endif + +#if @GNULIB_VASPRINTF@ +/* Write formatted output to a string dynamically allocated with malloc(). + If the memory allocation succeeds, store the address of the string in + *RESULT and return the number of resulting bytes, excluding the trailing + NUL. Upon memory allocation error, or some other error, return -1. */ +# if @REPLACE_VASPRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define asprintf rpl_asprintf +# endif +_GL_FUNCDECL_RPL (asprintf, int, + (char **result, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (asprintf, int, + (char **result, const char *format, ...)); +# else +# if !@HAVE_VASPRINTF@ +_GL_FUNCDECL_SYS (asprintf, int, + (char **result, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (asprintf, int, + (char **result, const char *format, ...)); +# endif +_GL_CXXALIASWARN (asprintf); +# if @REPLACE_VASPRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vasprintf rpl_vasprintf +# endif +_GL_FUNCDECL_RPL (vasprintf, int, + (char **result, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (vasprintf, int, + (char **result, const char *format, va_list args)); +# else +# if !@HAVE_VASPRINTF@ +_GL_FUNCDECL_SYS (vasprintf, int, + (char **result, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (vasprintf, int, + (char **result, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vasprintf); +#endif + +#if @GNULIB_VDPRINTF@ +# if @REPLACE_VDPRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vdprintf rpl_vdprintf +# endif +_GL_FUNCDECL_RPL (vdprintf, int, (int fd, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (vdprintf, int, (int fd, const char *format, va_list args)); +# else +# if !@HAVE_VDPRINTF@ +_GL_FUNCDECL_SYS (vdprintf, int, (int fd, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((2))); +# endif +/* Need to cast, because on Solaris, the third parameter will likely be + __va_list args. */ +_GL_CXXALIAS_SYS_CAST (vdprintf, int, + (int fd, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vdprintf); +#elif defined GNULIB_POSIXCHECK +# undef vdprintf +# if HAVE_RAW_DECL_VDPRINTF +_GL_WARN_ON_USE (vdprintf, "vdprintf is unportable - " + "use gnulib module vdprintf for portability"); +# endif +#endif + +#if @GNULIB_VFPRINTF_POSIX@ || @GNULIB_VFPRINTF@ +# if (@GNULIB_VFPRINTF_POSIX@ && @REPLACE_VFPRINTF@) \ + || (@GNULIB_VFPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vfprintf rpl_vfprintf +# endif +# define GNULIB_overrides_vfprintf 1 +# if @GNULIB_VFPRINTF_POSIX@ +_GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((1, 2))); +# else +_GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 0) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args)); +# else +/* Need to cast, because on Solaris, the third parameter is + __va_list args + and GCC's fixincludes did not change this to __gnuc_va_list. */ +_GL_CXXALIAS_SYS_CAST (vfprintf, int, + (FILE *fp, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vfprintf); +#endif +#if !@GNULIB_VFPRINTF_POSIX@ && defined GNULIB_POSIXCHECK +# if !GNULIB_overrides_vfprintf +# undef vfprintf +# endif +/* Assume vfprintf is always declared. */ +_GL_WARN_ON_USE (vfprintf, "vfprintf is not always POSIX compliant - " + "use gnulib module vfprintf-posix for portable " + "POSIX compliance"); +#endif + +#if @GNULIB_VFSCANF@ +# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef vfscanf +# define vfscanf rpl_vfscanf +# endif +_GL_FUNCDECL_RPL (vfscanf, int, + (FILE *stream, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 0) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (vfscanf, int, + (FILE *stream, const char *format, va_list args)); +# else +_GL_CXXALIAS_SYS (vfscanf, int, + (FILE *stream, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vfscanf); +#endif + +#if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VPRINTF@ +# if (@GNULIB_VPRINTF_POSIX@ && @REPLACE_VPRINTF@) \ + || (@GNULIB_VPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vprintf rpl_vprintf +# endif +# define GNULIB_overrides_vprintf 1 +# if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ +_GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (1, 0) + _GL_ARG_NONNULL ((1))); +# else +_GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 0) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_RPL (vprintf, int, (const char *format, va_list args)); +# else +/* Need to cast, because on Solaris, the second parameter is + __va_list args + and GCC's fixincludes did not change this to __gnuc_va_list. */ +_GL_CXXALIAS_SYS_CAST (vprintf, int, (const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vprintf); +#endif +#if !@GNULIB_VPRINTF_POSIX@ && defined GNULIB_POSIXCHECK +# if !GNULIB_overrides_vprintf +# undef vprintf +# endif +/* Assume vprintf is always declared. */ +_GL_WARN_ON_USE (vprintf, "vprintf is not always POSIX compliant - " + "use gnulib module vprintf-posix for portable " + "POSIX compliance"); +#endif + +#if @GNULIB_VSCANF@ +# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef vscanf +# define vscanf rpl_vscanf +# endif +_GL_FUNCDECL_RPL (vscanf, int, (const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 0) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (vscanf, int, (const char *format, va_list args)); +# else +_GL_CXXALIAS_SYS (vscanf, int, (const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vscanf); +#endif + +#if @GNULIB_VSNPRINTF@ +# if @REPLACE_VSNPRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vsnprintf rpl_vsnprintf +# endif +_GL_FUNCDECL_RPL (vsnprintf, int, + (char *str, size_t size, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) + _GL_ARG_NONNULL ((3))); +_GL_CXXALIAS_RPL (vsnprintf, int, + (char *str, size_t size, const char *format, va_list args)); +# else +# if !@HAVE_DECL_VSNPRINTF@ +_GL_FUNCDECL_SYS (vsnprintf, int, + (char *str, size_t size, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) + _GL_ARG_NONNULL ((3))); +# endif +_GL_CXXALIAS_SYS (vsnprintf, int, + (char *str, size_t size, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vsnprintf); +#elif defined GNULIB_POSIXCHECK +# undef vsnprintf +# if HAVE_RAW_DECL_VSNPRINTF +_GL_WARN_ON_USE (vsnprintf, "vsnprintf is unportable - " + "use gnulib module vsnprintf for portability"); +# endif +#endif + +#if @GNULIB_VSPRINTF_POSIX@ +# if @REPLACE_VSPRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vsprintf rpl_vsprintf +# endif +_GL_FUNCDECL_RPL (vsprintf, int, + (char *str, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (vsprintf, int, + (char *str, const char *format, va_list args)); +# else +/* Need to cast, because on Solaris, the third parameter is + __va_list args + and GCC's fixincludes did not change this to __gnuc_va_list. */ +_GL_CXXALIAS_SYS_CAST (vsprintf, int, + (char *str, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vsprintf); +#elif defined GNULIB_POSIXCHECK +# undef vsprintf +/* Assume vsprintf is always declared. */ +_GL_WARN_ON_USE (vsprintf, "vsprintf is not always POSIX compliant - " + "use gnulib module vsprintf-posix for portable " + "POSIX compliance"); +#endif + + +#endif /* _@GUARD_PREFIX@_STDIO_H */ +#endif /* _@GUARD_PREFIX@_STDIO_H */ +#endif diff --git a/gnulib/lib/stdlib.in.h b/gnulib/lib/stdlib.in.h new file mode 100644 index 0000000..e92a614 --- /dev/null +++ b/gnulib/lib/stdlib.in.h @@ -0,0 +1,918 @@ +/* A GNU-like <stdlib.h>. + + Copyright (C) 1995, 2001-2004, 2006-2012 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 <http://www.gnu.org/licenses/>. */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +#if defined __need_malloc_and_calloc +/* Special invocation convention inside glibc header files. */ + +#@INCLUDE_NEXT@ @NEXT_STDLIB_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _@GUARD_PREFIX@_STDLIB_H + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_STDLIB_H@ + +#ifndef _@GUARD_PREFIX@_STDLIB_H +#define _@GUARD_PREFIX@_STDLIB_H + +/* NetBSD 5.0 mis-defines NULL. */ +#include <stddef.h> + +/* MirBSD 10 defines WEXITSTATUS in <sys/wait.h>, not in <stdlib.h>. */ +#if @GNULIB_SYSTEM_POSIX@ && !defined WEXITSTATUS +# include <sys/wait.h> +#endif + +/* Solaris declares getloadavg() in <sys/loadavg.h>. */ +#if (@GNULIB_GETLOADAVG@ || defined GNULIB_POSIXCHECK) && @HAVE_SYS_LOADAVG_H@ +# include <sys/loadavg.h> +#endif + +/* Native Windows platforms declare mktemp() in <io.h>. */ +#if 0 && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) +# include <io.h> +#endif + +#if @GNULIB_RANDOM_R@ + +/* OSF/1 5.1 declares 'struct random_data' in <random.h>, which is included + from <stdlib.h> if _REENTRANT is defined. Include it whenever we need + 'struct random_data'. */ +# if @HAVE_RANDOM_H@ +# include <random.h> +# endif + +# if !@HAVE_STRUCT_RANDOM_DATA@ || @REPLACE_RANDOM_R@ || !@HAVE_RANDOM_R@ +# include <stdint.h> +# endif + +# if !@HAVE_STRUCT_RANDOM_DATA@ +/* Define 'struct random_data'. + But allow multiple gnulib generated <stdlib.h> replacements to coexist. */ +# if !GNULIB_defined_struct_random_data +struct random_data +{ + int32_t *fptr; /* Front pointer. */ + int32_t *rptr; /* Rear pointer. */ + int32_t *state; /* Array of state values. */ + int rand_type; /* Type of random number generator. */ + int rand_deg; /* Degree of random number generator. */ + int rand_sep; /* Distance between front and rear. */ + int32_t *end_ptr; /* Pointer behind state table. */ +}; +# define GNULIB_defined_struct_random_data 1 +# endif +# endif +#endif + +#if (@GNULIB_MKSTEMP@ || @GNULIB_MKSTEMPS@ || @GNULIB_GETSUBOPT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) +/* On MacOS X 10.3, only <unistd.h> declares mkstemp. */ +/* On MacOS X 10.5, only <unistd.h> declares mkstemps. */ +/* On Cygwin 1.7.1, only <unistd.h> declares getsubopt. */ +/* But avoid namespace pollution on glibc systems and native Windows. */ +# include <unistd.h> +#endif + +/* The definition of _Noreturn is copied here. */ + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + + +/* Some systems do not define EXIT_*, despite otherwise supporting C89. */ +#ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +#endif +/* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere + with proper operation of xargs. */ +#ifndef EXIT_FAILURE +# define EXIT_FAILURE 1 +#elif EXIT_FAILURE != 1 +# undef EXIT_FAILURE +# define EXIT_FAILURE 1 +#endif + + +#if @GNULIB__EXIT@ +/* Terminate the current process with the given return code, without running + the 'atexit' handlers. */ +# if !@HAVE__EXIT@ +_GL_FUNCDECL_SYS (_Exit, _Noreturn void, (int status)); +# endif +_GL_CXXALIAS_SYS (_Exit, void, (int status)); +_GL_CXXALIASWARN (_Exit); +#elif defined GNULIB_POSIXCHECK +# undef _Exit +# if HAVE_RAW_DECL__EXIT +_GL_WARN_ON_USE (_Exit, "_Exit is unportable - " + "use gnulib module _Exit for portability"); +# endif +#endif + + +#if @GNULIB_ATOLL@ +/* Parse a signed decimal integer. + Returns the value of the integer. Errors are not detected. */ +# if !@HAVE_ATOLL@ +_GL_FUNCDECL_SYS (atoll, long long, (const char *string) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (atoll, long long, (const char *string)); +_GL_CXXALIASWARN (atoll); +#elif defined GNULIB_POSIXCHECK +# undef atoll +# if HAVE_RAW_DECL_ATOLL +_GL_WARN_ON_USE (atoll, "atoll is unportable - " + "use gnulib module atoll for portability"); +# endif +#endif + +#if @GNULIB_CALLOC_POSIX@ +# if @REPLACE_CALLOC@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef calloc +# define calloc rpl_calloc +# endif +_GL_FUNCDECL_RPL (calloc, void *, (size_t nmemb, size_t size)); +_GL_CXXALIAS_RPL (calloc, void *, (size_t nmemb, size_t size)); +# else +_GL_CXXALIAS_SYS (calloc, void *, (size_t nmemb, size_t size)); +# endif +_GL_CXXALIASWARN (calloc); +#elif defined GNULIB_POSIXCHECK +# undef calloc +/* Assume calloc is always declared. */ +_GL_WARN_ON_USE (calloc, "calloc is not POSIX compliant everywhere - " + "use gnulib module calloc-posix for portability"); +#endif + +#if @GNULIB_CANONICALIZE_FILE_NAME@ +# if @REPLACE_CANONICALIZE_FILE_NAME@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define canonicalize_file_name rpl_canonicalize_file_name +# endif +_GL_FUNCDECL_RPL (canonicalize_file_name, char *, (const char *name) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (canonicalize_file_name, char *, (const char *name)); +# else +# if !@HAVE_CANONICALIZE_FILE_NAME@ +_GL_FUNCDECL_SYS (canonicalize_file_name, char *, (const char *name) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (canonicalize_file_name, char *, (const char *name)); +# endif +_GL_CXXALIASWARN (canonicalize_file_name); +#elif defined GNULIB_POSIXCHECK +# undef canonicalize_file_name +# if HAVE_RAW_DECL_CANONICALIZE_FILE_NAME +_GL_WARN_ON_USE (canonicalize_file_name, + "canonicalize_file_name is unportable - " + "use gnulib module canonicalize-lgpl for portability"); +# endif +#endif + +#if @GNULIB_GETLOADAVG@ +/* Store max(NELEM,3) load average numbers in LOADAVG[]. + The three numbers are the load average of the last 1 minute, the last 5 + minutes, and the last 15 minutes, respectively. + LOADAVG is an array of NELEM numbers. */ +# if !@HAVE_DECL_GETLOADAVG@ +_GL_FUNCDECL_SYS (getloadavg, int, (double loadavg[], int nelem) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (getloadavg, int, (double loadavg[], int nelem)); +_GL_CXXALIASWARN (getloadavg); +#elif defined GNULIB_POSIXCHECK +# undef getloadavg +# if HAVE_RAW_DECL_GETLOADAVG +_GL_WARN_ON_USE (getloadavg, "getloadavg is not portable - " + "use gnulib module getloadavg for portability"); +# endif +#endif + +#if @GNULIB_GETSUBOPT@ +/* Assuming *OPTIONP is a comma separated list of elements of the form + "token" or "token=value", getsubopt parses the first of these elements. + If the first element refers to a "token" that is member of the given + NULL-terminated array of tokens: + - It replaces the comma with a NUL byte, updates *OPTIONP to point past + the first option and the comma, sets *VALUEP to the value of the + element (or NULL if it doesn't contain an "=" sign), + - It returns the index of the "token" in the given array of tokens. + Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined. + For more details see the POSIX:2001 specification. + http://www.opengroup.org/susv3xsh/getsubopt.html */ +# if !@HAVE_GETSUBOPT@ +_GL_FUNCDECL_SYS (getsubopt, int, + (char **optionp, char *const *tokens, char **valuep) + _GL_ARG_NONNULL ((1, 2, 3))); +# endif +_GL_CXXALIAS_SYS (getsubopt, int, + (char **optionp, char *const *tokens, char **valuep)); +_GL_CXXALIASWARN (getsubopt); +#elif defined GNULIB_POSIXCHECK +# undef getsubopt +# if HAVE_RAW_DECL_GETSUBOPT +_GL_WARN_ON_USE (getsubopt, "getsubopt is unportable - " + "use gnulib module getsubopt for portability"); +# endif +#endif + +#if @GNULIB_GRANTPT@ +/* Change the ownership and access permission of the slave side of the + pseudo-terminal whose master side is specified by FD. */ +# if !@HAVE_GRANTPT@ +_GL_FUNCDECL_SYS (grantpt, int, (int fd)); +# endif +_GL_CXXALIAS_SYS (grantpt, int, (int fd)); +_GL_CXXALIASWARN (grantpt); +#elif defined GNULIB_POSIXCHECK +# undef grantpt +# if HAVE_RAW_DECL_GRANTPT +_GL_WARN_ON_USE (grantpt, "grantpt is not portable - " + "use gnulib module grantpt for portability"); +# endif +#endif + +/* If _GL_USE_STDLIB_ALLOC is nonzero, the including module does not + rely on GNU or POSIX semantics for malloc and realloc (for example, + by never specifying a zero size), so it does not need malloc or + realloc to be redefined. */ +#if @GNULIB_MALLOC_POSIX@ +# if @REPLACE_MALLOC@ +# if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ + || _GL_USE_STDLIB_ALLOC) +# undef malloc +# define malloc rpl_malloc +# endif +_GL_FUNCDECL_RPL (malloc, void *, (size_t size)); +_GL_CXXALIAS_RPL (malloc, void *, (size_t size)); +# else +_GL_CXXALIAS_SYS (malloc, void *, (size_t size)); +# endif +_GL_CXXALIASWARN (malloc); +#elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC +# undef malloc +/* Assume malloc is always declared. */ +_GL_WARN_ON_USE (malloc, "malloc is not POSIX compliant everywhere - " + "use gnulib module malloc-posix for portability"); +#endif + +/* Convert a multibyte character to a wide character. */ +#if @GNULIB_MBTOWC@ +# if @REPLACE_MBTOWC@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbtowc +# define mbtowc rpl_mbtowc +# endif +_GL_FUNCDECL_RPL (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); +_GL_CXXALIAS_RPL (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); +# else +_GL_CXXALIAS_SYS (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); +# endif +_GL_CXXALIASWARN (mbtowc); +#endif + +#if @GNULIB_MKDTEMP@ +/* Create a unique temporary directory from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the directory name unique. + Returns TEMPLATE, or a null pointer if it cannot get a unique name. + The directory is created mode 700. */ +# if !@HAVE_MKDTEMP@ +_GL_FUNCDECL_SYS (mkdtemp, char *, (char * /*template*/) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (mkdtemp, char *, (char * /*template*/)); +_GL_CXXALIASWARN (mkdtemp); +#elif defined GNULIB_POSIXCHECK +# undef mkdtemp +# if HAVE_RAW_DECL_MKDTEMP +_GL_WARN_ON_USE (mkdtemp, "mkdtemp is unportable - " + "use gnulib module mkdtemp for portability"); +# endif +#endif + +#if @GNULIB_MKOSTEMP@ +/* Create a unique temporary file from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) + and O_TEXT, O_BINARY (defined in "binary-io.h"). + The file is then created, with the specified flags, ensuring it didn't exist + before. + The file is created read-write (mask at least 0600 & ~umask), but it may be + world-readable and world-writable (mask 0666 & ~umask), depending on the + implementation. + Returns the open file descriptor if successful, otherwise -1 and errno + set. */ +# if !@HAVE_MKOSTEMP@ +_GL_FUNCDECL_SYS (mkostemp, int, (char * /*template*/, int /*flags*/) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (mkostemp, int, (char * /*template*/, int /*flags*/)); +_GL_CXXALIASWARN (mkostemp); +#elif defined GNULIB_POSIXCHECK +# undef mkostemp +# if HAVE_RAW_DECL_MKOSTEMP +_GL_WARN_ON_USE (mkostemp, "mkostemp is unportable - " + "use gnulib module mkostemp for portability"); +# endif +#endif + +#if @GNULIB_MKOSTEMPS@ +/* Create a unique temporary file from TEMPLATE. + The last six characters of TEMPLATE before a suffix of length + SUFFIXLEN must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) + and O_TEXT, O_BINARY (defined in "binary-io.h"). + The file is then created, with the specified flags, ensuring it didn't exist + before. + The file is created read-write (mask at least 0600 & ~umask), but it may be + world-readable and world-writable (mask 0666 & ~umask), depending on the + implementation. + Returns the open file descriptor if successful, otherwise -1 and errno + set. */ +# if !@HAVE_MKOSTEMPS@ +_GL_FUNCDECL_SYS (mkostemps, int, + (char * /*template*/, int /*suffixlen*/, int /*flags*/) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (mkostemps, int, + (char * /*template*/, int /*suffixlen*/, int /*flags*/)); +_GL_CXXALIASWARN (mkostemps); +#elif defined GNULIB_POSIXCHECK +# undef mkostemps +# if HAVE_RAW_DECL_MKOSTEMPS +_GL_WARN_ON_USE (mkostemps, "mkostemps is unportable - " + "use gnulib module mkostemps for portability"); +# endif +#endif + +#if @GNULIB_MKSTEMP@ +/* Create a unique temporary file from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + The file is then created, ensuring it didn't exist before. + The file is created read-write (mask at least 0600 & ~umask), but it may be + world-readable and world-writable (mask 0666 & ~umask), depending on the + implementation. + Returns the open file descriptor if successful, otherwise -1 and errno + set. */ +# if @REPLACE_MKSTEMP@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mkstemp rpl_mkstemp +# endif +_GL_FUNCDECL_RPL (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mkstemp, int, (char * /*template*/)); +# else +# if ! @HAVE_MKSTEMP@ +_GL_FUNCDECL_SYS (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (mkstemp, int, (char * /*template*/)); +# endif +_GL_CXXALIASWARN (mkstemp); +#elif defined GNULIB_POSIXCHECK +# undef mkstemp +# if HAVE_RAW_DECL_MKSTEMP +_GL_WARN_ON_USE (mkstemp, "mkstemp is unportable - " + "use gnulib module mkstemp for portability"); +# endif +#endif + +#if @GNULIB_MKSTEMPS@ +/* Create a unique temporary file from TEMPLATE. + The last six characters of TEMPLATE prior to a suffix of length + SUFFIXLEN must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + The file is then created, ensuring it didn't exist before. + The file is created read-write (mask at least 0600 & ~umask), but it may be + world-readable and world-writable (mask 0666 & ~umask), depending on the + implementation. + Returns the open file descriptor if successful, otherwise -1 and errno + set. */ +# if !@HAVE_MKSTEMPS@ +_GL_FUNCDECL_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/)); +_GL_CXXALIASWARN (mkstemps); +#elif defined GNULIB_POSIXCHECK +# undef mkstemps +# if HAVE_RAW_DECL_MKSTEMPS +_GL_WARN_ON_USE (mkstemps, "mkstemps is unportable - " + "use gnulib module mkstemps for portability"); +# endif +#endif + +#if @GNULIB_POSIX_OPENPT@ +/* Return an FD open to the master side of a pseudo-terminal. Flags should + include O_RDWR, and may also include O_NOCTTY. */ +# if !@HAVE_POSIX_OPENPT@ +_GL_FUNCDECL_SYS (posix_openpt, int, (int flags)); +# endif +_GL_CXXALIAS_SYS (posix_openpt, int, (int flags)); +_GL_CXXALIASWARN (posix_openpt); +#elif defined GNULIB_POSIXCHECK +# undef posix_openpt +# if HAVE_RAW_DECL_POSIX_OPENPT +_GL_WARN_ON_USE (posix_openpt, "posix_openpt is not portable - " + "use gnulib module posix_openpt for portability"); +# endif +#endif + +#if @GNULIB_PTSNAME@ +/* Return the pathname of the pseudo-terminal slave associated with + the master FD is open on, or NULL on errors. */ +# if !@HAVE_PTSNAME@ +_GL_FUNCDECL_SYS (ptsname, char *, (int fd)); +# endif +_GL_CXXALIAS_SYS (ptsname, char *, (int fd)); +_GL_CXXALIASWARN (ptsname); +#elif defined GNULIB_POSIXCHECK +# undef ptsname +# if HAVE_RAW_DECL_PTSNAME +_GL_WARN_ON_USE (ptsname, "ptsname is not portable - " + "use gnulib module ptsname for portability"); +# endif +#endif + +#if @GNULIB_PTSNAME_R@ +/* Set the pathname of the pseudo-terminal slave associated with + the master FD is open on and return 0, or set errno and return + non-zero on errors. */ +# if @REPLACE_PTSNAME_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ptsname_r +# define ptsname_r rpl_ptsname_r +# endif +_GL_FUNCDECL_RPL (ptsname_r, int, (int fd, char *buf, size_t len)); +_GL_CXXALIAS_RPL (ptsname_r, int, (int fd, char *buf, size_t len)); +# else +# if !@HAVE_PTSNAME_R@ +_GL_FUNCDECL_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); +# endif +_GL_CXXALIAS_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); +# endif +_GL_CXXALIASWARN (ptsname_r); +#elif defined GNULIB_POSIXCHECK +# undef ptsname_r +# if HAVE_RAW_DECL_PTSNAME_R +_GL_WARN_ON_USE (ptsname_r, "ptsname_r is not portable - " + "use gnulib module ptsname_r for portability"); +# endif +#endif + +#if @GNULIB_PUTENV@ +# if @REPLACE_PUTENV@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef putenv +# define putenv rpl_putenv +# endif +_GL_FUNCDECL_RPL (putenv, int, (char *string) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (putenv, int, (char *string)); +# else +_GL_CXXALIAS_SYS (putenv, int, (char *string)); +# endif +_GL_CXXALIASWARN (putenv); +#endif + + +#if @GNULIB_RANDOM_R@ +# if !@HAVE_RANDOM_R@ +# ifndef RAND_MAX +# define RAND_MAX 2147483647 +# endif +# endif +#endif + + +#if @GNULIB_RANDOM@ +# if !@HAVE_RANDOM@ +_GL_FUNCDECL_SYS (random, long, (void)); +# endif +_GL_CXXALIAS_SYS (random, long, (void)); +_GL_CXXALIASWARN (random); +#elif defined GNULIB_POSIXCHECK +# undef random +# if HAVE_RAW_DECL_RANDOM +_GL_WARN_ON_USE (random, "random is unportable - " + "use gnulib module random for portability"); +# endif +#endif + +#if @GNULIB_RANDOM@ +# if !@HAVE_RANDOM@ +_GL_FUNCDECL_SYS (srandom, void, (unsigned int seed)); +# endif +_GL_CXXALIAS_SYS (srandom, void, (unsigned int seed)); +_GL_CXXALIASWARN (srandom); +#elif defined GNULIB_POSIXCHECK +# undef srandom +# if HAVE_RAW_DECL_SRANDOM +_GL_WARN_ON_USE (srandom, "srandom is unportable - " + "use gnulib module random for portability"); +# endif +#endif + +#if @GNULIB_RANDOM@ +# if !@HAVE_RANDOM@ +_GL_FUNCDECL_SYS (initstate, char *, + (unsigned int seed, char *buf, size_t buf_size) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (initstate, char *, + (unsigned int seed, char *buf, size_t buf_size)); +_GL_CXXALIASWARN (initstate); +#elif defined GNULIB_POSIXCHECK +# undef initstate +# if HAVE_RAW_DECL_INITSTATE_R +_GL_WARN_ON_USE (initstate, "initstate is unportable - " + "use gnulib module random for portability"); +# endif +#endif + +#if @GNULIB_RANDOM@ +# if !@HAVE_RANDOM@ +_GL_FUNCDECL_SYS (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (setstate, char *, (char *arg_state)); +_GL_CXXALIASWARN (setstate); +#elif defined GNULIB_POSIXCHECK +# undef setstate +# if HAVE_RAW_DECL_SETSTATE_R +_GL_WARN_ON_USE (setstate, "setstate is unportable - " + "use gnulib module random for portability"); +# endif +#endif + + +#if @GNULIB_RANDOM_R@ +# if @REPLACE_RANDOM_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef random_r +# define random_r rpl_random_r +# endif +_GL_FUNCDECL_RPL (random_r, int, (struct random_data *buf, int32_t *result) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (random_r, int, (struct random_data *buf, int32_t *result)); +# else +# if !@HAVE_RANDOM_R@ +_GL_FUNCDECL_SYS (random_r, int, (struct random_data *buf, int32_t *result) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (random_r, int, (struct random_data *buf, int32_t *result)); +# endif +_GL_CXXALIASWARN (random_r); +#elif defined GNULIB_POSIXCHECK +# undef random_r +# if HAVE_RAW_DECL_RANDOM_R +_GL_WARN_ON_USE (random_r, "random_r is unportable - " + "use gnulib module random_r for portability"); +# endif +#endif + +#if @GNULIB_RANDOM_R@ +# if @REPLACE_RANDOM_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef srandom_r +# define srandom_r rpl_srandom_r +# endif +_GL_FUNCDECL_RPL (srandom_r, int, + (unsigned int seed, struct random_data *rand_state) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (srandom_r, int, + (unsigned int seed, struct random_data *rand_state)); +# else +# if !@HAVE_RANDOM_R@ +_GL_FUNCDECL_SYS (srandom_r, int, + (unsigned int seed, struct random_data *rand_state) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (srandom_r, int, + (unsigned int seed, struct random_data *rand_state)); +# endif +_GL_CXXALIASWARN (srandom_r); +#elif defined GNULIB_POSIXCHECK +# undef srandom_r +# if HAVE_RAW_DECL_SRANDOM_R +_GL_WARN_ON_USE (srandom_r, "srandom_r is unportable - " + "use gnulib module random_r for portability"); +# endif +#endif + +#if @GNULIB_RANDOM_R@ +# if @REPLACE_RANDOM_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef initstate_r +# define initstate_r rpl_initstate_r +# endif +_GL_FUNCDECL_RPL (initstate_r, int, + (unsigned int seed, char *buf, size_t buf_size, + struct random_data *rand_state) + _GL_ARG_NONNULL ((2, 4))); +_GL_CXXALIAS_RPL (initstate_r, int, + (unsigned int seed, char *buf, size_t buf_size, + struct random_data *rand_state)); +# else +# if !@HAVE_RANDOM_R@ +_GL_FUNCDECL_SYS (initstate_r, int, + (unsigned int seed, char *buf, size_t buf_size, + struct random_data *rand_state) + _GL_ARG_NONNULL ((2, 4))); +# endif +_GL_CXXALIAS_SYS (initstate_r, int, + (unsigned int seed, char *buf, size_t buf_size, + struct random_data *rand_state)); +# endif +_GL_CXXALIASWARN (initstate_r); +#elif defined GNULIB_POSIXCHECK +# undef initstate_r +# if HAVE_RAW_DECL_INITSTATE_R +_GL_WARN_ON_USE (initstate_r, "initstate_r is unportable - " + "use gnulib module random_r for portability"); +# endif +#endif + +#if @GNULIB_RANDOM_R@ +# if @REPLACE_RANDOM_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef setstate_r +# define setstate_r rpl_setstate_r +# endif +_GL_FUNCDECL_RPL (setstate_r, int, + (char *arg_state, struct random_data *rand_state) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (setstate_r, int, + (char *arg_state, struct random_data *rand_state)); +# else +# if !@HAVE_RANDOM_R@ +_GL_FUNCDECL_SYS (setstate_r, int, + (char *arg_state, struct random_data *rand_state) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (setstate_r, int, + (char *arg_state, struct random_data *rand_state)); +# endif +_GL_CXXALIASWARN (setstate_r); +#elif defined GNULIB_POSIXCHECK +# undef setstate_r +# if HAVE_RAW_DECL_SETSTATE_R +_GL_WARN_ON_USE (setstate_r, "setstate_r is unportable - " + "use gnulib module random_r for portability"); +# endif +#endif + + +#if @GNULIB_REALLOC_POSIX@ +# if @REPLACE_REALLOC@ +# if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ + || _GL_USE_STDLIB_ALLOC) +# undef realloc +# define realloc rpl_realloc +# endif +_GL_FUNCDECL_RPL (realloc, void *, (void *ptr, size_t size)); +_GL_CXXALIAS_RPL (realloc, void *, (void *ptr, size_t size)); +# else +_GL_CXXALIAS_SYS (realloc, void *, (void *ptr, size_t size)); +# endif +_GL_CXXALIASWARN (realloc); +#elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC +# undef realloc +/* Assume realloc is always declared. */ +_GL_WARN_ON_USE (realloc, "realloc is not POSIX compliant everywhere - " + "use gnulib module realloc-posix for portability"); +#endif + +#if @GNULIB_REALPATH@ +# if @REPLACE_REALPATH@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define realpath rpl_realpath +# endif +_GL_FUNCDECL_RPL (realpath, char *, (const char *name, char *resolved) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (realpath, char *, (const char *name, char *resolved)); +# else +# if !@HAVE_REALPATH@ +_GL_FUNCDECL_SYS (realpath, char *, (const char *name, char *resolved) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (realpath, char *, (const char *name, char *resolved)); +# endif +_GL_CXXALIASWARN (realpath); +#elif defined GNULIB_POSIXCHECK +# undef realpath +# if HAVE_RAW_DECL_REALPATH +_GL_WARN_ON_USE (realpath, "realpath is unportable - use gnulib module " + "canonicalize or canonicalize-lgpl for portability"); +# endif +#endif + +#if @GNULIB_RPMATCH@ +/* Test a user response to a question. + Return 1 if it is affirmative, 0 if it is negative, or -1 if not clear. */ +# if !@HAVE_RPMATCH@ +_GL_FUNCDECL_SYS (rpmatch, int, (const char *response) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (rpmatch, int, (const char *response)); +_GL_CXXALIASWARN (rpmatch); +#elif defined GNULIB_POSIXCHECK +# undef rpmatch +# if HAVE_RAW_DECL_RPMATCH +_GL_WARN_ON_USE (rpmatch, "rpmatch is unportable - " + "use gnulib module rpmatch for portability"); +# endif +#endif + +#if @GNULIB_SETENV@ +/* Set NAME to VALUE in the environment. + If REPLACE is nonzero, overwrite an existing value. */ +# if @REPLACE_SETENV@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef setenv +# define setenv rpl_setenv +# endif +_GL_FUNCDECL_RPL (setenv, int, + (const char *name, const char *value, int replace) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (setenv, int, + (const char *name, const char *value, int replace)); +# else +# if !@HAVE_DECL_SETENV@ +_GL_FUNCDECL_SYS (setenv, int, + (const char *name, const char *value, int replace) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (setenv, int, + (const char *name, const char *value, int replace)); +# endif +# if !(@REPLACE_SETENV@ && !@HAVE_DECL_SETENV@) +_GL_CXXALIASWARN (setenv); +# endif +#elif defined GNULIB_POSIXCHECK +# undef setenv +# if HAVE_RAW_DECL_SETENV +_GL_WARN_ON_USE (setenv, "setenv is unportable - " + "use gnulib module setenv for portability"); +# endif +#endif + +#if @GNULIB_STRTOD@ + /* Parse a double from STRING, updating ENDP if appropriate. */ +# if @REPLACE_STRTOD@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strtod rpl_strtod +# endif +_GL_FUNCDECL_RPL (strtod, double, (const char *str, char **endp) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtod, double, (const char *str, char **endp)); +# else +# if !@HAVE_STRTOD@ +_GL_FUNCDECL_SYS (strtod, double, (const char *str, char **endp) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtod, double, (const char *str, char **endp)); +# endif +_GL_CXXALIASWARN (strtod); +#elif defined GNULIB_POSIXCHECK +# undef strtod +# if HAVE_RAW_DECL_STRTOD +_GL_WARN_ON_USE (strtod, "strtod is unportable - " + "use gnulib module strtod for portability"); +# endif +#endif + +#if @GNULIB_STRTOLL@ +/* Parse a signed integer whose textual representation starts at STRING. + The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, + it may be decimal or octal (with prefix "0") or hexadecimal (with prefix + "0x"). + If ENDPTR is not NULL, the address of the first byte after the integer is + stored in *ENDPTR. + Upon overflow, the return value is LLONG_MAX or LLONG_MIN, and errno is set + to ERANGE. */ +# if !@HAVE_STRTOLL@ +_GL_FUNCDECL_SYS (strtoll, long long, + (const char *string, char **endptr, int base) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtoll, long long, + (const char *string, char **endptr, int base)); +_GL_CXXALIASWARN (strtoll); +#elif defined GNULIB_POSIXCHECK +# undef strtoll +# if HAVE_RAW_DECL_STRTOLL +_GL_WARN_ON_USE (strtoll, "strtoll is unportable - " + "use gnulib module strtoll for portability"); +# endif +#endif + +#if @GNULIB_STRTOULL@ +/* Parse an unsigned integer whose textual representation starts at STRING. + The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, + it may be decimal or octal (with prefix "0") or hexadecimal (with prefix + "0x"). + If ENDPTR is not NULL, the address of the first byte after the integer is + stored in *ENDPTR. + Upon overflow, the return value is ULLONG_MAX, and errno is set to + ERANGE. */ +# if !@HAVE_STRTOULL@ +_GL_FUNCDECL_SYS (strtoull, unsigned long long, + (const char *string, char **endptr, int base) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtoull, unsigned long long, + (const char *string, char **endptr, int base)); +_GL_CXXALIASWARN (strtoull); +#elif defined GNULIB_POSIXCHECK +# undef strtoull +# if HAVE_RAW_DECL_STRTOULL +_GL_WARN_ON_USE (strtoull, "strtoull is unportable - " + "use gnulib module strtoull for portability"); +# endif +#endif + +#if @GNULIB_UNLOCKPT@ +/* Unlock the slave side of the pseudo-terminal whose master side is specified + by FD, so that it can be opened. */ +# if !@HAVE_UNLOCKPT@ +_GL_FUNCDECL_SYS (unlockpt, int, (int fd)); +# endif +_GL_CXXALIAS_SYS (unlockpt, int, (int fd)); +_GL_CXXALIASWARN (unlockpt); +#elif defined GNULIB_POSIXCHECK +# undef unlockpt +# if HAVE_RAW_DECL_UNLOCKPT +_GL_WARN_ON_USE (unlockpt, "unlockpt is not portable - " + "use gnulib module unlockpt for portability"); +# endif +#endif + +#if @GNULIB_UNSETENV@ +/* Remove the variable NAME from the environment. */ +# if @REPLACE_UNSETENV@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef unsetenv +# define unsetenv rpl_unsetenv +# endif +_GL_FUNCDECL_RPL (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (unsetenv, int, (const char *name)); +# else +# if !@HAVE_DECL_UNSETENV@ +_GL_FUNCDECL_SYS (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (unsetenv, int, (const char *name)); +# endif +# if !(@REPLACE_UNSETENV@ && !@HAVE_DECL_UNSETENV@) +_GL_CXXALIASWARN (unsetenv); +# endif +#elif defined GNULIB_POSIXCHECK +# undef unsetenv +# if HAVE_RAW_DECL_UNSETENV +_GL_WARN_ON_USE (unsetenv, "unsetenv is unportable - " + "use gnulib module unsetenv for portability"); +# endif +#endif + +/* Convert a wide character to a multibyte character. */ +#if @GNULIB_WCTOMB@ +# if @REPLACE_WCTOMB@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wctomb +# define wctomb rpl_wctomb +# endif +_GL_FUNCDECL_RPL (wctomb, int, (char *s, wchar_t wc)); +_GL_CXXALIAS_RPL (wctomb, int, (char *s, wchar_t wc)); +# else +_GL_CXXALIAS_SYS (wctomb, int, (char *s, wchar_t wc)); +# endif +_GL_CXXALIASWARN (wctomb); +#endif + + +#endif /* _@GUARD_PREFIX@_STDLIB_H */ +#endif /* _@GUARD_PREFIX@_STDLIB_H */ +#endif diff --git a/gnulib/lib/strcasecmp.c b/gnulib/lib/strcasecmp.c new file mode 100644 index 0000000..77ca288 --- /dev/null +++ b/gnulib/lib/strcasecmp.c @@ -0,0 +1,62 @@ +/* Case-insensitive string comparison function. + Copyright (C) 1998-1999, 2005-2007, 2009-2012 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, see <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <string.h> + +#include <ctype.h> +#include <limits.h> + +#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) + +/* Compare strings S1 and S2, ignoring case, returning less than, equal to or + greater than zero if S1 is lexicographically less than, equal to or greater + than S2. + Note: This function does not work with multibyte strings! */ + +int +strcasecmp (const char *s1, const char *s2) +{ + const unsigned char *p1 = (const unsigned char *) s1; + const unsigned char *p2 = (const unsigned char *) s2; + unsigned char c1, c2; + + if (p1 == p2) + return 0; + + do + { + c1 = TOLOWER (*p1); + c2 = TOLOWER (*p2); + + if (c1 == '\0') + break; + + ++p1; + ++p2; + } + while (c1 == c2); + + if (UCHAR_MAX <= INT_MAX) + return c1 - c2; + else + /* On machines where 'char' and 'int' are types of the same size, the + difference of two 'unsigned char' values - including the sign bit - + doesn't fit in an 'int'. */ + return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0); +} diff --git a/gnulib/lib/strchrnul.c b/gnulib/lib/strchrnul.c new file mode 100644 index 0000000..1be4249 --- /dev/null +++ b/gnulib/lib/strchrnul.c @@ -0,0 +1,142 @@ +/* Searching in a string. + Copyright (C) 2003, 2007-2012 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 <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <string.h> + +/* Find the first occurrence of C in S or the final NUL byte. */ +char * +strchrnul (const char *s, int c_in) +{ + /* On 32-bit hardware, choosing longword to be a 32-bit unsigned + long instead of a 64-bit uintmax_t tends to give better + performance. On 64-bit hardware, unsigned long is generally 64 + bits already. Change this typedef to experiment with + performance. */ + typedef unsigned long int longword; + + const unsigned char *char_ptr; + const longword *longword_ptr; + longword repeated_one; + longword repeated_c; + unsigned char c; + + c = (unsigned char) c_in; + if (!c) + return rawmemchr (s, 0); + + /* Handle the first few bytes by reading one byte at a time. + Do this until CHAR_PTR is aligned on a longword boundary. */ + for (char_ptr = (const unsigned char *) s; + (size_t) char_ptr % sizeof (longword) != 0; + ++char_ptr) + if (!*char_ptr || *char_ptr == c) + return (char *) char_ptr; + + longword_ptr = (const longword *) char_ptr; + + /* All these elucidatory comments refer to 4-byte longwords, + but the theory applies equally well to any size longwords. */ + + /* Compute auxiliary longword values: + repeated_one is a value which has a 1 in every byte. + repeated_c has c in every byte. */ + repeated_one = 0x01010101; + repeated_c = c | (c << 8); + repeated_c |= repeated_c << 16; + if (0xffffffffU < (longword) -1) + { + repeated_one |= repeated_one << 31 << 1; + repeated_c |= repeated_c << 31 << 1; + if (8 < sizeof (longword)) + { + size_t i; + + for (i = 64; i < sizeof (longword) * 8; i *= 2) + { + repeated_one |= repeated_one << i; + repeated_c |= repeated_c << i; + } + } + } + + /* Instead of the traditional loop which tests each byte, we will + test a longword at a time. The tricky part is testing if *any of + the four* bytes in the longword in question are equal to NUL or + c. We first use an xor with repeated_c. This reduces the task + to testing whether *any of the four* bytes in longword1 or + longword2 is zero. + + Let's consider longword1. We compute tmp = + ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). + That is, we perform the following operations: + 1. Subtract repeated_one. + 2. & ~longword1. + 3. & a mask consisting of 0x80 in every byte. + Consider what happens in each byte: + - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, + and step 3 transforms it into 0x80. A carry can also be propagated + to more significant bytes. + - If a byte of longword1 is nonzero, let its lowest 1 bit be at + position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, + the byte ends in a single bit of value 0 and k bits of value 1. + After step 2, the result is just k bits of value 1: 2^k - 1. After + step 3, the result is 0. And no carry is produced. + So, if longword1 has only non-zero bytes, tmp is zero. + Whereas if longword1 has a zero byte, call j the position of the least + significant zero byte. Then the result has a zero at positions 0, ..., + j-1 and a 0x80 at position j. We cannot predict the result at the more + significant bytes (positions j+1..3), but it does not matter since we + already have a non-zero bit at position 8*j+7. + + The test whether any byte in longword1 or longword2 is zero is equivalent + to testing whether tmp1 is nonzero or tmp2 is nonzero. We can combine + this into a single test, whether (tmp1 | tmp2) is nonzero. + + This test can read more than one byte beyond the end of a string, + depending on where the terminating NUL is encountered. However, + this is considered safe since the initialization phase ensured + that the read will be aligned, therefore, the read will not cross + page boundaries and will not cause a fault. */ + + while (1) + { + longword longword1 = *longword_ptr ^ repeated_c; + longword longword2 = *longword_ptr; + + if (((((longword1 - repeated_one) & ~longword1) + | ((longword2 - repeated_one) & ~longword2)) + & (repeated_one << 7)) != 0) + break; + longword_ptr++; + } + + char_ptr = (const unsigned char *) longword_ptr; + + /* At this point, we know that one of the sizeof (longword) bytes + starting at char_ptr is == 0 or == c. On little-endian machines, + we could determine the first such byte without any further memory + accesses, just by looking at the tmp result from the last loop + iteration. But this does not work on big-endian machines. + Choose code that works in both cases. */ + + char_ptr = (unsigned char *) longword_ptr; + while (*char_ptr && (*char_ptr != c)) + char_ptr++; + return (char *) char_ptr; +} diff --git a/gnulib/lib/strchrnul.valgrind b/gnulib/lib/strchrnul.valgrind new file mode 100644 index 0000000..b14fa13 --- /dev/null +++ b/gnulib/lib/strchrnul.valgrind @@ -0,0 +1,12 @@ +# Suppress a valgrind message about use of uninitialized memory in strchrnul(). +# This use is OK because it provides only a speedup. +{ + strchrnul-value4 + Memcheck:Value4 + fun:strchrnul +} +{ + strchrnul-value8 + Memcheck:Value8 + fun:strchrnul +} diff --git a/gnulib/lib/strerror-override.c b/gnulib/lib/strerror-override.c new file mode 100644 index 0000000..9ca6523 --- /dev/null +++ b/gnulib/lib/strerror-override.c @@ -0,0 +1,289 @@ +/* strerror-override.c --- POSIX compatible system error routine + + Copyright (C) 2010-2012 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 <http://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2010. */ + +#include <config.h> + +#include "strerror-override.h" + +#include <errno.h> + +#if GNULIB_defined_EWINSOCK /* native Windows platforms */ +# if HAVE_WINSOCK2_H +# include <winsock2.h> +# endif +#endif + +/* If ERRNUM maps to an errno value defined by gnulib, return a string + describing the error. Otherwise return NULL. */ +const char * +strerror_override (int errnum) +{ + /* These error messages are taken from glibc/sysdeps/gnu/errlist.c. */ + switch (errnum) + { +#if REPLACE_STRERROR_0 + case 0: + return "Success"; +#endif + +#if GNULIB_defined_ESOCK /* native Windows platforms with older <errno.h> */ + case EINPROGRESS: + return "Operation now in progress"; + case EALREADY: + return "Operation already in progress"; + case ENOTSOCK: + return "Socket operation on non-socket"; + case EDESTADDRREQ: + return "Destination address required"; + case EMSGSIZE: + return "Message too long"; + case EPROTOTYPE: + return "Protocol wrong type for socket"; + case ENOPROTOOPT: + return "Protocol not available"; + case EPROTONOSUPPORT: + return "Protocol not supported"; + case EOPNOTSUPP: + return "Operation not supported"; + case EAFNOSUPPORT: + return "Address family not supported by protocol"; + case EADDRINUSE: + return "Address already in use"; + case EADDRNOTAVAIL: + return "Cannot assign requested address"; + case ENETDOWN: + return "Network is down"; + case ENETUNREACH: + return "Network is unreachable"; + case ECONNRESET: + return "Connection reset by peer"; + case ENOBUFS: + return "No buffer space available"; + case EISCONN: + return "Transport endpoint is already connected"; + case ENOTCONN: + return "Transport endpoint is not connected"; + case ETIMEDOUT: + return "Connection timed out"; + case ECONNREFUSED: + return "Connection refused"; + case ELOOP: + return "Too many levels of symbolic links"; + case EHOSTUNREACH: + return "No route to host"; + case EWOULDBLOCK: + return "Operation would block"; + case ETXTBSY: + return "Text file busy"; + case ENODATA: + return "No data available"; + case ENOSR: + return "Out of streams resources"; + case ENOSTR: + return "Device not a stream"; + case ENOTRECOVERABLE: + return "State not recoverable"; + case EOWNERDEAD: + return "Owner died"; + case ETIME: + return "Timer expired"; + case EOTHER: + return "Other error"; +#endif +#if GNULIB_defined_EWINSOCK /* native Windows platforms */ + case ESOCKTNOSUPPORT: + return "Socket type not supported"; + case EPFNOSUPPORT: + return "Protocol family not supported"; + case ESHUTDOWN: + return "Cannot send after transport endpoint shutdown"; + case ETOOMANYREFS: + return "Too many references: cannot splice"; + case EHOSTDOWN: + return "Host is down"; + case EPROCLIM: + return "Too many processes"; + case EUSERS: + return "Too many users"; + case EDQUOT: + return "Disk quota exceeded"; + case ESTALE: + return "Stale NFS file handle"; + case EREMOTE: + return "Object is remote"; +# if HAVE_WINSOCK2_H + /* WSA_INVALID_HANDLE maps to EBADF */ + /* WSA_NOT_ENOUGH_MEMORY maps to ENOMEM */ + /* WSA_INVALID_PARAMETER maps to EINVAL */ + case WSA_OPERATION_ABORTED: + return "Overlapped operation aborted"; + case WSA_IO_INCOMPLETE: + return "Overlapped I/O event object not in signaled state"; + case WSA_IO_PENDING: + return "Overlapped operations will complete later"; + /* WSAEINTR maps to EINTR */ + /* WSAEBADF maps to EBADF */ + /* WSAEACCES maps to EACCES */ + /* WSAEFAULT maps to EFAULT */ + /* WSAEINVAL maps to EINVAL */ + /* WSAEMFILE maps to EMFILE */ + /* WSAEWOULDBLOCK maps to EWOULDBLOCK */ + /* WSAEINPROGRESS maps to EINPROGRESS */ + /* WSAEALREADY maps to EALREADY */ + /* WSAENOTSOCK maps to ENOTSOCK */ + /* WSAEDESTADDRREQ maps to EDESTADDRREQ */ + /* WSAEMSGSIZE maps to EMSGSIZE */ + /* WSAEPROTOTYPE maps to EPROTOTYPE */ + /* WSAENOPROTOOPT maps to ENOPROTOOPT */ + /* WSAEPROTONOSUPPORT maps to EPROTONOSUPPORT */ + /* WSAESOCKTNOSUPPORT is ESOCKTNOSUPPORT */ + /* WSAEOPNOTSUPP maps to EOPNOTSUPP */ + /* WSAEPFNOSUPPORT is EPFNOSUPPORT */ + /* WSAEAFNOSUPPORT maps to EAFNOSUPPORT */ + /* WSAEADDRINUSE maps to EADDRINUSE */ + /* WSAEADDRNOTAVAIL maps to EADDRNOTAVAIL */ + /* WSAENETDOWN maps to ENETDOWN */ + /* WSAENETUNREACH maps to ENETUNREACH */ + /* WSAENETRESET maps to ENETRESET */ + /* WSAECONNABORTED maps to ECONNABORTED */ + /* WSAECONNRESET maps to ECONNRESET */ + /* WSAENOBUFS maps to ENOBUFS */ + /* WSAEISCONN maps to EISCONN */ + /* WSAENOTCONN maps to ENOTCONN */ + /* WSAESHUTDOWN is ESHUTDOWN */ + /* WSAETOOMANYREFS is ETOOMANYREFS */ + /* WSAETIMEDOUT maps to ETIMEDOUT */ + /* WSAECONNREFUSED maps to ECONNREFUSED */ + /* WSAELOOP maps to ELOOP */ + /* WSAENAMETOOLONG maps to ENAMETOOLONG */ + /* WSAEHOSTDOWN is EHOSTDOWN */ + /* WSAEHOSTUNREACH maps to EHOSTUNREACH */ + /* WSAENOTEMPTY maps to ENOTEMPTY */ + /* WSAEPROCLIM is EPROCLIM */ + /* WSAEUSERS is EUSERS */ + /* WSAEDQUOT is EDQUOT */ + /* WSAESTALE is ESTALE */ + /* WSAEREMOTE is EREMOTE */ + case WSASYSNOTREADY: + return "Network subsystem is unavailable"; + case WSAVERNOTSUPPORTED: + return "Winsock.dll version out of range"; + case WSANOTINITIALISED: + return "Successful WSAStartup not yet performed"; + case WSAEDISCON: + return "Graceful shutdown in progress"; + case WSAENOMORE: case WSA_E_NO_MORE: + return "No more results"; + case WSAECANCELLED: case WSA_E_CANCELLED: + return "Call was canceled"; + case WSAEINVALIDPROCTABLE: + return "Procedure call table is invalid"; + case WSAEINVALIDPROVIDER: + return "Service provider is invalid"; + case WSAEPROVIDERFAILEDINIT: + return "Service provider failed to initialize"; + case WSASYSCALLFAILURE: + return "System call failure"; + case WSASERVICE_NOT_FOUND: + return "Service not found"; + case WSATYPE_NOT_FOUND: + return "Class type not found"; + case WSAEREFUSED: + return "Database query was refused"; + case WSAHOST_NOT_FOUND: + return "Host not found"; + case WSATRY_AGAIN: + return "Nonauthoritative host not found"; + case WSANO_RECOVERY: + return "Nonrecoverable error"; + case WSANO_DATA: + return "Valid name, no data record of requested type"; + /* WSA_QOS_* omitted */ +# endif +#endif + +#if GNULIB_defined_ENOMSG + case ENOMSG: + return "No message of desired type"; +#endif + +#if GNULIB_defined_EIDRM + case EIDRM: + return "Identifier removed"; +#endif + +#if GNULIB_defined_ENOLINK + case ENOLINK: + return "Link has been severed"; +#endif + +#if GNULIB_defined_EPROTO + case EPROTO: + return "Protocol error"; +#endif + +#if GNULIB_defined_EMULTIHOP + case EMULTIHOP: + return "Multihop attempted"; +#endif + +#if GNULIB_defined_EBADMSG + case EBADMSG: + return "Bad message"; +#endif + +#if GNULIB_defined_EOVERFLOW + case EOVERFLOW: + return "Value too large for defined data type"; +#endif + +#if GNULIB_defined_ENOTSUP + case ENOTSUP: + return "Not supported"; +#endif + +#if GNULIB_defined_ENETRESET + case ENETRESET: + return "Network dropped connection on reset"; +#endif + +#if GNULIB_defined_ECONNABORTED + case ECONNABORTED: + return "Software caused connection abort"; +#endif + +#if GNULIB_defined_ESTALE + case ESTALE: + return "Stale NFS file handle"; +#endif + +#if GNULIB_defined_EDQUOT + case EDQUOT: + return "Disk quota exceeded"; +#endif + +#if GNULIB_defined_ECANCELED + case ECANCELED: + return "Operation canceled"; +#endif + + default: + return NULL; + } +} diff --git a/gnulib/lib/strerror-override.h b/gnulib/lib/strerror-override.h new file mode 100644 index 0000000..09526ea --- /dev/null +++ b/gnulib/lib/strerror-override.h @@ -0,0 +1,52 @@ +/* strerror-override.h --- POSIX compatible system error routine + + Copyright (C) 2010-2012 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 <http://www.gnu.org/licenses/>. */ + +#ifndef _GL_STRERROR_OVERRIDE_H +# define _GL_STRERROR_OVERRIDE_H + +# include <errno.h> +# include <stddef.h> + +/* Reasonable buffer size that should never trigger ERANGE; if this + proves too small, we intentionally abort(), to remind us to fix + this value. */ +# define STACKBUF_LEN 256 + +/* If ERRNUM maps to an errno value defined by gnulib, return a string + describing the error. Otherwise return NULL. */ +# if REPLACE_STRERROR_0 \ + || GNULIB_defined_ESOCK \ + || GNULIB_defined_EWINSOCK \ + || GNULIB_defined_ENOMSG \ + || GNULIB_defined_EIDRM \ + || GNULIB_defined_ENOLINK \ + || GNULIB_defined_EPROTO \ + || GNULIB_defined_EMULTIHOP \ + || GNULIB_defined_EBADMSG \ + || GNULIB_defined_EOVERFLOW \ + || GNULIB_defined_ENOTSUP \ + || GNULIB_defined_ENETRESET \ + || GNULIB_defined_ECONNABORTED \ + || GNULIB_defined_ESTALE \ + || GNULIB_defined_EDQUOT \ + || GNULIB_defined_ECANCELED +extern const char *strerror_override (int errnum); +# else +# define strerror_override(ignored) NULL +# endif + +#endif /* _GL_STRERROR_OVERRIDE_H */ diff --git a/gnulib/lib/strerror.c b/gnulib/lib/strerror.c new file mode 100644 index 0000000..587bd21 --- /dev/null +++ b/gnulib/lib/strerror.c @@ -0,0 +1,70 @@ +/* strerror.c --- POSIX compatible system error routine + + Copyright (C) 2007-2012 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 <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <string.h> + +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "intprops.h" +#include "strerror-override.h" +#include "verify.h" + +/* Use the system functions, not the gnulib overrides in this file. */ +#undef sprintf + +char * +strerror (int n) +#undef strerror +{ + static char buf[STACKBUF_LEN]; + size_t len; + + /* Cast away const, due to the historical signature of strerror; + callers should not be modifying the string. */ + const char *msg = strerror_override (n); + if (msg) + return (char *) msg; + + msg = strerror (n); + + /* Our strerror_r implementation might use the system's strerror + buffer, so all other clients of strerror have to see the error + copied into a buffer that we manage. This is not thread-safe, + even if the system strerror is, but portable programs shouldn't + be using strerror if they care about thread-safety. */ + if (!msg || !*msg) + { + static char const fmt[] = "Unknown error %d"; + verify (sizeof buf >= sizeof (fmt) + INT_STRLEN_BOUND (n)); + sprintf (buf, fmt, n); + errno = EINVAL; + return buf; + } + + /* Fix STACKBUF_LEN if this ever aborts. */ + len = strlen (msg); + if (sizeof buf <= len) + abort (); + + return memcpy (buf, msg, len + 1); +} diff --git a/gnulib/lib/string.in.h b/gnulib/lib/string.in.h new file mode 100644 index 0000000..cad18db --- /dev/null +++ b/gnulib/lib/string.in.h @@ -0,0 +1,1010 @@ +/* A GNU-like <string.h>. + + Copyright (C) 1995-1996, 2001-2012 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, see <http://www.gnu.org/licenses/>. */ + +#ifndef _@GUARD_PREFIX@_STRING_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_STRING_H@ + +#ifndef _@GUARD_PREFIX@_STRING_H +#define _@GUARD_PREFIX@_STRING_H + +/* NetBSD 5.0 mis-defines NULL. */ +#include <stddef.h> + +/* MirBSD defines mbslen as a macro. */ +#if @GNULIB_MBSLEN@ && defined __MirBSD__ +# include <wchar.h> +#endif + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The attribute __pure__ was added in gcc 2.96. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +#else +# define _GL_ATTRIBUTE_PURE /* empty */ +#endif + +/* NetBSD 5.0 declares strsignal in <unistd.h>, not in <string.h>. */ +/* But in any case avoid namespace pollution on glibc systems. */ +#if (@GNULIB_STRSIGNAL@ || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \ + && ! defined __GLIBC__ +# include <unistd.h> +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + + +/* Find the index of the least-significant set bit. */ +#if @GNULIB_FFSL@ +# if !@HAVE_FFSL@ +_GL_FUNCDECL_SYS (ffsl, int, (long int i)); +# endif +_GL_CXXALIAS_SYS (ffsl, int, (long int i)); +_GL_CXXALIASWARN (ffsl); +#elif defined GNULIB_POSIXCHECK +# undef ffsl +# if HAVE_RAW_DECL_FFSL +_GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module"); +# endif +#endif + + +/* Find the index of the least-significant set bit. */ +#if @GNULIB_FFSLL@ +# if !@HAVE_FFSLL@ +_GL_FUNCDECL_SYS (ffsll, int, (long long int i)); +# endif +_GL_CXXALIAS_SYS (ffsll, int, (long long int i)); +_GL_CXXALIASWARN (ffsll); +#elif defined GNULIB_POSIXCHECK +# undef ffsll +# if HAVE_RAW_DECL_FFSLL +_GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module"); +# endif +#endif + + +/* Return the first instance of C within N bytes of S, or NULL. */ +#if @GNULIB_MEMCHR@ +# if @REPLACE_MEMCHR@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define memchr rpl_memchr +# endif +_GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n)); +# else +# if ! @HAVE_MEMCHR@ +_GL_FUNCDECL_SYS (memchr, void *, (void const *__s, int __c, size_t __n) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C" { const void * std::memchr (const void *, int, size_t); } + extern "C++" { void * std::memchr (void *, int, size_t); } */ +_GL_CXXALIAS_SYS_CAST2 (memchr, + void *, (void const *__s, int __c, size_t __n), + void const *, (void const *__s, int __c, size_t __n)); +# endif +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n)); +_GL_CXXALIASWARN1 (memchr, void const *, + (void const *__s, int __c, size_t __n)); +# else +_GL_CXXALIASWARN (memchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef memchr +/* Assume memchr is always declared. */ +_GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - " + "use gnulib module memchr for portability" ); +#endif + +/* Return the first occurrence of NEEDLE in HAYSTACK. */ +#if @GNULIB_MEMMEM@ +# if @REPLACE_MEMMEM@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define memmem rpl_memmem +# endif +_GL_FUNCDECL_RPL (memmem, void *, + (void const *__haystack, size_t __haystack_len, + void const *__needle, size_t __needle_len) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 3))); +_GL_CXXALIAS_RPL (memmem, void *, + (void const *__haystack, size_t __haystack_len, + void const *__needle, size_t __needle_len)); +# else +# if ! @HAVE_DECL_MEMMEM@ +_GL_FUNCDECL_SYS (memmem, void *, + (void const *__haystack, size_t __haystack_len, + void const *__needle, size_t __needle_len) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 3))); +# endif +_GL_CXXALIAS_SYS (memmem, void *, + (void const *__haystack, size_t __haystack_len, + void const *__needle, size_t __needle_len)); +# endif +_GL_CXXALIASWARN (memmem); +#elif defined GNULIB_POSIXCHECK +# undef memmem +# if HAVE_RAW_DECL_MEMMEM +_GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - " + "use gnulib module memmem-simple for portability, " + "and module memmem for speed" ); +# endif +#endif + +/* Copy N bytes of SRC to DEST, return pointer to bytes after the + last written byte. */ +#if @GNULIB_MEMPCPY@ +# if ! @HAVE_MEMPCPY@ +_GL_FUNCDECL_SYS (mempcpy, void *, + (void *restrict __dest, void const *restrict __src, + size_t __n) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (mempcpy, void *, + (void *restrict __dest, void const *restrict __src, + size_t __n)); +_GL_CXXALIASWARN (mempcpy); +#elif defined GNULIB_POSIXCHECK +# undef mempcpy +# if HAVE_RAW_DECL_MEMPCPY +_GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - " + "use gnulib module mempcpy for portability"); +# endif +#endif + +/* Search backwards through a block for a byte (specified as an int). */ +#if @GNULIB_MEMRCHR@ +# if ! @HAVE_DECL_MEMRCHR@ +_GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const void * std::memrchr (const void *, int, size_t); } + extern "C++" { void * std::memrchr (void *, int, size_t); } */ +_GL_CXXALIAS_SYS_CAST2 (memrchr, + void *, (void const *, int, size_t), + void const *, (void const *, int, size_t)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t)); +_GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t)); +# else +_GL_CXXALIASWARN (memrchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef memrchr +# if HAVE_RAW_DECL_MEMRCHR +_GL_WARN_ON_USE (memrchr, "memrchr is unportable - " + "use gnulib module memrchr for portability"); +# endif +#endif + +/* Find the first occurrence of C in S. More efficient than + memchr(S,C,N), at the expense of undefined behavior if C does not + occur within N bytes. */ +#if @GNULIB_RAWMEMCHR@ +# if ! @HAVE_RAWMEMCHR@ +_GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const void * std::rawmemchr (const void *, int); } + extern "C++" { void * std::rawmemchr (void *, int); } */ +_GL_CXXALIAS_SYS_CAST2 (rawmemchr, + void *, (void const *__s, int __c_in), + void const *, (void const *__s, int __c_in)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in)); +_GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in)); +# else +_GL_CXXALIASWARN (rawmemchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef rawmemchr +# if HAVE_RAW_DECL_RAWMEMCHR +_GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - " + "use gnulib module rawmemchr for portability"); +# endif +#endif + +/* Copy SRC to DST, returning the address of the terminating '\0' in DST. */ +#if @GNULIB_STPCPY@ +# if ! @HAVE_STPCPY@ +_GL_FUNCDECL_SYS (stpcpy, char *, + (char *restrict __dst, char const *restrict __src) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (stpcpy, char *, + (char *restrict __dst, char const *restrict __src)); +_GL_CXXALIASWARN (stpcpy); +#elif defined GNULIB_POSIXCHECK +# undef stpcpy +# if HAVE_RAW_DECL_STPCPY +_GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - " + "use gnulib module stpcpy for portability"); +# endif +#endif + +/* Copy no more than N bytes of SRC to DST, returning a pointer past the + last non-NUL byte written into DST. */ +#if @GNULIB_STPNCPY@ +# if @REPLACE_STPNCPY@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef stpncpy +# define stpncpy rpl_stpncpy +# endif +_GL_FUNCDECL_RPL (stpncpy, char *, + (char *restrict __dst, char const *restrict __src, + size_t __n) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (stpncpy, char *, + (char *restrict __dst, char const *restrict __src, + size_t __n)); +# else +# if ! @HAVE_STPNCPY@ +_GL_FUNCDECL_SYS (stpncpy, char *, + (char *restrict __dst, char const *restrict __src, + size_t __n) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (stpncpy, char *, + (char *restrict __dst, char const *restrict __src, + size_t __n)); +# endif +_GL_CXXALIASWARN (stpncpy); +#elif defined GNULIB_POSIXCHECK +# undef stpncpy +# if HAVE_RAW_DECL_STPNCPY +_GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - " + "use gnulib module stpncpy for portability"); +# endif +#endif + +#if defined GNULIB_POSIXCHECK +/* strchr() does not work with multibyte strings if the locale encoding is + GB18030 and the character to be searched is a digit. */ +# undef strchr +/* Assume strchr is always declared. */ +_GL_WARN_ON_USE (strchr, "strchr cannot work correctly on character strings " + "in some multibyte locales - " + "use mbschr if you care about internationalization"); +#endif + +/* Find the first occurrence of C in S or the final NUL byte. */ +#if @GNULIB_STRCHRNUL@ +# if @REPLACE_STRCHRNUL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strchrnul rpl_strchrnul +# endif +_GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strchrnul, char *, + (const char *str, int ch)); +# else +# if ! @HAVE_STRCHRNUL@ +_GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const char * std::strchrnul (const char *, int); } + extern "C++" { char * std::strchrnul (char *, int); } */ +_GL_CXXALIAS_SYS_CAST2 (strchrnul, + char *, (char const *__s, int __c_in), + char const *, (char const *__s, int __c_in)); +# endif +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in)); +_GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in)); +# else +_GL_CXXALIASWARN (strchrnul); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strchrnul +# if HAVE_RAW_DECL_STRCHRNUL +_GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - " + "use gnulib module strchrnul for portability"); +# endif +#endif + +/* Duplicate S, returning an identical malloc'd string. */ +#if @GNULIB_STRDUP@ +# if @REPLACE_STRDUP@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strdup +# define strdup rpl_strdup +# endif +_GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strdup, char *, (char const *__s)); +# else +# if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup + /* strdup exists as a function and as a macro. Get rid of the macro. */ +# undef strdup +# endif +# if !(@HAVE_DECL_STRDUP@ || defined strdup) +_GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strdup, char *, (char const *__s)); +# endif +_GL_CXXALIASWARN (strdup); +#elif defined GNULIB_POSIXCHECK +# undef strdup +# if HAVE_RAW_DECL_STRDUP +_GL_WARN_ON_USE (strdup, "strdup is unportable - " + "use gnulib module strdup for portability"); +# endif +#endif + +/* Append no more than N characters from SRC onto DEST. */ +#if @GNULIB_STRNCAT@ +# if @REPLACE_STRNCAT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strncat +# define strncat rpl_strncat +# endif +_GL_FUNCDECL_RPL (strncat, char *, (char *dest, const char *src, size_t n) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (strncat, char *, (char *dest, const char *src, size_t n)); +# else +_GL_CXXALIAS_SYS (strncat, char *, (char *dest, const char *src, size_t n)); +# endif +_GL_CXXALIASWARN (strncat); +#elif defined GNULIB_POSIXCHECK +# undef strncat +# if HAVE_RAW_DECL_STRNCAT +_GL_WARN_ON_USE (strncat, "strncat is unportable - " + "use gnulib module strncat for portability"); +# endif +#endif + +/* Return a newly allocated copy of at most N bytes of STRING. */ +#if @GNULIB_STRNDUP@ +# if @REPLACE_STRNDUP@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strndup +# define strndup rpl_strndup +# endif +_GL_FUNCDECL_RPL (strndup, char *, (char const *__string, size_t __n) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strndup, char *, (char const *__string, size_t __n)); +# else +# if ! @HAVE_DECL_STRNDUP@ +_GL_FUNCDECL_SYS (strndup, char *, (char const *__string, size_t __n) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strndup, char *, (char const *__string, size_t __n)); +# endif +_GL_CXXALIASWARN (strndup); +#elif defined GNULIB_POSIXCHECK +# undef strndup +# if HAVE_RAW_DECL_STRNDUP +_GL_WARN_ON_USE (strndup, "strndup is unportable - " + "use gnulib module strndup for portability"); +# endif +#endif + +/* Find the length (number of bytes) of STRING, but scan at most + MAXLEN bytes. If no '\0' terminator is found in that many bytes, + return MAXLEN. */ +#if @GNULIB_STRNLEN@ +# if @REPLACE_STRNLEN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strnlen +# define strnlen rpl_strnlen +# endif +_GL_FUNCDECL_RPL (strnlen, size_t, (char const *__string, size_t __maxlen) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strnlen, size_t, (char const *__string, size_t __maxlen)); +# else +# if ! @HAVE_DECL_STRNLEN@ +_GL_FUNCDECL_SYS (strnlen, size_t, (char const *__string, size_t __maxlen) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strnlen, size_t, (char const *__string, size_t __maxlen)); +# endif +_GL_CXXALIASWARN (strnlen); +#elif defined GNULIB_POSIXCHECK +# undef strnlen +# if HAVE_RAW_DECL_STRNLEN +_GL_WARN_ON_USE (strnlen, "strnlen is unportable - " + "use gnulib module strnlen for portability"); +# endif +#endif + +#if defined GNULIB_POSIXCHECK +/* strcspn() assumes the second argument is a list of single-byte characters. + Even in this simple case, it does not work with multibyte strings if the + locale encoding is GB18030 and one of the characters to be searched is a + digit. */ +# undef strcspn +/* Assume strcspn is always declared. */ +_GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings " + "in multibyte locales - " + "use mbscspn if you care about internationalization"); +#endif + +/* Find the first occurrence in S of any character in ACCEPT. */ +#if @GNULIB_STRPBRK@ +# if ! @HAVE_STRPBRK@ +_GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C" { const char * strpbrk (const char *, const char *); } + extern "C++" { char * strpbrk (char *, const char *); } */ +_GL_CXXALIAS_SYS_CAST2 (strpbrk, + char *, (char const *__s, char const *__accept), + const char *, (char const *__s, char const *__accept)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept)); +_GL_CXXALIASWARN1 (strpbrk, char const *, + (char const *__s, char const *__accept)); +# else +_GL_CXXALIASWARN (strpbrk); +# endif +# if defined GNULIB_POSIXCHECK +/* strpbrk() assumes the second argument is a list of single-byte characters. + Even in this simple case, it does not work with multibyte strings if the + locale encoding is GB18030 and one of the characters to be searched is a + digit. */ +# undef strpbrk +_GL_WARN_ON_USE (strpbrk, "strpbrk cannot work correctly on character strings " + "in multibyte locales - " + "use mbspbrk if you care about internationalization"); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strpbrk +# if HAVE_RAW_DECL_STRPBRK +_GL_WARN_ON_USE (strpbrk, "strpbrk is unportable - " + "use gnulib module strpbrk for portability"); +# endif +#endif + +#if defined GNULIB_POSIXCHECK +/* strspn() assumes the second argument is a list of single-byte characters. + Even in this simple case, it cannot work with multibyte strings. */ +# undef strspn +/* Assume strspn is always declared. */ +_GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings " + "in multibyte locales - " + "use mbsspn if you care about internationalization"); +#endif + +#if defined GNULIB_POSIXCHECK +/* strrchr() does not work with multibyte strings if the locale encoding is + GB18030 and the character to be searched is a digit. */ +# undef strrchr +/* Assume strrchr is always declared. */ +_GL_WARN_ON_USE (strrchr, "strrchr cannot work correctly on character strings " + "in some multibyte locales - " + "use mbsrchr if you care about internationalization"); +#endif + +/* Search the next delimiter (char listed in DELIM) starting at *STRINGP. + If one is found, overwrite it with a NUL, and advance *STRINGP + to point to the next char after it. Otherwise, set *STRINGP to NULL. + If *STRINGP was already NULL, nothing happens. + Return the old value of *STRINGP. + + This is a variant of strtok() that is multithread-safe and supports + empty fields. + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + Caveat: It doesn't work with multibyte strings unless all of the delimiter + characters are ASCII characters < 0x30. + + See also strtok_r(). */ +#if @GNULIB_STRSEP@ +# if ! @HAVE_STRSEP@ +_GL_FUNCDECL_SYS (strsep, char *, + (char **restrict __stringp, char const *restrict __delim) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (strsep, char *, + (char **restrict __stringp, char const *restrict __delim)); +_GL_CXXALIASWARN (strsep); +# if defined GNULIB_POSIXCHECK +# undef strsep +_GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings " + "in multibyte locales - " + "use mbssep if you care about internationalization"); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strsep +# if HAVE_RAW_DECL_STRSEP +_GL_WARN_ON_USE (strsep, "strsep is unportable - " + "use gnulib module strsep for portability"); +# endif +#endif + +#if @GNULIB_STRSTR@ +# if @REPLACE_STRSTR@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strstr rpl_strstr +# endif +_GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle)); +# else + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const char * strstr (const char *, const char *); } + extern "C++" { char * strstr (char *, const char *); } */ +_GL_CXXALIAS_SYS_CAST2 (strstr, + char *, (const char *haystack, const char *needle), + const char *, (const char *haystack, const char *needle)); +# endif +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle)); +_GL_CXXALIASWARN1 (strstr, const char *, + (const char *haystack, const char *needle)); +# else +_GL_CXXALIASWARN (strstr); +# endif +#elif defined GNULIB_POSIXCHECK +/* strstr() does not work with multibyte strings if the locale encoding is + different from UTF-8: + POSIX says that it operates on "strings", and "string" in POSIX is defined + as a sequence of bytes, not of characters. */ +# undef strstr +/* Assume strstr is always declared. */ +_GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot " + "work correctly on character strings in most " + "multibyte locales - " + "use mbsstr if you care about internationalization, " + "or use strstr if you care about speed"); +#endif + +/* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive + comparison. */ +#if @GNULIB_STRCASESTR@ +# if @REPLACE_STRCASESTR@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strcasestr rpl_strcasestr +# endif +_GL_FUNCDECL_RPL (strcasestr, char *, + (const char *haystack, const char *needle) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (strcasestr, char *, + (const char *haystack, const char *needle)); +# else +# if ! @HAVE_STRCASESTR@ +_GL_FUNCDECL_SYS (strcasestr, char *, + (const char *haystack, const char *needle) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const char * strcasestr (const char *, const char *); } + extern "C++" { char * strcasestr (char *, const char *); } */ +_GL_CXXALIAS_SYS_CAST2 (strcasestr, + char *, (const char *haystack, const char *needle), + const char *, (const char *haystack, const char *needle)); +# endif +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle)); +_GL_CXXALIASWARN1 (strcasestr, const char *, + (const char *haystack, const char *needle)); +# else +_GL_CXXALIASWARN (strcasestr); +# endif +#elif defined GNULIB_POSIXCHECK +/* strcasestr() does not work with multibyte strings: + It is a glibc extension, and glibc implements it only for unibyte + locales. */ +# undef strcasestr +# if HAVE_RAW_DECL_STRCASESTR +_GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character " + "strings in multibyte locales - " + "use mbscasestr if you care about " + "internationalization, or use c-strcasestr if you want " + "a locale independent function"); +# endif +#endif + +/* Parse S into tokens separated by characters in DELIM. + If S is NULL, the saved pointer in SAVE_PTR is used as + the next starting point. For example: + char s[] = "-abc-=-def"; + char *sp; + x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" + x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL + x = strtok_r(NULL, "=", &sp); // x = NULL + // s = "abc\0-def\0" + + This is a variant of strtok() that is multithread-safe. + + For the POSIX documentation for this function, see: + http://www.opengroup.org/susv3xsh/strtok.html + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + Caveat: It doesn't work with multibyte strings unless all of the delimiter + characters are ASCII characters < 0x30. + + See also strsep(). */ +#if @GNULIB_STRTOK_R@ +# if @REPLACE_STRTOK_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strtok_r +# define strtok_r rpl_strtok_r +# endif +_GL_FUNCDECL_RPL (strtok_r, char *, + (char *restrict s, char const *restrict delim, + char **restrict save_ptr) + _GL_ARG_NONNULL ((2, 3))); +_GL_CXXALIAS_RPL (strtok_r, char *, + (char *restrict s, char const *restrict delim, + char **restrict save_ptr)); +# else +# if @UNDEFINE_STRTOK_R@ || defined GNULIB_POSIXCHECK +# undef strtok_r +# endif +# if ! @HAVE_DECL_STRTOK_R@ +_GL_FUNCDECL_SYS (strtok_r, char *, + (char *restrict s, char const *restrict delim, + char **restrict save_ptr) + _GL_ARG_NONNULL ((2, 3))); +# endif +_GL_CXXALIAS_SYS (strtok_r, char *, + (char *restrict s, char const *restrict delim, + char **restrict save_ptr)); +# endif +_GL_CXXALIASWARN (strtok_r); +# if defined GNULIB_POSIXCHECK +_GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character " + "strings in multibyte locales - " + "use mbstok_r if you care about internationalization"); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strtok_r +# if HAVE_RAW_DECL_STRTOK_R +_GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - " + "use gnulib module strtok_r for portability"); +# endif +#endif + + +/* The following functions are not specified by POSIX. They are gnulib + extensions. */ + +#if @GNULIB_MBSLEN@ +/* Return the number of multibyte characters in the character string STRING. + This considers multibyte characters, unlike strlen, which counts bytes. */ +# ifdef __MirBSD__ /* MirBSD defines mbslen as a macro. Override it. */ +# undef mbslen +# endif +# if @HAVE_MBSLEN@ /* AIX, OSF/1, MirBSD define mbslen already in libc. */ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mbslen rpl_mbslen +# endif +_GL_FUNCDECL_RPL (mbslen, size_t, (const char *string) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mbslen, size_t, (const char *string)); +# else +_GL_FUNCDECL_SYS (mbslen, size_t, (const char *string) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_SYS (mbslen, size_t, (const char *string)); +# endif +_GL_CXXALIASWARN (mbslen); +#endif + +#if @GNULIB_MBSNLEN@ +/* Return the number of multibyte characters in the character string starting + at STRING and ending at STRING + LEN. */ +_GL_EXTERN_C size_t mbsnlen (const char *string, size_t len) + _GL_ARG_NONNULL ((1)); +#endif + +#if @GNULIB_MBSCHR@ +/* Locate the first single-byte character C in the character string STRING, + and return a pointer to it. Return NULL if C is not found in STRING. + Unlike strchr(), this function works correctly in multibyte locales with + encodings such as GB18030. */ +# if defined __hpux +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mbschr rpl_mbschr /* avoid collision with HP-UX function */ +# endif +_GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c)); +# else +_GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c)); +# endif +_GL_CXXALIASWARN (mbschr); +#endif + +#if @GNULIB_MBSRCHR@ +/* Locate the last single-byte character C in the character string STRING, + and return a pointer to it. Return NULL if C is not found in STRING. + Unlike strrchr(), this function works correctly in multibyte locales with + encodings such as GB18030. */ +# if defined __hpux || defined __INTERIX +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mbsrchr rpl_mbsrchr /* avoid collision with system function */ +# endif +_GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c)); +# else +_GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c)); +# endif +_GL_CXXALIASWARN (mbsrchr); +#endif + +#if @GNULIB_MBSSTR@ +/* Find the first occurrence of the character string NEEDLE in the character + string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. + Unlike strstr(), this function works correctly in multibyte locales with + encodings different from UTF-8. */ +_GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle) + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if @GNULIB_MBSCASECMP@ +/* Compare the character strings S1 and S2, ignoring case, returning less than, + equal to or greater than zero if S1 is lexicographically less than, equal to + or greater than S2. + Note: This function may, in multibyte locales, return 0 for strings of + different lengths! + Unlike strcasecmp(), this function works correctly in multibyte locales. */ +_GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2) + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if @GNULIB_MBSNCASECMP@ +/* Compare the initial segment of the character string S1 consisting of at most + N characters with the initial segment of the character string S2 consisting + of at most N characters, ignoring case, returning less than, equal to or + greater than zero if the initial segment of S1 is lexicographically less + than, equal to or greater than the initial segment of S2. + Note: This function may, in multibyte locales, return 0 for initial segments + of different lengths! + Unlike strncasecmp(), this function works correctly in multibyte locales. + But beware that N is not a byte count but a character count! */ +_GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n) + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if @GNULIB_MBSPCASECMP@ +/* Compare the initial segment of the character string STRING consisting of + at most mbslen (PREFIX) characters with the character string PREFIX, + ignoring case. If the two match, return a pointer to the first byte + after this prefix in STRING. Otherwise, return NULL. + Note: This function may, in multibyte locales, return non-NULL if STRING + is of smaller length than PREFIX! + Unlike strncasecmp(), this function works correctly in multibyte + locales. */ +_GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix) + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if @GNULIB_MBSCASESTR@ +/* Find the first occurrence of the character string NEEDLE in the character + string HAYSTACK, using case-insensitive comparison. + Note: This function may, in multibyte locales, return success even if + strlen (haystack) < strlen (needle) ! + Unlike strcasestr(), this function works correctly in multibyte locales. */ +_GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle) + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if @GNULIB_MBSCSPN@ +/* Find the first occurrence in the character string STRING of any character + in the character string ACCEPT. Return the number of bytes from the + beginning of the string to this occurrence, or to the end of the string + if none exists. + Unlike strcspn(), this function works correctly in multibyte locales. */ +_GL_EXTERN_C size_t mbscspn (const char *string, const char *accept) + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if @GNULIB_MBSPBRK@ +/* Find the first occurrence in the character string STRING of any character + in the character string ACCEPT. Return the pointer to it, or NULL if none + exists. + Unlike strpbrk(), this function works correctly in multibyte locales. */ +# if defined __hpux +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */ +# endif +_GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept)); +# else +_GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept)); +# endif +_GL_CXXALIASWARN (mbspbrk); +#endif + +#if @GNULIB_MBSSPN@ +/* Find the first occurrence in the character string STRING of any character + not in the character string REJECT. Return the number of bytes from the + beginning of the string to this occurrence, or to the end of the string + if none exists. + Unlike strspn(), this function works correctly in multibyte locales. */ +_GL_EXTERN_C size_t mbsspn (const char *string, const char *reject) + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if @GNULIB_MBSSEP@ +/* Search the next delimiter (multibyte character listed in the character + string DELIM) starting at the character string *STRINGP. + If one is found, overwrite it with a NUL, and advance *STRINGP to point + to the next multibyte character after it. Otherwise, set *STRINGP to NULL. + If *STRINGP was already NULL, nothing happens. + Return the old value of *STRINGP. + + This is a variant of mbstok_r() that supports empty fields. + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + + See also mbstok_r(). */ +_GL_EXTERN_C char * mbssep (char **stringp, const char *delim) + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if @GNULIB_MBSTOK_R@ +/* Parse the character string STRING into tokens separated by characters in + the character string DELIM. + If STRING is NULL, the saved pointer in SAVE_PTR is used as + the next starting point. For example: + char s[] = "-abc-=-def"; + char *sp; + x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def" + x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL + x = mbstok_r(NULL, "=", &sp); // x = NULL + // s = "abc\0-def\0" + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + + See also mbssep(). */ +_GL_EXTERN_C char * mbstok_r (char *string, const char *delim, char **save_ptr) + _GL_ARG_NONNULL ((2, 3)); +#endif + +/* Map any int, typically from errno, into an error message. */ +#if @GNULIB_STRERROR@ +# if @REPLACE_STRERROR@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strerror +# define strerror rpl_strerror +# endif +_GL_FUNCDECL_RPL (strerror, char *, (int)); +_GL_CXXALIAS_RPL (strerror, char *, (int)); +# else +_GL_CXXALIAS_SYS (strerror, char *, (int)); +# endif +_GL_CXXALIASWARN (strerror); +#elif defined GNULIB_POSIXCHECK +# undef strerror +/* Assume strerror is always declared. */ +_GL_WARN_ON_USE (strerror, "strerror is unportable - " + "use gnulib module strerror to guarantee non-NULL result"); +#endif + +/* Map any int, typically from errno, into an error message. Multithread-safe. + Uses the POSIX declaration, not the glibc declaration. */ +#if @GNULIB_STRERROR_R@ +# if @REPLACE_STRERROR_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strerror_r +# define strerror_r rpl_strerror_r +# endif +_GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)); +# else +# if !@HAVE_DECL_STRERROR_R@ +_GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)); +# endif +# if @HAVE_DECL_STRERROR_R@ +_GL_CXXALIASWARN (strerror_r); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strerror_r +# if HAVE_RAW_DECL_STRERROR_R +_GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - " + "use gnulib module strerror_r-posix for portability"); +# endif +#endif + +#if @GNULIB_STRSIGNAL@ +# if @REPLACE_STRSIGNAL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strsignal rpl_strsignal +# endif +_GL_FUNCDECL_RPL (strsignal, char *, (int __sig)); +_GL_CXXALIAS_RPL (strsignal, char *, (int __sig)); +# else +# if ! @HAVE_DECL_STRSIGNAL@ +_GL_FUNCDECL_SYS (strsignal, char *, (int __sig)); +# endif +/* Need to cast, because on Cygwin 1.5.x systems, the return type is + 'const char *'. */ +_GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig)); +# endif +_GL_CXXALIASWARN (strsignal); +#elif defined GNULIB_POSIXCHECK +# undef strsignal +# if HAVE_RAW_DECL_STRSIGNAL +_GL_WARN_ON_USE (strsignal, "strsignal is unportable - " + "use gnulib module strsignal for portability"); +# endif +#endif + +#if @GNULIB_STRVERSCMP@ +# if !@HAVE_STRVERSCMP@ +_GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *)); +_GL_CXXALIASWARN (strverscmp); +#elif defined GNULIB_POSIXCHECK +# undef strverscmp +# if HAVE_RAW_DECL_STRVERSCMP +_GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - " + "use gnulib module strverscmp for portability"); +# endif +#endif + + +#endif /* _@GUARD_PREFIX@_STRING_H */ +#endif /* _@GUARD_PREFIX@_STRING_H */ diff --git a/gnulib/lib/strings.in.h b/gnulib/lib/strings.in.h new file mode 100644 index 0000000..7ed88e9 --- /dev/null +++ b/gnulib/lib/strings.in.h @@ -0,0 +1,122 @@ +/* A substitute <strings.h>. + + Copyright (C) 2007-2012 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, see <http://www.gnu.org/licenses/>. */ + +#ifndef _@GUARD_PREFIX@_STRINGS_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* Minix 3.1.8 has a bug: <sys/types.h> must be included before <strings.h>. + But avoid namespace pollution on glibc systems. */ +#if defined __minix && !defined __GLIBC__ +# include <sys/types.h> +#endif + +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_STRINGS_H@ +# @INCLUDE_NEXT@ @NEXT_STRINGS_H@ +#endif + +#ifndef _@GUARD_PREFIX@_STRINGS_H +#define _@GUARD_PREFIX@_STRINGS_H + +#if ! @HAVE_DECL_STRNCASECMP@ +/* Get size_t. */ +# include <stddef.h> +#endif + + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + +#ifdef __cplusplus +extern "C" { +#endif + + + /* Find the index of the least-significant set bit. */ +#if @GNULIB_FFS@ +# if !@HAVE_FFS@ +_GL_FUNCDECL_SYS (ffs, int, (int i)); +# endif +_GL_CXXALIAS_SYS (ffs, int, (int i)); +_GL_CXXALIASWARN (ffs); +#elif defined GNULIB_POSIXCHECK +# undef ffs +# if HAVE_RAW_DECL_FFS +_GL_WARN_ON_USE (ffs, "ffs is not portable - use the ffs module"); +# endif +#endif + +/* Compare strings S1 and S2, ignoring case, returning less than, equal to or + greater than zero if S1 is lexicographically less than, equal to or greater + than S2. + Note: This function does not work in multibyte locales. */ +#if ! @HAVE_STRCASECMP@ +extern int strcasecmp (char const *s1, char const *s2) + _GL_ARG_NONNULL ((1, 2)); +#endif +#if defined GNULIB_POSIXCHECK +/* strcasecmp() does not work with multibyte strings: + POSIX says that it operates on "strings", and "string" in POSIX is defined + as a sequence of bytes, not of characters. */ +# undef strcasecmp +# if HAVE_RAW_DECL_STRCASECMP +_GL_WARN_ON_USE (strcasecmp, "strcasecmp cannot work correctly on character " + "strings in multibyte locales - " + "use mbscasecmp if you care about " + "internationalization, or use c_strcasecmp , " + "gnulib module c-strcase) if you want a locale " + "independent function"); +# endif +#endif + +/* Compare no more than N bytes of strings S1 and S2, ignoring case, + returning less than, equal to or greater than zero if S1 is + lexicographically less than, equal to or greater than S2. + Note: This function cannot work correctly in multibyte locales. */ +#if ! @HAVE_DECL_STRNCASECMP@ +extern int strncasecmp (char const *s1, char const *s2, size_t n) + _GL_ARG_NONNULL ((1, 2)); +#endif +#if defined GNULIB_POSIXCHECK +/* strncasecmp() does not work with multibyte strings: + POSIX says that it operates on "strings", and "string" in POSIX is defined + as a sequence of bytes, not of characters. */ +# undef strncasecmp +# if HAVE_RAW_DECL_STRNCASECMP +_GL_WARN_ON_USE (strncasecmp, "strncasecmp cannot work correctly on character " + "strings in multibyte locales - " + "use mbsncasecmp or mbspcasecmp if you care about " + "internationalization, or use c_strncasecmp , " + "gnulib module c-strcase) if you want a locale " + "independent function"); +# endif +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _@GUARD_PREFIX@_STRING_H */ +#endif /* _@GUARD_PREFIX@_STRING_H */ diff --git a/gnulib/lib/stripslash.c b/gnulib/lib/stripslash.c new file mode 100644 index 0000000..ef458c6 --- /dev/null +++ b/gnulib/lib/stripslash.c @@ -0,0 +1,45 @@ +/* stripslash.c -- remove redundant trailing slashes from a file name + + Copyright (C) 1990, 2001, 2003-2006, 2009-2012 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 <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include "dirname.h" + +/* Remove trailing slashes from FILE. Return true if a trailing slash + was removed. This is useful when using file name completion from a + shell that adds a "/" after directory names (such as tcsh and + bash), because on symlinks to directories, several system calls + have different semantics according to whether a trailing slash is + present. */ + +bool +strip_trailing_slashes (char *file) +{ + char *base = last_component (file); + char *base_lim; + bool had_slash; + + /* last_component returns "" for file system roots, but we need to turn + "///" into "/". */ + if (! *base) + base = file; + base_lim = base + base_len (base); + had_slash = (*base_lim != '\0'); + *base_lim = '\0'; + return had_slash; +} diff --git a/gnulib/lib/strncasecmp.c b/gnulib/lib/strncasecmp.c new file mode 100644 index 0000000..bf413b4 --- /dev/null +++ b/gnulib/lib/strncasecmp.c @@ -0,0 +1,62 @@ +/* strncasecmp.c -- case insensitive string comparator + Copyright (C) 1998-1999, 2005-2007, 2009-2012 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, see <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <string.h> + +#include <ctype.h> +#include <limits.h> + +#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) + +/* Compare no more than N bytes of strings S1 and S2, ignoring case, + returning less than, equal to or greater than zero if S1 is + lexicographically less than, equal to or greater than S2. + Note: This function cannot work correctly in multibyte locales. */ + +int +strncasecmp (const char *s1, const char *s2, size_t n) +{ + register const unsigned char *p1 = (const unsigned char *) s1; + register const unsigned char *p2 = (const unsigned char *) s2; + unsigned char c1, c2; + + if (p1 == p2 || n == 0) + return 0; + + do + { + c1 = TOLOWER (*p1); + c2 = TOLOWER (*p2); + + if (--n == 0 || c1 == '\0') + break; + + ++p1; + ++p2; + } + while (c1 == c2); + + if (UCHAR_MAX <= INT_MAX) + return c1 - c2; + else + /* On machines where 'char' and 'int' are types of the same size, the + difference of two 'unsigned char' values - including the sign bit - + doesn't fit in an 'int'. */ + return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0); +} diff --git a/gnulib/lib/strndup.c b/gnulib/lib/strndup.c new file mode 100644 index 0000000..4053871 --- /dev/null +++ b/gnulib/lib/strndup.c @@ -0,0 +1,36 @@ +/* A replacement function, for systems that lack strndup. + + Copyright (C) 1996-1998, 2001-2003, 2005-2007, 2009-2012 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, see <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include <string.h> + +#include <stdlib.h> + +char * +strndup (char const *s, size_t n) +{ + size_t len = strnlen (s, n); + char *new = malloc (len + 1); + + if (new == NULL) + return NULL; + + new[len] = '\0'; + return memcpy (new, s, len); +} diff --git a/gnulib/lib/strnlen.c b/gnulib/lib/strnlen.c new file mode 100644 index 0000000..d36180d --- /dev/null +++ b/gnulib/lib/strnlen.c @@ -0,0 +1,30 @@ +/* Find the length of STRING, but scan at most MAXLEN characters. + Copyright (C) 2005-2007, 2009-2012 Free Software Foundation, Inc. + Written by Simon Josefsson. + + 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, see <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include <string.h> + +/* Find the length of STRING, but scan at most MAXLEN characters. + If no '\0' terminator is found in that many characters, return MAXLEN. */ + +size_t +strnlen (const char *string, size_t maxlen) +{ + const char *end = memchr (string, '\0', maxlen); + return end ? (size_t) (end - string) : maxlen; +} diff --git a/gnulib/lib/sys_types.in.h b/gnulib/lib/sys_types.in.h new file mode 100644 index 0000000..574fe51 --- /dev/null +++ b/gnulib/lib/sys_types.in.h @@ -0,0 +1,39 @@ +/* Provide a more complete sys/types.h. + + Copyright (C) 2011-2012 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, see <http://www.gnu.org/licenses/>. */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +#ifndef _@GUARD_PREFIX@_SYS_TYPES_H + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@ + +#ifndef _@GUARD_PREFIX@_SYS_TYPES_H +#define _@GUARD_PREFIX@_SYS_TYPES_H + +/* MSVC 9 defines size_t in <stddef.h>, not in <sys/types.h>. */ +/* But avoid namespace pollution on glibc systems. */ +#if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) \ + && ! defined __GLIBC__ +# include <stddef.h> +#endif + +#endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ +#endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ diff --git a/gnulib/lib/sysexits.in.h b/gnulib/lib/sysexits.in.h new file mode 100644 index 0000000..8e8c962 --- /dev/null +++ b/gnulib/lib/sysexits.in.h @@ -0,0 +1,72 @@ +/* exit() exit codes for some BSD system programs. + Copyright (C) 2003, 2006-2012 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 <http://www.gnu.org/licenses/>. */ + +/* Written by Simon Josefsson based on sysexits(3) man page */ + +#ifndef _@GUARD_PREFIX@_SYSEXITS_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +#if @HAVE_SYSEXITS_H@ + +/* IRIX 6.5 has an <unistd.h> that defines a macro EX_OK with a nonzero + value. Override it. See + <http://lists.gnu.org/archive/html/bug-gnulib/2007-03/msg00361.html> */ +# ifdef __sgi +# include <unistd.h> +# undef EX_OK +# endif + +/* The include_next requires a split double-inclusion guard. */ +# @INCLUDE_NEXT@ @NEXT_SYSEXITS_H@ + +/* HP-UX 11 <sysexits.h> ends at EX_NOPERM. */ +# ifndef EX_CONFIG +# define EX_CONFIG 78 +# endif + +#endif + +#ifndef _@GUARD_PREFIX@_SYSEXITS_H +#define _@GUARD_PREFIX@_SYSEXITS_H + +#if !@HAVE_SYSEXITS_H@ + +# define EX_OK 0 /* same value as EXIT_SUCCESS */ + +# define EX_USAGE 64 +# define EX_DATAERR 65 +# define EX_NOINPUT 66 +# define EX_NOUSER 67 +# define EX_NOHOST 68 +# define EX_UNAVAILABLE 69 +# define EX_SOFTWARE 70 +# define EX_OSERR 71 +# define EX_OSFILE 72 +# define EX_CANTCREAT 73 +# define EX_IOERR 74 +# define EX_TEMPFAIL 75 +# define EX_PROTOCOL 76 +# define EX_NOPERM 77 +# define EX_CONFIG 78 + +#endif + +#endif /* _@GUARD_PREFIX@_SYSEXITS_H */ +#endif /* _@GUARD_PREFIX@_SYSEXITS_H */ diff --git a/gnulib/lib/unistd.in.h b/gnulib/lib/unistd.in.h new file mode 100644 index 0000000..1b26c09 --- /dev/null +++ b/gnulib/lib/unistd.in.h @@ -0,0 +1,1525 @@ +/* Substitute for and wrapper around <unistd.h>. + Copyright (C) 2003-2012 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, see <http://www.gnu.org/licenses/>. */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* Special invocation convention: + - On mingw, several headers, including <winsock2.h>, include <unistd.h>, + but we need to ensure that both the system <unistd.h> and <winsock2.h> + are completely included before we replace gethostname. */ +#if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ \ + && !defined _GL_WINSOCK2_H_WITNESS && defined _WINSOCK2_H +/* <unistd.h> is being indirectly included for the first time from + <winsock2.h>; avoid declaring any overrides. */ +# if @HAVE_UNISTD_H@ +# @INCLUDE_NEXT@ @NEXT_UNISTD_H@ +# else +# error unexpected; report this to bug-gnulib@gnu.org +# endif +# define _GL_WINSOCK2_H_WITNESS + +/* Normal invocation. */ +#elif !defined _@GUARD_PREFIX@_UNISTD_H + +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_UNISTD_H@ +# @INCLUDE_NEXT@ @NEXT_UNISTD_H@ +#endif + +/* Get all possible declarations of gethostname(). */ +#if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ \ + && !defined _GL_INCLUDING_WINSOCK2_H +# define _GL_INCLUDING_WINSOCK2_H +# include <winsock2.h> +# undef _GL_INCLUDING_WINSOCK2_H +#endif + +#if !defined _@GUARD_PREFIX@_UNISTD_H && !defined _GL_INCLUDING_WINSOCK2_H +#define _@GUARD_PREFIX@_UNISTD_H + +/* NetBSD 5.0 mis-defines NULL. Also get size_t. */ +#include <stddef.h> + +/* mingw doesn't define the SEEK_* or *_FILENO macros in <unistd.h>. */ +/* Cygwin 1.7.1 declares symlinkat in <stdio.h>, not in <unistd.h>. */ +/* But avoid namespace pollution on glibc systems. */ +#if (!(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) \ + || ((@GNULIB_SYMLINKAT@ || defined GNULIB_POSIXCHECK) \ + && defined __CYGWIN__)) \ + && ! defined __GLIBC__ +# include <stdio.h> +#endif + +/* Cygwin 1.7.1 declares unlinkat in <fcntl.h>, not in <unistd.h>. */ +/* But avoid namespace pollution on glibc systems. */ +#if (@GNULIB_UNLINKAT@ || defined GNULIB_POSIXCHECK) && defined __CYGWIN__ \ + && ! defined __GLIBC__ +# include <fcntl.h> +#endif + +/* mingw fails to declare _exit in <unistd.h>. */ +/* mingw, MSVC, BeOS, Haiku declare environ in <stdlib.h>, not in + <unistd.h>. */ +/* Solaris declares getcwd not only in <unistd.h> but also in <stdlib.h>. */ +/* But avoid namespace pollution on glibc systems. */ +#ifndef __GLIBC__ +# include <stdlib.h> +#endif + +/* Native Windows platforms declare chdir, getcwd, rmdir in + <io.h> and/or <direct.h>, not in <unistd.h>. + They also declare access(), chmod(), close(), dup(), dup2(), isatty(), + lseek(), read(), unlink(), write() in <io.h>. */ +#if ((@GNULIB_CHDIR@ || @GNULIB_GETCWD@ || @GNULIB_RMDIR@ \ + || defined GNULIB_POSIXCHECK) \ + && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) +# include <io.h> /* mingw32, mingw64 */ +# include <direct.h> /* mingw64, MSVC 9 */ +#elif (@GNULIB_CLOSE@ || @GNULIB_DUP@ || @GNULIB_DUP2@ || @GNULIB_ISATTY@ \ + || @GNULIB_LSEEK@ || @GNULIB_READ@ || @GNULIB_UNLINK@ || @GNULIB_WRITE@ \ + || defined GNULIB_POSIXCHECK) \ + && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) +# include <io.h> +#endif + +/* AIX and OSF/1 5.1 declare getdomainname in <netdb.h>, not in <unistd.h>. + NonStop Kernel declares gethostname in <netdb.h>, not in <unistd.h>. */ +/* But avoid namespace pollution on glibc systems. */ +#if ((@GNULIB_GETDOMAINNAME@ && (defined _AIX || defined __osf__)) \ + || (@GNULIB_GETHOSTNAME@ && defined __TANDEM)) \ + && !defined __GLIBC__ +# include <netdb.h> +#endif + +/* MSVC defines off_t in <sys/types.h>. */ +#if !@HAVE_UNISTD_H@ +/* Get off_t. */ +# include <sys/types.h> +#endif + +#if (@GNULIB_READ@ || @GNULIB_WRITE@ \ + || @GNULIB_READLINK@ || @GNULIB_READLINKAT@ \ + || @GNULIB_PREAD@ || @GNULIB_PWRITE@ || defined GNULIB_POSIXCHECK) +/* Get ssize_t. */ +# include <sys/types.h> +#endif + +/* Get getopt(), optarg, optind, opterr, optopt. + But avoid namespace pollution on glibc systems. */ +#if @GNULIB_UNISTD_H_GETOPT@ && !defined __GLIBC__ && !defined _GL_SYSTEM_GETOPT +# include <getopt.h> +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + + +/* Hide some function declarations from <winsock2.h>. */ + +#if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ +# if !defined _@GUARD_PREFIX@_SYS_SOCKET_H +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef socket +# define socket socket_used_without_including_sys_socket_h +# undef connect +# define connect connect_used_without_including_sys_socket_h +# undef accept +# define accept accept_used_without_including_sys_socket_h +# undef bind +# define bind bind_used_without_including_sys_socket_h +# undef getpeername +# define getpeername getpeername_used_without_including_sys_socket_h +# undef getsockname +# define getsockname getsockname_used_without_including_sys_socket_h +# undef getsockopt +# define getsockopt getsockopt_used_without_including_sys_socket_h +# undef listen +# define listen listen_used_without_including_sys_socket_h +# undef recv +# define recv recv_used_without_including_sys_socket_h +# undef send +# define send send_used_without_including_sys_socket_h +# undef recvfrom +# define recvfrom recvfrom_used_without_including_sys_socket_h +# undef sendto +# define sendto sendto_used_without_including_sys_socket_h +# undef setsockopt +# define setsockopt setsockopt_used_without_including_sys_socket_h +# undef shutdown +# define shutdown shutdown_used_without_including_sys_socket_h +# else + _GL_WARN_ON_USE (socket, + "socket() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (connect, + "connect() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (accept, + "accept() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (bind, + "bind() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (getpeername, + "getpeername() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (getsockname, + "getsockname() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (getsockopt, + "getsockopt() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (listen, + "listen() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (recv, + "recv() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (send, + "send() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (recvfrom, + "recvfrom() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (sendto, + "sendto() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (setsockopt, + "setsockopt() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (shutdown, + "shutdown() used without including <sys/socket.h>"); +# endif +# endif +# if !defined _@GUARD_PREFIX@_SYS_SELECT_H +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef select +# define select select_used_without_including_sys_select_h +# else + _GL_WARN_ON_USE (select, + "select() used without including <sys/select.h>"); +# endif +# endif +#endif + + +/* OS/2 EMX lacks these macros. */ +#ifndef STDIN_FILENO +# define STDIN_FILENO 0 +#endif +#ifndef STDOUT_FILENO +# define STDOUT_FILENO 1 +#endif +#ifndef STDERR_FILENO +# define STDERR_FILENO 2 +#endif + +/* Ensure *_OK macros exist. */ +#ifndef F_OK +# define F_OK 0 +# define X_OK 1 +# define W_OK 2 +# define R_OK 4 +#endif + + +/* Declare overridden functions. */ + + +#if defined GNULIB_POSIXCHECK +/* The access() function is a security risk. */ +_GL_WARN_ON_USE (access, "the access function is a security risk - " + "use the gnulib module faccessat instead"); +#endif + + +#if @GNULIB_CHDIR@ +_GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1))); +_GL_CXXALIASWARN (chdir); +#elif defined GNULIB_POSIXCHECK +# undef chdir +# if HAVE_RAW_DECL_CHDIR +_GL_WARN_ON_USE (chown, "chdir is not always in <unistd.h> - " + "use gnulib module chdir for portability"); +# endif +#endif + + +#if @GNULIB_CHOWN@ +/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE + to GID (if GID is not -1). Follow symbolic links. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/chown.html. */ +# if @REPLACE_CHOWN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef chown +# define chown rpl_chown +# endif +_GL_FUNCDECL_RPL (chown, int, (const char *file, uid_t uid, gid_t gid) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (chown, int, (const char *file, uid_t uid, gid_t gid)); +# else +# if !@HAVE_CHOWN@ +_GL_FUNCDECL_SYS (chown, int, (const char *file, uid_t uid, gid_t gid) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (chown, int, (const char *file, uid_t uid, gid_t gid)); +# endif +_GL_CXXALIASWARN (chown); +#elif defined GNULIB_POSIXCHECK +# undef chown +# if HAVE_RAW_DECL_CHOWN +_GL_WARN_ON_USE (chown, "chown fails to follow symlinks on some systems and " + "doesn't treat a uid or gid of -1 on some systems - " + "use gnulib module chown for portability"); +# endif +#endif + + +#if @GNULIB_CLOSE@ +# if @REPLACE_CLOSE@ +/* Automatically included by modules that need a replacement for close. */ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef close +# define close rpl_close +# endif +_GL_FUNCDECL_RPL (close, int, (int fd)); +_GL_CXXALIAS_RPL (close, int, (int fd)); +# else +_GL_CXXALIAS_SYS (close, int, (int fd)); +# endif +_GL_CXXALIASWARN (close); +#elif @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +# undef close +# define close close_used_without_requesting_gnulib_module_close +#elif defined GNULIB_POSIXCHECK +# undef close +/* Assume close is always declared. */ +_GL_WARN_ON_USE (close, "close does not portably work on sockets - " + "use gnulib module close for portability"); +#endif + + +#if @GNULIB_DUP@ +# if @REPLACE_DUP@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define dup rpl_dup +# endif +_GL_FUNCDECL_RPL (dup, int, (int oldfd)); +_GL_CXXALIAS_RPL (dup, int, (int oldfd)); +# else +_GL_CXXALIAS_SYS (dup, int, (int oldfd)); +# endif +_GL_CXXALIASWARN (dup); +#elif defined GNULIB_POSIXCHECK +# undef dup +# if HAVE_RAW_DECL_DUP +_GL_WARN_ON_USE (dup, "dup is unportable - " + "use gnulib module dup for portability"); +# endif +#endif + + +#if @GNULIB_DUP2@ +/* Copy the file descriptor OLDFD into file descriptor NEWFD. Do nothing if + NEWFD = OLDFD, otherwise close NEWFD first if it is open. + Return newfd if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/dup2.html>. */ +# if @REPLACE_DUP2@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define dup2 rpl_dup2 +# endif +_GL_FUNCDECL_RPL (dup2, int, (int oldfd, int newfd)); +_GL_CXXALIAS_RPL (dup2, int, (int oldfd, int newfd)); +# else +# if !@HAVE_DUP2@ +_GL_FUNCDECL_SYS (dup2, int, (int oldfd, int newfd)); +# endif +_GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd)); +# endif +_GL_CXXALIASWARN (dup2); +#elif defined GNULIB_POSIXCHECK +# undef dup2 +# if HAVE_RAW_DECL_DUP2 +_GL_WARN_ON_USE (dup2, "dup2 is unportable - " + "use gnulib module dup2 for portability"); +# endif +#endif + + +#if @GNULIB_DUP3@ +/* Copy the file descriptor OLDFD into file descriptor NEWFD, with the + specified flags. + The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) + and O_TEXT, O_BINARY (defined in "binary-io.h"). + Close NEWFD first if it is open. + Return newfd if successful, otherwise -1 and errno set. + See the Linux man page at + <http://www.kernel.org/doc/man-pages/online/pages/man2/dup3.2.html>. */ +# if @HAVE_DUP3@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define dup3 rpl_dup3 +# endif +_GL_FUNCDECL_RPL (dup3, int, (int oldfd, int newfd, int flags)); +_GL_CXXALIAS_RPL (dup3, int, (int oldfd, int newfd, int flags)); +# else +_GL_FUNCDECL_SYS (dup3, int, (int oldfd, int newfd, int flags)); +_GL_CXXALIAS_SYS (dup3, int, (int oldfd, int newfd, int flags)); +# endif +_GL_CXXALIASWARN (dup3); +#elif defined GNULIB_POSIXCHECK +# undef dup3 +# if HAVE_RAW_DECL_DUP3 +_GL_WARN_ON_USE (dup3, "dup3 is unportable - " + "use gnulib module dup3 for portability"); +# endif +#endif + + +#if @GNULIB_ENVIRON@ +# if !@HAVE_DECL_ENVIRON@ +/* Set of environment variables and values. An array of strings of the form + "VARIABLE=VALUE", terminated with a NULL. */ +# if defined __APPLE__ && defined __MACH__ +# include <crt_externs.h> +# define environ (*_NSGetEnviron ()) +# else +# ifdef __cplusplus +extern "C" { +# endif +extern char **environ; +# ifdef __cplusplus +} +# endif +# endif +# endif +#elif defined GNULIB_POSIXCHECK +# if HAVE_RAW_DECL_ENVIRON +static inline char *** +rpl_environ (void) +{ + return &environ; +} +_GL_WARN_ON_USE (rpl_environ, "environ is unportable - " + "use gnulib module environ for portability"); +# undef environ +# define environ (*rpl_environ ()) +# endif +#endif + + +#if @GNULIB_EUIDACCESS@ +/* Like access(), except that it uses the effective user id and group id of + the current process. */ +# if !@HAVE_EUIDACCESS@ +_GL_FUNCDECL_SYS (euidaccess, int, (const char *filename, int mode) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (euidaccess, int, (const char *filename, int mode)); +_GL_CXXALIASWARN (euidaccess); +# if defined GNULIB_POSIXCHECK +/* Like access(), this function is a security risk. */ +_GL_WARN_ON_USE (euidaccess, "the euidaccess function is a security risk - " + "use the gnulib module faccessat instead"); +# endif +#elif defined GNULIB_POSIXCHECK +# undef euidaccess +# if HAVE_RAW_DECL_EUIDACCESS +_GL_WARN_ON_USE (euidaccess, "euidaccess is unportable - " + "use gnulib module euidaccess for portability"); +# endif +#endif + + +#if @GNULIB_FACCESSAT@ +# if !@HAVE_FACCESSAT@ +_GL_FUNCDECL_SYS (faccessat, int, + (int fd, char const *file, int mode, int flag) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (faccessat, int, + (int fd, char const *file, int mode, int flag)); +_GL_CXXALIASWARN (faccessat); +#elif defined GNULIB_POSIXCHECK +# undef faccessat +# if HAVE_RAW_DECL_FACCESSAT +_GL_WARN_ON_USE (faccessat, "faccessat is not portable - " + "use gnulib module faccessat for portability"); +# endif +#endif + + +#if @GNULIB_FCHDIR@ +/* Change the process' current working directory to the directory on which + the given file descriptor is open. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/fchdir.html>. */ +# if ! @HAVE_FCHDIR@ +_GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); + +/* Gnulib internal hooks needed to maintain the fchdir metadata. */ +_GL_EXTERN_C int _gl_register_fd (int fd, const char *filename) + _GL_ARG_NONNULL ((2)); +_GL_EXTERN_C void _gl_unregister_fd (int fd); +_GL_EXTERN_C int _gl_register_dup (int oldfd, int newfd); +_GL_EXTERN_C const char *_gl_directory_name (int fd); + +# else +# if !@HAVE_DECL_FCHDIR@ +_GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); +# endif +# endif +_GL_CXXALIAS_SYS (fchdir, int, (int /*fd*/)); +_GL_CXXALIASWARN (fchdir); +#elif defined GNULIB_POSIXCHECK +# undef fchdir +# if HAVE_RAW_DECL_FCHDIR +_GL_WARN_ON_USE (fchdir, "fchdir is unportable - " + "use gnulib module fchdir for portability"); +# endif +#endif + + +#if @GNULIB_FCHOWNAT@ +# if @REPLACE_FCHOWNAT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fchownat +# define fchownat rpl_fchownat +# endif +_GL_FUNCDECL_RPL (fchownat, int, (int fd, char const *file, + uid_t owner, gid_t group, int flag) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (fchownat, int, (int fd, char const *file, + uid_t owner, gid_t group, int flag)); +# else +# if !@HAVE_FCHOWNAT@ +_GL_FUNCDECL_SYS (fchownat, int, (int fd, char const *file, + uid_t owner, gid_t group, int flag) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (fchownat, int, (int fd, char const *file, + uid_t owner, gid_t group, int flag)); +# endif +_GL_CXXALIASWARN (fchownat); +#elif defined GNULIB_POSIXCHECK +# undef fchownat +# if HAVE_RAW_DECL_FCHOWNAT +_GL_WARN_ON_USE (fchownat, "fchownat is not portable - " + "use gnulib module openat for portability"); +# endif +#endif + + +#if @GNULIB_FDATASYNC@ +/* Synchronize changes to a file. + Return 0 if successful, otherwise -1 and errno set. + See POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/fdatasync.html>. */ +# if !@HAVE_FDATASYNC@ || !@HAVE_DECL_FDATASYNC@ +_GL_FUNCDECL_SYS (fdatasync, int, (int fd)); +# endif +_GL_CXXALIAS_SYS (fdatasync, int, (int fd)); +_GL_CXXALIASWARN (fdatasync); +#elif defined GNULIB_POSIXCHECK +# undef fdatasync +# if HAVE_RAW_DECL_FDATASYNC +_GL_WARN_ON_USE (fdatasync, "fdatasync is unportable - " + "use gnulib module fdatasync for portability"); +# endif +#endif + + +#if @GNULIB_FSYNC@ +/* Synchronize changes, including metadata, to a file. + Return 0 if successful, otherwise -1 and errno set. + See POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/fsync.html>. */ +# if !@HAVE_FSYNC@ +_GL_FUNCDECL_SYS (fsync, int, (int fd)); +# endif +_GL_CXXALIAS_SYS (fsync, int, (int fd)); +_GL_CXXALIASWARN (fsync); +#elif defined GNULIB_POSIXCHECK +# undef fsync +# if HAVE_RAW_DECL_FSYNC +_GL_WARN_ON_USE (fsync, "fsync is unportable - " + "use gnulib module fsync for portability"); +# endif +#endif + + +#if @GNULIB_FTRUNCATE@ +/* Change the size of the file to which FD is opened to become equal to LENGTH. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/ftruncate.html>. */ +# if !@HAVE_FTRUNCATE@ +_GL_FUNCDECL_SYS (ftruncate, int, (int fd, off_t length)); +# endif +_GL_CXXALIAS_SYS (ftruncate, int, (int fd, off_t length)); +_GL_CXXALIASWARN (ftruncate); +#elif defined GNULIB_POSIXCHECK +# undef ftruncate +# if HAVE_RAW_DECL_FTRUNCATE +_GL_WARN_ON_USE (ftruncate, "ftruncate is unportable - " + "use gnulib module ftruncate for portability"); +# endif +#endif + + +#if @GNULIB_GETCWD@ +/* Get the name of the current working directory, and put it in SIZE bytes + of BUF. + Return BUF if successful, or NULL if the directory couldn't be determined + or SIZE was too small. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/getcwd.html>. + Additionally, the gnulib module 'getcwd' guarantees the following GNU + extension: If BUF is NULL, an array is allocated with 'malloc'; the array + is SIZE bytes long, unless SIZE == 0, in which case it is as big as + necessary. */ +# if @REPLACE_GETCWD@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define getcwd rpl_getcwd +# endif +_GL_FUNCDECL_RPL (getcwd, char *, (char *buf, size_t size)); +_GL_CXXALIAS_RPL (getcwd, char *, (char *buf, size_t size)); +# else +/* Need to cast, because on mingw, the second parameter is + int size. */ +_GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size)); +# endif +_GL_CXXALIASWARN (getcwd); +#elif defined GNULIB_POSIXCHECK +# undef getcwd +# if HAVE_RAW_DECL_GETCWD +_GL_WARN_ON_USE (getcwd, "getcwd is unportable - " + "use gnulib module getcwd for portability"); +# endif +#endif + + +#if @GNULIB_GETDOMAINNAME@ +/* Return the NIS domain name of the machine. + WARNING! The NIS domain name is unrelated to the fully qualified host name + of the machine. It is also unrelated to email addresses. + WARNING! The NIS domain name is usually the empty string or "(none)" when + not using NIS. + + Put up to LEN bytes of the NIS domain name into NAME. + Null terminate it if the name is shorter than LEN. + If the NIS domain name is longer than LEN, set errno = EINVAL and return -1. + Return 0 if successful, otherwise set errno and return -1. */ +# if @REPLACE_GETDOMAINNAME@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getdomainname +# define getdomainname rpl_getdomainname +# endif +_GL_FUNCDECL_RPL (getdomainname, int, (char *name, size_t len) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (getdomainname, int, (char *name, size_t len)); +# else +# if !@HAVE_DECL_GETDOMAINNAME@ +_GL_FUNCDECL_SYS (getdomainname, int, (char *name, size_t len) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (getdomainname, int, (char *name, size_t len)); +# endif +_GL_CXXALIASWARN (getdomainname); +#elif defined GNULIB_POSIXCHECK +# undef getdomainname +# if HAVE_RAW_DECL_GETDOMAINNAME +_GL_WARN_ON_USE (getdomainname, "getdomainname is unportable - " + "use gnulib module getdomainname for portability"); +# endif +#endif + + +#if @GNULIB_GETDTABLESIZE@ +/* Return the maximum number of file descriptors in the current process. + In POSIX, this is same as sysconf (_SC_OPEN_MAX). */ +# if !@HAVE_GETDTABLESIZE@ +_GL_FUNCDECL_SYS (getdtablesize, int, (void)); +# endif +_GL_CXXALIAS_SYS (getdtablesize, int, (void)); +_GL_CXXALIASWARN (getdtablesize); +#elif defined GNULIB_POSIXCHECK +# undef getdtablesize +# if HAVE_RAW_DECL_GETDTABLESIZE +_GL_WARN_ON_USE (getdtablesize, "getdtablesize is unportable - " + "use gnulib module getdtablesize for portability"); +# endif +#endif + + +#if @GNULIB_GETGROUPS@ +/* Return the supplemental groups that the current process belongs to. + It is unspecified whether the effective group id is in the list. + If N is 0, return the group count; otherwise, N describes how many + entries are available in GROUPS. Return -1 and set errno if N is + not 0 and not large enough. Fails with ENOSYS on some systems. */ +# if @REPLACE_GETGROUPS@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getgroups +# define getgroups rpl_getgroups +# endif +_GL_FUNCDECL_RPL (getgroups, int, (int n, gid_t *groups)); +_GL_CXXALIAS_RPL (getgroups, int, (int n, gid_t *groups)); +# else +# if !@HAVE_GETGROUPS@ +_GL_FUNCDECL_SYS (getgroups, int, (int n, gid_t *groups)); +# endif +_GL_CXXALIAS_SYS (getgroups, int, (int n, gid_t *groups)); +# endif +_GL_CXXALIASWARN (getgroups); +#elif defined GNULIB_POSIXCHECK +# undef getgroups +# if HAVE_RAW_DECL_GETGROUPS +_GL_WARN_ON_USE (getgroups, "getgroups is unportable - " + "use gnulib module getgroups for portability"); +# endif +#endif + + +#if @GNULIB_GETHOSTNAME@ +/* Return the standard host name of the machine. + WARNING! The host name may or may not be fully qualified. + + Put up to LEN bytes of the host name into NAME. + Null terminate it if the name is shorter than LEN. + If the host name is longer than LEN, set errno = EINVAL and return -1. + Return 0 if successful, otherwise set errno and return -1. */ +# if @UNISTD_H_HAVE_WINSOCK2_H@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef gethostname +# define gethostname rpl_gethostname +# endif +_GL_FUNCDECL_RPL (gethostname, int, (char *name, size_t len) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (gethostname, int, (char *name, size_t len)); +# else +# if !@HAVE_GETHOSTNAME@ +_GL_FUNCDECL_SYS (gethostname, int, (char *name, size_t len) + _GL_ARG_NONNULL ((1))); +# endif +/* Need to cast, because on Solaris 10 and OSF/1 5.1 systems, the second + parameter is + int len. */ +_GL_CXXALIAS_SYS_CAST (gethostname, int, (char *name, size_t len)); +# endif +_GL_CXXALIASWARN (gethostname); +#elif @UNISTD_H_HAVE_WINSOCK2_H@ +# undef gethostname +# define gethostname gethostname_used_without_requesting_gnulib_module_gethostname +#elif defined GNULIB_POSIXCHECK +# undef gethostname +# if HAVE_RAW_DECL_GETHOSTNAME +_GL_WARN_ON_USE (gethostname, "gethostname is unportable - " + "use gnulib module gethostname for portability"); +# endif +#endif + + +#if @GNULIB_GETLOGIN@ +/* Returns the user's login name, or NULL if it cannot be found. Upon error, + returns NULL with errno set. + + See <http://www.opengroup.org/susv3xsh/getlogin.html>. + + Most programs don't need to use this function, because the information is + available through environment variables: + ${LOGNAME-$USER} on Unix platforms, + $USERNAME on native Windows platforms. + */ +# if !@HAVE_GETLOGIN@ +_GL_FUNCDECL_SYS (getlogin, char *, (void)); +# endif +_GL_CXXALIAS_SYS (getlogin, char *, (void)); +_GL_CXXALIASWARN (getlogin); +#elif defined GNULIB_POSIXCHECK +# undef getlogin +# if HAVE_RAW_DECL_GETLOGIN +_GL_WARN_ON_USE (getlogin, "getlogin is unportable - " + "use gnulib module getlogin for portability"); +# endif +#endif + + +#if @GNULIB_GETLOGIN_R@ +/* Copies the user's login name to NAME. + The array pointed to by NAME has room for SIZE bytes. + + Returns 0 if successful. Upon error, an error number is returned, or -1 in + the case that the login name cannot be found but no specific error is + provided (this case is hopefully rare but is left open by the POSIX spec). + + See <http://www.opengroup.org/susv3xsh/getlogin.html>. + + Most programs don't need to use this function, because the information is + available through environment variables: + ${LOGNAME-$USER} on Unix platforms, + $USERNAME on native Windows platforms. + */ +# if @REPLACE_GETLOGIN_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define getlogin_r rpl_getlogin_r +# endif +_GL_FUNCDECL_RPL (getlogin_r, int, (char *name, size_t size) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (getlogin_r, int, (char *name, size_t size)); +# else +# if !@HAVE_DECL_GETLOGIN_R@ +_GL_FUNCDECL_SYS (getlogin_r, int, (char *name, size_t size) + _GL_ARG_NONNULL ((1))); +# endif +/* Need to cast, because on Solaris 10 systems, the second argument is + int size. */ +_GL_CXXALIAS_SYS_CAST (getlogin_r, int, (char *name, size_t size)); +# endif +_GL_CXXALIASWARN (getlogin_r); +#elif defined GNULIB_POSIXCHECK +# undef getlogin_r +# if HAVE_RAW_DECL_GETLOGIN_R +_GL_WARN_ON_USE (getlogin_r, "getlogin_r is unportable - " + "use gnulib module getlogin_r for portability"); +# endif +#endif + + +#if @GNULIB_GETPAGESIZE@ +# if @REPLACE_GETPAGESIZE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define getpagesize rpl_getpagesize +# endif +_GL_FUNCDECL_RPL (getpagesize, int, (void)); +_GL_CXXALIAS_RPL (getpagesize, int, (void)); +# else +# if !@HAVE_GETPAGESIZE@ +# if !defined getpagesize +/* This is for POSIX systems. */ +# if !defined _gl_getpagesize && defined _SC_PAGESIZE +# if ! (defined __VMS && __VMS_VER < 70000000) +# define _gl_getpagesize() sysconf (_SC_PAGESIZE) +# endif +# endif +/* This is for older VMS. */ +# if !defined _gl_getpagesize && defined __VMS +# ifdef __ALPHA +# define _gl_getpagesize() 8192 +# else +# define _gl_getpagesize() 512 +# endif +# endif +/* This is for BeOS. */ +# if !defined _gl_getpagesize && @HAVE_OS_H@ +# include <OS.h> +# if defined B_PAGE_SIZE +# define _gl_getpagesize() B_PAGE_SIZE +# endif +# endif +/* This is for AmigaOS4.0. */ +# if !defined _gl_getpagesize && defined __amigaos4__ +# define _gl_getpagesize() 2048 +# endif +/* This is for older Unix systems. */ +# if !defined _gl_getpagesize && @HAVE_SYS_PARAM_H@ +# include <sys/param.h> +# ifdef EXEC_PAGESIZE +# define _gl_getpagesize() EXEC_PAGESIZE +# else +# ifdef NBPG +# ifndef CLSIZE +# define CLSIZE 1 +# endif +# define _gl_getpagesize() (NBPG * CLSIZE) +# else +# ifdef NBPC +# define _gl_getpagesize() NBPC +# endif +# endif +# endif +# endif +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define getpagesize() _gl_getpagesize () +# else +# if !GNULIB_defined_getpagesize_function +static inline int +getpagesize () +{ + return _gl_getpagesize (); +} +# define GNULIB_defined_getpagesize_function 1 +# endif +# endif +# endif +# endif +/* Need to cast, because on Cygwin 1.5.x systems, the return type is size_t. */ +_GL_CXXALIAS_SYS_CAST (getpagesize, int, (void)); +# endif +# if @HAVE_DECL_GETPAGESIZE@ +_GL_CXXALIASWARN (getpagesize); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getpagesize +# if HAVE_RAW_DECL_GETPAGESIZE +_GL_WARN_ON_USE (getpagesize, "getpagesize is unportable - " + "use gnulib module getpagesize for portability"); +# endif +#endif + + +#if @GNULIB_GETUSERSHELL@ +/* Return the next valid login shell on the system, or NULL when the end of + the list has been reached. */ +# if !@HAVE_DECL_GETUSERSHELL@ +_GL_FUNCDECL_SYS (getusershell, char *, (void)); +# endif +_GL_CXXALIAS_SYS (getusershell, char *, (void)); +_GL_CXXALIASWARN (getusershell); +#elif defined GNULIB_POSIXCHECK +# undef getusershell +# if HAVE_RAW_DECL_GETUSERSHELL +_GL_WARN_ON_USE (getusershell, "getusershell is unportable - " + "use gnulib module getusershell for portability"); +# endif +#endif + +#if @GNULIB_GETUSERSHELL@ +/* Rewind to pointer that is advanced at each getusershell() call. */ +# if !@HAVE_DECL_GETUSERSHELL@ +_GL_FUNCDECL_SYS (setusershell, void, (void)); +# endif +_GL_CXXALIAS_SYS (setusershell, void, (void)); +_GL_CXXALIASWARN (setusershell); +#elif defined GNULIB_POSIXCHECK +# undef setusershell +# if HAVE_RAW_DECL_SETUSERSHELL +_GL_WARN_ON_USE (setusershell, "setusershell is unportable - " + "use gnulib module getusershell for portability"); +# endif +#endif + +#if @GNULIB_GETUSERSHELL@ +/* Free the pointer that is advanced at each getusershell() call and + associated resources. */ +# if !@HAVE_DECL_GETUSERSHELL@ +_GL_FUNCDECL_SYS (endusershell, void, (void)); +# endif +_GL_CXXALIAS_SYS (endusershell, void, (void)); +_GL_CXXALIASWARN (endusershell); +#elif defined GNULIB_POSIXCHECK +# undef endusershell +# if HAVE_RAW_DECL_ENDUSERSHELL +_GL_WARN_ON_USE (endusershell, "endusershell is unportable - " + "use gnulib module getusershell for portability"); +# endif +#endif + + +#if @GNULIB_GROUP_MEMBER@ +/* Determine whether group id is in calling user's group list. */ +# if !@HAVE_GROUP_MEMBER@ +_GL_FUNCDECL_SYS (group_member, int, (gid_t gid)); +# endif +_GL_CXXALIAS_SYS (group_member, int, (gid_t gid)); +_GL_CXXALIASWARN (group_member); +#elif defined GNULIB_POSIXCHECK +# undef group_member +# if HAVE_RAW_DECL_GROUP_MEMBER +_GL_WARN_ON_USE (group_member, "group_member is unportable - " + "use gnulib module group-member for portability"); +# endif +#endif + + +#if @GNULIB_ISATTY@ +# if @REPLACE_ISATTY@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef isatty +# define isatty rpl_isatty +# endif +_GL_FUNCDECL_RPL (isatty, int, (int fd)); +_GL_CXXALIAS_RPL (isatty, int, (int fd)); +# else +_GL_CXXALIAS_SYS (isatty, int, (int fd)); +# endif +_GL_CXXALIASWARN (isatty); +#elif defined GNULIB_POSIXCHECK +# undef isatty +# if HAVE_RAW_DECL_ISATTY +_GL_WARN_ON_USE (isatty, "isatty has portability problems on native Windows - " + "use gnulib module isatty for portability"); +# endif +#endif + + +#if @GNULIB_LCHOWN@ +/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE + to GID (if GID is not -1). Do not follow symbolic links. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/lchown.html>. */ +# if @REPLACE_LCHOWN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef lchown +# define lchown rpl_lchown +# endif +_GL_FUNCDECL_RPL (lchown, int, (char const *file, uid_t owner, gid_t group) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (lchown, int, (char const *file, uid_t owner, gid_t group)); +# else +# if !@HAVE_LCHOWN@ +_GL_FUNCDECL_SYS (lchown, int, (char const *file, uid_t owner, gid_t group) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (lchown, int, (char const *file, uid_t owner, gid_t group)); +# endif +_GL_CXXALIASWARN (lchown); +#elif defined GNULIB_POSIXCHECK +# undef lchown +# if HAVE_RAW_DECL_LCHOWN +_GL_WARN_ON_USE (lchown, "lchown is unportable to pre-POSIX.1-2001 systems - " + "use gnulib module lchown for portability"); +# endif +#endif + + +#if @GNULIB_LINK@ +/* Create a new hard link for an existing file. + Return 0 if successful, otherwise -1 and errno set. + See POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/link.html>. */ +# if @REPLACE_LINK@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define link rpl_link +# endif +_GL_FUNCDECL_RPL (link, int, (const char *path1, const char *path2) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (link, int, (const char *path1, const char *path2)); +# else +# if !@HAVE_LINK@ +_GL_FUNCDECL_SYS (link, int, (const char *path1, const char *path2) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (link, int, (const char *path1, const char *path2)); +# endif +_GL_CXXALIASWARN (link); +#elif defined GNULIB_POSIXCHECK +# undef link +# if HAVE_RAW_DECL_LINK +_GL_WARN_ON_USE (link, "link is unportable - " + "use gnulib module link for portability"); +# endif +#endif + + +#if @GNULIB_LINKAT@ +/* Create a new hard link for an existing file, relative to two + directories. FLAG controls whether symlinks are followed. + Return 0 if successful, otherwise -1 and errno set. */ +# if @REPLACE_LINKAT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef linkat +# define linkat rpl_linkat +# endif +_GL_FUNCDECL_RPL (linkat, int, + (int fd1, const char *path1, int fd2, const char *path2, + int flag) + _GL_ARG_NONNULL ((2, 4))); +_GL_CXXALIAS_RPL (linkat, int, + (int fd1, const char *path1, int fd2, const char *path2, + int flag)); +# else +# if !@HAVE_LINKAT@ +_GL_FUNCDECL_SYS (linkat, int, + (int fd1, const char *path1, int fd2, const char *path2, + int flag) + _GL_ARG_NONNULL ((2, 4))); +# endif +_GL_CXXALIAS_SYS (linkat, int, + (int fd1, const char *path1, int fd2, const char *path2, + int flag)); +# endif +_GL_CXXALIASWARN (linkat); +#elif defined GNULIB_POSIXCHECK +# undef linkat +# if HAVE_RAW_DECL_LINKAT +_GL_WARN_ON_USE (linkat, "linkat is unportable - " + "use gnulib module linkat for portability"); +# endif +#endif + + +#if @GNULIB_LSEEK@ +/* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END. + Return the new offset if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/lseek.html>. */ +# if @REPLACE_LSEEK@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define lseek rpl_lseek +# endif +_GL_FUNCDECL_RPL (lseek, off_t, (int fd, off_t offset, int whence)); +_GL_CXXALIAS_RPL (lseek, off_t, (int fd, off_t offset, int whence)); +# else +_GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence)); +# endif +_GL_CXXALIASWARN (lseek); +#elif defined GNULIB_POSIXCHECK +# undef lseek +# if HAVE_RAW_DECL_LSEEK +_GL_WARN_ON_USE (lseek, "lseek does not fail with ESPIPE on pipes on some " + "systems - use gnulib module lseek for portability"); +# endif +#endif + + +#if @GNULIB_PIPE@ +/* Create a pipe, defaulting to O_BINARY mode. + Store the read-end as fd[0] and the write-end as fd[1]. + Return 0 upon success, or -1 with errno set upon failure. */ +# if !@HAVE_PIPE@ +_GL_FUNCDECL_SYS (pipe, int, (int fd[2]) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pipe, int, (int fd[2])); +_GL_CXXALIASWARN (pipe); +#elif defined GNULIB_POSIXCHECK +# undef pipe +# if HAVE_RAW_DECL_PIPE +_GL_WARN_ON_USE (pipe, "pipe is unportable - " + "use gnulib module pipe-posix for portability"); +# endif +#endif + + +#if @GNULIB_PIPE2@ +/* Create a pipe, applying the given flags when opening the read-end of the + pipe and the write-end of the pipe. + The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) + and O_TEXT, O_BINARY (defined in "binary-io.h"). + Store the read-end as fd[0] and the write-end as fd[1]. + Return 0 upon success, or -1 with errno set upon failure. + See also the Linux man page at + <http://www.kernel.org/doc/man-pages/online/pages/man2/pipe2.2.html>. */ +# if @HAVE_PIPE2@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define pipe2 rpl_pipe2 +# endif +_GL_FUNCDECL_RPL (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pipe2, int, (int fd[2], int flags)); +# else +_GL_FUNCDECL_SYS (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_SYS (pipe2, int, (int fd[2], int flags)); +# endif +_GL_CXXALIASWARN (pipe2); +#elif defined GNULIB_POSIXCHECK +# undef pipe2 +# if HAVE_RAW_DECL_PIPE2 +_GL_WARN_ON_USE (pipe2, "pipe2 is unportable - " + "use gnulib module pipe2 for portability"); +# endif +#endif + + +#if @GNULIB_PREAD@ +/* Read at most BUFSIZE bytes from FD into BUF, starting at OFFSET. + Return the number of bytes placed into BUF if successful, otherwise + set errno and return -1. 0 indicates EOF. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/pread.html>. */ +# if @REPLACE_PREAD@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pread +# define pread rpl_pread +# endif +_GL_FUNCDECL_RPL (pread, ssize_t, + (int fd, void *buf, size_t bufsize, off_t offset) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (pread, ssize_t, + (int fd, void *buf, size_t bufsize, off_t offset)); +# else +# if !@HAVE_PREAD@ +_GL_FUNCDECL_SYS (pread, ssize_t, + (int fd, void *buf, size_t bufsize, off_t offset) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (pread, ssize_t, + (int fd, void *buf, size_t bufsize, off_t offset)); +# endif +_GL_CXXALIASWARN (pread); +#elif defined GNULIB_POSIXCHECK +# undef pread +# if HAVE_RAW_DECL_PREAD +_GL_WARN_ON_USE (pread, "pread is unportable - " + "use gnulib module pread for portability"); +# endif +#endif + + +#if @GNULIB_PWRITE@ +/* Write at most BUFSIZE bytes from BUF into FD, starting at OFFSET. + Return the number of bytes written if successful, otherwise + set errno and return -1. 0 indicates nothing written. See the + POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/pwrite.html>. */ +# if @REPLACE_PWRITE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pwrite +# define pwrite rpl_pwrite +# endif +_GL_FUNCDECL_RPL (pwrite, ssize_t, + (int fd, const void *buf, size_t bufsize, off_t offset) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (pwrite, ssize_t, + (int fd, const void *buf, size_t bufsize, off_t offset)); +# else +# if !@HAVE_PWRITE@ +_GL_FUNCDECL_SYS (pwrite, ssize_t, + (int fd, const void *buf, size_t bufsize, off_t offset) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (pwrite, ssize_t, + (int fd, const void *buf, size_t bufsize, off_t offset)); +# endif +_GL_CXXALIASWARN (pwrite); +#elif defined GNULIB_POSIXCHECK +# undef pwrite +# if HAVE_RAW_DECL_PWRITE +_GL_WARN_ON_USE (pwrite, "pwrite is unportable - " + "use gnulib module pwrite for portability"); +# endif +#endif + + +#if @GNULIB_READ@ +/* Read up to COUNT bytes from file descriptor FD into the buffer starting + at BUF. See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html>. */ +# if @REPLACE_READ@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef read +# define read rpl_read +# endif +_GL_FUNCDECL_RPL (read, ssize_t, (int fd, void *buf, size_t count) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (read, ssize_t, (int fd, void *buf, size_t count)); +# else +/* Need to cast, because on mingw, the third parameter is + unsigned int count + and the return type is 'int'. */ +_GL_CXXALIAS_SYS_CAST (read, ssize_t, (int fd, void *buf, size_t count)); +# endif +_GL_CXXALIASWARN (read); +#endif + + +#if @GNULIB_READLINK@ +/* Read the contents of the symbolic link FILE and place the first BUFSIZE + bytes of it into BUF. Return the number of bytes placed into BUF if + successful, otherwise -1 and errno set. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/readlink.html>. */ +# if @REPLACE_READLINK@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define readlink rpl_readlink +# endif +_GL_FUNCDECL_RPL (readlink, ssize_t, + (const char *file, char *buf, size_t bufsize) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (readlink, ssize_t, + (const char *file, char *buf, size_t bufsize)); +# else +# if !@HAVE_READLINK@ +_GL_FUNCDECL_SYS (readlink, ssize_t, + (const char *file, char *buf, size_t bufsize) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (readlink, ssize_t, + (const char *file, char *buf, size_t bufsize)); +# endif +_GL_CXXALIASWARN (readlink); +#elif defined GNULIB_POSIXCHECK +# undef readlink +# if HAVE_RAW_DECL_READLINK +_GL_WARN_ON_USE (readlink, "readlink is unportable - " + "use gnulib module readlink for portability"); +# endif +#endif + + +#if @GNULIB_READLINKAT@ +# if !@HAVE_READLINKAT@ +_GL_FUNCDECL_SYS (readlinkat, ssize_t, + (int fd, char const *file, char *buf, size_t len) + _GL_ARG_NONNULL ((2, 3))); +# endif +_GL_CXXALIAS_SYS (readlinkat, ssize_t, + (int fd, char const *file, char *buf, size_t len)); +_GL_CXXALIASWARN (readlinkat); +#elif defined GNULIB_POSIXCHECK +# undef readlinkat +# if HAVE_RAW_DECL_READLINKAT +_GL_WARN_ON_USE (readlinkat, "readlinkat is not portable - " + "use gnulib module readlinkat for portability"); +# endif +#endif + + +#if @GNULIB_RMDIR@ +/* Remove the directory DIR. */ +# if @REPLACE_RMDIR@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define rmdir rpl_rmdir +# endif +_GL_FUNCDECL_RPL (rmdir, int, (char const *name) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (rmdir, int, (char const *name)); +# else +_GL_CXXALIAS_SYS (rmdir, int, (char const *name)); +# endif +_GL_CXXALIASWARN (rmdir); +#elif defined GNULIB_POSIXCHECK +# undef rmdir +# if HAVE_RAW_DECL_RMDIR +_GL_WARN_ON_USE (rmdir, "rmdir is unportable - " + "use gnulib module rmdir for portability"); +# endif +#endif + + +#if @GNULIB_SETHOSTNAME@ +/* Set the host name of the machine. + The host name may or may not be fully qualified. + + Put LEN bytes of NAME into the host name. + Return 0 if successful, otherwise, set errno and return -1. + + Platforms with no ability to set the hostname return -1 and set + errno = ENOSYS. */ +# if !@HAVE_SETHOSTNAME@ || !@HAVE_DECL_SETHOSTNAME@ +_GL_FUNCDECL_SYS (sethostname, int, (const char *name, size_t len) + _GL_ARG_NONNULL ((1))); +# endif +/* Need to cast, because on Solaris 11 2011-10, MacOS X 10.5, IRIX 6.5 + and FreeBSD 6.4 the second parameter is int. On Solaris 11 + 2011-10, the first parameter is not const. */ +_GL_CXXALIAS_SYS_CAST (sethostname, int, (const char *name, size_t len)); +_GL_CXXALIASWARN (sethostname); +#elif defined GNULIB_POSIXCHECK +# undef sethostname +# if HAVE_RAW_DECL_SETHOSTNAME +_GL_WARN_ON_USE (sethostname, "sethostname is unportable - " + "use gnulib module sethostname for portability"); +# endif +#endif + + +#if @GNULIB_SLEEP@ +/* Pause the execution of the current thread for N seconds. + Returns the number of seconds left to sleep. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/sleep.html>. */ +# if @REPLACE_SLEEP@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef sleep +# define sleep rpl_sleep +# endif +_GL_FUNCDECL_RPL (sleep, unsigned int, (unsigned int n)); +_GL_CXXALIAS_RPL (sleep, unsigned int, (unsigned int n)); +# else +# if !@HAVE_SLEEP@ +_GL_FUNCDECL_SYS (sleep, unsigned int, (unsigned int n)); +# endif +_GL_CXXALIAS_SYS (sleep, unsigned int, (unsigned int n)); +# endif +_GL_CXXALIASWARN (sleep); +#elif defined GNULIB_POSIXCHECK +# undef sleep +# if HAVE_RAW_DECL_SLEEP +_GL_WARN_ON_USE (sleep, "sleep is unportable - " + "use gnulib module sleep for portability"); +# endif +#endif + + +#if @GNULIB_SYMLINK@ +# if @REPLACE_SYMLINK@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef symlink +# define symlink rpl_symlink +# endif +_GL_FUNCDECL_RPL (symlink, int, (char const *contents, char const *file) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (symlink, int, (char const *contents, char const *file)); +# else +# if !@HAVE_SYMLINK@ +_GL_FUNCDECL_SYS (symlink, int, (char const *contents, char const *file) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (symlink, int, (char const *contents, char const *file)); +# endif +_GL_CXXALIASWARN (symlink); +#elif defined GNULIB_POSIXCHECK +# undef symlink +# if HAVE_RAW_DECL_SYMLINK +_GL_WARN_ON_USE (symlink, "symlink is not portable - " + "use gnulib module symlink for portability"); +# endif +#endif + + +#if @GNULIB_SYMLINKAT@ +# if !@HAVE_SYMLINKAT@ +_GL_FUNCDECL_SYS (symlinkat, int, + (char const *contents, int fd, char const *file) + _GL_ARG_NONNULL ((1, 3))); +# endif +_GL_CXXALIAS_SYS (symlinkat, int, + (char const *contents, int fd, char const *file)); +_GL_CXXALIASWARN (symlinkat); +#elif defined GNULIB_POSIXCHECK +# undef symlinkat +# if HAVE_RAW_DECL_SYMLINKAT +_GL_WARN_ON_USE (symlinkat, "symlinkat is not portable - " + "use gnulib module symlinkat for portability"); +# endif +#endif + + +#if @GNULIB_TTYNAME_R@ +/* Store at most BUFLEN characters of the pathname of the terminal FD is + open on in BUF. Return 0 on success, otherwise an error number. */ +# if @REPLACE_TTYNAME_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ttyname_r +# define ttyname_r rpl_ttyname_r +# endif +_GL_FUNCDECL_RPL (ttyname_r, int, + (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (ttyname_r, int, + (int fd, char *buf, size_t buflen)); +# else +# if !@HAVE_DECL_TTYNAME_R@ +_GL_FUNCDECL_SYS (ttyname_r, int, + (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (ttyname_r, int, + (int fd, char *buf, size_t buflen)); +# endif +_GL_CXXALIASWARN (ttyname_r); +#elif defined GNULIB_POSIXCHECK +# undef ttyname_r +# if HAVE_RAW_DECL_TTYNAME_R +_GL_WARN_ON_USE (ttyname_r, "ttyname_r is not portable - " + "use gnulib module ttyname_r for portability"); +# endif +#endif + + +#if @GNULIB_UNLINK@ +# if @REPLACE_UNLINK@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef unlink +# define unlink rpl_unlink +# endif +_GL_FUNCDECL_RPL (unlink, int, (char const *file) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (unlink, int, (char const *file)); +# else +_GL_CXXALIAS_SYS (unlink, int, (char const *file)); +# endif +_GL_CXXALIASWARN (unlink); +#elif defined GNULIB_POSIXCHECK +# undef unlink +# if HAVE_RAW_DECL_UNLINK +_GL_WARN_ON_USE (unlink, "unlink is not portable - " + "use gnulib module unlink for portability"); +# endif +#endif + + +#if @GNULIB_UNLINKAT@ +# if @REPLACE_UNLINKAT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef unlinkat +# define unlinkat rpl_unlinkat +# endif +_GL_FUNCDECL_RPL (unlinkat, int, (int fd, char const *file, int flag) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (unlinkat, int, (int fd, char const *file, int flag)); +# else +# if !@HAVE_UNLINKAT@ +_GL_FUNCDECL_SYS (unlinkat, int, (int fd, char const *file, int flag) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (unlinkat, int, (int fd, char const *file, int flag)); +# endif +_GL_CXXALIASWARN (unlinkat); +#elif defined GNULIB_POSIXCHECK +# undef unlinkat +# if HAVE_RAW_DECL_UNLINKAT +_GL_WARN_ON_USE (unlinkat, "unlinkat is not portable - " + "use gnulib module openat for portability"); +# endif +#endif + + +#if @GNULIB_USLEEP@ +/* Pause the execution of the current thread for N microseconds. + Returns 0 on completion, or -1 on range error. + See the POSIX:2001 specification + <http://www.opengroup.org/susv3xsh/usleep.html>. */ +# if @REPLACE_USLEEP@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef usleep +# define usleep rpl_usleep +# endif +_GL_FUNCDECL_RPL (usleep, int, (useconds_t n)); +_GL_CXXALIAS_RPL (usleep, int, (useconds_t n)); +# else +# if !@HAVE_USLEEP@ +_GL_FUNCDECL_SYS (usleep, int, (useconds_t n)); +# endif +_GL_CXXALIAS_SYS (usleep, int, (useconds_t n)); +# endif +_GL_CXXALIASWARN (usleep); +#elif defined GNULIB_POSIXCHECK +# undef usleep +# if HAVE_RAW_DECL_USLEEP +_GL_WARN_ON_USE (usleep, "usleep is unportable - " + "use gnulib module usleep for portability"); +# endif +#endif + + +#if @GNULIB_WRITE@ +/* Write up to COUNT bytes starting at BUF to file descriptor FD. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/write.html>. */ +# if @REPLACE_WRITE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef write +# define write rpl_write +# endif +_GL_FUNCDECL_RPL (write, ssize_t, (int fd, const void *buf, size_t count) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (write, ssize_t, (int fd, const void *buf, size_t count)); +# else +/* Need to cast, because on mingw, the third parameter is + unsigned int count + and the return type is 'int'. */ +_GL_CXXALIAS_SYS_CAST (write, ssize_t, (int fd, const void *buf, size_t count)); +# endif +_GL_CXXALIASWARN (write); +#endif + + +#endif /* _@GUARD_PREFIX@_UNISTD_H */ +#endif /* _@GUARD_PREFIX@_UNISTD_H */ diff --git a/gnulib/lib/vasnprintf.c b/gnulib/lib/vasnprintf.c new file mode 100644 index 0000000..0ebddf1 --- /dev/null +++ b/gnulib/lib/vasnprintf.c @@ -0,0 +1,5606 @@ +/* vsprintf with automatic memory allocation. + Copyright (C) 1999, 2002-2012 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, see <http://www.gnu.org/licenses/>. */ + +/* This file can be parametrized with the following macros: + VASNPRINTF The name of the function being defined. + FCHAR_T The element type of the format string. + DCHAR_T The element type of the destination (result) string. + FCHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters + in the format string are ASCII. MUST be set if + FCHAR_T and DCHAR_T are not the same type. + DIRECTIVE Structure denoting a format directive. + Depends on FCHAR_T. + DIRECTIVES Structure denoting the set of format directives of a + format string. Depends on FCHAR_T. + PRINTF_PARSE Function that parses a format string. + Depends on FCHAR_T. + DCHAR_CPY memcpy like function for DCHAR_T[] arrays. + DCHAR_SET memset like function for DCHAR_T[] arrays. + DCHAR_MBSNLEN mbsnlen like function for DCHAR_T[] arrays. + SNPRINTF The system's snprintf (or similar) function. + This may be either snprintf or swprintf. + TCHAR_T The element type of the argument and result string + of the said SNPRINTF function. This may be either + char or wchar_t. The code exploits that + sizeof (TCHAR_T) | sizeof (DCHAR_T) and + alignof (TCHAR_T) <= alignof (DCHAR_T). + DCHAR_IS_TCHAR Set to 1 if DCHAR_T and TCHAR_T are the same type. + DCHAR_CONV_FROM_ENCODING A function to convert from char[] to DCHAR[]. + DCHAR_IS_UINT8_T Set to 1 if DCHAR_T is uint8_t. + DCHAR_IS_UINT16_T Set to 1 if DCHAR_T is uint16_t. + DCHAR_IS_UINT32_T Set to 1 if DCHAR_T is uint32_t. */ + +/* Tell glibc's <stdio.h> to provide a prototype for snprintf(). + This must come before <config.h> because <config.h> may include + <features.h>, and once <features.h> has been included, it's too late. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + +#ifndef VASNPRINTF +# include <config.h> +#endif +#ifndef IN_LIBINTL +# include <alloca.h> +#endif + +/* Specification. */ +#ifndef VASNPRINTF +# if WIDE_CHAR_VERSION +# include "vasnwprintf.h" +# else +# include "vasnprintf.h" +# endif +#endif + +#include <locale.h> /* localeconv() */ +#include <stdio.h> /* snprintf(), sprintf() */ +#include <stdlib.h> /* abort(), malloc(), realloc(), free() */ +#include <string.h> /* memcpy(), strlen() */ +#include <errno.h> /* errno */ +#include <limits.h> /* CHAR_BIT */ +#include <float.h> /* DBL_MAX_EXP, LDBL_MAX_EXP */ +#if HAVE_NL_LANGINFO +# include <langinfo.h> +#endif +#ifndef VASNPRINTF +# if WIDE_CHAR_VERSION +# include "wprintf-parse.h" +# else +# include "printf-parse.h" +# endif +#endif + +/* Checked size_t computations. */ +#include "xsize.h" + +#include "verify.h" + +#if (NEED_PRINTF_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL +# include <math.h> +# include "float+.h" +#endif + +#if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL +# include <math.h> +# include "isnand-nolibm.h" +#endif + +#if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) && !defined IN_LIBINTL +# include <math.h> +# include "isnanl-nolibm.h" +# include "fpucw.h" +#endif + +#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL +# include <math.h> +# include "isnand-nolibm.h" +# include "printf-frexp.h" +#endif + +#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL +# include <math.h> +# include "isnanl-nolibm.h" +# include "printf-frexpl.h" +# include "fpucw.h" +#endif + +/* Default parameters. */ +#ifndef VASNPRINTF +# if WIDE_CHAR_VERSION +# define VASNPRINTF vasnwprintf +# define FCHAR_T wchar_t +# define DCHAR_T wchar_t +# define TCHAR_T wchar_t +# define DCHAR_IS_TCHAR 1 +# define DIRECTIVE wchar_t_directive +# define DIRECTIVES wchar_t_directives +# define PRINTF_PARSE wprintf_parse +# define DCHAR_CPY wmemcpy +# define DCHAR_SET wmemset +# else +# define VASNPRINTF vasnprintf +# define FCHAR_T char +# define DCHAR_T char +# define TCHAR_T char +# define DCHAR_IS_TCHAR 1 +# define DIRECTIVE char_directive +# define DIRECTIVES char_directives +# define PRINTF_PARSE printf_parse +# define DCHAR_CPY memcpy +# define DCHAR_SET memset +# endif +#endif +#if WIDE_CHAR_VERSION + /* TCHAR_T is wchar_t. */ +# define USE_SNPRINTF 1 +# if HAVE_DECL__SNWPRINTF + /* On Windows, the function swprintf() has a different signature than + on Unix; we use the function _snwprintf() or - on mingw - snwprintf() + instead. The mingw function snwprintf() has fewer bugs than the + MSVCRT function _snwprintf(), so prefer that. */ +# if defined __MINGW32__ +# define SNPRINTF snwprintf +# else +# define SNPRINTF _snwprintf +# endif +# else + /* Unix. */ +# define SNPRINTF swprintf +# endif +#else + /* TCHAR_T is char. */ + /* Use snprintf if it exists under the name 'snprintf' or '_snprintf'. + But don't use it on BeOS, since BeOS snprintf produces no output if the + size argument is >= 0x3000000. + Also don't use it on Linux libc5, since there snprintf with size = 1 + writes any output without bounds, like sprintf. */ +# if (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF) && !defined __BEOS__ && !(__GNU_LIBRARY__ == 1) +# define USE_SNPRINTF 1 +# else +# define USE_SNPRINTF 0 +# endif +# if HAVE_DECL__SNPRINTF + /* Windows. The mingw function snprintf() has fewer bugs than the MSVCRT + function _snprintf(), so prefer that. */ +# if defined __MINGW32__ +# define SNPRINTF snprintf + /* Here we need to call the native snprintf, not rpl_snprintf. */ +# undef snprintf +# else +# define SNPRINTF _snprintf +# endif +# else + /* Unix. */ +# define SNPRINTF snprintf + /* Here we need to call the native snprintf, not rpl_snprintf. */ +# undef snprintf +# endif +#endif +/* Here we need to call the native sprintf, not rpl_sprintf. */ +#undef sprintf + +/* GCC >= 4.0 with -Wall emits unjustified "... may be used uninitialized" + warnings in this file. Use -Dlint to suppress them. */ +#ifdef lint +# define IF_LINT(Code) Code +#else +# define IF_LINT(Code) /* empty */ +#endif + +/* Avoid some warnings from "gcc -Wshadow". + This file doesn't use the exp() and remainder() functions. */ +#undef exp +#define exp expo +#undef remainder +#define remainder rem + +#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99) && !WIDE_CHAR_VERSION +# if (HAVE_STRNLEN && !defined _AIX) +# define local_strnlen strnlen +# else +# ifndef local_strnlen_defined +# define local_strnlen_defined 1 +static size_t +local_strnlen (const char *string, size_t maxlen) +{ + const char *end = memchr (string, '\0', maxlen); + return end ? (size_t) (end - string) : maxlen; +} +# endif +# endif +#endif + +#if (((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99) && WIDE_CHAR_VERSION) || ((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && !WIDE_CHAR_VERSION && DCHAR_IS_TCHAR)) && HAVE_WCHAR_T +# if HAVE_WCSLEN +# define local_wcslen wcslen +# else + /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid + a dependency towards this library, here is a local substitute. + Define this substitute only once, even if this file is included + twice in the same compilation unit. */ +# ifndef local_wcslen_defined +# define local_wcslen_defined 1 +static size_t +local_wcslen (const wchar_t *s) +{ + const wchar_t *ptr; + + for (ptr = s; *ptr != (wchar_t) 0; ptr++) + ; + return ptr - s; +} +# endif +# endif +#endif + +#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99) && HAVE_WCHAR_T && WIDE_CHAR_VERSION +# if HAVE_WCSNLEN +# define local_wcsnlen wcsnlen +# else +# ifndef local_wcsnlen_defined +# define local_wcsnlen_defined 1 +static size_t +local_wcsnlen (const wchar_t *s, size_t maxlen) +{ + const wchar_t *ptr; + + for (ptr = s; maxlen > 0 && *ptr != (wchar_t) 0; ptr++, maxlen--) + ; + return ptr - s; +} +# endif +# endif +#endif + +#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL +/* Determine the decimal-point character according to the current locale. */ +# ifndef decimal_point_char_defined +# define decimal_point_char_defined 1 +static char +decimal_point_char (void) +{ + const char *point; + /* Determine it in a multithread-safe way. We know nl_langinfo is + multithread-safe on glibc systems and MacOS X systems, but is not required + to be multithread-safe by POSIX. sprintf(), however, is multithread-safe. + localeconv() is rarely multithread-safe. */ +# if HAVE_NL_LANGINFO && (__GLIBC__ || defined __UCLIBC__ || (defined __APPLE__ && defined __MACH__)) + point = nl_langinfo (RADIXCHAR); +# elif 1 + char pointbuf[5]; + sprintf (pointbuf, "%#.0f", 1.0); + point = &pointbuf[1]; +# else + point = localeconv () -> decimal_point; +# endif + /* The decimal point is always a single byte: either '.' or ','. */ + return (point[0] != '\0' ? point[0] : '.'); +} +# endif +#endif + +#if NEED_PRINTF_INFINITE_DOUBLE && !NEED_PRINTF_DOUBLE && !defined IN_LIBINTL + +/* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ +static int +is_infinite_or_zero (double x) +{ + return isnand (x) || x + x == x; +} + +#endif + +#if NEED_PRINTF_INFINITE_LONG_DOUBLE && !NEED_PRINTF_LONG_DOUBLE && !defined IN_LIBINTL + +/* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ +static int +is_infinite_or_zerol (long double x) +{ + return isnanl (x) || x + x == x; +} + +#endif + +#if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL + +/* Converting 'long double' to decimal without rare rounding bugs requires + real bignums. We use the naming conventions of GNU gmp, but vastly simpler + (and slower) algorithms. */ + +typedef unsigned int mp_limb_t; +# define GMP_LIMB_BITS 32 +verify (sizeof (mp_limb_t) * CHAR_BIT == GMP_LIMB_BITS); + +typedef unsigned long long mp_twolimb_t; +# define GMP_TWOLIMB_BITS 64 +verify (sizeof (mp_twolimb_t) * CHAR_BIT == GMP_TWOLIMB_BITS); + +/* Representation of a bignum >= 0. */ +typedef struct +{ + size_t nlimbs; + mp_limb_t *limbs; /* Bits in little-endian order, allocated with malloc(). */ +} mpn_t; + +/* Compute the product of two bignums >= 0. + Return the allocated memory in case of success, NULL in case of memory + allocation failure. */ +static void * +multiply (mpn_t src1, mpn_t src2, mpn_t *dest) +{ + const mp_limb_t *p1; + const mp_limb_t *p2; + size_t len1; + size_t len2; + + if (src1.nlimbs <= src2.nlimbs) + { + len1 = src1.nlimbs; + p1 = src1.limbs; + len2 = src2.nlimbs; + p2 = src2.limbs; + } + else + { + len1 = src2.nlimbs; + p1 = src2.limbs; + len2 = src1.nlimbs; + p2 = src1.limbs; + } + /* Now 0 <= len1 <= len2. */ + if (len1 == 0) + { + /* src1 or src2 is zero. */ + dest->nlimbs = 0; + dest->limbs = (mp_limb_t *) malloc (1); + } + else + { + /* Here 1 <= len1 <= len2. */ + size_t dlen; + mp_limb_t *dp; + size_t k, i, j; + + dlen = len1 + len2; + dp = (mp_limb_t *) malloc (dlen * sizeof (mp_limb_t)); + if (dp == NULL) + return NULL; + for (k = len2; k > 0; ) + dp[--k] = 0; + for (i = 0; i < len1; i++) + { + mp_limb_t digit1 = p1[i]; + mp_twolimb_t carry = 0; + for (j = 0; j < len2; j++) + { + mp_limb_t digit2 = p2[j]; + carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; + carry += dp[i + j]; + dp[i + j] = (mp_limb_t) carry; + carry = carry >> GMP_LIMB_BITS; + } + dp[i + len2] = (mp_limb_t) carry; + } + /* Normalise. */ + while (dlen > 0 && dp[dlen - 1] == 0) + dlen--; + dest->nlimbs = dlen; + dest->limbs = dp; + } + return dest->limbs; +} + +/* Compute the quotient of a bignum a >= 0 and a bignum b > 0. + a is written as a = q * b + r with 0 <= r < b. q is the quotient, r + the remainder. + Finally, round-to-even is performed: If r > b/2 or if r = b/2 and q is odd, + q is incremented. + Return the allocated memory in case of success, NULL in case of memory + allocation failure. */ +static void * +divide (mpn_t a, mpn_t b, mpn_t *q) +{ + /* Algorithm: + First normalise a and b: a=[a[m-1],...,a[0]], b=[b[n-1],...,b[0]] + with m>=0 and n>0 (in base beta = 2^GMP_LIMB_BITS). + If m<n, then q:=0 and r:=a. + If m>=n=1, perform a single-precision division: + r:=0, j:=m, + while j>0 do + {Here (q[m-1]*beta^(m-1)+...+q[j]*beta^j) * b[0] + r*beta^j = + = a[m-1]*beta^(m-1)+...+a[j]*beta^j und 0<=r<b[0]<beta} + j:=j-1, r:=r*beta+a[j], q[j]:=floor(r/b[0]), r:=r-b[0]*q[j]. + Normalise [q[m-1],...,q[0]], yields q. + If m>=n>1, perform a multiple-precision division: + We have a/b < beta^(m-n+1). + s:=intDsize-1-(highest bit in b[n-1]), 0<=s<intDsize. + Shift a and b left by s bits, copying them. r:=a. + r=[r[m],...,r[0]], b=[b[n-1],...,b[0]] with b[n-1]>=beta/2. + For j=m-n,...,0: {Here 0 <= r < b*beta^(j+1).} + Compute q* : + q* := floor((r[j+n]*beta+r[j+n-1])/b[n-1]). + In case of overflow (q* >= beta) set q* := beta-1. + Compute c2 := ((r[j+n]*beta+r[j+n-1]) - q* * b[n-1])*beta + r[j+n-2] + and c3 := b[n-2] * q*. + {We have 0 <= c2 < 2*beta^2, even 0 <= c2 < beta^2 if no overflow + occurred. Furthermore 0 <= c3 < beta^2. + If there was overflow and + r[j+n]*beta+r[j+n-1] - q* * b[n-1] >= beta, i.e. c2 >= beta^2, + the next test can be skipped.} + While c3 > c2, {Here 0 <= c2 < c3 < beta^2} + Put q* := q* - 1, c2 := c2 + b[n-1]*beta, c3 := c3 - b[n-2]. + If q* > 0: + Put r := r - b * q* * beta^j. In detail: + [r[n+j],...,r[j]] := [r[n+j],...,r[j]] - q* * [b[n-1],...,b[0]]. + hence: u:=0, for i:=0 to n-1 do + u := u + q* * b[i], + r[j+i]:=r[j+i]-(u mod beta) (+ beta, if carry), + u:=u div beta (+ 1, if carry in subtraction) + r[n+j]:=r[n+j]-u. + {Since always u = (q* * [b[i-1],...,b[0]] div beta^i) + 1 + < q* + 1 <= beta, + the carry u does not overflow.} + If a negative carry occurs, put q* := q* - 1 + and [r[n+j],...,r[j]] := [r[n+j],...,r[j]] + [0,b[n-1],...,b[0]]. + Set q[j] := q*. + Normalise [q[m-n],..,q[0]]; this yields the quotient q. + Shift [r[n-1],...,r[0]] right by s bits and normalise; this yields the + rest r. + The room for q[j] can be allocated at the memory location of r[n+j]. + Finally, round-to-even: + Shift r left by 1 bit. + If r > b or if r = b and q[0] is odd, q := q+1. + */ + const mp_limb_t *a_ptr = a.limbs; + size_t a_len = a.nlimbs; + const mp_limb_t *b_ptr = b.limbs; + size_t b_len = b.nlimbs; + mp_limb_t *roomptr; + mp_limb_t *tmp_roomptr = NULL; + mp_limb_t *q_ptr; + size_t q_len; + mp_limb_t *r_ptr; + size_t r_len; + + /* Allocate room for a_len+2 digits. + (Need a_len+1 digits for the real division and 1 more digit for the + final rounding of q.) */ + roomptr = (mp_limb_t *) malloc ((a_len + 2) * sizeof (mp_limb_t)); + if (roomptr == NULL) + return NULL; + + /* Normalise a. */ + while (a_len > 0 && a_ptr[a_len - 1] == 0) + a_len--; + + /* Normalise b. */ + for (;;) + { + if (b_len == 0) + /* Division by zero. */ + abort (); + if (b_ptr[b_len - 1] == 0) + b_len--; + else + break; + } + + /* Here m = a_len >= 0 and n = b_len > 0. */ + + if (a_len < b_len) + { + /* m<n: trivial case. q=0, r := copy of a. */ + r_ptr = roomptr; + r_len = a_len; + memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t)); + q_ptr = roomptr + a_len; + q_len = 0; + } + else if (b_len == 1) + { + /* n=1: single precision division. + beta^(m-1) <= a < beta^m ==> beta^(m-2) <= a/b < beta^m */ + r_ptr = roomptr; + q_ptr = roomptr + 1; + { + mp_limb_t den = b_ptr[0]; + mp_limb_t remainder = 0; + const mp_limb_t *sourceptr = a_ptr + a_len; + mp_limb_t *destptr = q_ptr + a_len; + size_t count; + for (count = a_len; count > 0; count--) + { + mp_twolimb_t num = + ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--sourceptr; + *--destptr = num / den; + remainder = num % den; + } + /* Normalise and store r. */ + if (remainder > 0) + { + r_ptr[0] = remainder; + r_len = 1; + } + else + r_len = 0; + /* Normalise q. */ + q_len = a_len; + if (q_ptr[q_len - 1] == 0) + q_len--; + } + } + else + { + /* n>1: multiple precision division. + beta^(m-1) <= a < beta^m, beta^(n-1) <= b < beta^n ==> + beta^(m-n-1) <= a/b < beta^(m-n+1). */ + /* Determine s. */ + size_t s; + { + mp_limb_t msd = b_ptr[b_len - 1]; /* = b[n-1], > 0 */ + /* Determine s = GMP_LIMB_BITS - integer_length (msd). + Code copied from gnulib's integer_length.c. */ +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) + s = __builtin_clz (msd); +# else +# if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT + if (GMP_LIMB_BITS <= DBL_MANT_BIT) + { + /* Use 'double' operations. + Assumes an IEEE 754 'double' implementation. */ +# define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7) +# define DBL_EXP_BIAS (DBL_EXP_MASK / 2 - 1) +# define NWORDS \ + ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) + union { double value; unsigned int word[NWORDS]; } m; + + /* Use a single integer to floating-point conversion. */ + m.value = msd; + + s = GMP_LIMB_BITS + - (((m.word[DBL_EXPBIT0_WORD] >> DBL_EXPBIT0_BIT) & DBL_EXP_MASK) + - DBL_EXP_BIAS); + } + else +# undef NWORDS +# endif + { + s = 31; + if (msd >= 0x10000) + { + msd = msd >> 16; + s -= 16; + } + if (msd >= 0x100) + { + msd = msd >> 8; + s -= 8; + } + if (msd >= 0x10) + { + msd = msd >> 4; + s -= 4; + } + if (msd >= 0x4) + { + msd = msd >> 2; + s -= 2; + } + if (msd >= 0x2) + { + msd = msd >> 1; + s -= 1; + } + } +# endif + } + /* 0 <= s < GMP_LIMB_BITS. + Copy b, shifting it left by s bits. */ + if (s > 0) + { + tmp_roomptr = (mp_limb_t *) malloc (b_len * sizeof (mp_limb_t)); + if (tmp_roomptr == NULL) + { + free (roomptr); + return NULL; + } + { + const mp_limb_t *sourceptr = b_ptr; + mp_limb_t *destptr = tmp_roomptr; + mp_twolimb_t accu = 0; + size_t count; + for (count = b_len; count > 0; count--) + { + accu += (mp_twolimb_t) *sourceptr++ << s; + *destptr++ = (mp_limb_t) accu; + accu = accu >> GMP_LIMB_BITS; + } + /* accu must be zero, since that was how s was determined. */ + if (accu != 0) + abort (); + } + b_ptr = tmp_roomptr; + } + /* Copy a, shifting it left by s bits, yields r. + Memory layout: + At the beginning: r = roomptr[0..a_len], + at the end: r = roomptr[0..b_len-1], q = roomptr[b_len..a_len] */ + r_ptr = roomptr; + if (s == 0) + { + memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t)); + r_ptr[a_len] = 0; + } + else + { + const mp_limb_t *sourceptr = a_ptr; + mp_limb_t *destptr = r_ptr; + mp_twolimb_t accu = 0; + size_t count; + for (count = a_len; count > 0; count--) + { + accu += (mp_twolimb_t) *sourceptr++ << s; + *destptr++ = (mp_limb_t) accu; + accu = accu >> GMP_LIMB_BITS; + } + *destptr++ = (mp_limb_t) accu; + } + q_ptr = roomptr + b_len; + q_len = a_len - b_len + 1; /* q will have m-n+1 limbs */ + { + size_t j = a_len - b_len; /* m-n */ + mp_limb_t b_msd = b_ptr[b_len - 1]; /* b[n-1] */ + mp_limb_t b_2msd = b_ptr[b_len - 2]; /* b[n-2] */ + mp_twolimb_t b_msdd = /* b[n-1]*beta+b[n-2] */ + ((mp_twolimb_t) b_msd << GMP_LIMB_BITS) | b_2msd; + /* Division loop, traversed m-n+1 times. + j counts down, b is unchanged, beta/2 <= b[n-1] < beta. */ + for (;;) + { + mp_limb_t q_star; + mp_limb_t c1; + if (r_ptr[j + b_len] < b_msd) /* r[j+n] < b[n-1] ? */ + { + /* Divide r[j+n]*beta+r[j+n-1] by b[n-1], no overflow. */ + mp_twolimb_t num = + ((mp_twolimb_t) r_ptr[j + b_len] << GMP_LIMB_BITS) + | r_ptr[j + b_len - 1]; + q_star = num / b_msd; + c1 = num % b_msd; + } + else + { + /* Overflow, hence r[j+n]*beta+r[j+n-1] >= beta*b[n-1]. */ + q_star = (mp_limb_t)~(mp_limb_t)0; /* q* = beta-1 */ + /* Test whether r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] >= beta + <==> r[j+n]*beta+r[j+n-1] + b[n-1] >= beta*b[n-1]+beta + <==> b[n-1] < floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) + {<= beta !}. + If yes, jump directly to the subtraction loop. + (Otherwise, r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] < beta + <==> floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) = b[n-1] ) */ + if (r_ptr[j + b_len] > b_msd + || (c1 = r_ptr[j + b_len - 1] + b_msd) < b_msd) + /* r[j+n] >= b[n-1]+1 or + r[j+n] = b[n-1] and the addition r[j+n-1]+b[n-1] gives a + carry. */ + goto subtract; + } + /* q_star = q*, + c1 = (r[j+n]*beta+r[j+n-1]) - q* * b[n-1] (>=0, <beta). */ + { + mp_twolimb_t c2 = /* c1*beta+r[j+n-2] */ + ((mp_twolimb_t) c1 << GMP_LIMB_BITS) | r_ptr[j + b_len - 2]; + mp_twolimb_t c3 = /* b[n-2] * q* */ + (mp_twolimb_t) b_2msd * (mp_twolimb_t) q_star; + /* While c2 < c3, increase c2 and decrease c3. + Consider c3-c2. While it is > 0, decrease it by + b[n-1]*beta+b[n-2]. Because of b[n-1]*beta+b[n-2] >= beta^2/2 + this can happen only twice. */ + if (c3 > c2) + { + q_star = q_star - 1; /* q* := q* - 1 */ + if (c3 - c2 > b_msdd) + q_star = q_star - 1; /* q* := q* - 1 */ + } + } + if (q_star > 0) + subtract: + { + /* Subtract r := r - b * q* * beta^j. */ + mp_limb_t cr; + { + const mp_limb_t *sourceptr = b_ptr; + mp_limb_t *destptr = r_ptr + j; + mp_twolimb_t carry = 0; + size_t count; + for (count = b_len; count > 0; count--) + { + /* Here 0 <= carry <= q*. */ + carry = + carry + + (mp_twolimb_t) q_star * (mp_twolimb_t) *sourceptr++ + + (mp_limb_t) ~(*destptr); + /* Here 0 <= carry <= beta*q* + beta-1. */ + *destptr++ = ~(mp_limb_t) carry; + carry = carry >> GMP_LIMB_BITS; /* <= q* */ + } + cr = (mp_limb_t) carry; + } + /* Subtract cr from r_ptr[j + b_len], then forget about + r_ptr[j + b_len]. */ + if (cr > r_ptr[j + b_len]) + { + /* Subtraction gave a carry. */ + q_star = q_star - 1; /* q* := q* - 1 */ + /* Add b back. */ + { + const mp_limb_t *sourceptr = b_ptr; + mp_limb_t *destptr = r_ptr + j; + mp_limb_t carry = 0; + size_t count; + for (count = b_len; count > 0; count--) + { + mp_limb_t source1 = *sourceptr++; + mp_limb_t source2 = *destptr; + *destptr++ = source1 + source2 + carry; + carry = + (carry + ? source1 >= (mp_limb_t) ~source2 + : source1 > (mp_limb_t) ~source2); + } + } + /* Forget about the carry and about r[j+n]. */ + } + } + /* q* is determined. Store it as q[j]. */ + q_ptr[j] = q_star; + if (j == 0) + break; + j--; + } + } + r_len = b_len; + /* Normalise q. */ + if (q_ptr[q_len - 1] == 0) + q_len--; +# if 0 /* Not needed here, since we need r only to compare it with b/2, and + b is shifted left by s bits. */ + /* Shift r right by s bits. */ + if (s > 0) + { + mp_limb_t ptr = r_ptr + r_len; + mp_twolimb_t accu = 0; + size_t count; + for (count = r_len; count > 0; count--) + { + accu = (mp_twolimb_t) (mp_limb_t) accu << GMP_LIMB_BITS; + accu += (mp_twolimb_t) *--ptr << (GMP_LIMB_BITS - s); + *ptr = (mp_limb_t) (accu >> GMP_LIMB_BITS); + } + } +# endif + /* Normalise r. */ + while (r_len > 0 && r_ptr[r_len - 1] == 0) + r_len--; + } + /* Compare r << 1 with b. */ + if (r_len > b_len) + goto increment_q; + { + size_t i; + for (i = b_len;;) + { + mp_limb_t r_i = + (i <= r_len && i > 0 ? r_ptr[i - 1] >> (GMP_LIMB_BITS - 1) : 0) + | (i < r_len ? r_ptr[i] << 1 : 0); + mp_limb_t b_i = (i < b_len ? b_ptr[i] : 0); + if (r_i > b_i) + goto increment_q; + if (r_i < b_i) + goto keep_q; + if (i == 0) + break; + i--; + } + } + if (q_len > 0 && ((q_ptr[0] & 1) != 0)) + /* q is odd. */ + increment_q: + { + size_t i; + for (i = 0; i < q_len; i++) + if (++(q_ptr[i]) != 0) + goto keep_q; + q_ptr[q_len++] = 1; + } + keep_q: + if (tmp_roomptr != NULL) + free (tmp_roomptr); + q->limbs = q_ptr; + q->nlimbs = q_len; + return roomptr; +} + +/* Convert a bignum a >= 0, multiplied with 10^extra_zeroes, to decimal + representation. + Destroys the contents of a. + Return the allocated memory - containing the decimal digits in low-to-high + order, terminated with a NUL character - in case of success, NULL in case + of memory allocation failure. */ +static char * +convert_to_decimal (mpn_t a, size_t extra_zeroes) +{ + mp_limb_t *a_ptr = a.limbs; + size_t a_len = a.nlimbs; + /* 0.03345 is slightly larger than log(2)/(9*log(10)). */ + size_t c_len = 9 * ((size_t)(a_len * (GMP_LIMB_BITS * 0.03345f)) + 1); + char *c_ptr = (char *) malloc (xsum (c_len, extra_zeroes)); + if (c_ptr != NULL) + { + char *d_ptr = c_ptr; + for (; extra_zeroes > 0; extra_zeroes--) + *d_ptr++ = '0'; + while (a_len > 0) + { + /* Divide a by 10^9, in-place. */ + mp_limb_t remainder = 0; + mp_limb_t *ptr = a_ptr + a_len; + size_t count; + for (count = a_len; count > 0; count--) + { + mp_twolimb_t num = + ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--ptr; + *ptr = num / 1000000000; + remainder = num % 1000000000; + } + /* Store the remainder as 9 decimal digits. */ + for (count = 9; count > 0; count--) + { + *d_ptr++ = '0' + (remainder % 10); + remainder = remainder / 10; + } + /* Normalize a. */ + if (a_ptr[a_len - 1] == 0) + a_len--; + } + /* Remove leading zeroes. */ + while (d_ptr > c_ptr && d_ptr[-1] == '0') + d_ptr--; + /* But keep at least one zero. */ + if (d_ptr == c_ptr) + *d_ptr++ = '0'; + /* Terminate the string. */ + *d_ptr = '\0'; + } + return c_ptr; +} + +# if NEED_PRINTF_LONG_DOUBLE + +/* Assuming x is finite and >= 0: + write x as x = 2^e * m, where m is a bignum. + Return the allocated memory in case of success, NULL in case of memory + allocation failure. */ +static void * +decode_long_double (long double x, int *ep, mpn_t *mp) +{ + mpn_t m; + int exp; + long double y; + size_t i; + + /* Allocate memory for result. */ + m.nlimbs = (LDBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; + m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); + if (m.limbs == NULL) + return NULL; + /* Split into exponential part and mantissa. */ + y = frexpl (x, &exp); + if (!(y >= 0.0L && y < 1.0L)) + abort (); + /* x = 2^exp * y = 2^(exp - LDBL_MANT_BIT) * (y * 2^LDBL_MANT_BIT), and the + latter is an integer. */ + /* Convert the mantissa (y * 2^LDBL_MANT_BIT) to a sequence of limbs. + I'm not sure whether it's safe to cast a 'long double' value between + 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only + 'long double' values between 0 and 2^16 (to 'unsigned int' or 'int', + doesn't matter). */ +# if (LDBL_MANT_BIT % GMP_LIMB_BITS) != 0 +# if (LDBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 + { + mp_limb_t hi, lo; + y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % (GMP_LIMB_BITS / 2)); + hi = (int) y; + y -= hi; + if (!(y >= 0.0L && y < 1.0L)) + abort (); + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + lo = (int) y; + y -= lo; + if (!(y >= 0.0L && y < 1.0L)) + abort (); + m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; + } +# else + { + mp_limb_t d; + y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % GMP_LIMB_BITS); + d = (int) y; + y -= d; + if (!(y >= 0.0L && y < 1.0L)) + abort (); + m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = d; + } +# endif +# endif + for (i = LDBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) + { + mp_limb_t hi, lo; + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + hi = (int) y; + y -= hi; + if (!(y >= 0.0L && y < 1.0L)) + abort (); + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + lo = (int) y; + y -= lo; + if (!(y >= 0.0L && y < 1.0L)) + abort (); + m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; + } +# if 0 /* On FreeBSD 6.1/x86, 'long double' numbers sometimes have excess + precision. */ + if (!(y == 0.0L)) + abort (); +# endif + /* Normalise. */ + while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) + m.nlimbs--; + *mp = m; + *ep = exp - LDBL_MANT_BIT; + return m.limbs; +} + +# endif + +# if NEED_PRINTF_DOUBLE + +/* Assuming x is finite and >= 0: + write x as x = 2^e * m, where m is a bignum. + Return the allocated memory in case of success, NULL in case of memory + allocation failure. */ +static void * +decode_double (double x, int *ep, mpn_t *mp) +{ + mpn_t m; + int exp; + double y; + size_t i; + + /* Allocate memory for result. */ + m.nlimbs = (DBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; + m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); + if (m.limbs == NULL) + return NULL; + /* Split into exponential part and mantissa. */ + y = frexp (x, &exp); + if (!(y >= 0.0 && y < 1.0)) + abort (); + /* x = 2^exp * y = 2^(exp - DBL_MANT_BIT) * (y * 2^DBL_MANT_BIT), and the + latter is an integer. */ + /* Convert the mantissa (y * 2^DBL_MANT_BIT) to a sequence of limbs. + I'm not sure whether it's safe to cast a 'double' value between + 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only + 'double' values between 0 and 2^16 (to 'unsigned int' or 'int', + doesn't matter). */ +# if (DBL_MANT_BIT % GMP_LIMB_BITS) != 0 +# if (DBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 + { + mp_limb_t hi, lo; + y *= (mp_limb_t) 1 << (DBL_MANT_BIT % (GMP_LIMB_BITS / 2)); + hi = (int) y; + y -= hi; + if (!(y >= 0.0 && y < 1.0)) + abort (); + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + lo = (int) y; + y -= lo; + if (!(y >= 0.0 && y < 1.0)) + abort (); + m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; + } +# else + { + mp_limb_t d; + y *= (mp_limb_t) 1 << (DBL_MANT_BIT % GMP_LIMB_BITS); + d = (int) y; + y -= d; + if (!(y >= 0.0 && y < 1.0)) + abort (); + m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = d; + } +# endif +# endif + for (i = DBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) + { + mp_limb_t hi, lo; + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + hi = (int) y; + y -= hi; + if (!(y >= 0.0 && y < 1.0)) + abort (); + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + lo = (int) y; + y -= lo; + if (!(y >= 0.0 && y < 1.0)) + abort (); + m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; + } + if (!(y == 0.0)) + abort (); + /* Normalise. */ + while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) + m.nlimbs--; + *mp = m; + *ep = exp - DBL_MANT_BIT; + return m.limbs; +} + +# endif + +/* Assuming x = 2^e * m is finite and >= 0, and n is an integer: + Returns the decimal representation of round (x * 10^n). + Return the allocated memory - containing the decimal digits in low-to-high + order, terminated with a NUL character - in case of success, NULL in case + of memory allocation failure. */ +static char * +scale10_round_decimal_decoded (int e, mpn_t m, void *memory, int n) +{ + int s; + size_t extra_zeroes; + unsigned int abs_n; + unsigned int abs_s; + mp_limb_t *pow5_ptr; + size_t pow5_len; + unsigned int s_limbs; + unsigned int s_bits; + mpn_t pow5; + mpn_t z; + void *z_memory; + char *digits; + + if (memory == NULL) + return NULL; + /* x = 2^e * m, hence + y = round (2^e * 10^n * m) = round (2^(e+n) * 5^n * m) + = round (2^s * 5^n * m). */ + s = e + n; + extra_zeroes = 0; + /* Factor out a common power of 10 if possible. */ + if (s > 0 && n > 0) + { + extra_zeroes = (s < n ? s : n); + s -= extra_zeroes; + n -= extra_zeroes; + } + /* Here y = round (2^s * 5^n * m) * 10^extra_zeroes. + Before converting to decimal, we need to compute + z = round (2^s * 5^n * m). */ + /* Compute 5^|n|, possibly shifted by |s| bits if n and s have the same + sign. 2.322 is slightly larger than log(5)/log(2). */ + abs_n = (n >= 0 ? n : -n); + abs_s = (s >= 0 ? s : -s); + pow5_ptr = (mp_limb_t *) malloc (((int)(abs_n * (2.322f / GMP_LIMB_BITS)) + 1 + + abs_s / GMP_LIMB_BITS + 1) + * sizeof (mp_limb_t)); + if (pow5_ptr == NULL) + { + free (memory); + return NULL; + } + /* Initialize with 1. */ + pow5_ptr[0] = 1; + pow5_len = 1; + /* Multiply with 5^|n|. */ + if (abs_n > 0) + { + static mp_limb_t const small_pow5[13 + 1] = + { + 1, 5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625, + 48828125, 244140625, 1220703125 + }; + unsigned int n13; + for (n13 = 0; n13 <= abs_n; n13 += 13) + { + mp_limb_t digit1 = small_pow5[n13 + 13 <= abs_n ? 13 : abs_n - n13]; + size_t j; + mp_twolimb_t carry = 0; + for (j = 0; j < pow5_len; j++) + { + mp_limb_t digit2 = pow5_ptr[j]; + carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; + pow5_ptr[j] = (mp_limb_t) carry; + carry = carry >> GMP_LIMB_BITS; + } + if (carry > 0) + pow5_ptr[pow5_len++] = (mp_limb_t) carry; + } + } + s_limbs = abs_s / GMP_LIMB_BITS; + s_bits = abs_s % GMP_LIMB_BITS; + if (n >= 0 ? s >= 0 : s <= 0) + { + /* Multiply with 2^|s|. */ + if (s_bits > 0) + { + mp_limb_t *ptr = pow5_ptr; + mp_twolimb_t accu = 0; + size_t count; + for (count = pow5_len; count > 0; count--) + { + accu += (mp_twolimb_t) *ptr << s_bits; + *ptr++ = (mp_limb_t) accu; + accu = accu >> GMP_LIMB_BITS; + } + if (accu > 0) + { + *ptr = (mp_limb_t) accu; + pow5_len++; + } + } + if (s_limbs > 0) + { + size_t count; + for (count = pow5_len; count > 0;) + { + count--; + pow5_ptr[s_limbs + count] = pow5_ptr[count]; + } + for (count = s_limbs; count > 0;) + { + count--; + pow5_ptr[count] = 0; + } + pow5_len += s_limbs; + } + pow5.limbs = pow5_ptr; + pow5.nlimbs = pow5_len; + if (n >= 0) + { + /* Multiply m with pow5. No division needed. */ + z_memory = multiply (m, pow5, &z); + } + else + { + /* Divide m by pow5 and round. */ + z_memory = divide (m, pow5, &z); + } + } + else + { + pow5.limbs = pow5_ptr; + pow5.nlimbs = pow5_len; + if (n >= 0) + { + /* n >= 0, s < 0. + Multiply m with pow5, then divide by 2^|s|. */ + mpn_t numerator; + mpn_t denominator; + void *tmp_memory; + tmp_memory = multiply (m, pow5, &numerator); + if (tmp_memory == NULL) + { + free (pow5_ptr); + free (memory); + return NULL; + } + /* Construct 2^|s|. */ + { + mp_limb_t *ptr = pow5_ptr + pow5_len; + size_t i; + for (i = 0; i < s_limbs; i++) + ptr[i] = 0; + ptr[s_limbs] = (mp_limb_t) 1 << s_bits; + denominator.limbs = ptr; + denominator.nlimbs = s_limbs + 1; + } + z_memory = divide (numerator, denominator, &z); + free (tmp_memory); + } + else + { + /* n < 0, s > 0. + Multiply m with 2^s, then divide by pow5. */ + mpn_t numerator; + mp_limb_t *num_ptr; + num_ptr = (mp_limb_t *) malloc ((m.nlimbs + s_limbs + 1) + * sizeof (mp_limb_t)); + if (num_ptr == NULL) + { + free (pow5_ptr); + free (memory); + return NULL; + } + { + mp_limb_t *destptr = num_ptr; + { + size_t i; + for (i = 0; i < s_limbs; i++) + *destptr++ = 0; + } + if (s_bits > 0) + { + const mp_limb_t *sourceptr = m.limbs; + mp_twolimb_t accu = 0; + size_t count; + for (count = m.nlimbs; count > 0; count--) + { + accu += (mp_twolimb_t) *sourceptr++ << s_bits; + *destptr++ = (mp_limb_t) accu; + accu = accu >> GMP_LIMB_BITS; + } + if (accu > 0) + *destptr++ = (mp_limb_t) accu; + } + else + { + const mp_limb_t *sourceptr = m.limbs; + size_t count; + for (count = m.nlimbs; count > 0; count--) + *destptr++ = *sourceptr++; + } + numerator.limbs = num_ptr; + numerator.nlimbs = destptr - num_ptr; + } + z_memory = divide (numerator, pow5, &z); + free (num_ptr); + } + } + free (pow5_ptr); + free (memory); + + /* Here y = round (x * 10^n) = z * 10^extra_zeroes. */ + + if (z_memory == NULL) + return NULL; + digits = convert_to_decimal (z, extra_zeroes); + free (z_memory); + return digits; +} + +# if NEED_PRINTF_LONG_DOUBLE + +/* Assuming x is finite and >= 0, and n is an integer: + Returns the decimal representation of round (x * 10^n). + Return the allocated memory - containing the decimal digits in low-to-high + order, terminated with a NUL character - in case of success, NULL in case + of memory allocation failure. */ +static char * +scale10_round_decimal_long_double (long double x, int n) +{ + int e IF_LINT(= 0); + mpn_t m; + void *memory = decode_long_double (x, &e, &m); + return scale10_round_decimal_decoded (e, m, memory, n); +} + +# endif + +# if NEED_PRINTF_DOUBLE + +/* Assuming x is finite and >= 0, and n is an integer: + Returns the decimal representation of round (x * 10^n). + Return the allocated memory - containing the decimal digits in low-to-high + order, terminated with a NUL character - in case of success, NULL in case + of memory allocation failure. */ +static char * +scale10_round_decimal_double (double x, int n) +{ + int e IF_LINT(= 0); + mpn_t m; + void *memory = decode_double (x, &e, &m); + return scale10_round_decimal_decoded (e, m, memory, n); +} + +# endif + +# if NEED_PRINTF_LONG_DOUBLE + +/* Assuming x is finite and > 0: + Return an approximation for n with 10^n <= x < 10^(n+1). + The approximation is usually the right n, but may be off by 1 sometimes. */ +static int +floorlog10l (long double x) +{ + int exp; + long double y; + double z; + double l; + + /* Split into exponential part and mantissa. */ + y = frexpl (x, &exp); + if (!(y >= 0.0L && y < 1.0L)) + abort (); + if (y == 0.0L) + return INT_MIN; + if (y < 0.5L) + { + while (y < (1.0L / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) + { + y *= 1.0L * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); + exp -= GMP_LIMB_BITS; + } + if (y < (1.0L / (1 << 16))) + { + y *= 1.0L * (1 << 16); + exp -= 16; + } + if (y < (1.0L / (1 << 8))) + { + y *= 1.0L * (1 << 8); + exp -= 8; + } + if (y < (1.0L / (1 << 4))) + { + y *= 1.0L * (1 << 4); + exp -= 4; + } + if (y < (1.0L / (1 << 2))) + { + y *= 1.0L * (1 << 2); + exp -= 2; + } + if (y < (1.0L / (1 << 1))) + { + y *= 1.0L * (1 << 1); + exp -= 1; + } + } + if (!(y >= 0.5L && y < 1.0L)) + abort (); + /* Compute an approximation for l = log2(x) = exp + log2(y). */ + l = exp; + z = y; + if (z < 0.70710678118654752444) + { + z *= 1.4142135623730950488; + l -= 0.5; + } + if (z < 0.8408964152537145431) + { + z *= 1.1892071150027210667; + l -= 0.25; + } + if (z < 0.91700404320467123175) + { + z *= 1.0905077326652576592; + l -= 0.125; + } + if (z < 0.9576032806985736469) + { + z *= 1.0442737824274138403; + l -= 0.0625; + } + /* Now 0.95 <= z <= 1.01. */ + z = 1 - z; + /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...) + Four terms are enough to get an approximation with error < 10^-7. */ + l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); + /* Finally multiply with log(2)/log(10), yields an approximation for + log10(x). */ + l *= 0.30102999566398119523; + /* Round down to the next integer. */ + return (int) l + (l < 0 ? -1 : 0); +} + +# endif + +# if NEED_PRINTF_DOUBLE + +/* Assuming x is finite and > 0: + Return an approximation for n with 10^n <= x < 10^(n+1). + The approximation is usually the right n, but may be off by 1 sometimes. */ +static int +floorlog10 (double x) +{ + int exp; + double y; + double z; + double l; + + /* Split into exponential part and mantissa. */ + y = frexp (x, &exp); + if (!(y >= 0.0 && y < 1.0)) + abort (); + if (y == 0.0) + return INT_MIN; + if (y < 0.5) + { + while (y < (1.0 / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) + { + y *= 1.0 * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); + exp -= GMP_LIMB_BITS; + } + if (y < (1.0 / (1 << 16))) + { + y *= 1.0 * (1 << 16); + exp -= 16; + } + if (y < (1.0 / (1 << 8))) + { + y *= 1.0 * (1 << 8); + exp -= 8; + } + if (y < (1.0 / (1 << 4))) + { + y *= 1.0 * (1 << 4); + exp -= 4; + } + if (y < (1.0 / (1 << 2))) + { + y *= 1.0 * (1 << 2); + exp -= 2; + } + if (y < (1.0 / (1 << 1))) + { + y *= 1.0 * (1 << 1); + exp -= 1; + } + } + if (!(y >= 0.5 && y < 1.0)) + abort (); + /* Compute an approximation for l = log2(x) = exp + log2(y). */ + l = exp; + z = y; + if (z < 0.70710678118654752444) + { + z *= 1.4142135623730950488; + l -= 0.5; + } + if (z < 0.8408964152537145431) + { + z *= 1.1892071150027210667; + l -= 0.25; + } + if (z < 0.91700404320467123175) + { + z *= 1.0905077326652576592; + l -= 0.125; + } + if (z < 0.9576032806985736469) + { + z *= 1.0442737824274138403; + l -= 0.0625; + } + /* Now 0.95 <= z <= 1.01. */ + z = 1 - z; + /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...) + Four terms are enough to get an approximation with error < 10^-7. */ + l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); + /* Finally multiply with log(2)/log(10), yields an approximation for + log10(x). */ + l *= 0.30102999566398119523; + /* Round down to the next integer. */ + return (int) l + (l < 0 ? -1 : 0); +} + +# endif + +/* Tests whether a string of digits consists of exactly PRECISION zeroes and + a single '1' digit. */ +static int +is_borderline (const char *digits, size_t precision) +{ + for (; precision > 0; precision--, digits++) + if (*digits != '0') + return 0; + if (*digits != '1') + return 0; + digits++; + return *digits == '\0'; +} + +#endif + +#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 + +/* Use a different function name, to make it possible that the 'wchar_t' + parametrization and the 'char' parametrization get compiled in the same + translation unit. */ +# if WIDE_CHAR_VERSION +# define MAX_ROOM_NEEDED wmax_room_needed +# else +# define MAX_ROOM_NEEDED max_room_needed +# endif + +/* Returns the number of TCHAR_T units needed as temporary space for the result + of sprintf or SNPRINTF of a single conversion directive. */ +static inline size_t +MAX_ROOM_NEEDED (const arguments *ap, size_t arg_index, FCHAR_T conversion, + arg_type type, int flags, size_t width, int has_precision, + size_t precision, int pad_ourselves) +{ + size_t tmp_length; + + switch (conversion) + { + case 'd': case 'i': case 'u': +# if HAVE_LONG_LONG_INT + if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long long) * CHAR_BIT + * 0.30103 /* binary -> decimal */ + ) + + 1; /* turn floor into ceil */ + else +# endif + if (type == TYPE_LONGINT || type == TYPE_ULONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long) * CHAR_BIT + * 0.30103 /* binary -> decimal */ + ) + + 1; /* turn floor into ceil */ + else + tmp_length = + (unsigned int) (sizeof (unsigned int) * CHAR_BIT + * 0.30103 /* binary -> decimal */ + ) + + 1; /* turn floor into ceil */ + if (tmp_length < precision) + tmp_length = precision; + /* Multiply by 2, as an estimate for FLAG_GROUP. */ + tmp_length = xsum (tmp_length, tmp_length); + /* Add 1, to account for a leading sign. */ + tmp_length = xsum (tmp_length, 1); + break; + + case 'o': +# if HAVE_LONG_LONG_INT + if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long long) * CHAR_BIT + * 0.333334 /* binary -> octal */ + ) + + 1; /* turn floor into ceil */ + else +# endif + if (type == TYPE_LONGINT || type == TYPE_ULONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long) * CHAR_BIT + * 0.333334 /* binary -> octal */ + ) + + 1; /* turn floor into ceil */ + else + tmp_length = + (unsigned int) (sizeof (unsigned int) * CHAR_BIT + * 0.333334 /* binary -> octal */ + ) + + 1; /* turn floor into ceil */ + if (tmp_length < precision) + tmp_length = precision; + /* Add 1, to account for a leading sign. */ + tmp_length = xsum (tmp_length, 1); + break; + + case 'x': case 'X': +# if HAVE_LONG_LONG_INT + if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long long) * CHAR_BIT + * 0.25 /* binary -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + else +# endif + if (type == TYPE_LONGINT || type == TYPE_ULONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long) * CHAR_BIT + * 0.25 /* binary -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + else + tmp_length = + (unsigned int) (sizeof (unsigned int) * CHAR_BIT + * 0.25 /* binary -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + if (tmp_length < precision) + tmp_length = precision; + /* Add 2, to account for a leading sign or alternate form. */ + tmp_length = xsum (tmp_length, 2); + break; + + case 'f': case 'F': + if (type == TYPE_LONGDOUBLE) + tmp_length = + (unsigned int) (LDBL_MAX_EXP + * 0.30103 /* binary -> decimal */ + * 2 /* estimate for FLAG_GROUP */ + ) + + 1 /* turn floor into ceil */ + + 10; /* sign, decimal point etc. */ + else + tmp_length = + (unsigned int) (DBL_MAX_EXP + * 0.30103 /* binary -> decimal */ + * 2 /* estimate for FLAG_GROUP */ + ) + + 1 /* turn floor into ceil */ + + 10; /* sign, decimal point etc. */ + tmp_length = xsum (tmp_length, precision); + break; + + case 'e': case 'E': case 'g': case 'G': + tmp_length = + 12; /* sign, decimal point, exponent etc. */ + tmp_length = xsum (tmp_length, precision); + break; + + case 'a': case 'A': + if (type == TYPE_LONGDOUBLE) + tmp_length = + (unsigned int) (LDBL_DIG + * 0.831 /* decimal -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + else + tmp_length = + (unsigned int) (DBL_DIG + * 0.831 /* decimal -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + if (tmp_length < precision) + tmp_length = precision; + /* Account for sign, decimal point etc. */ + tmp_length = xsum (tmp_length, 12); + break; + + case 'c': +# if HAVE_WINT_T && !WIDE_CHAR_VERSION + if (type == TYPE_WIDE_CHAR) + tmp_length = MB_CUR_MAX; + else +# endif + tmp_length = 1; + break; + + case 's': +# if HAVE_WCHAR_T + if (type == TYPE_WIDE_STRING) + { +# if WIDE_CHAR_VERSION + /* ISO C says about %ls in fwprintf: + "If the precision is not specified or is greater than the size + of the array, the array shall contain a null wide character." + So if there is a precision, we must not use wcslen. */ + const wchar_t *arg = ap->arg[arg_index].a.a_wide_string; + + if (has_precision) + tmp_length = local_wcsnlen (arg, precision); + else + tmp_length = local_wcslen (arg); +# else + /* ISO C says about %ls in fprintf: + "If a precision is specified, no more than that many bytes are + written (including shift sequences, if any), and the array + shall contain a null wide character if, to equal the multibyte + character sequence length given by the precision, the function + would need to access a wide character one past the end of the + array." + So if there is a precision, we must not use wcslen. */ + /* This case has already been handled separately in VASNPRINTF. */ + abort (); +# endif + } + else +# endif + { +# if WIDE_CHAR_VERSION + /* ISO C says about %s in fwprintf: + "If the precision is not specified or is greater than the size + of the converted array, the converted array shall contain a + null wide character." + So if there is a precision, we must not use strlen. */ + /* This case has already been handled separately in VASNPRINTF. */ + abort (); +# else + /* ISO C says about %s in fprintf: + "If the precision is not specified or greater than the size of + the array, the array shall contain a null character." + So if there is a precision, we must not use strlen. */ + const char *arg = ap->arg[arg_index].a.a_string; + + if (has_precision) + tmp_length = local_strnlen (arg, precision); + else + tmp_length = strlen (arg); +# endif + } + break; + + case 'p': + tmp_length = + (unsigned int) (sizeof (void *) * CHAR_BIT + * 0.25 /* binary -> hexadecimal */ + ) + + 1 /* turn floor into ceil */ + + 2; /* account for leading 0x */ + break; + + default: + abort (); + } + + if (!pad_ourselves) + { +# if ENABLE_UNISTDIO + /* Padding considers the number of characters, therefore the number of + elements after padding may be + > max (tmp_length, width) + but is certainly + <= tmp_length + width. */ + tmp_length = xsum (tmp_length, width); +# else + /* Padding considers the number of elements, says POSIX. */ + if (tmp_length < width) + tmp_length = width; +# endif + } + + tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ + + return tmp_length; +} + +#endif + +DCHAR_T * +VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, + const FCHAR_T *format, va_list args) +{ + DIRECTIVES d; + arguments a; + + if (PRINTF_PARSE (format, &d, &a) < 0) + /* errno is already set. */ + return NULL; + +#define CLEANUP() \ + if (d.dir != d.direct_alloc_dir) \ + free (d.dir); \ + if (a.arg != a.direct_alloc_arg) \ + free (a.arg); + + if (PRINTF_FETCHARGS (args, &a) < 0) + { + CLEANUP (); + errno = EINVAL; + return NULL; + } + + { + size_t buf_neededlength; + TCHAR_T *buf; + TCHAR_T *buf_malloced; + const FCHAR_T *cp; + size_t i; + DIRECTIVE *dp; + /* Output string accumulator. */ + DCHAR_T *result; + size_t allocated; + size_t length; + + /* Allocate a small buffer that will hold a directive passed to + sprintf or snprintf. */ + buf_neededlength = + xsum4 (7, d.max_width_length, d.max_precision_length, 6); +#if HAVE_ALLOCA + if (buf_neededlength < 4000 / sizeof (TCHAR_T)) + { + buf = (TCHAR_T *) alloca (buf_neededlength * sizeof (TCHAR_T)); + buf_malloced = NULL; + } + else +#endif + { + size_t buf_memsize = xtimes (buf_neededlength, sizeof (TCHAR_T)); + if (size_overflow_p (buf_memsize)) + goto out_of_memory_1; + buf = (TCHAR_T *) malloc (buf_memsize); + if (buf == NULL) + goto out_of_memory_1; + buf_malloced = buf; + } + + if (resultbuf != NULL) + { + result = resultbuf; + allocated = *lengthp; + } + else + { + result = NULL; + allocated = 0; + } + length = 0; + /* Invariants: + result is either == resultbuf or == NULL or malloc-allocated. + If length > 0, then result != NULL. */ + + /* Ensures that allocated >= needed. Aborts through a jump to + out_of_memory if needed is SIZE_MAX or otherwise too big. */ +#define ENSURE_ALLOCATION(needed) \ + if ((needed) > allocated) \ + { \ + size_t memory_size; \ + DCHAR_T *memory; \ + \ + allocated = (allocated > 0 ? xtimes (allocated, 2) : 12); \ + if ((needed) > allocated) \ + allocated = (needed); \ + memory_size = xtimes (allocated, sizeof (DCHAR_T)); \ + if (size_overflow_p (memory_size)) \ + goto out_of_memory; \ + if (result == resultbuf || result == NULL) \ + memory = (DCHAR_T *) malloc (memory_size); \ + else \ + memory = (DCHAR_T *) realloc (result, memory_size); \ + if (memory == NULL) \ + goto out_of_memory; \ + if (result == resultbuf && length > 0) \ + DCHAR_CPY (memory, result, length); \ + result = memory; \ + } + + for (cp = format, i = 0, dp = &d.dir[0]; ; cp = dp->dir_end, i++, dp++) + { + if (cp != dp->dir_start) + { + size_t n = dp->dir_start - cp; + size_t augmented_length = xsum (length, n); + + ENSURE_ALLOCATION (augmented_length); + /* This copies a piece of FCHAR_T[] into a DCHAR_T[]. Here we + need that the format string contains only ASCII characters + if FCHAR_T and DCHAR_T are not the same type. */ + if (sizeof (FCHAR_T) == sizeof (DCHAR_T)) + { + DCHAR_CPY (result + length, (const DCHAR_T *) cp, n); + length = augmented_length; + } + else + { + do + result[length++] = (unsigned char) *cp++; + while (--n > 0); + } + } + if (i == d.count) + break; + + /* Execute a single directive. */ + if (dp->conversion == '%') + { + size_t augmented_length; + + if (!(dp->arg_index == ARG_NONE)) + abort (); + augmented_length = xsum (length, 1); + ENSURE_ALLOCATION (augmented_length); + result[length] = '%'; + length = augmented_length; + } + else + { + if (!(dp->arg_index != ARG_NONE)) + abort (); + + if (dp->conversion == 'n') + { + switch (a.arg[dp->arg_index].type) + { + case TYPE_COUNT_SCHAR_POINTER: + *a.arg[dp->arg_index].a.a_count_schar_pointer = length; + break; + case TYPE_COUNT_SHORT_POINTER: + *a.arg[dp->arg_index].a.a_count_short_pointer = length; + break; + case TYPE_COUNT_INT_POINTER: + *a.arg[dp->arg_index].a.a_count_int_pointer = length; + break; + case TYPE_COUNT_LONGINT_POINTER: + *a.arg[dp->arg_index].a.a_count_longint_pointer = length; + break; +#if HAVE_LONG_LONG_INT + case TYPE_COUNT_LONGLONGINT_POINTER: + *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length; + break; +#endif + default: + abort (); + } + } +#if ENABLE_UNISTDIO + /* The unistdio extensions. */ + else if (dp->conversion == 'U') + { + arg_type type = a.arg[dp->arg_index].type; + int flags = dp->flags; + int has_width; + size_t width; + int has_precision; + size_t precision; + + has_width = 0; + width = 0; + if (dp->width_start != dp->width_end) + { + if (dp->width_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->width_arg_index].a.a_int; + if (arg < 0) + { + /* "A negative field width is taken as a '-' flag + followed by a positive field width." */ + flags |= FLAG_LEFT; + width = (unsigned int) (-arg); + } + else + width = arg; + } + else + { + const FCHAR_T *digitp = dp->width_start; + + do + width = xsum (xtimes (width, 10), *digitp++ - '0'); + while (digitp != dp->width_end); + } + has_width = 1; + } + + has_precision = 0; + precision = 0; + if (dp->precision_start != dp->precision_end) + { + if (dp->precision_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->precision_arg_index].a.a_int; + /* "A negative precision is taken as if the precision + were omitted." */ + if (arg >= 0) + { + precision = arg; + has_precision = 1; + } + } + else + { + const FCHAR_T *digitp = dp->precision_start + 1; + + precision = 0; + while (digitp != dp->precision_end) + precision = xsum (xtimes (precision, 10), *digitp++ - '0'); + has_precision = 1; + } + } + + switch (type) + { + case TYPE_U8_STRING: + { + const uint8_t *arg = a.arg[dp->arg_index].a.a_u8_string; + const uint8_t *arg_end; + size_t characters; + + if (has_precision) + { + /* Use only PRECISION characters, from the left. */ + arg_end = arg; + characters = 0; + for (; precision > 0; precision--) + { + int count = u8_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else if (has_width) + { + /* Use the entire string, and count the number of + characters. */ + arg_end = arg; + characters = 0; + for (;;) + { + int count = u8_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else + { + /* Use the entire string. */ + arg_end = arg + u8_strlen (arg); + /* The number of characters doesn't matter. */ + characters = 0; + } + + if (has_width && width > characters + && !(dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + +# if DCHAR_IS_UINT8_T + { + size_t n = arg_end - arg; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_CPY (result + length, arg, n); + length += n; + } +# else + { /* Convert. */ + DCHAR_T *converted = result + length; + size_t converted_len = allocated - length; +# if DCHAR_IS_TCHAR + /* Convert from UTF-8 to locale encoding. */ + converted = + u8_conv_to_encoding (locale_charset (), + iconveh_question_mark, + arg, arg_end - arg, NULL, + converted, &converted_len); +# else + /* Convert from UTF-8 to UTF-16/UTF-32. */ + converted = + U8_TO_DCHAR (arg, arg_end - arg, + converted, &converted_len); +# endif + if (converted == NULL) + { + int saved_errno = errno; + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = saved_errno; + return NULL; + } + if (converted != result + length) + { + ENSURE_ALLOCATION (xsum (length, converted_len)); + DCHAR_CPY (result + length, converted, converted_len); + free (converted); + } + length += converted_len; + } +# endif + + if (has_width && width > characters + && (dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + } + break; + + case TYPE_U16_STRING: + { + const uint16_t *arg = a.arg[dp->arg_index].a.a_u16_string; + const uint16_t *arg_end; + size_t characters; + + if (has_precision) + { + /* Use only PRECISION characters, from the left. */ + arg_end = arg; + characters = 0; + for (; precision > 0; precision--) + { + int count = u16_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else if (has_width) + { + /* Use the entire string, and count the number of + characters. */ + arg_end = arg; + characters = 0; + for (;;) + { + int count = u16_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else + { + /* Use the entire string. */ + arg_end = arg + u16_strlen (arg); + /* The number of characters doesn't matter. */ + characters = 0; + } + + if (has_width && width > characters + && !(dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + +# if DCHAR_IS_UINT16_T + { + size_t n = arg_end - arg; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_CPY (result + length, arg, n); + length += n; + } +# else + { /* Convert. */ + DCHAR_T *converted = result + length; + size_t converted_len = allocated - length; +# if DCHAR_IS_TCHAR + /* Convert from UTF-16 to locale encoding. */ + converted = + u16_conv_to_encoding (locale_charset (), + iconveh_question_mark, + arg, arg_end - arg, NULL, + converted, &converted_len); +# else + /* Convert from UTF-16 to UTF-8/UTF-32. */ + converted = + U16_TO_DCHAR (arg, arg_end - arg, + converted, &converted_len); +# endif + if (converted == NULL) + { + int saved_errno = errno; + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = saved_errno; + return NULL; + } + if (converted != result + length) + { + ENSURE_ALLOCATION (xsum (length, converted_len)); + DCHAR_CPY (result + length, converted, converted_len); + free (converted); + } + length += converted_len; + } +# endif + + if (has_width && width > characters + && (dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + } + break; + + case TYPE_U32_STRING: + { + const uint32_t *arg = a.arg[dp->arg_index].a.a_u32_string; + const uint32_t *arg_end; + size_t characters; + + if (has_precision) + { + /* Use only PRECISION characters, from the left. */ + arg_end = arg; + characters = 0; + for (; precision > 0; precision--) + { + int count = u32_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else if (has_width) + { + /* Use the entire string, and count the number of + characters. */ + arg_end = arg; + characters = 0; + for (;;) + { + int count = u32_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else + { + /* Use the entire string. */ + arg_end = arg + u32_strlen (arg); + /* The number of characters doesn't matter. */ + characters = 0; + } + + if (has_width && width > characters + && !(dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + +# if DCHAR_IS_UINT32_T + { + size_t n = arg_end - arg; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_CPY (result + length, arg, n); + length += n; + } +# else + { /* Convert. */ + DCHAR_T *converted = result + length; + size_t converted_len = allocated - length; +# if DCHAR_IS_TCHAR + /* Convert from UTF-32 to locale encoding. */ + converted = + u32_conv_to_encoding (locale_charset (), + iconveh_question_mark, + arg, arg_end - arg, NULL, + converted, &converted_len); +# else + /* Convert from UTF-32 to UTF-8/UTF-16. */ + converted = + U32_TO_DCHAR (arg, arg_end - arg, + converted, &converted_len); +# endif + if (converted == NULL) + { + int saved_errno = errno; + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = saved_errno; + return NULL; + } + if (converted != result + length) + { + ENSURE_ALLOCATION (xsum (length, converted_len)); + DCHAR_CPY (result + length, converted, converted_len); + free (converted); + } + length += converted_len; + } +# endif + + if (has_width && width > characters + && (dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + } + break; + + default: + abort (); + } + } +#endif +#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && HAVE_WCHAR_T + else if (dp->conversion == 's' +# if WIDE_CHAR_VERSION + && a.arg[dp->arg_index].type != TYPE_WIDE_STRING +# else + && a.arg[dp->arg_index].type == TYPE_WIDE_STRING +# endif + ) + { + /* The normal handling of the 's' directive below requires + allocating a temporary buffer. The determination of its + length (tmp_length), in the case when a precision is + specified, below requires a conversion between a char[] + string and a wchar_t[] wide string. It could be done, but + we have no guarantee that the implementation of sprintf will + use the exactly same algorithm. Without this guarantee, it + is possible to have buffer overrun bugs. In order to avoid + such bugs, we implement the entire processing of the 's' + directive ourselves. */ + int flags = dp->flags; + int has_width; + size_t width; + int has_precision; + size_t precision; + + has_width = 0; + width = 0; + if (dp->width_start != dp->width_end) + { + if (dp->width_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->width_arg_index].a.a_int; + if (arg < 0) + { + /* "A negative field width is taken as a '-' flag + followed by a positive field width." */ + flags |= FLAG_LEFT; + width = (unsigned int) (-arg); + } + else + width = arg; + } + else + { + const FCHAR_T *digitp = dp->width_start; + + do + width = xsum (xtimes (width, 10), *digitp++ - '0'); + while (digitp != dp->width_end); + } + has_width = 1; + } + + has_precision = 0; + precision = 6; + if (dp->precision_start != dp->precision_end) + { + if (dp->precision_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->precision_arg_index].a.a_int; + /* "A negative precision is taken as if the precision + were omitted." */ + if (arg >= 0) + { + precision = arg; + has_precision = 1; + } + } + else + { + const FCHAR_T *digitp = dp->precision_start + 1; + + precision = 0; + while (digitp != dp->precision_end) + precision = xsum (xtimes (precision, 10), *digitp++ - '0'); + has_precision = 1; + } + } + +# if WIDE_CHAR_VERSION + /* %s in vasnwprintf. See the specification of fwprintf. */ + { + const char *arg = a.arg[dp->arg_index].a.a_string; + const char *arg_end; + size_t characters; + + if (has_precision) + { + /* Use only as many bytes as needed to produce PRECISION + wide characters, from the left. */ +# if HAVE_MBRTOWC + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + arg_end = arg; + characters = 0; + for (; precision > 0; precision--) + { + int count; +# if HAVE_MBRTOWC + count = mbrlen (arg_end, MB_CUR_MAX, &state); +# else + count = mblen (arg_end, MB_CUR_MAX); +# endif + if (count == 0) + /* Found the terminating NUL. */ + break; + if (count < 0) + { + /* Invalid or incomplete multibyte character. */ + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else if (has_width) + { + /* Use the entire string, and count the number of wide + characters. */ +# if HAVE_MBRTOWC + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + arg_end = arg; + characters = 0; + for (;;) + { + int count; +# if HAVE_MBRTOWC + count = mbrlen (arg_end, MB_CUR_MAX, &state); +# else + count = mblen (arg_end, MB_CUR_MAX); +# endif + if (count == 0) + /* Found the terminating NUL. */ + break; + if (count < 0) + { + /* Invalid or incomplete multibyte character. */ + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else + { + /* Use the entire string. */ + arg_end = arg + strlen (arg); + /* The number of characters doesn't matter. */ + characters = 0; + } + + if (has_width && width > characters + && !(dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + + if (has_precision || has_width) + { + /* We know the number of wide characters in advance. */ + size_t remaining; +# if HAVE_MBRTOWC + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + ENSURE_ALLOCATION (xsum (length, characters)); + for (remaining = characters; remaining > 0; remaining--) + { + wchar_t wc; + int count; +# if HAVE_MBRTOWC + count = mbrtowc (&wc, arg, arg_end - arg, &state); +# else + count = mbtowc (&wc, arg, arg_end - arg); +# endif + if (count <= 0) + /* mbrtowc not consistent with mbrlen, or mbtowc + not consistent with mblen. */ + abort (); + result[length++] = wc; + arg += count; + } + if (!(arg == arg_end)) + abort (); + } + else + { +# if HAVE_MBRTOWC + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + while (arg < arg_end) + { + wchar_t wc; + int count; +# if HAVE_MBRTOWC + count = mbrtowc (&wc, arg, arg_end - arg, &state); +# else + count = mbtowc (&wc, arg, arg_end - arg); +# endif + if (count <= 0) + /* mbrtowc not consistent with mbrlen, or mbtowc + not consistent with mblen. */ + abort (); + ENSURE_ALLOCATION (xsum (length, 1)); + result[length++] = wc; + arg += count; + } + } + + if (has_width && width > characters + && (dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + } +# else + /* %ls in vasnprintf. See the specification of fprintf. */ + { + const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; + const wchar_t *arg_end; + size_t characters; +# if !DCHAR_IS_TCHAR + /* This code assumes that TCHAR_T is 'char'. */ + verify (sizeof (TCHAR_T) == 1); + TCHAR_T *tmpsrc; + DCHAR_T *tmpdst; + size_t tmpdst_len; +# endif + size_t w; + + if (has_precision) + { + /* Use only as many wide characters as needed to produce + at most PRECISION bytes, from the left. */ +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + arg_end = arg; + characters = 0; + while (precision > 0) + { + char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ + int count; + + if (*arg_end == 0) + /* Found the terminating null wide character. */ + break; +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + count = wcrtomb (cbuf, *arg_end, &state); +# else + count = wctomb (cbuf, *arg_end); +# endif + if (count < 0) + { + /* Cannot convert. */ + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + if (precision < count) + break; + arg_end++; + characters += count; + precision -= count; + } + } +# if DCHAR_IS_TCHAR + else if (has_width) +# else + else +# endif + { + /* Use the entire string, and count the number of + bytes. */ +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + arg_end = arg; + characters = 0; + for (;;) + { + char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ + int count; + + if (*arg_end == 0) + /* Found the terminating null wide character. */ + break; +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + count = wcrtomb (cbuf, *arg_end, &state); +# else + count = wctomb (cbuf, *arg_end); +# endif + if (count < 0) + { + /* Cannot convert. */ + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end++; + characters += count; + } + } +# if DCHAR_IS_TCHAR + else + { + /* Use the entire string. */ + arg_end = arg + local_wcslen (arg); + /* The number of bytes doesn't matter. */ + characters = 0; + } +# endif + +# if !DCHAR_IS_TCHAR + /* Convert the string into a piece of temporary memory. */ + tmpsrc = (TCHAR_T *) malloc (characters * sizeof (TCHAR_T)); + if (tmpsrc == NULL) + goto out_of_memory; + { + TCHAR_T *tmpptr = tmpsrc; + size_t remaining; +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + for (remaining = characters; remaining > 0; ) + { + char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ + int count; + + if (*arg == 0) + abort (); +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + count = wcrtomb (cbuf, *arg, &state); +# else + count = wctomb (cbuf, *arg); +# endif + if (count <= 0) + /* Inconsistency. */ + abort (); + memcpy (tmpptr, cbuf, count); + tmpptr += count; + arg++; + remaining -= count; + } + if (!(arg == arg_end)) + abort (); + } + + /* Convert from TCHAR_T[] to DCHAR_T[]. */ + tmpdst = + DCHAR_CONV_FROM_ENCODING (locale_charset (), + iconveh_question_mark, + tmpsrc, characters, + NULL, + NULL, &tmpdst_len); + if (tmpdst == NULL) + { + int saved_errno = errno; + free (tmpsrc); + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = saved_errno; + return NULL; + } + free (tmpsrc); +# endif + + if (has_width) + { +# if ENABLE_UNISTDIO + /* Outside POSIX, it's preferable to compare the width + against the number of _characters_ of the converted + value. */ + w = DCHAR_MBSNLEN (result + length, characters); +# else + /* The width is compared against the number of _bytes_ + of the converted value, says POSIX. */ + w = characters; +# endif + } + else + /* w doesn't matter. */ + w = 0; + + if (has_width && width > w + && !(dp->flags & FLAG_LEFT)) + { + size_t n = width - w; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + +# if DCHAR_IS_TCHAR + if (has_precision || has_width) + { + /* We know the number of bytes in advance. */ + size_t remaining; +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + ENSURE_ALLOCATION (xsum (length, characters)); + for (remaining = characters; remaining > 0; ) + { + char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ + int count; + + if (*arg == 0) + abort (); +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + count = wcrtomb (cbuf, *arg, &state); +# else + count = wctomb (cbuf, *arg); +# endif + if (count <= 0) + /* Inconsistency. */ + abort (); + memcpy (result + length, cbuf, count); + length += count; + arg++; + remaining -= count; + } + if (!(arg == arg_end)) + abort (); + } + else + { +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + while (arg < arg_end) + { + char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ + int count; + + if (*arg == 0) + abort (); +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + count = wcrtomb (cbuf, *arg, &state); +# else + count = wctomb (cbuf, *arg); +# endif + if (count <= 0) + { + /* Cannot convert. */ + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + ENSURE_ALLOCATION (xsum (length, count)); + memcpy (result + length, cbuf, count); + length += count; + arg++; + } + } +# else + ENSURE_ALLOCATION (xsum (length, tmpdst_len)); + DCHAR_CPY (result + length, tmpdst, tmpdst_len); + free (tmpdst); + length += tmpdst_len; +# endif + + if (has_width && width > w + && (dp->flags & FLAG_LEFT)) + { + size_t n = width - w; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + } +# endif + } +#endif +#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL + else if ((dp->conversion == 'a' || dp->conversion == 'A') +# if !(NEED_PRINTF_DIRECTIVE_A || (NEED_PRINTF_LONG_DOUBLE && NEED_PRINTF_DOUBLE)) + && (0 +# if NEED_PRINTF_DOUBLE + || a.arg[dp->arg_index].type == TYPE_DOUBLE +# endif +# if NEED_PRINTF_LONG_DOUBLE + || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE +# endif + ) +# endif + ) + { + arg_type type = a.arg[dp->arg_index].type; + int flags = dp->flags; + int has_width; + size_t width; + int has_precision; + size_t precision; + size_t tmp_length; + DCHAR_T tmpbuf[700]; + DCHAR_T *tmp; + DCHAR_T *pad_ptr; + DCHAR_T *p; + + has_width = 0; + width = 0; + if (dp->width_start != dp->width_end) + { + if (dp->width_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->width_arg_index].a.a_int; + if (arg < 0) + { + /* "A negative field width is taken as a '-' flag + followed by a positive field width." */ + flags |= FLAG_LEFT; + width = (unsigned int) (-arg); + } + else + width = arg; + } + else + { + const FCHAR_T *digitp = dp->width_start; + + do + width = xsum (xtimes (width, 10), *digitp++ - '0'); + while (digitp != dp->width_end); + } + has_width = 1; + } + + has_precision = 0; + precision = 0; + if (dp->precision_start != dp->precision_end) + { + if (dp->precision_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->precision_arg_index].a.a_int; + /* "A negative precision is taken as if the precision + were omitted." */ + if (arg >= 0) + { + precision = arg; + has_precision = 1; + } + } + else + { + const FCHAR_T *digitp = dp->precision_start + 1; + + precision = 0; + while (digitp != dp->precision_end) + precision = xsum (xtimes (precision, 10), *digitp++ - '0'); + has_precision = 1; + } + } + + /* Allocate a temporary buffer of sufficient size. */ + if (type == TYPE_LONGDOUBLE) + tmp_length = + (unsigned int) ((LDBL_DIG + 1) + * 0.831 /* decimal -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + else + tmp_length = + (unsigned int) ((DBL_DIG + 1) + * 0.831 /* decimal -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + if (tmp_length < precision) + tmp_length = precision; + /* Account for sign, decimal point etc. */ + tmp_length = xsum (tmp_length, 12); + + if (tmp_length < width) + tmp_length = width; + + tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ + + if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) + tmp = tmpbuf; + else + { + size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); + + if (size_overflow_p (tmp_memsize)) + /* Overflow, would lead to out of memory. */ + goto out_of_memory; + tmp = (DCHAR_T *) malloc (tmp_memsize); + if (tmp == NULL) + /* Out of memory. */ + goto out_of_memory; + } + + pad_ptr = NULL; + p = tmp; + if (type == TYPE_LONGDOUBLE) + { +# if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE + long double arg = a.arg[dp->arg_index].a.a_longdouble; + + if (isnanl (arg)) + { + if (dp->conversion == 'A') + { + *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; + } + else + { + *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; + } + } + else + { + int sign = 0; + DECL_LONG_DOUBLE_ROUNDING + + BEGIN_LONG_DOUBLE_ROUNDING (); + + if (signbit (arg)) /* arg < 0.0L or negative zero */ + { + sign = -1; + arg = -arg; + } + + if (sign < 0) + *p++ = '-'; + else if (flags & FLAG_SHOWSIGN) + *p++ = '+'; + else if (flags & FLAG_SPACE) + *p++ = ' '; + + if (arg > 0.0L && arg + arg == arg) + { + if (dp->conversion == 'A') + { + *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; + } + else + { + *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; + } + } + else + { + int exponent; + long double mantissa; + + if (arg > 0.0L) + mantissa = printf_frexpl (arg, &exponent); + else + { + exponent = 0; + mantissa = 0.0L; + } + + if (has_precision + && precision < (unsigned int) ((LDBL_DIG + 1) * 0.831) + 1) + { + /* Round the mantissa. */ + long double tail = mantissa; + size_t q; + + for (q = precision; ; q--) + { + int digit = (int) tail; + tail -= digit; + if (q == 0) + { + if (digit & 1 ? tail >= 0.5L : tail > 0.5L) + tail = 1 - tail; + else + tail = - tail; + break; + } + tail *= 16.0L; + } + if (tail != 0.0L) + for (q = precision; q > 0; q--) + tail *= 0.0625L; + mantissa += tail; + } + + *p++ = '0'; + *p++ = dp->conversion - 'A' + 'X'; + pad_ptr = p; + { + int digit; + + digit = (int) mantissa; + mantissa -= digit; + *p++ = '0' + digit; + if ((flags & FLAG_ALT) + || mantissa > 0.0L || precision > 0) + { + *p++ = decimal_point_char (); + /* This loop terminates because we assume + that FLT_RADIX is a power of 2. */ + while (mantissa > 0.0L) + { + mantissa *= 16.0L; + digit = (int) mantissa; + mantissa -= digit; + *p++ = digit + + (digit < 10 + ? '0' + : dp->conversion - 10); + if (precision > 0) + precision--; + } + while (precision > 0) + { + *p++ = '0'; + precision--; + } + } + } + *p++ = dp->conversion - 'A' + 'P'; +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + { '%', '+', 'd', '\0' }; + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, "%+d", exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, "%+d", exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } +# endif + } + + END_LONG_DOUBLE_ROUNDING (); + } +# else + abort (); +# endif + } + else + { +# if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE + double arg = a.arg[dp->arg_index].a.a_double; + + if (isnand (arg)) + { + if (dp->conversion == 'A') + { + *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; + } + else + { + *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; + } + } + else + { + int sign = 0; + + if (signbit (arg)) /* arg < 0.0 or negative zero */ + { + sign = -1; + arg = -arg; + } + + if (sign < 0) + *p++ = '-'; + else if (flags & FLAG_SHOWSIGN) + *p++ = '+'; + else if (flags & FLAG_SPACE) + *p++ = ' '; + + if (arg > 0.0 && arg + arg == arg) + { + if (dp->conversion == 'A') + { + *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; + } + else + { + *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; + } + } + else + { + int exponent; + double mantissa; + + if (arg > 0.0) + mantissa = printf_frexp (arg, &exponent); + else + { + exponent = 0; + mantissa = 0.0; + } + + if (has_precision + && precision < (unsigned int) ((DBL_DIG + 1) * 0.831) + 1) + { + /* Round the mantissa. */ + double tail = mantissa; + size_t q; + + for (q = precision; ; q--) + { + int digit = (int) tail; + tail -= digit; + if (q == 0) + { + if (digit & 1 ? tail >= 0.5 : tail > 0.5) + tail = 1 - tail; + else + tail = - tail; + break; + } + tail *= 16.0; + } + if (tail != 0.0) + for (q = precision; q > 0; q--) + tail *= 0.0625; + mantissa += tail; + } + + *p++ = '0'; + *p++ = dp->conversion - 'A' + 'X'; + pad_ptr = p; + { + int digit; + + digit = (int) mantissa; + mantissa -= digit; + *p++ = '0' + digit; + if ((flags & FLAG_ALT) + || mantissa > 0.0 || precision > 0) + { + *p++ = decimal_point_char (); + /* This loop terminates because we assume + that FLT_RADIX is a power of 2. */ + while (mantissa > 0.0) + { + mantissa *= 16.0; + digit = (int) mantissa; + mantissa -= digit; + *p++ = digit + + (digit < 10 + ? '0' + : dp->conversion - 10); + if (precision > 0) + precision--; + } + while (precision > 0) + { + *p++ = '0'; + precision--; + } + } + } + *p++ = dp->conversion - 'A' + 'P'; +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + { '%', '+', 'd', '\0' }; + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, "%+d", exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, "%+d", exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } +# endif + } + } +# else + abort (); +# endif + } + /* The generated string now extends from tmp to p, with the + zero padding insertion point being at pad_ptr. */ + if (has_width && p - tmp < width) + { + size_t pad = width - (p - tmp); + DCHAR_T *end = p + pad; + + if (flags & FLAG_LEFT) + { + /* Pad with spaces on the right. */ + for (; pad > 0; pad--) + *p++ = ' '; + } + else if ((flags & FLAG_ZERO) && pad_ptr != NULL) + { + /* Pad with zeroes. */ + DCHAR_T *q = end; + + while (p > pad_ptr) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = '0'; + } + else + { + /* Pad with spaces on the left. */ + DCHAR_T *q = end; + + while (p > tmp) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = ' '; + } + + p = end; + } + + { + size_t count = p - tmp; + + if (count >= tmp_length) + /* tmp_length was incorrectly calculated - fix the + code above! */ + abort (); + + /* Make room for the result. */ + if (count >= allocated - length) + { + size_t n = xsum (length, count); + + ENSURE_ALLOCATION (n); + } + + /* Append the result. */ + memcpy (result + length, tmp, count * sizeof (DCHAR_T)); + if (tmp != tmpbuf) + free (tmp); + length += count; + } + } +#endif +#if (NEED_PRINTF_INFINITE_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL + else if ((dp->conversion == 'f' || dp->conversion == 'F' + || dp->conversion == 'e' || dp->conversion == 'E' + || dp->conversion == 'g' || dp->conversion == 'G' + || dp->conversion == 'a' || dp->conversion == 'A') + && (0 +# if NEED_PRINTF_DOUBLE + || a.arg[dp->arg_index].type == TYPE_DOUBLE +# elif NEED_PRINTF_INFINITE_DOUBLE + || (a.arg[dp->arg_index].type == TYPE_DOUBLE + /* The systems (mingw) which produce wrong output + for Inf, -Inf, and NaN also do so for -0.0. + Therefore we treat this case here as well. */ + && is_infinite_or_zero (a.arg[dp->arg_index].a.a_double)) +# endif +# if NEED_PRINTF_LONG_DOUBLE + || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE +# elif NEED_PRINTF_INFINITE_LONG_DOUBLE + || (a.arg[dp->arg_index].type == TYPE_LONGDOUBLE + /* Some systems produce wrong output for Inf, + -Inf, and NaN. Some systems in this category + (IRIX 5.3) also do so for -0.0. Therefore we + treat this case here as well. */ + && is_infinite_or_zerol (a.arg[dp->arg_index].a.a_longdouble)) +# endif + )) + { +# if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) + arg_type type = a.arg[dp->arg_index].type; +# endif + int flags = dp->flags; + int has_width; + size_t width; + int has_precision; + size_t precision; + size_t tmp_length; + DCHAR_T tmpbuf[700]; + DCHAR_T *tmp; + DCHAR_T *pad_ptr; + DCHAR_T *p; + + has_width = 0; + width = 0; + if (dp->width_start != dp->width_end) + { + if (dp->width_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->width_arg_index].a.a_int; + if (arg < 0) + { + /* "A negative field width is taken as a '-' flag + followed by a positive field width." */ + flags |= FLAG_LEFT; + width = (unsigned int) (-arg); + } + else + width = arg; + } + else + { + const FCHAR_T *digitp = dp->width_start; + + do + width = xsum (xtimes (width, 10), *digitp++ - '0'); + while (digitp != dp->width_end); + } + has_width = 1; + } + + has_precision = 0; + precision = 0; + if (dp->precision_start != dp->precision_end) + { + if (dp->precision_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->precision_arg_index].a.a_int; + /* "A negative precision is taken as if the precision + were omitted." */ + if (arg >= 0) + { + precision = arg; + has_precision = 1; + } + } + else + { + const FCHAR_T *digitp = dp->precision_start + 1; + + precision = 0; + while (digitp != dp->precision_end) + precision = xsum (xtimes (precision, 10), *digitp++ - '0'); + has_precision = 1; + } + } + + /* POSIX specifies the default precision to be 6 for %f, %F, + %e, %E, but not for %g, %G. Implementations appear to use + the same default precision also for %g, %G. But for %a, %A, + the default precision is 0. */ + if (!has_precision) + if (!(dp->conversion == 'a' || dp->conversion == 'A')) + precision = 6; + + /* Allocate a temporary buffer of sufficient size. */ +# if NEED_PRINTF_DOUBLE && NEED_PRINTF_LONG_DOUBLE + tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : DBL_DIG + 1); +# elif NEED_PRINTF_INFINITE_DOUBLE && NEED_PRINTF_LONG_DOUBLE + tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : 0); +# elif NEED_PRINTF_LONG_DOUBLE + tmp_length = LDBL_DIG + 1; +# elif NEED_PRINTF_DOUBLE + tmp_length = DBL_DIG + 1; +# else + tmp_length = 0; +# endif + if (tmp_length < precision) + tmp_length = precision; +# if NEED_PRINTF_LONG_DOUBLE +# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE + if (type == TYPE_LONGDOUBLE) +# endif + if (dp->conversion == 'f' || dp->conversion == 'F') + { + long double arg = a.arg[dp->arg_index].a.a_longdouble; + if (!(isnanl (arg) || arg + arg == arg)) + { + /* arg is finite and nonzero. */ + int exponent = floorlog10l (arg < 0 ? -arg : arg); + if (exponent >= 0 && tmp_length < exponent + precision) + tmp_length = exponent + precision; + } + } +# endif +# if NEED_PRINTF_DOUBLE +# if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE + if (type == TYPE_DOUBLE) +# endif + if (dp->conversion == 'f' || dp->conversion == 'F') + { + double arg = a.arg[dp->arg_index].a.a_double; + if (!(isnand (arg) || arg + arg == arg)) + { + /* arg is finite and nonzero. */ + int exponent = floorlog10 (arg < 0 ? -arg : arg); + if (exponent >= 0 && tmp_length < exponent + precision) + tmp_length = exponent + precision; + } + } +# endif + /* Account for sign, decimal point etc. */ + tmp_length = xsum (tmp_length, 12); + + if (tmp_length < width) + tmp_length = width; + + tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ + + if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) + tmp = tmpbuf; + else + { + size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); + + if (size_overflow_p (tmp_memsize)) + /* Overflow, would lead to out of memory. */ + goto out_of_memory; + tmp = (DCHAR_T *) malloc (tmp_memsize); + if (tmp == NULL) + /* Out of memory. */ + goto out_of_memory; + } + + pad_ptr = NULL; + p = tmp; + +# if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE +# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE + if (type == TYPE_LONGDOUBLE) +# endif + { + long double arg = a.arg[dp->arg_index].a.a_longdouble; + + if (isnanl (arg)) + { + if (dp->conversion >= 'A' && dp->conversion <= 'Z') + { + *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; + } + else + { + *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; + } + } + else + { + int sign = 0; + DECL_LONG_DOUBLE_ROUNDING + + BEGIN_LONG_DOUBLE_ROUNDING (); + + if (signbit (arg)) /* arg < 0.0L or negative zero */ + { + sign = -1; + arg = -arg; + } + + if (sign < 0) + *p++ = '-'; + else if (flags & FLAG_SHOWSIGN) + *p++ = '+'; + else if (flags & FLAG_SPACE) + *p++ = ' '; + + if (arg > 0.0L && arg + arg == arg) + { + if (dp->conversion >= 'A' && dp->conversion <= 'Z') + { + *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; + } + else + { + *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; + } + } + else + { +# if NEED_PRINTF_LONG_DOUBLE + pad_ptr = p; + + if (dp->conversion == 'f' || dp->conversion == 'F') + { + char *digits; + size_t ndigits; + + digits = + scale10_round_decimal_long_double (arg, precision); + if (digits == NULL) + { + END_LONG_DOUBLE_ROUNDING (); + goto out_of_memory; + } + ndigits = strlen (digits); + + if (ndigits > precision) + do + { + --ndigits; + *p++ = digits[ndigits]; + } + while (ndigits > precision); + else + *p++ = '0'; + /* Here ndigits <= precision. */ + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > ndigits; precision--) + *p++ = '0'; + while (ndigits > 0) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + + free (digits); + } + else if (dp->conversion == 'e' || dp->conversion == 'E') + { + int exponent; + + if (arg == 0.0L) + { + exponent = 0; + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + } + else + { + /* arg > 0.0L. */ + int adjusted; + char *digits; + size_t ndigits; + + exponent = floorlog10l (arg); + adjusted = 0; + for (;;) + { + digits = + scale10_round_decimal_long_double (arg, + (int)precision - exponent); + if (digits == NULL) + { + END_LONG_DOUBLE_ROUNDING (); + goto out_of_memory; + } + ndigits = strlen (digits); + + if (ndigits == precision + 1) + break; + if (ndigits < precision + || ndigits > precision + 2) + /* The exponent was not guessed + precisely enough. */ + abort (); + if (adjusted) + /* None of two values of exponent is + the right one. Prevent an endless + loop. */ + abort (); + free (digits); + if (ndigits == precision) + exponent -= 1; + else + exponent += 1; + adjusted = 1; + } + /* Here ndigits = precision+1. */ + if (is_borderline (digits, precision)) + { + /* Maybe the exponent guess was too high + and a smaller exponent can be reached + by turning a 10...0 into 9...9x. */ + char *digits2 = + scale10_round_decimal_long_double (arg, + (int)precision - exponent + 1); + if (digits2 == NULL) + { + free (digits); + END_LONG_DOUBLE_ROUNDING (); + goto out_of_memory; + } + if (strlen (digits2) == precision + 1) + { + free (digits); + digits = digits2; + exponent -= 1; + } + else + free (digits2); + } + /* Here ndigits = precision+1. */ + + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + while (ndigits > 0) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + + free (digits); + } + + *p++ = dp->conversion; /* 'e' or 'E' */ +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + { '%', '+', '.', '2', 'd', '\0' }; + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, "%+.2d", exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, "%+.2d", exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } +# endif + } + else if (dp->conversion == 'g' || dp->conversion == 'G') + { + if (precision == 0) + precision = 1; + /* precision >= 1. */ + + if (arg == 0.0L) + /* The exponent is 0, >= -4, < precision. + Use fixed-point notation. */ + { + size_t ndigits = precision; + /* Number of trailing zeroes that have to be + dropped. */ + size_t nzeroes = + (flags & FLAG_ALT ? 0 : precision - 1); + + --ndigits; + *p++ = '0'; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = '0'; + } + } + } + else + { + /* arg > 0.0L. */ + int exponent; + int adjusted; + char *digits; + size_t ndigits; + size_t nzeroes; + + exponent = floorlog10l (arg); + adjusted = 0; + for (;;) + { + digits = + scale10_round_decimal_long_double (arg, + (int)(precision - 1) - exponent); + if (digits == NULL) + { + END_LONG_DOUBLE_ROUNDING (); + goto out_of_memory; + } + ndigits = strlen (digits); + + if (ndigits == precision) + break; + if (ndigits < precision - 1 + || ndigits > precision + 1) + /* The exponent was not guessed + precisely enough. */ + abort (); + if (adjusted) + /* None of two values of exponent is + the right one. Prevent an endless + loop. */ + abort (); + free (digits); + if (ndigits < precision) + exponent -= 1; + else + exponent += 1; + adjusted = 1; + } + /* Here ndigits = precision. */ + if (is_borderline (digits, precision - 1)) + { + /* Maybe the exponent guess was too high + and a smaller exponent can be reached + by turning a 10...0 into 9...9x. */ + char *digits2 = + scale10_round_decimal_long_double (arg, + (int)(precision - 1) - exponent + 1); + if (digits2 == NULL) + { + free (digits); + END_LONG_DOUBLE_ROUNDING (); + goto out_of_memory; + } + if (strlen (digits2) == precision) + { + free (digits); + digits = digits2; + exponent -= 1; + } + else + free (digits2); + } + /* Here ndigits = precision. */ + + /* Determine the number of trailing zeroes + that have to be dropped. */ + nzeroes = 0; + if ((flags & FLAG_ALT) == 0) + while (nzeroes < ndigits + && digits[nzeroes] == '0') + nzeroes++; + + /* The exponent is now determined. */ + if (exponent >= -4 + && exponent < (long)precision) + { + /* Fixed-point notation: + max(exponent,0)+1 digits, then the + decimal point, then the remaining + digits without trailing zeroes. */ + if (exponent >= 0) + { + size_t count = exponent + 1; + /* Note: count <= precision = ndigits. */ + for (; count > 0; count--) + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + } + else + { + size_t count = -exponent - 1; + *p++ = '0'; + *p++ = decimal_point_char (); + for (; count > 0; count--) + *p++ = '0'; + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + } + else + { + /* Exponential notation. */ + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + { '%', '+', '.', '2', 'd', '\0' }; + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, "%+.2d", exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, "%+.2d", exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } +# endif + } + + free (digits); + } + } + else + abort (); +# else + /* arg is finite. */ + if (!(arg == 0.0L)) + abort (); + + pad_ptr = p; + + if (dp->conversion == 'f' || dp->conversion == 'F') + { + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + } + else if (dp->conversion == 'e' || dp->conversion == 'E') + { + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + *p++ = dp->conversion; /* 'e' or 'E' */ + *p++ = '+'; + *p++ = '0'; + *p++ = '0'; + } + else if (dp->conversion == 'g' || dp->conversion == 'G') + { + *p++ = '0'; + if (flags & FLAG_ALT) + { + size_t ndigits = + (precision > 0 ? precision - 1 : 0); + *p++ = decimal_point_char (); + for (; ndigits > 0; --ndigits) + *p++ = '0'; + } + } + else if (dp->conversion == 'a' || dp->conversion == 'A') + { + *p++ = '0'; + *p++ = dp->conversion - 'A' + 'X'; + pad_ptr = p; + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + *p++ = dp->conversion - 'A' + 'P'; + *p++ = '+'; + *p++ = '0'; + } + else + abort (); +# endif + } + + END_LONG_DOUBLE_ROUNDING (); + } + } +# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE + else +# endif +# endif +# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE + { + double arg = a.arg[dp->arg_index].a.a_double; + + if (isnand (arg)) + { + if (dp->conversion >= 'A' && dp->conversion <= 'Z') + { + *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; + } + else + { + *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; + } + } + else + { + int sign = 0; + + if (signbit (arg)) /* arg < 0.0 or negative zero */ + { + sign = -1; + arg = -arg; + } + + if (sign < 0) + *p++ = '-'; + else if (flags & FLAG_SHOWSIGN) + *p++ = '+'; + else if (flags & FLAG_SPACE) + *p++ = ' '; + + if (arg > 0.0 && arg + arg == arg) + { + if (dp->conversion >= 'A' && dp->conversion <= 'Z') + { + *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; + } + else + { + *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; + } + } + else + { +# if NEED_PRINTF_DOUBLE + pad_ptr = p; + + if (dp->conversion == 'f' || dp->conversion == 'F') + { + char *digits; + size_t ndigits; + + digits = + scale10_round_decimal_double (arg, precision); + if (digits == NULL) + goto out_of_memory; + ndigits = strlen (digits); + + if (ndigits > precision) + do + { + --ndigits; + *p++ = digits[ndigits]; + } + while (ndigits > precision); + else + *p++ = '0'; + /* Here ndigits <= precision. */ + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > ndigits; precision--) + *p++ = '0'; + while (ndigits > 0) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + + free (digits); + } + else if (dp->conversion == 'e' || dp->conversion == 'E') + { + int exponent; + + if (arg == 0.0) + { + exponent = 0; + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + } + else + { + /* arg > 0.0. */ + int adjusted; + char *digits; + size_t ndigits; + + exponent = floorlog10 (arg); + adjusted = 0; + for (;;) + { + digits = + scale10_round_decimal_double (arg, + (int)precision - exponent); + if (digits == NULL) + goto out_of_memory; + ndigits = strlen (digits); + + if (ndigits == precision + 1) + break; + if (ndigits < precision + || ndigits > precision + 2) + /* The exponent was not guessed + precisely enough. */ + abort (); + if (adjusted) + /* None of two values of exponent is + the right one. Prevent an endless + loop. */ + abort (); + free (digits); + if (ndigits == precision) + exponent -= 1; + else + exponent += 1; + adjusted = 1; + } + /* Here ndigits = precision+1. */ + if (is_borderline (digits, precision)) + { + /* Maybe the exponent guess was too high + and a smaller exponent can be reached + by turning a 10...0 into 9...9x. */ + char *digits2 = + scale10_round_decimal_double (arg, + (int)precision - exponent + 1); + if (digits2 == NULL) + { + free (digits); + goto out_of_memory; + } + if (strlen (digits2) == precision + 1) + { + free (digits); + digits = digits2; + exponent -= 1; + } + else + free (digits2); + } + /* Here ndigits = precision+1. */ + + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + while (ndigits > 0) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + + free (digits); + } + + *p++ = dp->conversion; /* 'e' or 'E' */ +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + /* Produce the same number of exponent digits + as the native printf implementation. */ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + { '%', '+', '.', '3', 'd', '\0' }; +# else + { '%', '+', '.', '2', 'd', '\0' }; +# endif + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + { + static const char decimal_format[] = + /* Produce the same number of exponent digits + as the native printf implementation. */ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + "%+.3d"; +# else + "%+.2d"; +# endif + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, decimal_format, exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, decimal_format, exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } + } +# endif + } + else if (dp->conversion == 'g' || dp->conversion == 'G') + { + if (precision == 0) + precision = 1; + /* precision >= 1. */ + + if (arg == 0.0) + /* The exponent is 0, >= -4, < precision. + Use fixed-point notation. */ + { + size_t ndigits = precision; + /* Number of trailing zeroes that have to be + dropped. */ + size_t nzeroes = + (flags & FLAG_ALT ? 0 : precision - 1); + + --ndigits; + *p++ = '0'; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = '0'; + } + } + } + else + { + /* arg > 0.0. */ + int exponent; + int adjusted; + char *digits; + size_t ndigits; + size_t nzeroes; + + exponent = floorlog10 (arg); + adjusted = 0; + for (;;) + { + digits = + scale10_round_decimal_double (arg, + (int)(precision - 1) - exponent); + if (digits == NULL) + goto out_of_memory; + ndigits = strlen (digits); + + if (ndigits == precision) + break; + if (ndigits < precision - 1 + || ndigits > precision + 1) + /* The exponent was not guessed + precisely enough. */ + abort (); + if (adjusted) + /* None of two values of exponent is + the right one. Prevent an endless + loop. */ + abort (); + free (digits); + if (ndigits < precision) + exponent -= 1; + else + exponent += 1; + adjusted = 1; + } + /* Here ndigits = precision. */ + if (is_borderline (digits, precision - 1)) + { + /* Maybe the exponent guess was too high + and a smaller exponent can be reached + by turning a 10...0 into 9...9x. */ + char *digits2 = + scale10_round_decimal_double (arg, + (int)(precision - 1) - exponent + 1); + if (digits2 == NULL) + { + free (digits); + goto out_of_memory; + } + if (strlen (digits2) == precision) + { + free (digits); + digits = digits2; + exponent -= 1; + } + else + free (digits2); + } + /* Here ndigits = precision. */ + + /* Determine the number of trailing zeroes + that have to be dropped. */ + nzeroes = 0; + if ((flags & FLAG_ALT) == 0) + while (nzeroes < ndigits + && digits[nzeroes] == '0') + nzeroes++; + + /* The exponent is now determined. */ + if (exponent >= -4 + && exponent < (long)precision) + { + /* Fixed-point notation: + max(exponent,0)+1 digits, then the + decimal point, then the remaining + digits without trailing zeroes. */ + if (exponent >= 0) + { + size_t count = exponent + 1; + /* Note: count <= precision = ndigits. */ + for (; count > 0; count--) + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + } + else + { + size_t count = -exponent - 1; + *p++ = '0'; + *p++ = decimal_point_char (); + for (; count > 0; count--) + *p++ = '0'; + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + } + else + { + /* Exponential notation. */ + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + /* Produce the same number of exponent digits + as the native printf implementation. */ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + { '%', '+', '.', '3', 'd', '\0' }; +# else + { '%', '+', '.', '2', 'd', '\0' }; +# endif + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + { + static const char decimal_format[] = + /* Produce the same number of exponent digits + as the native printf implementation. */ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + "%+.3d"; +# else + "%+.2d"; +# endif + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, decimal_format, exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, decimal_format, exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } + } +# endif + } + + free (digits); + } + } + else + abort (); +# else + /* arg is finite. */ + if (!(arg == 0.0)) + abort (); + + pad_ptr = p; + + if (dp->conversion == 'f' || dp->conversion == 'F') + { + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + } + else if (dp->conversion == 'e' || dp->conversion == 'E') + { + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + *p++ = dp->conversion; /* 'e' or 'E' */ + *p++ = '+'; + /* Produce the same number of exponent digits as + the native printf implementation. */ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + *p++ = '0'; +# endif + *p++ = '0'; + *p++ = '0'; + } + else if (dp->conversion == 'g' || dp->conversion == 'G') + { + *p++ = '0'; + if (flags & FLAG_ALT) + { + size_t ndigits = + (precision > 0 ? precision - 1 : 0); + *p++ = decimal_point_char (); + for (; ndigits > 0; --ndigits) + *p++ = '0'; + } + } + else + abort (); +# endif + } + } + } +# endif + + /* The generated string now extends from tmp to p, with the + zero padding insertion point being at pad_ptr. */ + if (has_width && p - tmp < width) + { + size_t pad = width - (p - tmp); + DCHAR_T *end = p + pad; + + if (flags & FLAG_LEFT) + { + /* Pad with spaces on the right. */ + for (; pad > 0; pad--) + *p++ = ' '; + } + else if ((flags & FLAG_ZERO) && pad_ptr != NULL) + { + /* Pad with zeroes. */ + DCHAR_T *q = end; + + while (p > pad_ptr) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = '0'; + } + else + { + /* Pad with spaces on the left. */ + DCHAR_T *q = end; + + while (p > tmp) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = ' '; + } + + p = end; + } + + { + size_t count = p - tmp; + + if (count >= tmp_length) + /* tmp_length was incorrectly calculated - fix the + code above! */ + abort (); + + /* Make room for the result. */ + if (count >= allocated - length) + { + size_t n = xsum (length, count); + + ENSURE_ALLOCATION (n); + } + + /* Append the result. */ + memcpy (result + length, tmp, count * sizeof (DCHAR_T)); + if (tmp != tmpbuf) + free (tmp); + length += count; + } + } +#endif + else + { + arg_type type = a.arg[dp->arg_index].type; + int flags = dp->flags; +#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION + int has_width; + size_t width; +#endif +#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || NEED_PRINTF_UNBOUNDED_PRECISION + int has_precision; + size_t precision; +#endif +#if NEED_PRINTF_UNBOUNDED_PRECISION + int prec_ourselves; +#else +# define prec_ourselves 0 +#endif +#if NEED_PRINTF_FLAG_LEFTADJUST +# define pad_ourselves 1 +#elif !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION + int pad_ourselves; +#else +# define pad_ourselves 0 +#endif + TCHAR_T *fbp; + unsigned int prefix_count; + int prefixes[2] IF_LINT (= { 0 }); + int orig_errno; +#if !USE_SNPRINTF + size_t tmp_length; + TCHAR_T tmpbuf[700]; + TCHAR_T *tmp; +#endif + +#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION + has_width = 0; + width = 0; + if (dp->width_start != dp->width_end) + { + if (dp->width_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->width_arg_index].a.a_int; + if (arg < 0) + { + /* "A negative field width is taken as a '-' flag + followed by a positive field width." */ + flags |= FLAG_LEFT; + width = (unsigned int) (-arg); + } + else + width = arg; + } + else + { + const FCHAR_T *digitp = dp->width_start; + + do + width = xsum (xtimes (width, 10), *digitp++ - '0'); + while (digitp != dp->width_end); + } + has_width = 1; + } +#endif + +#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || NEED_PRINTF_UNBOUNDED_PRECISION + has_precision = 0; + precision = 6; + if (dp->precision_start != dp->precision_end) + { + if (dp->precision_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->precision_arg_index].a.a_int; + /* "A negative precision is taken as if the precision + were omitted." */ + if (arg >= 0) + { + precision = arg; + has_precision = 1; + } + } + else + { + const FCHAR_T *digitp = dp->precision_start + 1; + + precision = 0; + while (digitp != dp->precision_end) + precision = xsum (xtimes (precision, 10), *digitp++ - '0'); + has_precision = 1; + } + } +#endif + + /* Decide whether to handle the precision ourselves. */ +#if NEED_PRINTF_UNBOUNDED_PRECISION + switch (dp->conversion) + { + case 'd': case 'i': case 'u': + case 'o': + case 'x': case 'X': case 'p': + prec_ourselves = has_precision && (precision > 0); + break; + default: + prec_ourselves = 0; + break; + } +#endif + + /* Decide whether to perform the padding ourselves. */ +#if !NEED_PRINTF_FLAG_LEFTADJUST && (!DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION) + switch (dp->conversion) + { +# if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO + /* If we need conversion from TCHAR_T[] to DCHAR_T[], we need + to perform the padding after this conversion. Functions + with unistdio extensions perform the padding based on + character count rather than element count. */ + case 'c': case 's': +# endif +# if NEED_PRINTF_FLAG_ZERO + case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': + case 'a': case 'A': +# endif + pad_ourselves = 1; + break; + default: + pad_ourselves = prec_ourselves; + break; + } +#endif + +#if !USE_SNPRINTF + /* Allocate a temporary buffer of sufficient size for calling + sprintf. */ + tmp_length = + MAX_ROOM_NEEDED (&a, dp->arg_index, dp->conversion, type, + flags, width, has_precision, precision, + pad_ourselves); + + if (tmp_length <= sizeof (tmpbuf) / sizeof (TCHAR_T)) + tmp = tmpbuf; + else + { + size_t tmp_memsize = xtimes (tmp_length, sizeof (TCHAR_T)); + + if (size_overflow_p (tmp_memsize)) + /* Overflow, would lead to out of memory. */ + goto out_of_memory; + tmp = (TCHAR_T *) malloc (tmp_memsize); + if (tmp == NULL) + /* Out of memory. */ + goto out_of_memory; + } +#endif + + /* Construct the format string for calling snprintf or + sprintf. */ + fbp = buf; + *fbp++ = '%'; +#if NEED_PRINTF_FLAG_GROUPING + /* The underlying implementation doesn't support the ' flag. + Produce no grouping characters in this case; this is + acceptable because the grouping is locale dependent. */ +#else + if (flags & FLAG_GROUP) + *fbp++ = '\''; +#endif + if (flags & FLAG_LEFT) + *fbp++ = '-'; + if (flags & FLAG_SHOWSIGN) + *fbp++ = '+'; + if (flags & FLAG_SPACE) + *fbp++ = ' '; + if (flags & FLAG_ALT) + *fbp++ = '#'; +#if __GLIBC__ >= 2 && !defined __UCLIBC__ + if (flags & FLAG_LOCALIZED) + *fbp++ = 'I'; +#endif + if (!pad_ourselves) + { + if (flags & FLAG_ZERO) + *fbp++ = '0'; + if (dp->width_start != dp->width_end) + { + size_t n = dp->width_end - dp->width_start; + /* The width specification is known to consist only + of standard ASCII characters. */ + if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) + { + memcpy (fbp, dp->width_start, n * sizeof (TCHAR_T)); + fbp += n; + } + else + { + const FCHAR_T *mp = dp->width_start; + do + *fbp++ = (unsigned char) *mp++; + while (--n > 0); + } + } + } + if (!prec_ourselves) + { + if (dp->precision_start != dp->precision_end) + { + size_t n = dp->precision_end - dp->precision_start; + /* The precision specification is known to consist only + of standard ASCII characters. */ + if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) + { + memcpy (fbp, dp->precision_start, n * sizeof (TCHAR_T)); + fbp += n; + } + else + { + const FCHAR_T *mp = dp->precision_start; + do + *fbp++ = (unsigned char) *mp++; + while (--n > 0); + } + } + } + + switch (type) + { +#if HAVE_LONG_LONG_INT + case TYPE_LONGLONGINT: + case TYPE_ULONGLONGINT: +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + *fbp++ = 'I'; + *fbp++ = '6'; + *fbp++ = '4'; + break; +# else + *fbp++ = 'l'; + /*FALLTHROUGH*/ +# endif +#endif + case TYPE_LONGINT: + case TYPE_ULONGINT: +#if HAVE_WINT_T + case TYPE_WIDE_CHAR: +#endif +#if HAVE_WCHAR_T + case TYPE_WIDE_STRING: +#endif + *fbp++ = 'l'; + break; + case TYPE_LONGDOUBLE: + *fbp++ = 'L'; + break; + default: + break; + } +#if NEED_PRINTF_DIRECTIVE_F + if (dp->conversion == 'F') + *fbp = 'f'; + else +#endif + *fbp = dp->conversion; +#if USE_SNPRINTF +# if !(((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) + fbp[1] = '%'; + fbp[2] = 'n'; + fbp[3] = '\0'; +# else + /* On glibc2 systems from glibc >= 2.3 - probably also older + ones - we know that snprintf's return value conforms to + ISO C 99: the tests gl_SNPRINTF_RETVAL_C99 and + gl_SNPRINTF_TRUNCATION_C99 pass. + Therefore we can avoid using %n in this situation. + On glibc2 systems from 2004-10-18 or newer, the use of %n + in format strings in writable memory may crash the program + (if compiled with _FORTIFY_SOURCE=2), so we should avoid it + in this situation. */ + /* On native Windows systems (such as mingw), we can avoid using + %n because: + - Although the gl_SNPRINTF_TRUNCATION_C99 test fails, + snprintf does not write more than the specified number + of bytes. (snprintf (buf, 3, "%d %d", 4567, 89) writes + '4', '5', '6' into buf, not '4', '5', '\0'.) + - Although the gl_SNPRINTF_RETVAL_C99 test fails, snprintf + allows us to recognize the case of an insufficient + buffer size: it returns -1 in this case. + On native Windows systems (such as mingw) where the OS is + Windows Vista, the use of %n in format strings by default + crashes the program. See + <http://gcc.gnu.org/ml/gcc/2007-06/msg00122.html> and + <http://msdn2.microsoft.com/en-us/library/ms175782(VS.80).aspx> + So we should avoid %n in this situation. */ + fbp[1] = '\0'; +# endif +#else + fbp[1] = '\0'; +#endif + + /* Construct the arguments for calling snprintf or sprintf. */ + prefix_count = 0; + if (!pad_ourselves && dp->width_arg_index != ARG_NONE) + { + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int; + } + if (!prec_ourselves && dp->precision_arg_index != ARG_NONE) + { + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + prefixes[prefix_count++] = a.arg[dp->precision_arg_index].a.a_int; + } + +#if USE_SNPRINTF + /* The SNPRINTF result is appended after result[0..length]. + The latter is an array of DCHAR_T; SNPRINTF appends an + array of TCHAR_T to it. This is possible because + sizeof (TCHAR_T) divides sizeof (DCHAR_T) and + alignof (TCHAR_T) <= alignof (DCHAR_T). */ +# define TCHARS_PER_DCHAR (sizeof (DCHAR_T) / sizeof (TCHAR_T)) + /* Ensure that maxlen below will be >= 2. Needed on BeOS, + where an snprintf() with maxlen==1 acts like sprintf(). */ + ENSURE_ALLOCATION (xsum (length, + (2 + TCHARS_PER_DCHAR - 1) + / TCHARS_PER_DCHAR)); + /* Prepare checking whether snprintf returns the count + via %n. */ + *(TCHAR_T *) (result + length) = '\0'; +#endif + + orig_errno = errno; + + for (;;) + { + int count = -1; + +#if USE_SNPRINTF + int retcount = 0; + size_t maxlen = allocated - length; + /* SNPRINTF can fail if its second argument is + > INT_MAX. */ + if (maxlen > INT_MAX / TCHARS_PER_DCHAR) + maxlen = INT_MAX / TCHARS_PER_DCHAR; + maxlen = maxlen * TCHARS_PER_DCHAR; +# define SNPRINTF_BUF(arg) \ + switch (prefix_count) \ + { \ + case 0: \ + retcount = SNPRINTF ((TCHAR_T *) (result + length), \ + maxlen, buf, \ + arg, &count); \ + break; \ + case 1: \ + retcount = SNPRINTF ((TCHAR_T *) (result + length), \ + maxlen, buf, \ + prefixes[0], arg, &count); \ + break; \ + case 2: \ + retcount = SNPRINTF ((TCHAR_T *) (result + length), \ + maxlen, buf, \ + prefixes[0], prefixes[1], arg, \ + &count); \ + break; \ + default: \ + abort (); \ + } +#else +# define SNPRINTF_BUF(arg) \ + switch (prefix_count) \ + { \ + case 0: \ + count = sprintf (tmp, buf, arg); \ + break; \ + case 1: \ + count = sprintf (tmp, buf, prefixes[0], arg); \ + break; \ + case 2: \ + count = sprintf (tmp, buf, prefixes[0], prefixes[1],\ + arg); \ + break; \ + default: \ + abort (); \ + } +#endif + + errno = 0; + switch (type) + { + case TYPE_SCHAR: + { + int arg = a.arg[dp->arg_index].a.a_schar; + SNPRINTF_BUF (arg); + } + break; + case TYPE_UCHAR: + { + unsigned int arg = a.arg[dp->arg_index].a.a_uchar; + SNPRINTF_BUF (arg); + } + break; + case TYPE_SHORT: + { + int arg = a.arg[dp->arg_index].a.a_short; + SNPRINTF_BUF (arg); + } + break; + case TYPE_USHORT: + { + unsigned int arg = a.arg[dp->arg_index].a.a_ushort; + SNPRINTF_BUF (arg); + } + break; + case TYPE_INT: + { + int arg = a.arg[dp->arg_index].a.a_int; + SNPRINTF_BUF (arg); + } + break; + case TYPE_UINT: + { + unsigned int arg = a.arg[dp->arg_index].a.a_uint; + SNPRINTF_BUF (arg); + } + break; + case TYPE_LONGINT: + { + long int arg = a.arg[dp->arg_index].a.a_longint; + SNPRINTF_BUF (arg); + } + break; + case TYPE_ULONGINT: + { + unsigned long int arg = a.arg[dp->arg_index].a.a_ulongint; + SNPRINTF_BUF (arg); + } + break; +#if HAVE_LONG_LONG_INT + case TYPE_LONGLONGINT: + { + long long int arg = a.arg[dp->arg_index].a.a_longlongint; + SNPRINTF_BUF (arg); + } + break; + case TYPE_ULONGLONGINT: + { + unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint; + SNPRINTF_BUF (arg); + } + break; +#endif + case TYPE_DOUBLE: + { + double arg = a.arg[dp->arg_index].a.a_double; + SNPRINTF_BUF (arg); + } + break; + case TYPE_LONGDOUBLE: + { + long double arg = a.arg[dp->arg_index].a.a_longdouble; + SNPRINTF_BUF (arg); + } + break; + case TYPE_CHAR: + { + int arg = a.arg[dp->arg_index].a.a_char; + SNPRINTF_BUF (arg); + } + break; +#if HAVE_WINT_T + case TYPE_WIDE_CHAR: + { + wint_t arg = a.arg[dp->arg_index].a.a_wide_char; + SNPRINTF_BUF (arg); + } + break; +#endif + case TYPE_STRING: + { + const char *arg = a.arg[dp->arg_index].a.a_string; + SNPRINTF_BUF (arg); + } + break; +#if HAVE_WCHAR_T + case TYPE_WIDE_STRING: + { + const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; + SNPRINTF_BUF (arg); + } + break; +#endif + case TYPE_POINTER: + { + void *arg = a.arg[dp->arg_index].a.a_pointer; + SNPRINTF_BUF (arg); + } + break; + default: + abort (); + } + +#if USE_SNPRINTF + /* Portability: Not all implementations of snprintf() + are ISO C 99 compliant. Determine the number of + bytes that snprintf() has produced or would have + produced. */ + if (count >= 0) + { + /* Verify that snprintf() has NUL-terminated its + result. */ + if (count < maxlen + && ((TCHAR_T *) (result + length)) [count] != '\0') + abort (); + /* Portability hack. */ + if (retcount > count) + count = retcount; + } + else + { + /* snprintf() doesn't understand the '%n' + directive. */ + if (fbp[1] != '\0') + { + /* Don't use the '%n' directive; instead, look + at the snprintf() return value. */ + fbp[1] = '\0'; + continue; + } + else + { + /* Look at the snprintf() return value. */ + if (retcount < 0) + { +# if !HAVE_SNPRINTF_RETVAL_C99 + /* HP-UX 10.20 snprintf() is doubly deficient: + It doesn't understand the '%n' directive, + *and* it returns -1 (rather than the length + that would have been required) when the + buffer is too small. + But a failure at this point can also come + from other reasons than a too small buffer, + such as an invalid wide string argument to + the %ls directive, or possibly an invalid + floating-point argument. */ + size_t tmp_length = + MAX_ROOM_NEEDED (&a, dp->arg_index, + dp->conversion, type, flags, + width, has_precision, + precision, pad_ourselves); + + if (maxlen < tmp_length) + { + /* Make more room. But try to do through + this reallocation only once. */ + size_t bigger_need = + xsum (length, + xsum (tmp_length, + TCHARS_PER_DCHAR - 1) + / TCHARS_PER_DCHAR); + /* And always grow proportionally. + (There may be several arguments, each + needing a little more room than the + previous one.) */ + size_t bigger_need2 = + xsum (xtimes (allocated, 2), 12); + if (bigger_need < bigger_need2) + bigger_need = bigger_need2; + ENSURE_ALLOCATION (bigger_need); + continue; + } +# endif + } + else + count = retcount; + } + } +#endif + + /* Attempt to handle failure. */ + if (count < 0) + { + /* SNPRINTF or sprintf failed. Save and use the errno + that it has set, if any. */ + int saved_errno = errno; + + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = + (saved_errno != 0 + ? saved_errno + : (dp->conversion == 'c' || dp->conversion == 's' + ? EILSEQ + : EINVAL)); + return NULL; + } + +#if USE_SNPRINTF + /* Handle overflow of the allocated buffer. + If such an overflow occurs, a C99 compliant snprintf() + returns a count >= maxlen. However, a non-compliant + snprintf() function returns only count = maxlen - 1. To + cover both cases, test whether count >= maxlen - 1. */ + if ((unsigned int) count + 1 >= maxlen) + { + /* If maxlen already has attained its allowed maximum, + allocating more memory will not increase maxlen. + Instead of looping, bail out. */ + if (maxlen == INT_MAX / TCHARS_PER_DCHAR) + goto overflow; + else + { + /* Need at least (count + 1) * sizeof (TCHAR_T) + bytes. (The +1 is for the trailing NUL.) + But ask for (count + 2) * sizeof (TCHAR_T) + bytes, so that in the next round, we likely get + maxlen > (unsigned int) count + 1 + and so we don't get here again. + And allocate proportionally, to avoid looping + eternally if snprintf() reports a too small + count. */ + size_t n = + xmax (xsum (length, + ((unsigned int) count + 2 + + TCHARS_PER_DCHAR - 1) + / TCHARS_PER_DCHAR), + xtimes (allocated, 2)); + + ENSURE_ALLOCATION (n); + continue; + } + } +#endif + +#if NEED_PRINTF_UNBOUNDED_PRECISION + if (prec_ourselves) + { + /* Handle the precision. */ + TCHAR_T *prec_ptr = +# if USE_SNPRINTF + (TCHAR_T *) (result + length); +# else + tmp; +# endif + size_t prefix_count; + size_t move; + + prefix_count = 0; + /* Put the additional zeroes after the sign. */ + if (count >= 1 + && (*prec_ptr == '-' || *prec_ptr == '+' + || *prec_ptr == ' ')) + prefix_count = 1; + /* Put the additional zeroes after the 0x prefix if + (flags & FLAG_ALT) || (dp->conversion == 'p'). */ + else if (count >= 2 + && prec_ptr[0] == '0' + && (prec_ptr[1] == 'x' || prec_ptr[1] == 'X')) + prefix_count = 2; + + move = count - prefix_count; + if (precision > move) + { + /* Insert zeroes. */ + size_t insert = precision - move; + TCHAR_T *prec_end; + +# if USE_SNPRINTF + size_t n = + xsum (length, + (count + insert + TCHARS_PER_DCHAR - 1) + / TCHARS_PER_DCHAR); + length += (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; + ENSURE_ALLOCATION (n); + length -= (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; + prec_ptr = (TCHAR_T *) (result + length); +# endif + + prec_end = prec_ptr + count; + prec_ptr += prefix_count; + + while (prec_end > prec_ptr) + { + prec_end--; + prec_end[insert] = prec_end[0]; + } + + prec_end += insert; + do + *--prec_end = '0'; + while (prec_end > prec_ptr); + + count += insert; + } + } +#endif + +#if !USE_SNPRINTF + if (count >= tmp_length) + /* tmp_length was incorrectly calculated - fix the + code above! */ + abort (); +#endif + +#if !DCHAR_IS_TCHAR + /* Convert from TCHAR_T[] to DCHAR_T[]. */ + if (dp->conversion == 'c' || dp->conversion == 's') + { + /* type = TYPE_CHAR or TYPE_WIDE_CHAR or TYPE_STRING + TYPE_WIDE_STRING. + The result string is not certainly ASCII. */ + const TCHAR_T *tmpsrc; + DCHAR_T *tmpdst; + size_t tmpdst_len; + /* This code assumes that TCHAR_T is 'char'. */ + verify (sizeof (TCHAR_T) == 1); +# if USE_SNPRINTF + tmpsrc = (TCHAR_T *) (result + length); +# else + tmpsrc = tmp; +# endif + tmpdst = + DCHAR_CONV_FROM_ENCODING (locale_charset (), + iconveh_question_mark, + tmpsrc, count, + NULL, + NULL, &tmpdst_len); + if (tmpdst == NULL) + { + int saved_errno = errno; + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = saved_errno; + return NULL; + } + ENSURE_ALLOCATION (xsum (length, tmpdst_len)); + DCHAR_CPY (result + length, tmpdst, tmpdst_len); + free (tmpdst); + count = tmpdst_len; + } + else + { + /* The result string is ASCII. + Simple 1:1 conversion. */ +# if USE_SNPRINTF + /* If sizeof (DCHAR_T) == sizeof (TCHAR_T), it's a + no-op conversion, in-place on the array starting + at (result + length). */ + if (sizeof (DCHAR_T) != sizeof (TCHAR_T)) +# endif + { + const TCHAR_T *tmpsrc; + DCHAR_T *tmpdst; + size_t n; + +# if USE_SNPRINTF + if (result == resultbuf) + { + tmpsrc = (TCHAR_T *) (result + length); + /* ENSURE_ALLOCATION will not move tmpsrc + (because it's part of resultbuf). */ + ENSURE_ALLOCATION (xsum (length, count)); + } + else + { + /* ENSURE_ALLOCATION will move the array + (because it uses realloc(). */ + ENSURE_ALLOCATION (xsum (length, count)); + tmpsrc = (TCHAR_T *) (result + length); + } +# else + tmpsrc = tmp; + ENSURE_ALLOCATION (xsum (length, count)); +# endif + tmpdst = result + length; + /* Copy backwards, because of overlapping. */ + tmpsrc += count; + tmpdst += count; + for (n = count; n > 0; n--) + *--tmpdst = (unsigned char) *--tmpsrc; + } + } +#endif + +#if DCHAR_IS_TCHAR && !USE_SNPRINTF + /* Make room for the result. */ + if (count > allocated - length) + { + /* Need at least count elements. But allocate + proportionally. */ + size_t n = + xmax (xsum (length, count), xtimes (allocated, 2)); + + ENSURE_ALLOCATION (n); + } +#endif + + /* Here count <= allocated - length. */ + + /* Perform padding. */ +#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION + if (pad_ourselves && has_width) + { + size_t w; +# if ENABLE_UNISTDIO + /* Outside POSIX, it's preferable to compare the width + against the number of _characters_ of the converted + value. */ + w = DCHAR_MBSNLEN (result + length, count); +# else + /* The width is compared against the number of _bytes_ + of the converted value, says POSIX. */ + w = count; +# endif + if (w < width) + { + size_t pad = width - w; + + /* Make room for the result. */ + if (xsum (count, pad) > allocated - length) + { + /* Need at least count + pad elements. But + allocate proportionally. */ + size_t n = + xmax (xsum3 (length, count, pad), + xtimes (allocated, 2)); + +# if USE_SNPRINTF + length += count; + ENSURE_ALLOCATION (n); + length -= count; +# else + ENSURE_ALLOCATION (n); +# endif + } + /* Here count + pad <= allocated - length. */ + + { +# if !DCHAR_IS_TCHAR || USE_SNPRINTF + DCHAR_T * const rp = result + length; +# else + DCHAR_T * const rp = tmp; +# endif + DCHAR_T *p = rp + count; + DCHAR_T *end = p + pad; + DCHAR_T *pad_ptr; +# if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO + if (dp->conversion == 'c' + || dp->conversion == 's') + /* No zero-padding for string directives. */ + pad_ptr = NULL; + else +# endif + { + pad_ptr = (*rp == '-' ? rp + 1 : rp); + /* No zero-padding of "inf" and "nan". */ + if ((*pad_ptr >= 'A' && *pad_ptr <= 'Z') + || (*pad_ptr >= 'a' && *pad_ptr <= 'z')) + pad_ptr = NULL; + } + /* The generated string now extends from rp to p, + with the zero padding insertion point being at + pad_ptr. */ + + count = count + pad; /* = end - rp */ + + if (flags & FLAG_LEFT) + { + /* Pad with spaces on the right. */ + for (; pad > 0; pad--) + *p++ = ' '; + } + else if ((flags & FLAG_ZERO) && pad_ptr != NULL) + { + /* Pad with zeroes. */ + DCHAR_T *q = end; + + while (p > pad_ptr) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = '0'; + } + else + { + /* Pad with spaces on the left. */ + DCHAR_T *q = end; + + while (p > rp) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = ' '; + } + } + } + } +#endif + + /* Here still count <= allocated - length. */ + +#if !DCHAR_IS_TCHAR || USE_SNPRINTF + /* The snprintf() result did fit. */ +#else + /* Append the sprintf() result. */ + memcpy (result + length, tmp, count * sizeof (DCHAR_T)); +#endif +#if !USE_SNPRINTF + if (tmp != tmpbuf) + free (tmp); +#endif + +#if NEED_PRINTF_DIRECTIVE_F + if (dp->conversion == 'F') + { + /* Convert the %f result to upper case for %F. */ + DCHAR_T *rp = result + length; + size_t rc; + for (rc = count; rc > 0; rc--, rp++) + if (*rp >= 'a' && *rp <= 'z') + *rp = *rp - 'a' + 'A'; + } +#endif + + length += count; + break; + } + errno = orig_errno; +#undef pad_ourselves +#undef prec_ourselves + } + } + } + + /* Add the final NUL. */ + ENSURE_ALLOCATION (xsum (length, 1)); + result[length] = '\0'; + + if (result != resultbuf && length + 1 < allocated) + { + /* Shrink the allocated memory if possible. */ + DCHAR_T *memory; + + memory = (DCHAR_T *) realloc (result, (length + 1) * sizeof (DCHAR_T)); + if (memory != NULL) + result = memory; + } + + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + *lengthp = length; + /* Note that we can produce a big string of a length > INT_MAX. POSIX + says that snprintf() fails with errno = EOVERFLOW in this case, but + that's only because snprintf() returns an 'int'. This function does + not have this limitation. */ + return result; + +#if USE_SNPRINTF + overflow: + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EOVERFLOW; + return NULL; +#endif + + out_of_memory: + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + out_of_memory_1: + CLEANUP (); + errno = ENOMEM; + return NULL; + } +} + +#undef MAX_ROOM_NEEDED +#undef TCHARS_PER_DCHAR +#undef SNPRINTF +#undef USE_SNPRINTF +#undef DCHAR_SET +#undef DCHAR_CPY +#undef PRINTF_PARSE +#undef DIRECTIVES +#undef DIRECTIVE +#undef DCHAR_IS_TCHAR +#undef TCHAR_T +#undef DCHAR_T +#undef FCHAR_T +#undef VASNPRINTF diff --git a/gnulib/lib/vasnprintf.h b/gnulib/lib/vasnprintf.h new file mode 100644 index 0000000..dd86914 --- /dev/null +++ b/gnulib/lib/vasnprintf.h @@ -0,0 +1,79 @@ +/* vsprintf with automatic memory allocation. + Copyright (C) 2002-2004, 2007-2012 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, see <http://www.gnu.org/licenses/>. */ + +#ifndef _VASNPRINTF_H +#define _VASNPRINTF_H + +/* Get va_list. */ +#include <stdarg.h> + +/* Get size_t. */ +#include <stddef.h> + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The __-protected variants of the attributes 'format' and 'printf' are + accepted by gcc versions 2.6.4 (effectively 2.7) and later. + We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because + gnulib and libintl do '#define printf __printf__' when they override + the 'printf' function. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) +#else +# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Write formatted output to a string dynamically allocated with malloc(). + You can pass a preallocated buffer for the result in RESULTBUF and its + size in *LENGTHP; otherwise you pass RESULTBUF = NULL. + If successful, return the address of the string (this may be = RESULTBUF + if no dynamic memory allocation was necessary) and set *LENGTHP to the + number of resulting bytes, excluding the trailing NUL. Upon error, set + errno and return NULL. + + When dynamic memory allocation occurs, the preallocated buffer is left + alone (with possibly modified contents). This makes it possible to use + a statically allocated or stack-allocated buffer, like this: + + char buf[100]; + size_t len = sizeof (buf); + char *output = vasnprintf (buf, &len, format, args); + if (output == NULL) + ... error handling ...; + else + { + ... use the output string ...; + if (output != buf) + free (output); + } + */ +#if REPLACE_VASNPRINTF +# define asnprintf rpl_asnprintf +# define vasnprintf rpl_vasnprintf +#endif +extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) + _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 4)); +extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 0)); + +#ifdef __cplusplus +} +#endif + +#endif /* _VASNPRINTF_H */ diff --git a/gnulib/lib/verify.h b/gnulib/lib/verify.h new file mode 100644 index 0000000..cef14ad --- /dev/null +++ b/gnulib/lib/verify.h @@ -0,0 +1,241 @@ +/* Compile-time assert-like macros. + + Copyright (C) 2005-2006, 2009-2012 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 <http://www.gnu.org/licenses/>. */ + +/* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */ + +#ifndef _GL_VERIFY_H +# define _GL_VERIFY_H + + +/* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert works as per C11. + This is supported by GCC 4.6.0 and later, in C mode, and its use + here generates easier-to-read diagnostics when verify (R) fails. + + Define _GL_HAVE_STATIC_ASSERT to 1 if static_assert works as per C++11. + This will likely be supported by future GCC versions, in C++ mode. + + Use this only with GCC. If we were willing to slow 'configure' + down we could also use it with other compilers, but since this + affects only the quality of diagnostics, why bother? */ +# if (4 < __GNUC__ || (__GNUC__ == 4 && 6 <= __GNUC_MINOR__)) && !defined __cplusplus +# define _GL_HAVE__STATIC_ASSERT 1 +# endif +/* The condition (99 < __GNUC__) is temporary, until we know about the + first G++ release that supports static_assert. */ +# if (99 < __GNUC__) && defined __cplusplus +# define _GL_HAVE_STATIC_ASSERT 1 +# endif + +/* Each of these macros verifies that its argument R is nonzero. To + be portable, R should be an integer constant expression. Unlike + assert (R), there is no run-time overhead. + + If _Static_assert works, verify (R) uses it directly. Similarly, + _GL_VERIFY_TRUE works by packaging a _Static_assert inside a struct + that is an operand of sizeof. + + The code below uses several ideas for C++ compilers, and for C + compilers that do not support _Static_assert: + + * The first step is ((R) ? 1 : -1). Given an expression R, of + integral or boolean or floating-point type, this yields an + expression of integral type, whose value is later verified to be + constant and nonnegative. + + * Next this expression W is wrapped in a type + struct _gl_verify_type { + unsigned int _gl_verify_error_if_negative: W; + }. + If W is negative, this yields a compile-time error. No compiler can + deal with a bit-field of negative size. + + One might think that an array size check would have the same + effect, that is, that the type struct { unsigned int dummy[W]; } + would work as well. However, inside a function, some compilers + (such as C++ compilers and GNU C) allow local parameters and + variables inside array size expressions. With these compilers, + an array size check would not properly diagnose this misuse of + the verify macro: + + void function (int n) { verify (n < 0); } + + * For the verify macro, the struct _gl_verify_type will need to + somehow be embedded into a declaration. To be portable, this + declaration must declare an object, a constant, a function, or a + typedef name. If the declared entity uses the type directly, + such as in + + struct dummy {...}; + typedef struct {...} dummy; + extern struct {...} *dummy; + extern void dummy (struct {...} *); + extern struct {...} *dummy (void); + + two uses of the verify macro would yield colliding declarations + if the entity names are not disambiguated. A workaround is to + attach the current line number to the entity name: + + #define _GL_CONCAT0(x, y) x##y + #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) + extern struct {...} * _GL_CONCAT (dummy, __LINE__); + + But this has the problem that two invocations of verify from + within the same macro would collide, since the __LINE__ value + would be the same for both invocations. (The GCC __COUNTER__ + macro solves this problem, but is not portable.) + + A solution is to use the sizeof operator. It yields a number, + getting rid of the identity of the type. Declarations like + + extern int dummy [sizeof (struct {...})]; + extern void dummy (int [sizeof (struct {...})]); + extern int (*dummy (void)) [sizeof (struct {...})]; + + can be repeated. + + * Should the implementation use a named struct or an unnamed struct? + Which of the following alternatives can be used? + + extern int dummy [sizeof (struct {...})]; + extern int dummy [sizeof (struct _gl_verify_type {...})]; + extern void dummy (int [sizeof (struct {...})]); + extern void dummy (int [sizeof (struct _gl_verify_type {...})]); + extern int (*dummy (void)) [sizeof (struct {...})]; + extern int (*dummy (void)) [sizeof (struct _gl_verify_type {...})]; + + In the second and sixth case, the struct type is exported to the + outer scope; two such declarations therefore collide. GCC warns + about the first, third, and fourth cases. So the only remaining + possibility is the fifth case: + + extern int (*dummy (void)) [sizeof (struct {...})]; + + * GCC warns about duplicate declarations of the dummy function if + -Wredundant_decls is used. GCC 4.3 and later have a builtin + __COUNTER__ macro that can let us generate unique identifiers for + each dummy function, to suppress this warning. + + * This implementation exploits the fact that older versions of GCC, + which do not support _Static_assert, also do not warn about the + last declaration mentioned above. + + * In C++, any struct definition inside sizeof is invalid. + Use a template type to work around the problem. */ + +/* Concatenate two preprocessor tokens. */ +# define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) +# define _GL_CONCAT0(x, y) x##y + +/* _GL_COUNTER is an integer, preferably one that changes each time we + use it. Use __COUNTER__ if it works, falling back on __LINE__ + otherwise. __LINE__ isn't perfect, but it's better than a + constant. */ +# if defined __COUNTER__ && __COUNTER__ != __COUNTER__ +# define _GL_COUNTER __COUNTER__ +# else +# define _GL_COUNTER __LINE__ +# endif + +/* Generate a symbol with the given prefix, making it unique if + possible. */ +# define _GL_GENSYM(prefix) _GL_CONCAT (prefix, _GL_COUNTER) + +/* Verify requirement R at compile-time, as an integer constant expression + that returns 1. If R is false, fail at compile-time, preferably + with a diagnostic that includes the string-literal DIAGNOSTIC. */ + +# define _GL_VERIFY_TRUE(R, DIAGNOSTIC) \ + (!!sizeof (_GL_VERIFY_TYPE (R, DIAGNOSTIC))) + +# ifdef __cplusplus +# if !GNULIB_defined_struct__gl_verify_type +template <int w> + struct _gl_verify_type { + unsigned int _gl_verify_error_if_negative: w; + }; +# define GNULIB_defined_struct__gl_verify_type 1 +# endif +# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ + _gl_verify_type<(R) ? 1 : -1> +# elif defined _GL_HAVE__STATIC_ASSERT +# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ + struct { \ + _Static_assert (R, DIAGNOSTIC); \ + int _gl_dummy; \ + } +# else +# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ + struct { unsigned int _gl_verify_error_if_negative: (R) ? 1 : -1; } +# endif + +/* Verify requirement R at compile-time, as a declaration without a + trailing ';'. If R is false, fail at compile-time, preferably + with a diagnostic that includes the string-literal DIAGNOSTIC. + + Unfortunately, unlike C11, this implementation must appear as an + ordinary declaration, and cannot appear inside struct { ... }. */ + +# ifdef _GL_HAVE__STATIC_ASSERT +# define _GL_VERIFY _Static_assert +# else +# define _GL_VERIFY(R, DIAGNOSTIC) \ + extern int (*_GL_GENSYM (_gl_verify_function) (void)) \ + [_GL_VERIFY_TRUE (R, DIAGNOSTIC)] +# endif + +/* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h. */ +# ifdef _GL_STATIC_ASSERT_H +# if !defined _GL_HAVE__STATIC_ASSERT && !defined _Static_assert +# define _Static_assert(R, DIAGNOSTIC) _GL_VERIFY (R, DIAGNOSTIC) +# endif +# if !defined _GL_HAVE_STATIC_ASSERT && !defined static_assert +# define static_assert _Static_assert /* C11 requires this #define. */ +# endif +# endif + +/* @assert.h omit start@ */ + +/* Each of these macros verifies that its argument R is nonzero. To + be portable, R should be an integer constant expression. Unlike + assert (R), there is no run-time overhead. + + There are two macros, since no single macro can be used in all + contexts in C. verify_true (R) is for scalar contexts, including + integer constant expression contexts. verify (R) is for declaration + contexts, e.g., the top level. */ + +/* Verify requirement R at compile-time, as an integer constant expression. + Return 1. This is equivalent to verify_expr (R, 1). + + verify_true is obsolescent; please use verify_expr instead. */ + +# define verify_true(R) _GL_VERIFY_TRUE (R, "verify_true (" #R ")") + +/* Verify requirement R at compile-time. Return the value of the + expression E. */ + +# define verify_expr(R, E) \ + (_GL_VERIFY_TRUE (R, "verify_expr (" #R ", " #E ")") ? (E) : (E)) + +/* Verify requirement R at compile-time, as a declaration without a + trailing ';'. */ + +# define verify(R) _GL_VERIFY (R, "verify (" #R ")") + +/* @assert.h omit end@ */ + +#endif diff --git a/gnulib/lib/vsnprintf.c b/gnulib/lib/vsnprintf.c new file mode 100644 index 0000000..66852ef --- /dev/null +++ b/gnulib/lib/vsnprintf.c @@ -0,0 +1,70 @@ +/* Formatted output to strings. + Copyright (C) 2004, 2006-2012 Free Software Foundation, Inc. + Written by Simon Josefsson and Yoann Vandoorselaere <yoann@prelude-ids.org>. + + 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, see <http://www.gnu.org/licenses/>. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +/* Specification. */ +#include <stdio.h> + +#include <errno.h> +#include <limits.h> +#include <stdarg.h> +#include <stdlib.h> +#include <string.h> + +#include "vasnprintf.h" + +/* Print formatted output to string STR. Similar to vsprintf, but + additional length SIZE limit how much is written into STR. Returns + string length of formatted string (which may be larger than SIZE). + STR may be NULL, in which case nothing will be written. On error, + return a negative value. */ +int +vsnprintf (char *str, size_t size, const char *format, va_list args) +{ + char *output; + size_t len; + size_t lenbuf = size; + + output = vasnprintf (str, &lenbuf, format, args); + len = lenbuf; + + if (!output) + return -1; + + if (output != str) + { + if (size) + { + size_t pruned_len = (len < size ? len : size - 1); + memcpy (str, output, pruned_len); + str[pruned_len] = '\0'; + } + + free (output); + } + + if (len > INT_MAX) + { + errno = EOVERFLOW; + return -1; + } + + return len; +} diff --git a/gnulib/lib/wchar.in.h b/gnulib/lib/wchar.in.h new file mode 100644 index 0000000..4e92a77 --- /dev/null +++ b/gnulib/lib/wchar.in.h @@ -0,0 +1,1005 @@ +/* A substitute for ISO C99 <wchar.h>, for platforms that have issues. + + Copyright (C) 2007-2012 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, see <http://www.gnu.org/licenses/>. */ + +/* Written by Eric Blake. */ + +/* + * ISO C 99 <wchar.h> for platforms that have issues. + * <http://www.opengroup.org/susv3xbd/wchar.h.html> + * + * For now, this just ensures proper prerequisite inclusion order and + * the declaration of wcwidth(). + */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +#if defined __need_mbstate_t || defined __need_wint_t || (defined __hpux && ((defined _INTTYPES_INCLUDED && !defined strtoimax) || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) || defined _GL_ALREADY_INCLUDING_WCHAR_H +/* Special invocation convention: + - Inside glibc and uClibc header files. + - On HP-UX 11.00 we have a sequence of nested includes + <wchar.h> -> <stdlib.h> -> <stdint.h>, and the latter includes <wchar.h>, + once indirectly <stdint.h> -> <sys/types.h> -> <inttypes.h> -> <wchar.h> + and once directly. In both situations 'wint_t' is not yet defined, + therefore we cannot provide the function overrides; instead include only + the system's <wchar.h>. + - On IRIX 6.5, similarly, we have an include <wchar.h> -> <wctype.h>, and + the latter includes <wchar.h>. But here, we have no way to detect whether + <wctype.h> is completely included or is still being included. */ + +#@INCLUDE_NEXT@ @NEXT_WCHAR_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _@GUARD_PREFIX@_WCHAR_H + +#define _GL_ALREADY_INCLUDING_WCHAR_H + +#if @HAVE_FEATURES_H@ +# include <features.h> /* for __GLIBC__ */ +#endif + +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. + In some builds of uClibc, <wchar.h> is nonexistent and wchar_t is defined + by <stddef.h>. + But avoid namespace pollution on glibc systems. */ +#if !(defined __GLIBC__ && !defined __UCLIBC__) +# include <stddef.h> +#endif +#ifndef __GLIBC__ +# include <stdio.h> +# include <time.h> +#endif + +/* Include the original <wchar.h> if it exists. + Some builds of uClibc lack it. */ +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_WCHAR_H@ +# @INCLUDE_NEXT@ @NEXT_WCHAR_H@ +#endif + +#undef _GL_ALREADY_INCLUDING_WCHAR_H + +#ifndef _@GUARD_PREFIX@_WCHAR_H +#define _@GUARD_PREFIX@_WCHAR_H + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + + +/* Define wint_t and WEOF. (Also done in wctype.in.h.) */ +#if !@HAVE_WINT_T@ && !defined wint_t +# define wint_t int +# ifndef WEOF +# define WEOF -1 +# endif +#else +/* MSVC defines wint_t as 'unsigned short' in <crtdefs.h>. + This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be + "unchanged by default argument promotions". Override it. */ +# if defined _MSC_VER +# if !GNULIB_defined_wint_t +# include <crtdefs.h> +typedef unsigned int rpl_wint_t; +# undef wint_t +# define wint_t rpl_wint_t +# define GNULIB_defined_wint_t 1 +# endif +# endif +# ifndef WEOF +# define WEOF ((wint_t) -1) +# endif +#endif + + +/* Override mbstate_t if it is too small. + On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for + implementing mbrtowc for encodings like UTF-8. */ +#if !(@HAVE_MBSINIT@ && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@ +# if !GNULIB_defined_mbstate_t +typedef int rpl_mbstate_t; +# undef mbstate_t +# define mbstate_t rpl_mbstate_t +# define GNULIB_defined_mbstate_t 1 +# endif +#endif + + +/* Convert a single-byte character to a wide character. */ +#if @GNULIB_BTOWC@ +# if @REPLACE_BTOWC@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef btowc +# define btowc rpl_btowc +# endif +_GL_FUNCDECL_RPL (btowc, wint_t, (int c)); +_GL_CXXALIAS_RPL (btowc, wint_t, (int c)); +# else +# if !@HAVE_BTOWC@ +_GL_FUNCDECL_SYS (btowc, wint_t, (int c)); +# endif +_GL_CXXALIAS_SYS (btowc, wint_t, (int c)); +# endif +_GL_CXXALIASWARN (btowc); +#elif defined GNULIB_POSIXCHECK +# undef btowc +# if HAVE_RAW_DECL_BTOWC +_GL_WARN_ON_USE (btowc, "btowc is unportable - " + "use gnulib module btowc for portability"); +# endif +#endif + + +/* Convert a wide character to a single-byte character. */ +#if @GNULIB_WCTOB@ +# if @REPLACE_WCTOB@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wctob +# define wctob rpl_wctob +# endif +_GL_FUNCDECL_RPL (wctob, int, (wint_t wc)); +_GL_CXXALIAS_RPL (wctob, int, (wint_t wc)); +# else +# if !defined wctob && !@HAVE_DECL_WCTOB@ +/* wctob is provided by gnulib, or wctob exists but is not declared. */ +_GL_FUNCDECL_SYS (wctob, int, (wint_t wc)); +# endif +_GL_CXXALIAS_SYS (wctob, int, (wint_t wc)); +# endif +_GL_CXXALIASWARN (wctob); +#elif defined GNULIB_POSIXCHECK +# undef wctob +# if HAVE_RAW_DECL_WCTOB +_GL_WARN_ON_USE (wctob, "wctob is unportable - " + "use gnulib module wctob for portability"); +# endif +#endif + + +/* Test whether *PS is in the initial state. */ +#if @GNULIB_MBSINIT@ +# if @REPLACE_MBSINIT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbsinit +# define mbsinit rpl_mbsinit +# endif +_GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps)); +_GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps)); +# else +# if !@HAVE_MBSINIT@ +_GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps)); +# endif +_GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (mbsinit); +#elif defined GNULIB_POSIXCHECK +# undef mbsinit +# if HAVE_RAW_DECL_MBSINIT +_GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - " + "use gnulib module mbsinit for portability"); +# endif +#endif + + +/* Convert a multibyte character to a wide character. */ +#if @GNULIB_MBRTOWC@ +# if @REPLACE_MBRTOWC@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbrtowc +# define mbrtowc rpl_mbrtowc +# endif +_GL_FUNCDECL_RPL (mbrtowc, size_t, + (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); +_GL_CXXALIAS_RPL (mbrtowc, size_t, + (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); +# else +# if !@HAVE_MBRTOWC@ +_GL_FUNCDECL_SYS (mbrtowc, size_t, + (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); +# endif +_GL_CXXALIAS_SYS (mbrtowc, size_t, + (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (mbrtowc); +#elif defined GNULIB_POSIXCHECK +# undef mbrtowc +# if HAVE_RAW_DECL_MBRTOWC +_GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - " + "use gnulib module mbrtowc for portability"); +# endif +#endif + + +/* Recognize a multibyte character. */ +#if @GNULIB_MBRLEN@ +# if @REPLACE_MBRLEN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbrlen +# define mbrlen rpl_mbrlen +# endif +_GL_FUNCDECL_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); +_GL_CXXALIAS_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); +# else +# if !@HAVE_MBRLEN@ +_GL_FUNCDECL_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); +# endif +_GL_CXXALIAS_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (mbrlen); +#elif defined GNULIB_POSIXCHECK +# undef mbrlen +# if HAVE_RAW_DECL_MBRLEN +_GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - " + "use gnulib module mbrlen for portability"); +# endif +#endif + + +/* Convert a string to a wide string. */ +#if @GNULIB_MBSRTOWCS@ +# if @REPLACE_MBSRTOWCS@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbsrtowcs +# define mbsrtowcs rpl_mbsrtowcs +# endif +_GL_FUNCDECL_RPL (mbsrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (mbsrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t len, + mbstate_t *ps)); +# else +# if !@HAVE_MBSRTOWCS@ +_GL_FUNCDECL_SYS (mbsrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (mbsrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t len, + mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (mbsrtowcs); +#elif defined GNULIB_POSIXCHECK +# undef mbsrtowcs +# if HAVE_RAW_DECL_MBSRTOWCS +_GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - " + "use gnulib module mbsrtowcs for portability"); +# endif +#endif + + +/* Convert a string to a wide string. */ +#if @GNULIB_MBSNRTOWCS@ +# if @REPLACE_MBSNRTOWCS@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbsnrtowcs +# define mbsnrtowcs rpl_mbsnrtowcs +# endif +_GL_FUNCDECL_RPL (mbsnrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t srclen, size_t len, + mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (mbsnrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t srclen, size_t len, + mbstate_t *ps)); +# else +# if !@HAVE_MBSNRTOWCS@ +_GL_FUNCDECL_SYS (mbsnrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t srclen, size_t len, + mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (mbsnrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t srclen, size_t len, + mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (mbsnrtowcs); +#elif defined GNULIB_POSIXCHECK +# undef mbsnrtowcs +# if HAVE_RAW_DECL_MBSNRTOWCS +_GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - " + "use gnulib module mbsnrtowcs for portability"); +# endif +#endif + + +/* Convert a wide character to a multibyte character. */ +#if @GNULIB_WCRTOMB@ +# if @REPLACE_WCRTOMB@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcrtomb +# define wcrtomb rpl_wcrtomb +# endif +_GL_FUNCDECL_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); +_GL_CXXALIAS_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); +# else +# if !@HAVE_WCRTOMB@ +_GL_FUNCDECL_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); +# endif +_GL_CXXALIAS_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (wcrtomb); +#elif defined GNULIB_POSIXCHECK +# undef wcrtomb +# if HAVE_RAW_DECL_WCRTOMB +_GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - " + "use gnulib module wcrtomb for portability"); +# endif +#endif + + +/* Convert a wide string to a string. */ +#if @GNULIB_WCSRTOMBS@ +# if @REPLACE_WCSRTOMBS@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcsrtombs +# define wcsrtombs rpl_wcsrtombs +# endif +_GL_FUNCDECL_RPL (wcsrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (wcsrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t len, + mbstate_t *ps)); +# else +# if !@HAVE_WCSRTOMBS@ +_GL_FUNCDECL_SYS (wcsrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (wcsrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t len, + mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (wcsrtombs); +#elif defined GNULIB_POSIXCHECK +# undef wcsrtombs +# if HAVE_RAW_DECL_WCSRTOMBS +_GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - " + "use gnulib module wcsrtombs for portability"); +# endif +#endif + + +/* Convert a wide string to a string. */ +#if @GNULIB_WCSNRTOMBS@ +# if @REPLACE_WCSNRTOMBS@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcsnrtombs +# define wcsnrtombs rpl_wcsnrtombs +# endif +_GL_FUNCDECL_RPL (wcsnrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t srclen, size_t len, + mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (wcsnrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t srclen, size_t len, + mbstate_t *ps)); +# else +# if !@HAVE_WCSNRTOMBS@ +_GL_FUNCDECL_SYS (wcsnrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t srclen, size_t len, + mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (wcsnrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t srclen, size_t len, + mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (wcsnrtombs); +#elif defined GNULIB_POSIXCHECK +# undef wcsnrtombs +# if HAVE_RAW_DECL_WCSNRTOMBS +_GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - " + "use gnulib module wcsnrtombs for portability"); +# endif +#endif + + +/* Return the number of screen columns needed for WC. */ +#if @GNULIB_WCWIDTH@ +# if @REPLACE_WCWIDTH@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcwidth +# define wcwidth rpl_wcwidth +# endif +_GL_FUNCDECL_RPL (wcwidth, int, (wchar_t)); +_GL_CXXALIAS_RPL (wcwidth, int, (wchar_t)); +# else +# if !@HAVE_DECL_WCWIDTH@ +/* wcwidth exists but is not declared. */ +_GL_FUNCDECL_SYS (wcwidth, int, (wchar_t)); +# endif +_GL_CXXALIAS_SYS (wcwidth, int, (wchar_t)); +# endif +_GL_CXXALIASWARN (wcwidth); +#elif defined GNULIB_POSIXCHECK +# undef wcwidth +# if HAVE_RAW_DECL_WCWIDTH +_GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - " + "use gnulib module wcwidth for portability"); +# endif +#endif + + +/* Search N wide characters of S for C. */ +#if @GNULIB_WMEMCHR@ +# if !@HAVE_WMEMCHR@ +_GL_FUNCDECL_SYS (wmemchr, wchar_t *, (const wchar_t *s, wchar_t c, size_t n)); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wmemchr (const wchar_t *, wchar_t, size_t); + wchar_t * std::wmemchr (wchar_t *, wchar_t, size_t); + } */ +_GL_CXXALIAS_SYS_CAST2 (wmemchr, + wchar_t *, (const wchar_t *, wchar_t, size_t), + const wchar_t *, (const wchar_t *, wchar_t, size_t)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (wmemchr, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); +_GL_CXXALIASWARN1 (wmemchr, const wchar_t *, + (const wchar_t *s, wchar_t c, size_t n)); +# else +_GL_CXXALIASWARN (wmemchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wmemchr +# if HAVE_RAW_DECL_WMEMCHR +_GL_WARN_ON_USE (wmemchr, "wmemchr is unportable - " + "use gnulib module wmemchr for portability"); +# endif +#endif + + +/* Compare N wide characters of S1 and S2. */ +#if @GNULIB_WMEMCMP@ +# if !@HAVE_WMEMCMP@ +_GL_FUNCDECL_SYS (wmemcmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n)); +# endif +_GL_CXXALIAS_SYS (wmemcmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n)); +_GL_CXXALIASWARN (wmemcmp); +#elif defined GNULIB_POSIXCHECK +# undef wmemcmp +# if HAVE_RAW_DECL_WMEMCMP +_GL_WARN_ON_USE (wmemcmp, "wmemcmp is unportable - " + "use gnulib module wmemcmp for portability"); +# endif +#endif + + +/* Copy N wide characters of SRC to DEST. */ +#if @GNULIB_WMEMCPY@ +# if !@HAVE_WMEMCPY@ +_GL_FUNCDECL_SYS (wmemcpy, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +# endif +_GL_CXXALIAS_SYS (wmemcpy, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +_GL_CXXALIASWARN (wmemcpy); +#elif defined GNULIB_POSIXCHECK +# undef wmemcpy +# if HAVE_RAW_DECL_WMEMCPY +_GL_WARN_ON_USE (wmemcpy, "wmemcpy is unportable - " + "use gnulib module wmemcpy for portability"); +# endif +#endif + + +/* Copy N wide characters of SRC to DEST, guaranteeing correct behavior for + overlapping memory areas. */ +#if @GNULIB_WMEMMOVE@ +# if !@HAVE_WMEMMOVE@ +_GL_FUNCDECL_SYS (wmemmove, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +# endif +_GL_CXXALIAS_SYS (wmemmove, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +_GL_CXXALIASWARN (wmemmove); +#elif defined GNULIB_POSIXCHECK +# undef wmemmove +# if HAVE_RAW_DECL_WMEMMOVE +_GL_WARN_ON_USE (wmemmove, "wmemmove is unportable - " + "use gnulib module wmemmove for portability"); +# endif +#endif + + +/* Set N wide characters of S to C. */ +#if @GNULIB_WMEMSET@ +# if !@HAVE_WMEMSET@ +_GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); +# endif +_GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); +_GL_CXXALIASWARN (wmemset); +#elif defined GNULIB_POSIXCHECK +# undef wmemset +# if HAVE_RAW_DECL_WMEMSET +_GL_WARN_ON_USE (wmemset, "wmemset is unportable - " + "use gnulib module wmemset for portability"); +# endif +#endif + + +/* Return the number of wide characters in S. */ +#if @GNULIB_WCSLEN@ +# if !@HAVE_WCSLEN@ +_GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s)); +# endif +_GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s)); +_GL_CXXALIASWARN (wcslen); +#elif defined GNULIB_POSIXCHECK +# undef wcslen +# if HAVE_RAW_DECL_WCSLEN +_GL_WARN_ON_USE (wcslen, "wcslen is unportable - " + "use gnulib module wcslen for portability"); +# endif +#endif + + +/* Return the number of wide characters in S, but at most MAXLEN. */ +#if @GNULIB_WCSNLEN@ +# if !@HAVE_WCSNLEN@ +_GL_FUNCDECL_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen)); +# endif +_GL_CXXALIAS_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen)); +_GL_CXXALIASWARN (wcsnlen); +#elif defined GNULIB_POSIXCHECK +# undef wcsnlen +# if HAVE_RAW_DECL_WCSNLEN +_GL_WARN_ON_USE (wcsnlen, "wcsnlen is unportable - " + "use gnulib module wcsnlen for portability"); +# endif +#endif + + +/* Copy SRC to DEST. */ +#if @GNULIB_WCSCPY@ +# if !@HAVE_WCSCPY@ +_GL_FUNCDECL_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); +# endif +_GL_CXXALIAS_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); +_GL_CXXALIASWARN (wcscpy); +#elif defined GNULIB_POSIXCHECK +# undef wcscpy +# if HAVE_RAW_DECL_WCSCPY +_GL_WARN_ON_USE (wcscpy, "wcscpy is unportable - " + "use gnulib module wcscpy for portability"); +# endif +#endif + + +/* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST. */ +#if @GNULIB_WCPCPY@ +# if !@HAVE_WCPCPY@ +_GL_FUNCDECL_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); +# endif +_GL_CXXALIAS_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); +_GL_CXXALIASWARN (wcpcpy); +#elif defined GNULIB_POSIXCHECK +# undef wcpcpy +# if HAVE_RAW_DECL_WCPCPY +_GL_WARN_ON_USE (wcpcpy, "wcpcpy is unportable - " + "use gnulib module wcpcpy for portability"); +# endif +#endif + + +/* Copy no more than N wide characters of SRC to DEST. */ +#if @GNULIB_WCSNCPY@ +# if !@HAVE_WCSNCPY@ +_GL_FUNCDECL_SYS (wcsncpy, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +# endif +_GL_CXXALIAS_SYS (wcsncpy, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +_GL_CXXALIASWARN (wcsncpy); +#elif defined GNULIB_POSIXCHECK +# undef wcsncpy +# if HAVE_RAW_DECL_WCSNCPY +_GL_WARN_ON_USE (wcsncpy, "wcsncpy is unportable - " + "use gnulib module wcsncpy for portability"); +# endif +#endif + + +/* Copy no more than N characters of SRC to DEST, returning the address of + the last character written into DEST. */ +#if @GNULIB_WCPNCPY@ +# if !@HAVE_WCPNCPY@ +_GL_FUNCDECL_SYS (wcpncpy, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +# endif +_GL_CXXALIAS_SYS (wcpncpy, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +_GL_CXXALIASWARN (wcpncpy); +#elif defined GNULIB_POSIXCHECK +# undef wcpncpy +# if HAVE_RAW_DECL_WCPNCPY +_GL_WARN_ON_USE (wcpncpy, "wcpncpy is unportable - " + "use gnulib module wcpncpy for portability"); +# endif +#endif + + +/* Append SRC onto DEST. */ +#if @GNULIB_WCSCAT@ +# if !@HAVE_WCSCAT@ +_GL_FUNCDECL_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src)); +# endif +_GL_CXXALIAS_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src)); +_GL_CXXALIASWARN (wcscat); +#elif defined GNULIB_POSIXCHECK +# undef wcscat +# if HAVE_RAW_DECL_WCSCAT +_GL_WARN_ON_USE (wcscat, "wcscat is unportable - " + "use gnulib module wcscat for portability"); +# endif +#endif + + +/* Append no more than N wide characters of SRC onto DEST. */ +#if @GNULIB_WCSNCAT@ +# if !@HAVE_WCSNCAT@ +_GL_FUNCDECL_SYS (wcsncat, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +# endif +_GL_CXXALIAS_SYS (wcsncat, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +_GL_CXXALIASWARN (wcsncat); +#elif defined GNULIB_POSIXCHECK +# undef wcsncat +# if HAVE_RAW_DECL_WCSNCAT +_GL_WARN_ON_USE (wcsncat, "wcsncat is unportable - " + "use gnulib module wcsncat for portability"); +# endif +#endif + + +/* Compare S1 and S2. */ +#if @GNULIB_WCSCMP@ +# if !@HAVE_WCSCMP@ +_GL_FUNCDECL_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)); +# endif +_GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)); +_GL_CXXALIASWARN (wcscmp); +#elif defined GNULIB_POSIXCHECK +# undef wcscmp +# if HAVE_RAW_DECL_WCSCMP +_GL_WARN_ON_USE (wcscmp, "wcscmp is unportable - " + "use gnulib module wcscmp for portability"); +# endif +#endif + + +/* Compare no more than N wide characters of S1 and S2. */ +#if @GNULIB_WCSNCMP@ +# if !@HAVE_WCSNCMP@ +_GL_FUNCDECL_SYS (wcsncmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n)); +# endif +_GL_CXXALIAS_SYS (wcsncmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n)); +_GL_CXXALIASWARN (wcsncmp); +#elif defined GNULIB_POSIXCHECK +# undef wcsncmp +# if HAVE_RAW_DECL_WCSNCMP +_GL_WARN_ON_USE (wcsncmp, "wcsncmp is unportable - " + "use gnulib module wcsncmp for portability"); +# endif +#endif + + +/* Compare S1 and S2, ignoring case. */ +#if @GNULIB_WCSCASECMP@ +# if !@HAVE_WCSCASECMP@ +_GL_FUNCDECL_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2)); +# endif +_GL_CXXALIAS_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2)); +_GL_CXXALIASWARN (wcscasecmp); +#elif defined GNULIB_POSIXCHECK +# undef wcscasecmp +# if HAVE_RAW_DECL_WCSCASECMP +_GL_WARN_ON_USE (wcscasecmp, "wcscasecmp is unportable - " + "use gnulib module wcscasecmp for portability"); +# endif +#endif + + +/* Compare no more than N chars of S1 and S2, ignoring case. */ +#if @GNULIB_WCSNCASECMP@ +# if !@HAVE_WCSNCASECMP@ +_GL_FUNCDECL_SYS (wcsncasecmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n)); +# endif +_GL_CXXALIAS_SYS (wcsncasecmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n)); +_GL_CXXALIASWARN (wcsncasecmp); +#elif defined GNULIB_POSIXCHECK +# undef wcsncasecmp +# if HAVE_RAW_DECL_WCSNCASECMP +_GL_WARN_ON_USE (wcsncasecmp, "wcsncasecmp is unportable - " + "use gnulib module wcsncasecmp for portability"); +# endif +#endif + + +/* Compare S1 and S2, both interpreted as appropriate to the LC_COLLATE + category of the current locale. */ +#if @GNULIB_WCSCOLL@ +# if !@HAVE_WCSCOLL@ +_GL_FUNCDECL_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); +# endif +_GL_CXXALIAS_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); +_GL_CXXALIASWARN (wcscoll); +#elif defined GNULIB_POSIXCHECK +# undef wcscoll +# if HAVE_RAW_DECL_WCSCOLL +_GL_WARN_ON_USE (wcscoll, "wcscoll is unportable - " + "use gnulib module wcscoll for portability"); +# endif +#endif + + +/* Transform S2 into array pointed to by S1 such that if wcscmp is applied + to two transformed strings the result is the as applying 'wcscoll' to the + original strings. */ +#if @GNULIB_WCSXFRM@ +# if !@HAVE_WCSXFRM@ +_GL_FUNCDECL_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n)); +# endif +_GL_CXXALIAS_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n)); +_GL_CXXALIASWARN (wcsxfrm); +#elif defined GNULIB_POSIXCHECK +# undef wcsxfrm +# if HAVE_RAW_DECL_WCSXFRM +_GL_WARN_ON_USE (wcsxfrm, "wcsxfrm is unportable - " + "use gnulib module wcsxfrm for portability"); +# endif +#endif + + +/* Duplicate S, returning an identical malloc'd string. */ +#if @GNULIB_WCSDUP@ +# if !@HAVE_WCSDUP@ +_GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s)); +# endif +_GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s)); +_GL_CXXALIASWARN (wcsdup); +#elif defined GNULIB_POSIXCHECK +# undef wcsdup +# if HAVE_RAW_DECL_WCSDUP +_GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - " + "use gnulib module wcsdup for portability"); +# endif +#endif + + +/* Find the first occurrence of WC in WCS. */ +#if @GNULIB_WCSCHR@ +# if !@HAVE_WCSCHR@ +_GL_FUNCDECL_SYS (wcschr, wchar_t *, (const wchar_t *wcs, wchar_t wc)); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wcschr (const wchar_t *, wchar_t); + wchar_t * std::wcschr (wchar_t *, wchar_t); + } */ +_GL_CXXALIAS_SYS_CAST2 (wcschr, + wchar_t *, (const wchar_t *, wchar_t), + const wchar_t *, (const wchar_t *, wchar_t)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (wcschr, wchar_t *, (wchar_t *wcs, wchar_t wc)); +_GL_CXXALIASWARN1 (wcschr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); +# else +_GL_CXXALIASWARN (wcschr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcschr +# if HAVE_RAW_DECL_WCSCHR +_GL_WARN_ON_USE (wcschr, "wcschr is unportable - " + "use gnulib module wcschr for portability"); +# endif +#endif + + +/* Find the last occurrence of WC in WCS. */ +#if @GNULIB_WCSRCHR@ +# if !@HAVE_WCSRCHR@ +_GL_FUNCDECL_SYS (wcsrchr, wchar_t *, (const wchar_t *wcs, wchar_t wc)); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wcsrchr (const wchar_t *, wchar_t); + wchar_t * std::wcsrchr (wchar_t *, wchar_t); + } */ +_GL_CXXALIAS_SYS_CAST2 (wcsrchr, + wchar_t *, (const wchar_t *, wchar_t), + const wchar_t *, (const wchar_t *, wchar_t)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (wcsrchr, wchar_t *, (wchar_t *wcs, wchar_t wc)); +_GL_CXXALIASWARN1 (wcsrchr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); +# else +_GL_CXXALIASWARN (wcsrchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsrchr +# if HAVE_RAW_DECL_WCSRCHR +_GL_WARN_ON_USE (wcsrchr, "wcsrchr is unportable - " + "use gnulib module wcsrchr for portability"); +# endif +#endif + + +/* Return the length of the initial segmet of WCS which consists entirely + of wide characters not in REJECT. */ +#if @GNULIB_WCSCSPN@ +# if !@HAVE_WCSCSPN@ +_GL_FUNCDECL_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)); +# endif +_GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)); +_GL_CXXALIASWARN (wcscspn); +#elif defined GNULIB_POSIXCHECK +# undef wcscspn +# if HAVE_RAW_DECL_WCSCSPN +_GL_WARN_ON_USE (wcscspn, "wcscspn is unportable - " + "use gnulib module wcscspn for portability"); +# endif +#endif + + +/* Return the length of the initial segmet of WCS which consists entirely + of wide characters in ACCEPT. */ +#if @GNULIB_WCSSPN@ +# if !@HAVE_WCSSPN@ +_GL_FUNCDECL_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)); +# endif +_GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)); +_GL_CXXALIASWARN (wcsspn); +#elif defined GNULIB_POSIXCHECK +# undef wcsspn +# if HAVE_RAW_DECL_WCSSPN +_GL_WARN_ON_USE (wcsspn, "wcsspn is unportable - " + "use gnulib module wcsspn for portability"); +# endif +#endif + + +/* Find the first occurrence in WCS of any character in ACCEPT. */ +#if @GNULIB_WCSPBRK@ +# if !@HAVE_WCSPBRK@ +_GL_FUNCDECL_SYS (wcspbrk, wchar_t *, + (const wchar_t *wcs, const wchar_t *accept)); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wcspbrk (const wchar_t *, const wchar_t *); + wchar_t * std::wcspbrk (wchar_t *, const wchar_t *); + } */ +_GL_CXXALIAS_SYS_CAST2 (wcspbrk, + wchar_t *, (const wchar_t *, const wchar_t *), + const wchar_t *, (const wchar_t *, const wchar_t *)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (wcspbrk, wchar_t *, + (wchar_t *wcs, const wchar_t *accept)); +_GL_CXXALIASWARN1 (wcspbrk, const wchar_t *, + (const wchar_t *wcs, const wchar_t *accept)); +# else +_GL_CXXALIASWARN (wcspbrk); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcspbrk +# if HAVE_RAW_DECL_WCSPBRK +_GL_WARN_ON_USE (wcspbrk, "wcspbrk is unportable - " + "use gnulib module wcspbrk for portability"); +# endif +#endif + + +/* Find the first occurrence of NEEDLE in HAYSTACK. */ +#if @GNULIB_WCSSTR@ +# if !@HAVE_WCSSTR@ +_GL_FUNCDECL_SYS (wcsstr, wchar_t *, + (const wchar_t *haystack, const wchar_t *needle)); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wcsstr (const wchar_t *, const wchar_t *); + wchar_t * std::wcsstr (wchar_t *, const wchar_t *); + } */ +_GL_CXXALIAS_SYS_CAST2 (wcsstr, + wchar_t *, (const wchar_t *, const wchar_t *), + const wchar_t *, (const wchar_t *, const wchar_t *)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (wcsstr, wchar_t *, + (wchar_t *haystack, const wchar_t *needle)); +_GL_CXXALIASWARN1 (wcsstr, const wchar_t *, + (const wchar_t *haystack, const wchar_t *needle)); +# else +_GL_CXXALIASWARN (wcsstr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsstr +# if HAVE_RAW_DECL_WCSSTR +_GL_WARN_ON_USE (wcsstr, "wcsstr is unportable - " + "use gnulib module wcsstr for portability"); +# endif +#endif + + +/* Divide WCS into tokens separated by characters in DELIM. */ +#if @GNULIB_WCSTOK@ +# if !@HAVE_WCSTOK@ +_GL_FUNCDECL_SYS (wcstok, wchar_t *, + (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr)); +# endif +_GL_CXXALIAS_SYS (wcstok, wchar_t *, + (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr)); +_GL_CXXALIASWARN (wcstok); +#elif defined GNULIB_POSIXCHECK +# undef wcstok +# if HAVE_RAW_DECL_WCSTOK +_GL_WARN_ON_USE (wcstok, "wcstok is unportable - " + "use gnulib module wcstok for portability"); +# endif +#endif + + +/* Determine number of column positions required for first N wide + characters (or fewer if S ends before this) in S. */ +#if @GNULIB_WCSWIDTH@ +# if @REPLACE_WCSWIDTH@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcswidth +# define wcswidth rpl_wcswidth +# endif +_GL_FUNCDECL_RPL (wcswidth, int, (const wchar_t *s, size_t n)); +_GL_CXXALIAS_RPL (wcswidth, int, (const wchar_t *s, size_t n)); +# else +# if !@HAVE_WCSWIDTH@ +_GL_FUNCDECL_SYS (wcswidth, int, (const wchar_t *s, size_t n)); +# endif +_GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n)); +# endif +_GL_CXXALIASWARN (wcswidth); +#elif defined GNULIB_POSIXCHECK +# undef wcswidth +# if HAVE_RAW_DECL_WCSWIDTH +_GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - " + "use gnulib module wcswidth for portability"); +# endif +#endif + + +#endif /* _@GUARD_PREFIX@_WCHAR_H */ +#endif /* _@GUARD_PREFIX@_WCHAR_H */ +#endif diff --git a/gnulib/lib/xsize.h b/gnulib/lib/xsize.h new file mode 100644 index 0000000..515327e --- /dev/null +++ b/gnulib/lib/xsize.h @@ -0,0 +1,107 @@ +/* xsize.h -- Checked size_t computations. + + Copyright (C) 2003, 2008-2012 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, see <http://www.gnu.org/licenses/>. */ + +#ifndef _XSIZE_H +#define _XSIZE_H + +/* Get size_t. */ +#include <stddef.h> + +/* Get SIZE_MAX. */ +#include <limits.h> +#if HAVE_STDINT_H +# include <stdint.h> +#endif + +/* The size of memory objects is often computed through expressions of + type size_t. Example: + void* p = malloc (header_size + n * element_size). + These computations can lead to overflow. When this happens, malloc() + returns a piece of memory that is way too small, and the program then + crashes while attempting to fill the memory. + To avoid this, the functions and macros in this file check for overflow. + The convention is that SIZE_MAX represents overflow. + malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc + implementation that uses mmap --, it's recommended to use size_overflow_p() + or size_in_bounds_p() before invoking malloc(). + The example thus becomes: + size_t size = xsum (header_size, xtimes (n, element_size)); + void *p = (size_in_bounds_p (size) ? malloc (size) : NULL); +*/ + +/* Convert an arbitrary value >= 0 to type size_t. */ +#define xcast_size_t(N) \ + ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX) + +/* Sum of two sizes, with overflow check. */ +static inline size_t +#if __GNUC__ >= 3 +__attribute__ ((__pure__)) +#endif +xsum (size_t size1, size_t size2) +{ + size_t sum = size1 + size2; + return (sum >= size1 ? sum : SIZE_MAX); +} + +/* Sum of three sizes, with overflow check. */ +static inline size_t +#if __GNUC__ >= 3 +__attribute__ ((__pure__)) +#endif +xsum3 (size_t size1, size_t size2, size_t size3) +{ + return xsum (xsum (size1, size2), size3); +} + +/* Sum of four sizes, with overflow check. */ +static inline size_t +#if __GNUC__ >= 3 +__attribute__ ((__pure__)) +#endif +xsum4 (size_t size1, size_t size2, size_t size3, size_t size4) +{ + return xsum (xsum (xsum (size1, size2), size3), size4); +} + +/* Maximum of two sizes, with overflow check. */ +static inline size_t +#if __GNUC__ >= 3 +__attribute__ ((__pure__)) +#endif +xmax (size_t size1, size_t size2) +{ + /* No explicit check is needed here, because for any n: + max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX. */ + return (size1 >= size2 ? size1 : size2); +} + +/* Multiplication of a count with an element size, with overflow check. + The count must be >= 0 and the element size must be > 0. + This is a macro, not an inline function, so that it works correctly even + when N is of a wider type and N > SIZE_MAX. */ +#define xtimes(N, ELSIZE) \ + ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX) + +/* Check for overflow. */ +#define size_overflow_p(SIZE) \ + ((SIZE) == SIZE_MAX) +/* Check against overflow. */ +#define size_in_bounds_p(SIZE) \ + ((SIZE) != SIZE_MAX) + +#endif /* _XSIZE_H */ diff --git a/gnulib/m4/00gnulib.m4 b/gnulib/m4/00gnulib.m4 new file mode 100644 index 0000000..d978cb8 --- /dev/null +++ b/gnulib/m4/00gnulib.m4 @@ -0,0 +1,30 @@ +# 00gnulib.m4 serial 2 +dnl Copyright (C) 2009-2012 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. + +dnl This file must be named something that sorts before all other +dnl gnulib-provided .m4 files. It is needed until such time as we can +dnl assume Autoconf 2.64, with its improved AC_DEFUN_ONCE semantics. + +# AC_DEFUN_ONCE([NAME], VALUE) +# ---------------------------- +# Define NAME to expand to VALUE on the first use (whether by direct +# expansion, or by AC_REQUIRE), and to nothing on all subsequent uses. +# Avoid bugs in AC_REQUIRE in Autoconf 2.63 and earlier. This +# definition is slower than the version in Autoconf 2.64, because it +# can only use interfaces that existed since 2.59; but it achieves the +# same effect. Quoting is necessary to avoid confusing Automake. +m4_version_prereq([2.63.263], [], +[m4_define([AC][_DEFUN_ONCE], + [AC][_DEFUN([$1], + [AC_REQUIRE([_gl_DEFUN_ONCE([$1])], + [m4_indir([_gl_DEFUN_ONCE([$1])])])])]dnl +[AC][_DEFUN([_gl_DEFUN_ONCE([$1])], [$2])])]) + +# gl_00GNULIB +# ----------- +# Witness macro that this file has been included. Needed to force +# Automake to include this file prior to all other gnulib .m4 files. +AC_DEFUN([gl_00GNULIB]) diff --git a/gnulib/m4/alloca.m4 b/gnulib/m4/alloca.m4 new file mode 100644 index 0000000..656924b --- /dev/null +++ b/gnulib/m4/alloca.m4 @@ -0,0 +1,121 @@ +# alloca.m4 serial 14 +dnl Copyright (C) 2002-2004, 2006-2007, 2009-2012 Free Software Foundation, +dnl 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_ALLOCA], +[ + AC_REQUIRE([AC_FUNC_ALLOCA]) + if test $ac_cv_func_alloca_works = no; then + gl_PREREQ_ALLOCA + fi + + # Define an additional variable used in the Makefile substitution. + if test $ac_cv_working_alloca_h = yes; then + AC_CACHE_CHECK([for alloca as a compiler built-in], [gl_cv_rpl_alloca], [ + AC_EGREP_CPP([Need own alloca], [ +#if defined __GNUC__ || defined _AIX || defined _MSC_VER + Need own alloca +#endif + ], [gl_cv_rpl_alloca=yes], [gl_cv_rpl_alloca=no]) + ]) + if test $gl_cv_rpl_alloca = yes; then + dnl OK, alloca can be implemented through a compiler built-in. + AC_DEFINE([HAVE_ALLOCA], [1], + [Define to 1 if you have 'alloca' after including <alloca.h>, + a header that may be supplied by this distribution.]) + ALLOCA_H=alloca.h + else + dnl alloca exists as a library function, i.e. it is slow and probably + dnl a memory leak. Don't define HAVE_ALLOCA in this case. + ALLOCA_H= + fi + else + ALLOCA_H=alloca.h + fi + AC_SUBST([ALLOCA_H]) + AM_CONDITIONAL([GL_GENERATE_ALLOCA_H], [test -n "$ALLOCA_H"]) +]) + +# Prerequisites of lib/alloca.c. +# STACK_DIRECTION is already handled by AC_FUNC_ALLOCA. +AC_DEFUN([gl_PREREQ_ALLOCA], [:]) + +# This works around a bug in autoconf <= 2.68. +# See <http://lists.gnu.org/archive/html/bug-gnulib/2011-06/msg00277.html>. + +m4_version_prereq([2.69], [] ,[ + +# This is taken from the following Autoconf patch: +# http://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=6cd9f12520b0d6f76d3230d7565feba1ecf29497 + +# _AC_LIBOBJ_ALLOCA +# ----------------- +# Set up the LIBOBJ replacement of 'alloca'. Well, not exactly +# AC_LIBOBJ since we actually set the output variable 'ALLOCA'. +# Nevertheless, for Automake, AC_LIBSOURCES it. +m4_define([_AC_LIBOBJ_ALLOCA], +[# The SVR3 libPW and SVR4 libucb both contain incompatible functions +# that cause trouble. Some versions do not even contain alloca or +# contain a buggy version. If you still want to use their alloca, +# use ar to extract alloca.o from them instead of compiling alloca.c. +AC_LIBSOURCES(alloca.c) +AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.$ac_objext])dnl +AC_DEFINE(C_ALLOCA, 1, [Define to 1 if using 'alloca.c'.]) + +AC_CACHE_CHECK(whether 'alloca.c' needs Cray hooks, ac_cv_os_cray, +[AC_EGREP_CPP(webecray, +[#if defined CRAY && ! defined CRAY2 +webecray +#else +wenotbecray +#endif +], ac_cv_os_cray=yes, ac_cv_os_cray=no)]) +if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + AC_CHECK_FUNC($ac_func, + [AC_DEFINE_UNQUOTED(CRAY_STACKSEG_END, $ac_func, + [Define to one of '_getb67', 'GETB67', + 'getb67' for Cray-2 and Cray-YMP + systems. This function is required for + 'alloca.c' support on those systems.]) + break]) + done +fi + +AC_CACHE_CHECK([stack direction for C alloca], + [ac_cv_c_stack_direction], +[AC_RUN_IFELSE([AC_LANG_SOURCE( +[AC_INCLUDES_DEFAULT +int +find_stack_direction (int *addr, int depth) +{ + int dir, dummy = 0; + if (! addr) + addr = &dummy; + *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; + dir = depth ? find_stack_direction (addr, depth - 1) : 0; + return dir + dummy; +} + +int +main (int argc, char **argv) +{ + return find_stack_direction (0, argc + !argv + 20) < 0; +}])], + [ac_cv_c_stack_direction=1], + [ac_cv_c_stack_direction=-1], + [ac_cv_c_stack_direction=0])]) +AH_VERBATIM([STACK_DIRECTION], +[/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at runtime. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +@%:@undef STACK_DIRECTION])dnl +AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction) +])# _AC_LIBOBJ_ALLOCA +]) diff --git a/gnulib/m4/argp.m4 b/gnulib/m4/argp.m4 new file mode 100644 index 0000000..87c7da6 --- /dev/null +++ b/gnulib/m4/argp.m4 @@ -0,0 +1,65 @@ +# argp.m4 serial 13 +dnl Copyright (C) 2003-2012 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_ARGP], +[ + AC_REQUIRE([AC_C_INLINE]) + AC_REQUIRE([AC_C_RESTRICT]) + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + + AC_CHECK_DECL([program_invocation_name], + [AC_DEFINE([HAVE_DECL_PROGRAM_INVOCATION_NAME], [1], + [Define if program_invocation_name is declared])], + [AC_DEFINE([GNULIB_PROGRAM_INVOCATION_NAME], [1], + [Define to 1 to add extern declaration of program_invocation_name to argp.h])], + [[#include <errno.h>]]) + AC_CHECK_DECL([program_invocation_short_name], + [AC_DEFINE([HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME], [1], + [Define if program_invocation_short_name is declared])], + [AC_DEFINE([GNULIB_PROGRAM_INVOCATION_SHORT_NAME], [1], + [Define to 1 to add extern declaration of program_invocation_short_name to argp.h])], + [[#include <errno.h>]]) + + # Check if program_invocation_name and program_invocation_short_name + # are defined elsewhere. It is improbable that only one of them will + # be defined and other not, I prefer to stay on the safe side and to + # test each one separately. + AC_MSG_CHECKING([whether program_invocation_name is defined]) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <argp.h>]], + [[program_invocation_name = "test";]])], + [AC_DEFINE([HAVE_PROGRAM_INVOCATION_NAME], [1], + [Define if program_invocation_name is defined]) + AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])]) + + AC_MSG_CHECKING([whether program_invocation_short_name is defined]) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <argp.h>]], + [[program_invocation_short_name = "test";]])], + [AC_DEFINE([HAVE_PROGRAM_INVOCATION_SHORT_NAME], [1], + [Define if program_invocation_short_name is defined]) + AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])]) + + AC_CHECK_DECLS_ONCE([clearerr_unlocked]) + AC_CHECK_DECLS_ONCE([feof_unlocked]) + AC_CHECK_DECLS_ONCE([ferror_unlocked]) + AC_CHECK_DECLS_ONCE([fflush_unlocked]) + AC_CHECK_DECLS_ONCE([fgets_unlocked]) + AC_CHECK_DECLS_ONCE([fputc_unlocked]) + AC_CHECK_DECLS_ONCE([fputs_unlocked]) + AC_CHECK_DECLS_ONCE([fread_unlocked]) + AC_CHECK_DECLS_ONCE([fwrite_unlocked]) + AC_CHECK_DECLS_ONCE([getc_unlocked]) + AC_CHECK_DECLS_ONCE([getchar_unlocked]) + AC_CHECK_DECLS_ONCE([putc_unlocked]) + AC_CHECK_DECLS_ONCE([putchar_unlocked]) + AC_CHECK_FUNCS_ONCE([flockfile funlockfile]) + AC_CHECK_HEADERS_ONCE([features.h linewrap.h]) +]) + +dnl argp-parse.c depends on GNU getopt internals, therefore use GNU getopt +dnl always. +AC_DEFUN([gl_REPLACE_GETOPT_ALWAYS], []) diff --git a/gnulib/m4/dirname.m4 b/gnulib/m4/dirname.m4 new file mode 100644 index 0000000..65639ec --- /dev/null +++ b/gnulib/m4/dirname.m4 @@ -0,0 +1,19 @@ +#serial 10 -*- autoconf -*- +dnl Copyright (C) 2002-2006, 2009-2012 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_DIRNAME], +[ + AC_REQUIRE([gl_DIRNAME_LGPL]) +]) + +AC_DEFUN([gl_DIRNAME_LGPL], +[ + dnl Prerequisites of lib/dirname.h. + AC_REQUIRE([gl_DOUBLE_SLASH_ROOT]) + + dnl No prerequisites of lib/basename-lgpl.c, lib/dirname-lgpl.c, + dnl lib/stripslash.c. +]) diff --git a/gnulib/m4/double-slash-root.m4 b/gnulib/m4/double-slash-root.m4 new file mode 100644 index 0000000..1e03751 --- /dev/null +++ b/gnulib/m4/double-slash-root.m4 @@ -0,0 +1,38 @@ +# double-slash-root.m4 serial 4 -*- Autoconf -*- +dnl Copyright (C) 2006, 2008-2012 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_DOUBLE_SLASH_ROOT], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_CACHE_CHECK([whether // is distinct from /], [gl_cv_double_slash_root], + [ if test x"$cross_compiling" = xyes ; then + # When cross-compiling, there is no way to tell whether // is special + # short of a list of hosts. However, the only known hosts to date + # that have a distinct // are Apollo DomainOS (too old to port to), + # Cygwin, and z/OS. If anyone knows of another system for which // has + # special semantics and is distinct from /, please report it to + # <bug-gnulib@gnu.org>. + case $host in + *-cygwin | i370-ibm-openedition) + gl_cv_double_slash_root=yes ;; + *) + # Be optimistic and assume that / and // are the same when we + # don't know. + gl_cv_double_slash_root='unknown, assuming no' ;; + esac + else + set x `ls -di / // 2>/dev/null` + if test "$[2]" = "$[4]" && wc //dev/null >/dev/null 2>&1; then + gl_cv_double_slash_root=no + else + gl_cv_double_slash_root=yes + fi + fi]) + if test "$gl_cv_double_slash_root" = yes; then + AC_DEFINE([DOUBLE_SLASH_IS_DISTINCT_ROOT], [1], + [Define to 1 if // is a file system root distinct from /.]) + fi +]) diff --git a/gnulib/m4/errno_h.m4 b/gnulib/m4/errno_h.m4 new file mode 100644 index 0000000..4f0bb83 --- /dev/null +++ b/gnulib/m4/errno_h.m4 @@ -0,0 +1,125 @@ +# errno_h.m4 serial 10 +dnl Copyright (C) 2004, 2006, 2008-2012 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_ONCE([gl_HEADER_ERRNO_H], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_CACHE_CHECK([for complete errno.h], [gl_cv_header_errno_h_complete], [ + AC_EGREP_CPP([booboo],[ +#include <errno.h> +#if !defined ENOMSG +booboo +#endif +#if !defined EIDRM +booboo +#endif +#if !defined ENOLINK +booboo +#endif +#if !defined EPROTO +booboo +#endif +#if !defined EMULTIHOP +booboo +#endif +#if !defined EBADMSG +booboo +#endif +#if !defined EOVERFLOW +booboo +#endif +#if !defined ENOTSUP +booboo +#endif +#if !defined ENETRESET +booboo +#endif +#if !defined ECONNABORTED +booboo +#endif +#if !defined ESTALE +booboo +#endif +#if !defined EDQUOT +booboo +#endif +#if !defined ECANCELED +booboo +#endif + ], + [gl_cv_header_errno_h_complete=no], + [gl_cv_header_errno_h_complete=yes]) + ]) + if test $gl_cv_header_errno_h_complete = yes; then + ERRNO_H='' + else + gl_NEXT_HEADERS([errno.h]) + ERRNO_H='errno.h' + fi + AC_SUBST([ERRNO_H]) + AM_CONDITIONAL([GL_GENERATE_ERRNO_H], [test -n "$ERRNO_H"]) + gl_REPLACE_ERRNO_VALUE([EMULTIHOP]) + gl_REPLACE_ERRNO_VALUE([ENOLINK]) + gl_REPLACE_ERRNO_VALUE([EOVERFLOW]) +]) + +# Assuming $1 = EOVERFLOW. +# The EOVERFLOW errno value ought to be defined in <errno.h>, according to +# POSIX. But some systems (like OpenBSD 4.0 or AIX 3) don't define it, and +# some systems (like OSF/1) define it when _XOPEN_SOURCE_EXTENDED is defined. +# Check for the value of EOVERFLOW. +# Set the variables EOVERFLOW_HIDDEN and EOVERFLOW_VALUE. +AC_DEFUN([gl_REPLACE_ERRNO_VALUE], +[ + if test -n "$ERRNO_H"; then + AC_CACHE_CHECK([for ]$1[ value], [gl_cv_header_errno_h_]$1, [ + AC_EGREP_CPP([yes],[ +#include <errno.h> +#ifdef ]$1[ +yes +#endif + ], + [gl_cv_header_errno_h_]$1[=yes], + [gl_cv_header_errno_h_]$1[=no]) + if test $gl_cv_header_errno_h_]$1[ = no; then + AC_EGREP_CPP([yes],[ +#define _XOPEN_SOURCE_EXTENDED 1 +#include <errno.h> +#ifdef ]$1[ +yes +#endif + ], [gl_cv_header_errno_h_]$1[=hidden]) + if test $gl_cv_header_errno_h_]$1[ = hidden; then + dnl The macro exists but is hidden. + dnl Define it to the same value. + AC_COMPUTE_INT([gl_cv_header_errno_h_]$1, $1, [ +#define _XOPEN_SOURCE_EXTENDED 1 +#include <errno.h> +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include <stdio.h> +#include <stdlib.h> +]) + fi + fi + ]) + case $gl_cv_header_errno_h_]$1[ in + yes | no) + ]$1[_HIDDEN=0; ]$1[_VALUE= + ;; + *) + ]$1[_HIDDEN=1; ]$1[_VALUE="$gl_cv_header_errno_h_]$1[" + ;; + esac + AC_SUBST($1[_HIDDEN]) + AC_SUBST($1[_VALUE]) + fi +]) + +dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. +dnl Remove this when we can assume autoconf >= 2.61. +m4_ifdef([AC_COMPUTE_INT], [], [ + AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) +]) diff --git a/gnulib/m4/exponentd.m4 b/gnulib/m4/exponentd.m4 new file mode 100644 index 0000000..0ae4ccf --- /dev/null +++ b/gnulib/m4/exponentd.m4 @@ -0,0 +1,116 @@ +# exponentd.m4 serial 3 +dnl Copyright (C) 2007-2008, 2010-2012 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_DOUBLE_EXPONENT_LOCATION], +[ + AC_CACHE_CHECK([where to find the exponent in a 'double'], + [gl_cv_cc_double_expbit0], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <float.h> +#include <stddef.h> +#include <stdio.h> +#include <string.h> +#define NWORDS \ + ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { double value; unsigned int word[NWORDS]; } memory_double; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (double x) +{ + memory_double m; + size_t i; + /* Clear it first, in case sizeof (double) < sizeof (memory_double). */ + memset (&m, 0, sizeof (memory_double)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25); + add_to_ored_words (0.5); + add_to_ored_words (1.0); + add_to_ored_words (2.0); + add_to_ored_words (4.0); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} + ]])], + [gl_cv_cc_double_expbit0=`cat conftest.out`], + [gl_cv_cc_double_expbit0="unknown"], + [ + dnl On ARM, there are two 'double' floating-point formats, used by + dnl different sets of instructions: The older FPA instructions assume + dnl that they are stored in big-endian word order, while the words + dnl (like integer types) are stored in little-endian byte order. + dnl The newer VFP instructions assume little-endian order + dnl consistently. + AC_EGREP_CPP([mixed_endianness], [ +#if defined arm || defined __arm || defined __arm__ + mixed_endianness +#endif + ], + [gl_cv_cc_double_expbit0="unknown"], + [ + pushdef([AC_MSG_CHECKING],[:])dnl + pushdef([AC_MSG_RESULT],[:])dnl + pushdef([AC_MSG_RESULT_UNQUOTED],[:])dnl + AC_C_BIGENDIAN( + [gl_cv_cc_double_expbit0="word 0 bit 20"], + [gl_cv_cc_double_expbit0="word 1 bit 20"], + [gl_cv_cc_double_expbit0="unknown"]) + popdef([AC_MSG_RESULT_UNQUOTED])dnl + popdef([AC_MSG_RESULT])dnl + popdef([AC_MSG_CHECKING])dnl + ]) + ]) + rm -f conftest.out + ]) + case "$gl_cv_cc_double_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'` + AC_DEFINE_UNQUOTED([DBL_EXPBIT0_WORD], [$word], + [Define as the word index where to find the exponent of 'double'.]) + AC_DEFINE_UNQUOTED([DBL_EXPBIT0_BIT], [$bit], + [Define as the bit index in the word where to find bit 0 of the exponent of 'double'.]) + ;; + esac +]) diff --git a/gnulib/m4/extensions.m4 b/gnulib/m4/extensions.m4 new file mode 100644 index 0000000..0bfaef6 --- /dev/null +++ b/gnulib/m4/extensions.m4 @@ -0,0 +1,123 @@ +# serial 11 -*- Autoconf -*- +# Enable extensions on systems that normally disable them. + +# Copyright (C) 2003, 2006-2012 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. + +# This definition of AC_USE_SYSTEM_EXTENSIONS is stolen from CVS +# Autoconf. Perhaps we can remove this once we can assume Autoconf +# 2.62 or later everywhere, but since CVS Autoconf mutates rapidly +# enough in this area it's likely we'll need to redefine +# AC_USE_SYSTEM_EXTENSIONS for quite some time. + +# If autoconf reports a warning +# warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS +# or warning: AC_RUN_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS +# the fix is +# 1) to ensure that AC_USE_SYSTEM_EXTENSIONS is never directly invoked +# but always AC_REQUIREd, +# 2) to ensure that for each occurrence of +# AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) +# or +# AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) +# the corresponding gnulib module description has 'extensions' among +# its dependencies. This will ensure that the gl_USE_SYSTEM_EXTENSIONS +# invocation occurs in gl_EARLY, not in gl_INIT. + +# AC_USE_SYSTEM_EXTENSIONS +# ------------------------ +# Enable extensions on systems that normally disable them, +# typically due to standards-conformance issues. +# Remember that #undef in AH_VERBATIM gets replaced with #define by +# AC_DEFINE. The goal here is to define all known feature-enabling +# macros, then, if reports of conflicts are made, disable macros that +# cause problems on some platforms (such as __EXTENSIONS__). +AC_DEFUN_ONCE([AC_USE_SYSTEM_EXTENSIONS], +[AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl +AC_BEFORE([$0], [AC_RUN_IFELSE])dnl + + AC_REQUIRE([AC_CANONICAL_HOST]) + + AC_CHECK_HEADER([minix/config.h], [MINIX=yes], [MINIX=]) + if test "$MINIX" = yes; then + AC_DEFINE([_POSIX_SOURCE], [1], + [Define to 1 if you need to in order for 'stat' and other + things to work.]) + AC_DEFINE([_POSIX_1_SOURCE], [2], + [Define to 2 if the system does not provide POSIX.1 features + except with this defined.]) + AC_DEFINE([_MINIX], [1], + [Define to 1 if on MINIX.]) + fi + + dnl HP-UX 11.11 defines mbstate_t only if _XOPEN_SOURCE is defined to 500, + dnl regardless of whether the flags -Ae or _D_HPUX_SOURCE=1 are already + dnl provided. + case "$host_os" in + hpux*) + AC_DEFINE([_XOPEN_SOURCE], [500], + [Define to 500 only on HP-UX.]) + ;; + esac + + AH_VERBATIM([__EXTENSIONS__], +[/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif +/* Enable general extensions on MacOS X. */ +#ifndef _DARWIN_C_SOURCE +# undef _DARWIN_C_SOURCE +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# undef _GNU_SOURCE +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif +]) + AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__], + [ac_cv_safe_to_define___extensions__], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[ +# define __EXTENSIONS__ 1 + ]AC_INCLUDES_DEFAULT])], + [ac_cv_safe_to_define___extensions__=yes], + [ac_cv_safe_to_define___extensions__=no])]) + test $ac_cv_safe_to_define___extensions__ = yes && + AC_DEFINE([__EXTENSIONS__]) + AC_DEFINE([_ALL_SOURCE]) + AC_DEFINE([_DARWIN_C_SOURCE]) + AC_DEFINE([_GNU_SOURCE]) + AC_DEFINE([_POSIX_PTHREAD_SEMANTICS]) + AC_DEFINE([_TANDEM_SOURCE]) +])# AC_USE_SYSTEM_EXTENSIONS + +# gl_USE_SYSTEM_EXTENSIONS +# ------------------------ +# Enable extensions on systems that normally disable them, +# typically due to standards-conformance issues. +AC_DEFUN_ONCE([gl_USE_SYSTEM_EXTENSIONS], +[ + dnl Require this macro before AC_USE_SYSTEM_EXTENSIONS. + dnl gnulib does not need it. But if it gets required by third-party macros + dnl after AC_USE_SYSTEM_EXTENSIONS is required, autoconf 2.62..2.63 emit a + dnl warning: "AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS". + dnl Note: We can do this only for one of the macros AC_AIX, AC_GNU_SOURCE, + dnl AC_MINIX. If people still use AC_AIX or AC_MINIX, they are out of luck. + AC_REQUIRE([AC_GNU_SOURCE]) + + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) +]) diff --git a/gnulib/m4/float_h.m4 b/gnulib/m4/float_h.m4 new file mode 100644 index 0000000..51c9c7b --- /dev/null +++ b/gnulib/m4/float_h.m4 @@ -0,0 +1,98 @@ +# float_h.m4 serial 9 +dnl Copyright (C) 2007, 2009-2012 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_FLOAT_H], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) + FLOAT_H= + REPLACE_FLOAT_LDBL=0 + case "$host_os" in + aix* | beos* | openbsd* | mirbsd* | irix*) + FLOAT_H=float.h + ;; + freebsd*) + case "$host_cpu" in +changequote(,)dnl + i[34567]86 ) +changequote([,])dnl + FLOAT_H=float.h + ;; + x86_64 ) + # On x86_64 systems, the C compiler may still be generating + # 32-bit code. + AC_EGREP_CPP([yes], + [#if defined __LP64__ || defined __x86_64__ || defined __amd64__ + yes + #endif], + [], + [FLOAT_H=float.h]) + ;; + esac + ;; + linux*) + case "$host_cpu" in + powerpc*) + FLOAT_H=float.h + ;; + esac + ;; + esac + case "$host_os" in + aix* | freebsd* | linux*) + if test -n "$FLOAT_H"; then + REPLACE_FLOAT_LDBL=1 + fi + ;; + esac + + dnl Test against glibc-2.7 Linux/SPARC64 bug. + REPLACE_ITOLD=0 + AC_CACHE_CHECK([whether conversion from 'int' to 'long double' works], + [gl_cv_func_itold_works], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +int i = -1; +volatile long double ld; +int main () +{ + ld += i * 1.0L; + if (ld > 0) + return 1; + return 0; +}]])], + [gl_cv_func_itold_works=yes], + [gl_cv_func_itold_works=no], + [case "$host" in + sparc*-*-linux*) + AC_EGREP_CPP([yes], + [#if defined __LP64__ || defined __arch64__ + yes + #endif], + [gl_cv_func_itold_works="guessing no"], + [gl_cv_func_itold_works="guessing yes"]) + ;; + *) gl_cv_func_itold_works="guessing yes" ;; + esac + ]) + ]) + case "$gl_cv_func_itold_works" in + *no) + REPLACE_ITOLD=1 + dnl We add the workaround to <float.h> but also to <math.h>, + dnl to increase the chances that the fix function gets pulled in. + FLOAT_H=float.h + ;; + esac + + if test -n "$FLOAT_H"; then + gl_NEXT_HEADERS([float.h]) + fi + AC_SUBST([FLOAT_H]) + AM_CONDITIONAL([GL_GENERATE_FLOAT_H], [test -n "$FLOAT_H"]) + AC_SUBST([REPLACE_ITOLD]) +]) diff --git a/gnulib/m4/getopt.m4 b/gnulib/m4/getopt.m4 new file mode 100644 index 0000000..2aea895 --- /dev/null +++ b/gnulib/m4/getopt.m4 @@ -0,0 +1,341 @@ +# getopt.m4 serial 39 +dnl Copyright (C) 2002-2006, 2008-2012 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. + +# Request a POSIX compliant getopt function. +AC_DEFUN([gl_FUNC_GETOPT_POSIX], +[ + m4_divert_text([DEFAULTS], [gl_getopt_required=POSIX]) + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + dnl Other modules can request the gnulib implementation of the getopt + dnl functions unconditionally, by defining gl_REPLACE_GETOPT_ALWAYS. + dnl argp.m4 does this. + m4_ifdef([gl_REPLACE_GETOPT_ALWAYS], [ + gl_GETOPT_IFELSE([], []) + REPLACE_GETOPT=1 + ], [ + REPLACE_GETOPT=0 + gl_GETOPT_IFELSE([ + REPLACE_GETOPT=1 + ], + []) + ]) + if test $REPLACE_GETOPT = 1; then + dnl Arrange for getopt.h to be created. + gl_GETOPT_SUBSTITUTE_HEADER + fi +]) + +# Request a POSIX compliant getopt function with GNU extensions (such as +# options with optional arguments) and the functions getopt_long, +# getopt_long_only. +AC_DEFUN([gl_FUNC_GETOPT_GNU], +[ + m4_divert_text([INIT_PREPARE], [gl_getopt_required=GNU]) + + AC_REQUIRE([gl_FUNC_GETOPT_POSIX]) +]) + +# emacs' configure.in uses this. +AC_DEFUN([gl_GETOPT_IFELSE], +[ + AC_REQUIRE([gl_GETOPT_CHECK_HEADERS]) + AS_IF([test -n "$gl_replace_getopt"], [$1], [$2]) +]) + +# Determine whether to replace the entire getopt facility. +AC_DEFUN([gl_GETOPT_CHECK_HEADERS], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_REQUIRE([AC_PROG_AWK]) dnl for awk that supports ENVIRON + + dnl Persuade Solaris <unistd.h> to declare optarg, optind, opterr, optopt. + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + gl_CHECK_NEXT_HEADERS([getopt.h]) + if test $ac_cv_header_getopt_h = yes; then + HAVE_GETOPT_H=1 + else + HAVE_GETOPT_H=0 + fi + AC_SUBST([HAVE_GETOPT_H]) + + gl_replace_getopt= + + dnl Test whether <getopt.h> is available. + if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then + AC_CHECK_HEADERS([getopt.h], [], [gl_replace_getopt=yes]) + fi + + dnl Test whether the function getopt_long is available. + if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then + AC_CHECK_FUNCS([getopt_long_only], [], [gl_replace_getopt=yes]) + fi + + dnl mingw's getopt (in libmingwex.a) does weird things when the options + dnl strings starts with '+' and it's not the first call. Some internal state + dnl is left over from earlier calls, and neither setting optind = 0 nor + dnl setting optreset = 1 get rid of this internal state. + dnl POSIX is silent on optind vs. optreset, so we allow either behavior. + dnl POSIX 2008 does not specify leading '+' behavior, but see + dnl http://austingroupbugs.net/view.php?id=191 for a recommendation on + dnl the next version of POSIX. For now, we only guarantee leading '+' + dnl behavior with getopt-gnu. + if test -z "$gl_replace_getopt"; then + AC_CACHE_CHECK([whether getopt is POSIX compatible], + [gl_cv_func_getopt_posix], + [ + dnl BSD getopt_long uses an incompatible method to reset option + dnl processing. Existence of the optreset variable, in and of + dnl itself, is not a reason to replace getopt, but knowledge + dnl of the variable is needed to determine how to reset and + dnl whether a reset reparses the environment. Solaris + dnl supports neither optreset nor optind=0, but keeps no state + dnl that needs a reset beyond setting optind=1; detect Solaris + dnl by getopt_clip. + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <unistd.h>]], + [[int *p = &optreset; return optreset;]])], + [gl_optind_min=1], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <getopt.h>]], + [[return !getopt_clip;]])], + [gl_optind_min=1], + [gl_optind_min=0])]) + + dnl This test fails on mingw and succeeds on many other platforms. + gl_save_CPPFLAGS=$CPPFLAGS + CPPFLAGS="$CPPFLAGS -DOPTIND_MIN=$gl_optind_min" + AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#include <unistd.h> +#include <stdlib.h> +#include <string.h> + +int +main () +{ + { + static char program[] = "program"; + static char a[] = "-a"; + static char foo[] = "foo"; + static char bar[] = "bar"; + char *argv[] = { program, a, foo, bar, NULL }; + int c; + + optind = OPTIND_MIN; + opterr = 0; + + c = getopt (4, argv, "ab"); + if (!(c == 'a')) + return 1; + c = getopt (4, argv, "ab"); + if (!(c == -1)) + return 2; + if (!(optind == 2)) + return 3; + } + /* Some internal state exists at this point. */ + { + static char program[] = "program"; + static char donald[] = "donald"; + static char p[] = "-p"; + static char billy[] = "billy"; + static char duck[] = "duck"; + static char a[] = "-a"; + static char bar[] = "bar"; + char *argv[] = { program, donald, p, billy, duck, a, bar, NULL }; + int c; + + optind = OPTIND_MIN; + opterr = 0; + + c = getopt (7, argv, "+abp:q:"); + if (!(c == -1)) + return 4; + if (!(strcmp (argv[0], "program") == 0)) + return 5; + if (!(strcmp (argv[1], "donald") == 0)) + return 6; + if (!(strcmp (argv[2], "-p") == 0)) + return 7; + if (!(strcmp (argv[3], "billy") == 0)) + return 8; + if (!(strcmp (argv[4], "duck") == 0)) + return 9; + if (!(strcmp (argv[5], "-a") == 0)) + return 10; + if (!(strcmp (argv[6], "bar") == 0)) + return 11; + if (!(optind == 1)) + return 12; + } + /* Detect MacOS 10.5, AIX 7.1 bug. */ + { + static char program[] = "program"; + static char ab[] = "-ab"; + char *argv[3] = { program, ab, NULL }; + optind = OPTIND_MIN; + opterr = 0; + if (getopt (2, argv, "ab:") != 'a') + return 13; + if (getopt (2, argv, "ab:") != '?') + return 14; + if (optopt != 'b') + return 15; + if (optind != 2) + return 16; + } + + return 0; +} +]])], + [gl_cv_func_getopt_posix=yes], [gl_cv_func_getopt_posix=no], + [case "$host_os" in + mingw*) gl_cv_func_getopt_posix="guessing no";; + darwin* | aix*) gl_cv_func_getopt_posix="guessing no";; + *) gl_cv_func_getopt_posix="guessing yes";; + esac + ]) + CPPFLAGS=$gl_save_CPPFLAGS + ]) + case "$gl_cv_func_getopt_posix" in + *no) gl_replace_getopt=yes ;; + esac + fi + + if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then + AC_CACHE_CHECK([for working GNU getopt function], [gl_cv_func_getopt_gnu], + [# Even with POSIXLY_CORRECT, the GNU extension of leading '-' in the + # optstring is necessary for programs like m4 that have POSIX-mandated + # semantics for supporting options interspersed with files. + # Also, since getopt_long is a GNU extension, we require optind=0. + # Bash ties 'set -o posix' to a non-exported POSIXLY_CORRECT; + # so take care to revert to the correct (non-)export state. +dnl GNU Coding Standards currently allow awk but not env; besides, env +dnl is ambiguous with environment values that contain newlines. + gl_awk_probe='BEGIN { if ("POSIXLY_CORRECT" in ENVIRON) print "x" }' + case ${POSIXLY_CORRECT+x}`$AWK "$gl_awk_probe" </dev/null` in + xx) gl_had_POSIXLY_CORRECT=exported ;; + x) gl_had_POSIXLY_CORRECT=yes ;; + *) gl_had_POSIXLY_CORRECT= ;; + esac + POSIXLY_CORRECT=1 + export POSIXLY_CORRECT + AC_RUN_IFELSE( + [AC_LANG_PROGRAM([[#include <getopt.h> + #include <stddef.h> + #include <string.h> + ]GL_NOCRASH[ + ]], [[ + int result = 0; + + nocrash_init(); + + /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw, + and fails on MacOS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5, + OSF/1 5.1, Solaris 10. */ + { + static char conftest[] = "conftest"; + static char plus[] = "-+"; + char *argv[3] = { conftest, plus, NULL }; + opterr = 0; + if (getopt (2, argv, "+a") != '?') + result |= 1; + } + /* This code succeeds on glibc 2.8, mingw, + and fails on MacOS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11, + IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x. */ + { + static char program[] = "program"; + static char p[] = "-p"; + static char foo[] = "foo"; + static char bar[] = "bar"; + char *argv[] = { program, p, foo, bar, NULL }; + + optind = 1; + if (getopt (4, argv, "p::") != 'p') + result |= 2; + else if (optarg != NULL) + result |= 4; + else if (getopt (4, argv, "p::") != -1) + result |= 6; + else if (optind != 2) + result |= 8; + } + /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */ + { + static char program[] = "program"; + static char foo[] = "foo"; + static char p[] = "-p"; + char *argv[] = { program, foo, p, NULL }; + optind = 0; + if (getopt (3, argv, "-p") != 1) + result |= 16; + else if (getopt (3, argv, "-p") != 'p') + result |= 32; + } + /* This code fails on glibc 2.11. */ + { + static char program[] = "program"; + static char b[] = "-b"; + static char a[] = "-a"; + char *argv[] = { program, b, a, NULL }; + optind = opterr = 0; + if (getopt (3, argv, "+:a:b") != 'b') + result |= 64; + else if (getopt (3, argv, "+:a:b") != ':') + result |= 64; + } + /* This code dumps core on glibc 2.14. */ + { + static char program[] = "program"; + static char w[] = "-W"; + static char dummy[] = "dummy"; + char *argv[] = { program, w, dummy, NULL }; + optind = opterr = 1; + if (getopt (3, argv, "W;") != 'W') + result |= 128; + } + return result; + ]])], + [gl_cv_func_getopt_gnu=yes], + [gl_cv_func_getopt_gnu=no], + [dnl Cross compiling. Guess based on host and declarations. + case $host_os:$ac_cv_have_decl_optreset in + *-gnu*:* | mingw*:*) gl_cv_func_getopt_gnu=no;; + *:yes) gl_cv_func_getopt_gnu=no;; + *) gl_cv_func_getopt_gnu=yes;; + esac + ]) + case $gl_had_POSIXLY_CORRECT in + exported) ;; + yes) AS_UNSET([POSIXLY_CORRECT]); POSIXLY_CORRECT=1 ;; + *) AS_UNSET([POSIXLY_CORRECT]) ;; + esac + ]) + if test "$gl_cv_func_getopt_gnu" = "no"; then + gl_replace_getopt=yes + fi + fi +]) + +# emacs' configure.in uses this. +AC_DEFUN([gl_GETOPT_SUBSTITUTE_HEADER], +[ + GETOPT_H=getopt.h + AC_DEFINE([__GETOPT_PREFIX], [[rpl_]], + [Define to rpl_ if the getopt replacement functions and variables + should be used.]) + AC_SUBST([GETOPT_H]) +]) + +# Prerequisites of lib/getopt*. +# emacs' configure.in uses this. +AC_DEFUN([gl_PREREQ_GETOPT], +[ + AC_CHECK_DECLS_ONCE([getenv]) +]) diff --git a/gnulib/m4/gnulib-cache.m4 b/gnulib/m4/gnulib-cache.m4 new file mode 100644 index 0000000..5dc86d3 --- /dev/null +++ b/gnulib/m4/gnulib-cache.m4 @@ -0,0 +1,48 @@ +# Copyright (C) 2002-2012 Free Software Foundation, Inc. +# +# This file 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 file 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 file. If not, see <http://www.gnu.org/licenses/>. +# +# As a special exception to the GNU General Public License, +# this file may be distributed as part of a program that +# contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# Generated by gnulib-tool. +# +# This file represents the specification of how gnulib-tool is used. +# It acts as a cache: It is written and read by gnulib-tool. +# In projects that use version control, this file is meant to be put under +# version control, like the configure.ac and various Makefile.am files. + + +# Specification in the form of a command-line invocation: +# gnulib-tool --import --dir=. --lib=libgnu --source-base=gnulib/lib --m4-base=gnulib/m4 --po-base=gnulib/po --doc-base=gnulib/doc --tests-base=gnulib/tests --aux-dir=gnulib/aux --no-conditional-dependencies --no-libtool --macro-prefix=gl --po-domain=dctrl-tools --no-vc-files argp + +# Specification in the form of a few gnulib-tool.m4 macro invocations: +gl_LOCAL_DIR([]) +gl_MODULES([ + argp +]) +gl_AVOID([]) +gl_SOURCE_BASE([gnulib/lib]) +gl_M4_BASE([gnulib/m4]) +gl_PO_BASE([gnulib/po]) +gl_DOC_BASE([gnulib/doc]) +gl_TESTS_BASE([gnulib/tests]) +gl_LIB([libgnu]) +gl_MAKEFILE_NAME([]) +gl_MACRO_PREFIX([gl]) +gl_PO_DOMAIN([dctrl-tools]) +gl_WITNESS_C_DOMAIN([]) +gl_VC_FILES([false]) diff --git a/gnulib/m4/gnulib-common.m4 b/gnulib/m4/gnulib-common.m4 new file mode 100644 index 0000000..ae4d254 --- /dev/null +++ b/gnulib/m4/gnulib-common.m4 @@ -0,0 +1,372 @@ +# gnulib-common.m4 serial 32 +dnl Copyright (C) 2007-2012 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. + +# gl_COMMON +# is expanded unconditionally through gnulib-tool magic. +AC_DEFUN([gl_COMMON], [ + dnl Use AC_REQUIRE here, so that the code is expanded once only. + AC_REQUIRE([gl_00GNULIB]) + AC_REQUIRE([gl_COMMON_BODY]) +]) +AC_DEFUN([gl_COMMON_BODY], [ + AH_VERBATIM([_Noreturn], +[/* The _Noreturn keyword of C11. */ +#ifndef _Noreturn +# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \ + || 0x5110 <= __SUNPRO_C) +# define _Noreturn __attribute__ ((__noreturn__)) +# elif defined _MSC_VER && 1200 <= _MSC_VER +# define _Noreturn __declspec (noreturn) +# else +# define _Noreturn +# endif +#endif +]) + AH_VERBATIM([isoc99_inline], +[/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports + the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of + earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. + __APPLE__ && __MACH__ test for MacOS X. + __APPLE_CC__ tests for the Apple compiler and its version. + __STDC_VERSION__ tests for the C99 mode. */ +#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ +# define __GNUC_STDC_INLINE__ 1 +#endif]) + AH_VERBATIM([unused_parameter], +[/* Define as a marker that can be attached to declarations that might not + be used. This helps to reduce warnings, such as from + GCC -Wunused-parameter. */ +#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +# define _GL_UNUSED __attribute__ ((__unused__)) +#else +# define _GL_UNUSED +#endif +/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name + is a misnomer outside of parameter lists. */ +#define _UNUSED_PARAMETER_ _GL_UNUSED + +/* The __pure__ attribute was added in gcc 2.96. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +#else +# define _GL_ATTRIBUTE_PURE /* empty */ +#endif + +/* The __const__ attribute was added in gcc 2.95. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) +#else +# define _GL_ATTRIBUTE_CONST /* empty */ +#endif +]) + dnl Preparation for running test programs: + dnl Tell glibc to write diagnostics from -D_FORTIFY_SOURCE=2 to stderr, not + dnl to /dev/tty, so they can be redirected to log files. Such diagnostics + dnl arise e.g., in the macros gl_PRINTF_DIRECTIVE_N, gl_SNPRINTF_DIRECTIVE_N. + LIBC_FATAL_STDERR_=1 + export LIBC_FATAL_STDERR_ +]) + +# gl_MODULE_INDICATOR_CONDITION +# expands to a C preprocessor expression that evaluates to 1 or 0, depending +# whether a gnulib module that has been requested shall be considered present +# or not. +m4_define([gl_MODULE_INDICATOR_CONDITION], [1]) + +# gl_MODULE_INDICATOR_SET_VARIABLE([modulename]) +# sets the shell variable that indicates the presence of the given module to +# a C preprocessor expression that will evaluate to 1. +AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE], +[ + gl_MODULE_INDICATOR_SET_VARIABLE_AUX( + [GNULIB_[]m4_translit([[$1]], + [abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])], + [gl_MODULE_INDICATOR_CONDITION]) +]) + +# gl_MODULE_INDICATOR_SET_VARIABLE_AUX([variable]) +# modifies the shell variable to include the gl_MODULE_INDICATOR_CONDITION. +# The shell variable's value is a C preprocessor expression that evaluates +# to 0 or 1. +AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX], +[ + m4_if(m4_defn([gl_MODULE_INDICATOR_CONDITION]), [1], + [ + dnl Simplify the expression VALUE || 1 to 1. + $1=1 + ], + [gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([$1], + [gl_MODULE_INDICATOR_CONDITION])]) +]) + +# gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([variable], [condition]) +# modifies the shell variable to include the given condition. The shell +# variable's value is a C preprocessor expression that evaluates to 0 or 1. +AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR], +[ + dnl Simplify the expression 1 || CONDITION to 1. + if test "$[]$1" != 1; then + dnl Simplify the expression 0 || CONDITION to CONDITION. + if test "$[]$1" = 0; then + $1=$2 + else + $1="($[]$1 || $2)" + fi + fi +]) + +# gl_MODULE_INDICATOR([modulename]) +# defines a C macro indicating the presence of the given module +# in a location where it can be used. +# | Value | Value | +# | in lib/ | in tests/ | +# --------------------------------------------+---------+-----------+ +# Module present among main modules: | 1 | 1 | +# --------------------------------------------+---------+-----------+ +# Module present among tests-related modules: | 0 | 1 | +# --------------------------------------------+---------+-----------+ +# Module not present at all: | 0 | 0 | +# --------------------------------------------+---------+-----------+ +AC_DEFUN([gl_MODULE_INDICATOR], +[ + AC_DEFINE_UNQUOTED([GNULIB_]m4_translit([[$1]], + [abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), + [gl_MODULE_INDICATOR_CONDITION], + [Define to a C preprocessor expression that evaluates to 1 or 0, + depending whether the gnulib module $1 shall be considered present.]) +]) + +# gl_MODULE_INDICATOR_FOR_TESTS([modulename]) +# defines a C macro indicating the presence of the given module +# in lib or tests. This is useful to determine whether the module +# should be tested. +# | Value | Value | +# | in lib/ | in tests/ | +# --------------------------------------------+---------+-----------+ +# Module present among main modules: | 1 | 1 | +# --------------------------------------------+---------+-----------+ +# Module present among tests-related modules: | 1 | 1 | +# --------------------------------------------+---------+-----------+ +# Module not present at all: | 0 | 0 | +# --------------------------------------------+---------+-----------+ +AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], +[ + AC_DEFINE([GNULIB_TEST_]m4_translit([[$1]], + [abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1], + [Define to 1 when the gnulib module $1 should be tested.]) +]) + +# gl_ASSERT_NO_GNULIB_POSIXCHECK +# asserts that there will never be a need to #define GNULIB_POSIXCHECK. +# and thereby enables an optimization of configure and config.h. +# Used by Emacs. +AC_DEFUN([gl_ASSERT_NO_GNULIB_POSIXCHECK], +[ + dnl Override gl_WARN_ON_USE_PREPARE. + dnl But hide this definition from 'aclocal'. + AC_DEFUN([gl_W][ARN_ON_USE_PREPARE], []) +]) + +# gl_ASSERT_NO_GNULIB_TESTS +# asserts that there will be no gnulib tests in the scope of the configure.ac +# and thereby enables an optimization of config.h. +# Used by Emacs. +AC_DEFUN([gl_ASSERT_NO_GNULIB_TESTS], +[ + dnl Override gl_MODULE_INDICATOR_FOR_TESTS. + AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], []) +]) + +# Test whether <features.h> exists. +# Set HAVE_FEATURES_H. +AC_DEFUN([gl_FEATURES_H], +[ + AC_CHECK_HEADERS_ONCE([features.h]) + if test $ac_cv_header_features_h = yes; then + HAVE_FEATURES_H=1 + else + HAVE_FEATURES_H=0 + fi + AC_SUBST([HAVE_FEATURES_H]) +]) + +# m4_foreach_w +# is a backport of autoconf-2.59c's m4_foreach_w. +# Remove this macro when we can assume autoconf >= 2.60. +m4_ifndef([m4_foreach_w], + [m4_define([m4_foreach_w], + [m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])])]) + +# AS_VAR_IF(VAR, VALUE, [IF-MATCH], [IF-NOT-MATCH]) +# ---------------------------------------------------- +# Backport of autoconf-2.63b's macro. +# Remove this macro when we can assume autoconf >= 2.64. +m4_ifndef([AS_VAR_IF], +[m4_define([AS_VAR_IF], +[AS_IF([test x"AS_VAR_GET([$1])" = x""$2], [$3], [$4])])]) + +# gl_PROG_CC_C99 +# Modifies the value of the shell variable CC in an attempt to make $CC +# understand ISO C99 source code. +# This is like AC_PROG_CC_C99, except that +# - AC_PROG_CC_C99 did not exist in Autoconf versions < 2.60, +# - AC_PROG_CC_C99 does not mix well with AC_PROG_CC_STDC +# <http://lists.gnu.org/archive/html/bug-gnulib/2011-09/msg00367.html>, +# but many more packages use AC_PROG_CC_STDC than AC_PROG_CC_C99 +# <http://lists.gnu.org/archive/html/bug-gnulib/2011-09/msg00441.html>. +# Remaining problems: +# - When AC_PROG_CC_STDC is invoked twice, it adds the C99 enabling options +# to CC twice +# <http://lists.gnu.org/archive/html/bug-gnulib/2011-09/msg00431.html>. +# - AC_PROG_CC_STDC is likely to change now that C11 is an ISO standard. +AC_DEFUN([gl_PROG_CC_C99], +[ + dnl Change that version number to the minimum Autoconf version that supports + dnl mixing AC_PROG_CC_C99 calls with AC_PROG_CC_STDC calls. + m4_version_prereq([9.0], + [AC_REQUIRE([AC_PROG_CC_C99])], + [AC_REQUIRE([AC_PROG_CC_STDC])]) +]) + +# gl_PROG_AR_RANLIB +# Determines the values for AR, ARFLAGS, RANLIB that fit with the compiler. +# The user can set the variables AR, ARFLAGS, RANLIB if he wants to override +# the values. +AC_DEFUN([gl_PROG_AR_RANLIB], +[ + dnl Minix 3 comes with two toolchains: The Amsterdam Compiler Kit compiler + dnl as "cc", and GCC as "gcc". They have different object file formats and + dnl library formats. In particular, the GNU binutils programs ar, ranlib + dnl produce libraries that work only with gcc, not with cc. + AC_REQUIRE([AC_PROG_CC]) + AC_CACHE_CHECK([for Minix Amsterdam compiler], [gl_cv_c_amsterdam_compiler], + [ + AC_EGREP_CPP([Amsterdam], + [ +#ifdef __ACK__ +Amsterdam +#endif + ], + [gl_cv_c_amsterdam_compiler=yes], + [gl_cv_c_amsterdam_compiler=no]) + ]) + if test -z "$AR"; then + if test $gl_cv_c_amsterdam_compiler = yes; then + AR='cc -c.a' + if test -z "$ARFLAGS"; then + ARFLAGS='-o' + fi + else + dnl Use the Automake-documented default values for AR and ARFLAGS, + dnl but prefer ${host}-ar over ar (useful for cross-compiling). + AC_CHECK_TOOL([AR], [ar], [ar]) + if test -z "$ARFLAGS"; then + ARFLAGS='cru' + fi + fi + else + if test -z "$ARFLAGS"; then + ARFLAGS='cru' + fi + fi + AC_SUBST([AR]) + AC_SUBST([ARFLAGS]) + if test -z "$RANLIB"; then + if test $gl_cv_c_amsterdam_compiler = yes; then + RANLIB=':' + else + dnl Use the ranlib program if it is available. + AC_PROG_RANLIB + fi + fi + AC_SUBST([RANLIB]) +]) + +# AC_PROG_MKDIR_P +# is a backport of autoconf-2.60's AC_PROG_MKDIR_P, with a fix +# for interoperability with automake-1.9.6 from autoconf-2.62. +# Remove this macro when we can assume autoconf >= 2.62 or +# autoconf >= 2.60 && automake >= 1.10. +m4_ifdef([AC_PROG_MKDIR_P], [ + dnl For automake-1.9.6 && autoconf < 2.62: Ensure MKDIR_P is AC_SUBSTed. + m4_define([AC_PROG_MKDIR_P], + m4_defn([AC_PROG_MKDIR_P])[ + AC_SUBST([MKDIR_P])])], [ + dnl For autoconf < 2.60: Backport of AC_PROG_MKDIR_P. + AC_DEFUN_ONCE([AC_PROG_MKDIR_P], + [AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake + MKDIR_P='$(mkdir_p)' + AC_SUBST([MKDIR_P])])]) + +# AC_C_RESTRICT +# This definition overrides the AC_C_RESTRICT macro from autoconf 2.60..2.61, +# so that mixed use of GNU C and GNU C++ and mixed use of Sun C and Sun C++ +# works. +# This definition can be removed once autoconf >= 2.62 can be assumed. +m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.62]),[-1],[ +AC_DEFUN([AC_C_RESTRICT], +[AC_CACHE_CHECK([for C/C++ restrict keyword], [ac_cv_c_restrict], + [ac_cv_c_restrict=no + # The order here caters to the fact that C++ does not require restrict. + for ac_kw in __restrict __restrict__ _Restrict restrict; do + AC_COMPILE_IFELSE([AC_LANG_PROGRAM( + [[typedef int * int_ptr; + int foo (int_ptr $ac_kw ip) { + return ip[0]; + }]], + [[int s[1]; + int * $ac_kw t = s; + t[0] = 0; + return foo(t)]])], + [ac_cv_c_restrict=$ac_kw]) + test "$ac_cv_c_restrict" != no && break + done + ]) + AH_VERBATIM([restrict], +[/* Define to the equivalent of the C99 'restrict' keyword, or to + nothing if this is not supported. Do not define if restrict is + supported directly. */ +#undef restrict +/* Work around a bug in Sun C++: it does not support _Restrict, even + though the corresponding Sun C compiler does, which causes + "#define restrict _Restrict" in the previous line. Perhaps some future + version of Sun C++ will work with _Restrict; if so, it'll probably + define __RESTRICT, just as Sun C does. */ +#if defined __SUNPRO_CC && !defined __RESTRICT +# define _Restrict +#endif]) + case $ac_cv_c_restrict in + restrict) ;; + no) AC_DEFINE([restrict], []) ;; + *) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;; + esac +]) +]) + +# gl_BIGENDIAN +# is like AC_C_BIGENDIAN, except that it can be AC_REQUIREd. +# Note that AC_REQUIRE([AC_C_BIGENDIAN]) does not work reliably because some +# macros invoke AC_C_BIGENDIAN with arguments. +AC_DEFUN([gl_BIGENDIAN], +[ + AC_C_BIGENDIAN +]) + +# gl_CACHE_VAL_SILENT(cache-id, command-to-set-it) +# is like AC_CACHE_VAL(cache-id, command-to-set-it), except that it does not +# output a spurious "(cached)" mark in the midst of other configure output. +# This macro should be used instead of AC_CACHE_VAL when it is not surrounded +# by an AC_MSG_CHECKING/AC_MSG_RESULT pair. +AC_DEFUN([gl_CACHE_VAL_SILENT], +[ + saved_as_echo_n="$as_echo_n" + as_echo_n=':' + AC_CACHE_VAL([$1], [$2]) + as_echo_n="$saved_as_echo_n" +]) diff --git a/gnulib/m4/gnulib-comp.m4 b/gnulib/m4/gnulib-comp.m4 new file mode 100644 index 0000000..7bd5fc7 --- /dev/null +++ b/gnulib/m4/gnulib-comp.m4 @@ -0,0 +1,504 @@ +# DO NOT EDIT! GENERATED AUTOMATICALLY! +# Copyright (C) 2002-2012 Free Software Foundation, Inc. +# +# This file 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 file 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 file. If not, see <http://www.gnu.org/licenses/>. +# +# As a special exception to the GNU General Public License, +# this file may be distributed as part of a program that +# contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# Generated by gnulib-tool. +# +# This file represents the compiled summary of the specification in +# gnulib-cache.m4. It lists the computed macro invocations that need +# to be invoked from configure.ac. +# In projects that use version control, this file can be treated like +# other built files. + + +# This macro should be invoked from ./configure.ac, in the section +# "Checks for programs", right after AC_PROG_CC, and certainly before +# any checks for libraries, header files, types and library functions. +AC_DEFUN([gl_EARLY], +[ + m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace + m4_pattern_allow([^gl_ES$])dnl a valid locale name + m4_pattern_allow([^gl_LIBOBJS$])dnl a variable + m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable + AC_REQUIRE([gl_PROG_AR_RANLIB]) + # Code from module alloca: + # Code from module alloca-opt: + # Code from module argp: + # Code from module dirname-lgpl: + # Code from module dosname: + # Code from module double-slash-root: + # Code from module errno: + # Code from module extensions: + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + # Code from module float: + # Code from module getopt-gnu: + # Code from module getopt-posix: + # Code from module gettext-h: + # Code from module include_next: + # Code from module intprops: + # Code from module malloc-gnu: + # Code from module malloc-posix: + # Code from module memchr: + # Code from module mempcpy: + # Code from module multiarch: + # Code from module nocrash: + # Code from module rawmemchr: + # Code from module size_max: + # Code from module sleep: + # Code from module snippet/_Noreturn: + # Code from module snippet/arg-nonnull: + # Code from module snippet/c++defs: + # Code from module snippet/warn-on-use: + # Code from module ssize_t: + # Code from module stdalign: + # Code from module stdbool: + # Code from module stddef: + # Code from module stdint: + # Code from module stdio: + # Code from module stdlib: + # Code from module strcase: + # Code from module strchrnul: + # Code from module strerror: + # Code from module strerror-override: + # Code from module string: + # Code from module strings: + # Code from module strndup: + # Code from module strnlen: + # Code from module sys_types: + # Code from module sysexits: + # Code from module unistd: + # Code from module vasnprintf: + # Code from module verify: + # Code from module vsnprintf: + # Code from module wchar: + # Code from module xsize: +]) + +# This macro should be invoked from ./configure.ac, in the section +# "Check for header files, types and library functions". +AC_DEFUN([gl_INIT], +[ + AM_CONDITIONAL([GL_COND_LIBTOOL], [false]) + gl_cond_libtool=false + gl_libdeps= + gl_ltlibdeps= + gl_m4_base='gnulib/m4' + m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ])) + m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS])) + m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES])) + m4_pushdef([gl_LIBSOURCES_LIST], []) + m4_pushdef([gl_LIBSOURCES_DIR], []) + gl_COMMON + gl_source_base='gnulib/lib' +gl_FUNC_ALLOCA +gl_ARGP +m4_ifdef([AM_XGETTEXT_OPTION], + [AM_][XGETTEXT_OPTION([--flag=argp_error:2:c-format]) + AM_][XGETTEXT_OPTION([--flag=argp_failure:4:c-format])]) +gl_DIRNAME_LGPL +gl_DOUBLE_SLASH_ROOT +gl_HEADER_ERRNO_H +gl_FLOAT_H +if test $REPLACE_FLOAT_LDBL = 1; then + AC_LIBOBJ([float]) +fi +if test $REPLACE_ITOLD = 1; then + AC_LIBOBJ([itold]) +fi +gl_FUNC_GETOPT_GNU +if test $REPLACE_GETOPT = 1; then + AC_LIBOBJ([getopt]) + AC_LIBOBJ([getopt1]) + gl_PREREQ_GETOPT + dnl Arrange for unistd.h to include getopt.h. + GNULIB_GL_UNISTD_H_GETOPT=1 +fi +AC_SUBST([GNULIB_GL_UNISTD_H_GETOPT]) +gl_MODULE_INDICATOR_FOR_TESTS([getopt-gnu]) +gl_FUNC_GETOPT_POSIX +if test $REPLACE_GETOPT = 1; then + AC_LIBOBJ([getopt]) + AC_LIBOBJ([getopt1]) + gl_PREREQ_GETOPT + dnl Arrange for unistd.h to include getopt.h. + GNULIB_GL_UNISTD_H_GETOPT=1 +fi +AC_SUBST([GNULIB_GL_UNISTD_H_GETOPT]) +AC_SUBST([LIBINTL]) +AC_SUBST([LTLIBINTL]) +gl_FUNC_MALLOC_GNU +if test $REPLACE_MALLOC = 1; then + AC_LIBOBJ([malloc]) +fi +gl_MODULE_INDICATOR([malloc-gnu]) +gl_FUNC_MALLOC_POSIX +if test $REPLACE_MALLOC = 1; then + AC_LIBOBJ([malloc]) +fi +gl_STDLIB_MODULE_INDICATOR([malloc-posix]) +gl_FUNC_MEMCHR +if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then + AC_LIBOBJ([memchr]) + gl_PREREQ_MEMCHR +fi +gl_STRING_MODULE_INDICATOR([memchr]) +gl_FUNC_MEMPCPY +if test $HAVE_MEMPCPY = 0; then + AC_LIBOBJ([mempcpy]) + gl_PREREQ_MEMPCPY +fi +gl_STRING_MODULE_INDICATOR([mempcpy]) +gl_MULTIARCH +gl_FUNC_RAWMEMCHR +if test $HAVE_RAWMEMCHR = 0; then + AC_LIBOBJ([rawmemchr]) + gl_PREREQ_RAWMEMCHR +fi +gl_STRING_MODULE_INDICATOR([rawmemchr]) +gl_SIZE_MAX +gl_FUNC_SLEEP +if test $HAVE_SLEEP = 0 || test $REPLACE_SLEEP = 1; then + AC_LIBOBJ([sleep]) +fi +gl_UNISTD_MODULE_INDICATOR([sleep]) +gt_TYPE_SSIZE_T +gl_STDALIGN_H +AM_STDBOOL_H +gl_STDDEF_H +gl_STDINT_H +gl_STDIO_H +gl_STDLIB_H +gl_STRCASE +if test $HAVE_STRCASECMP = 0; then + AC_LIBOBJ([strcasecmp]) + gl_PREREQ_STRCASECMP +fi +if test $HAVE_STRNCASECMP = 0; then + AC_LIBOBJ([strncasecmp]) + gl_PREREQ_STRNCASECMP +fi +gl_FUNC_STRCHRNUL +if test $HAVE_STRCHRNUL = 0 || test $REPLACE_STRCHRNUL = 1; then + AC_LIBOBJ([strchrnul]) + gl_PREREQ_STRCHRNUL +fi +gl_STRING_MODULE_INDICATOR([strchrnul]) +gl_FUNC_STRERROR +if test $REPLACE_STRERROR = 1; then + AC_LIBOBJ([strerror]) +fi +gl_MODULE_INDICATOR([strerror]) +gl_STRING_MODULE_INDICATOR([strerror]) +AC_REQUIRE([gl_HEADER_ERRNO_H]) +AC_REQUIRE([gl_FUNC_STRERROR_0]) +if test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1; then + AC_LIBOBJ([strerror-override]) + gl_PREREQ_SYS_H_WINSOCK2 +fi +gl_HEADER_STRING_H +gl_HEADER_STRINGS_H +gl_FUNC_STRNDUP +if test $HAVE_STRNDUP = 0 || test $REPLACE_STRNDUP = 1; then + AC_LIBOBJ([strndup]) +fi +gl_STRING_MODULE_INDICATOR([strndup]) +gl_FUNC_STRNLEN +if test $HAVE_DECL_STRNLEN = 0 || test $REPLACE_STRNLEN = 1; then + AC_LIBOBJ([strnlen]) + gl_PREREQ_STRNLEN +fi +gl_STRING_MODULE_INDICATOR([strnlen]) +gl_SYS_TYPES_H +AC_PROG_MKDIR_P +gl_SYSEXITS +gl_UNISTD_H +gl_FUNC_VASNPRINTF +gl_FUNC_VSNPRINTF +gl_STDIO_MODULE_INDICATOR([vsnprintf]) +gl_WCHAR_H +gl_XSIZE + # End of code from modules + m4_ifval(gl_LIBSOURCES_LIST, [ + m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ || + for gl_file in ]gl_LIBSOURCES_LIST[ ; do + if test ! -r ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file ; then + echo "missing file ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file" >&2 + exit 1 + fi + done])dnl + m4_if(m4_sysval, [0], [], + [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) + ]) + m4_popdef([gl_LIBSOURCES_DIR]) + m4_popdef([gl_LIBSOURCES_LIST]) + m4_popdef([AC_LIBSOURCES]) + m4_popdef([AC_REPLACE_FUNCS]) + m4_popdef([AC_LIBOBJ]) + AC_CONFIG_COMMANDS_PRE([ + gl_libobjs= + gl_ltlibobjs= + if test -n "$gl_LIBOBJS"; then + # Remove the extension. + sed_drop_objext='s/\.o$//;s/\.obj$//' + for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do + gl_libobjs="$gl_libobjs $i.$ac_objext" + gl_ltlibobjs="$gl_ltlibobjs $i.lo" + done + fi + AC_SUBST([gl_LIBOBJS], [$gl_libobjs]) + AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs]) + ]) + gltests_libdeps= + gltests_ltlibdeps= + m4_pushdef([AC_LIBOBJ], m4_defn([gltests_LIBOBJ])) + m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gltests_REPLACE_FUNCS])) + m4_pushdef([AC_LIBSOURCES], m4_defn([gltests_LIBSOURCES])) + m4_pushdef([gltests_LIBSOURCES_LIST], []) + m4_pushdef([gltests_LIBSOURCES_DIR], []) + gl_COMMON + gl_source_base='gnulib/tests' +changequote(,)dnl + gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS +changequote([, ])dnl + AC_SUBST([gltests_WITNESS]) + gl_module_indicator_condition=$gltests_WITNESS + m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$gl_module_indicator_condition]) + m4_popdef([gl_MODULE_INDICATOR_CONDITION]) + m4_ifval(gltests_LIBSOURCES_LIST, [ + m4_syscmd([test ! -d ]m4_defn([gltests_LIBSOURCES_DIR])[ || + for gl_file in ]gltests_LIBSOURCES_LIST[ ; do + if test ! -r ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file ; then + echo "missing file ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file" >&2 + exit 1 + fi + done])dnl + m4_if(m4_sysval, [0], [], + [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) + ]) + m4_popdef([gltests_LIBSOURCES_DIR]) + m4_popdef([gltests_LIBSOURCES_LIST]) + m4_popdef([AC_LIBSOURCES]) + m4_popdef([AC_REPLACE_FUNCS]) + m4_popdef([AC_LIBOBJ]) + AC_CONFIG_COMMANDS_PRE([ + gltests_libobjs= + gltests_ltlibobjs= + if test -n "$gltests_LIBOBJS"; then + # Remove the extension. + sed_drop_objext='s/\.o$//;s/\.obj$//' + for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do + gltests_libobjs="$gltests_libobjs $i.$ac_objext" + gltests_ltlibobjs="$gltests_ltlibobjs $i.lo" + done + fi + AC_SUBST([gltests_LIBOBJS], [$gltests_libobjs]) + AC_SUBST([gltests_LTLIBOBJS], [$gltests_ltlibobjs]) + ]) + LIBGNU_LIBDEPS="$gl_libdeps" + AC_SUBST([LIBGNU_LIBDEPS]) + LIBGNU_LTLIBDEPS="$gl_ltlibdeps" + AC_SUBST([LIBGNU_LTLIBDEPS]) +]) + +# Like AC_LIBOBJ, except that the module name goes +# into gl_LIBOBJS instead of into LIBOBJS. +AC_DEFUN([gl_LIBOBJ], [ + AS_LITERAL_IF([$1], [gl_LIBSOURCES([$1.c])])dnl + gl_LIBOBJS="$gl_LIBOBJS $1.$ac_objext" +]) + +# Like AC_REPLACE_FUNCS, except that the module name goes +# into gl_LIBOBJS instead of into LIBOBJS. +AC_DEFUN([gl_REPLACE_FUNCS], [ + m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl + AC_CHECK_FUNCS([$1], , [gl_LIBOBJ($ac_func)]) +]) + +# Like AC_LIBSOURCES, except the directory where the source file is +# expected is derived from the gnulib-tool parameterization, +# and alloca is special cased (for the alloca-opt module). +# We could also entirely rely on EXTRA_lib..._SOURCES. +AC_DEFUN([gl_LIBSOURCES], [ + m4_foreach([_gl_NAME], [$1], [ + m4_if(_gl_NAME, [alloca.c], [], [ + m4_define([gl_LIBSOURCES_DIR], [gnulib/lib]) + m4_append([gl_LIBSOURCES_LIST], _gl_NAME, [ ]) + ]) + ]) +]) + +# Like AC_LIBOBJ, except that the module name goes +# into gltests_LIBOBJS instead of into LIBOBJS. +AC_DEFUN([gltests_LIBOBJ], [ + AS_LITERAL_IF([$1], [gltests_LIBSOURCES([$1.c])])dnl + gltests_LIBOBJS="$gltests_LIBOBJS $1.$ac_objext" +]) + +# Like AC_REPLACE_FUNCS, except that the module name goes +# into gltests_LIBOBJS instead of into LIBOBJS. +AC_DEFUN([gltests_REPLACE_FUNCS], [ + m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl + AC_CHECK_FUNCS([$1], , [gltests_LIBOBJ($ac_func)]) +]) + +# Like AC_LIBSOURCES, except the directory where the source file is +# expected is derived from the gnulib-tool parameterization, +# and alloca is special cased (for the alloca-opt module). +# We could also entirely rely on EXTRA_lib..._SOURCES. +AC_DEFUN([gltests_LIBSOURCES], [ + m4_foreach([_gl_NAME], [$1], [ + m4_if(_gl_NAME, [alloca.c], [], [ + m4_define([gltests_LIBSOURCES_DIR], [gnulib/tests]) + m4_append([gltests_LIBSOURCES_LIST], _gl_NAME, [ ]) + ]) + ]) +]) + +# This macro records the list of files which have been installed by +# gnulib-tool and may be removed by future gnulib-tool invocations. +AC_DEFUN([gl_FILE_LIST], [ + build-aux/snippet/_Noreturn.h + build-aux/snippet/arg-nonnull.h + build-aux/snippet/c++defs.h + build-aux/snippet/warn-on-use.h + lib/alloca.c + lib/alloca.in.h + lib/argp-ba.c + lib/argp-eexst.c + lib/argp-fmtstream.c + lib/argp-fmtstream.h + lib/argp-fs-xinl.c + lib/argp-help.c + lib/argp-namefrob.h + lib/argp-parse.c + lib/argp-pin.c + lib/argp-pv.c + lib/argp-pvh.c + lib/argp-xinl.c + lib/argp.h + lib/asnprintf.c + lib/basename-lgpl.c + lib/dirname-lgpl.c + lib/dirname.h + lib/dosname.h + lib/errno.in.h + lib/float+.h + lib/float.c + lib/float.in.h + lib/getopt.c + lib/getopt.in.h + lib/getopt1.c + lib/getopt_int.h + lib/gettext.h + lib/intprops.h + lib/itold.c + lib/malloc.c + lib/memchr.c + lib/memchr.valgrind + lib/mempcpy.c + lib/printf-args.c + lib/printf-args.h + lib/printf-parse.c + lib/printf-parse.h + lib/rawmemchr.c + lib/rawmemchr.valgrind + lib/size_max.h + lib/sleep.c + lib/stdalign.in.h + lib/stdbool.in.h + lib/stddef.in.h + lib/stdint.in.h + lib/stdio.in.h + lib/stdlib.in.h + lib/strcasecmp.c + lib/strchrnul.c + lib/strchrnul.valgrind + lib/strerror-override.c + lib/strerror-override.h + lib/strerror.c + lib/string.in.h + lib/strings.in.h + lib/stripslash.c + lib/strncasecmp.c + lib/strndup.c + lib/strnlen.c + lib/sys_types.in.h + lib/sysexits.in.h + lib/unistd.in.h + lib/vasnprintf.c + lib/vasnprintf.h + lib/verify.h + lib/vsnprintf.c + lib/wchar.in.h + lib/xsize.h + m4/00gnulib.m4 + m4/alloca.m4 + m4/argp.m4 + m4/dirname.m4 + m4/double-slash-root.m4 + m4/errno_h.m4 + m4/exponentd.m4 + m4/extensions.m4 + m4/float_h.m4 + m4/getopt.m4 + m4/gnulib-common.m4 + m4/include_next.m4 + m4/intmax_t.m4 + m4/inttypes_h.m4 + m4/longlong.m4 + m4/malloc.m4 + m4/math_h.m4 + m4/memchr.m4 + m4/mempcpy.m4 + m4/mmap-anon.m4 + m4/multiarch.m4 + m4/nocrash.m4 + m4/onceonly.m4 + m4/printf.m4 + m4/rawmemchr.m4 + m4/size_max.m4 + m4/sleep.m4 + m4/ssize_t.m4 + m4/stdalign.m4 + m4/stdbool.m4 + m4/stddef_h.m4 + m4/stdint.m4 + m4/stdint_h.m4 + m4/stdio_h.m4 + m4/stdlib_h.m4 + m4/strcase.m4 + m4/strchrnul.m4 + m4/strerror.m4 + m4/string_h.m4 + m4/strings_h.m4 + m4/strndup.m4 + m4/strnlen.m4 + m4/sys_socket_h.m4 + m4/sys_types_h.m4 + m4/sysexits.m4 + m4/unistd_h.m4 + m4/vasnprintf.m4 + m4/vsnprintf.m4 + m4/warn-on-use.m4 + m4/wchar_h.m4 + m4/wchar_t.m4 + m4/wint_t.m4 + m4/xsize.m4 +]) diff --git a/gnulib/m4/gnulib-tool.m4 b/gnulib/m4/gnulib-tool.m4 new file mode 100644 index 0000000..a09ffc1 --- /dev/null +++ b/gnulib/m4/gnulib-tool.m4 @@ -0,0 +1,57 @@ +# gnulib-tool.m4 serial 2 +dnl Copyright (C) 2004-2005, 2009-2012 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. + +dnl The following macros need not be invoked explicitly. +dnl Invoking them does nothing except to declare default arguments +dnl for "gnulib-tool --import". + +dnl Usage: gl_LOCAL_DIR([DIR]) +AC_DEFUN([gl_LOCAL_DIR], []) + +dnl Usage: gl_MODULES([module1 module2 ...]) +AC_DEFUN([gl_MODULES], []) + +dnl Usage: gl_AVOID([module1 module2 ...]) +AC_DEFUN([gl_AVOID], []) + +dnl Usage: gl_SOURCE_BASE([DIR]) +AC_DEFUN([gl_SOURCE_BASE], []) + +dnl Usage: gl_M4_BASE([DIR]) +AC_DEFUN([gl_M4_BASE], []) + +dnl Usage: gl_PO_BASE([DIR]) +AC_DEFUN([gl_PO_BASE], []) + +dnl Usage: gl_DOC_BASE([DIR]) +AC_DEFUN([gl_DOC_BASE], []) + +dnl Usage: gl_TESTS_BASE([DIR]) +AC_DEFUN([gl_TESTS_BASE], []) + +dnl Usage: gl_WITH_TESTS +AC_DEFUN([gl_WITH_TESTS], []) + +dnl Usage: gl_LIB([LIBNAME]) +AC_DEFUN([gl_LIB], []) + +dnl Usage: gl_LGPL or gl_LGPL([VERSION]) +AC_DEFUN([gl_LGPL], []) + +dnl Usage: gl_MAKEFILE_NAME([FILENAME]) +AC_DEFUN([gl_MAKEFILE_NAME], []) + +dnl Usage: gl_LIBTOOL +AC_DEFUN([gl_LIBTOOL], []) + +dnl Usage: gl_MACRO_PREFIX([PREFIX]) +AC_DEFUN([gl_MACRO_PREFIX], []) + +dnl Usage: gl_PO_DOMAIN([DOMAIN]) +AC_DEFUN([gl_PO_DOMAIN], []) + +dnl Usage: gl_VC_FILES([BOOLEAN]) +AC_DEFUN([gl_VC_FILES], []) diff --git a/gnulib/m4/include_next.m4 b/gnulib/m4/include_next.m4 new file mode 100644 index 0000000..a60a261 --- /dev/null +++ b/gnulib/m4/include_next.m4 @@ -0,0 +1,270 @@ +# include_next.m4 serial 23 +dnl Copyright (C) 2006-2012 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. + +dnl From Paul Eggert and Derek Price. + +dnl Sets INCLUDE_NEXT and PRAGMA_SYSTEM_HEADER. +dnl +dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to +dnl 'include' otherwise. +dnl +dnl INCLUDE_NEXT_AS_FIRST_DIRECTIVE expands to 'include_next' if the compiler +dnl supports it in the special case that it is the first include directive in +dnl the given file, or to 'include' otherwise. +dnl +dnl PRAGMA_SYSTEM_HEADER can be used in files that contain #include_next, +dnl so as to avoid GCC warnings when the gcc option -pedantic is used. +dnl '#pragma GCC system_header' has the same effect as if the file was found +dnl through the include search path specified with '-isystem' options (as +dnl opposed to the search path specified with '-I' options). Namely, gcc +dnl does not warn about some things, and on some systems (Solaris and Interix) +dnl __STDC__ evaluates to 0 instead of to 1. The latter is an undesired side +dnl effect; we are therefore careful to use 'defined __STDC__' or '1' instead +dnl of plain '__STDC__'. +dnl +dnl PRAGMA_COLUMNS can be used in files that override system header files, so +dnl as to avoid compilation errors on HP NonStop systems when the gnulib file +dnl is included by a system header file that does a "#pragma COLUMNS 80" (which +dnl has the effect of truncating the lines of that file and all files that it +dnl includes to 80 columns) and the gnulib file has lines longer than 80 +dnl columns. + +AC_DEFUN([gl_INCLUDE_NEXT], +[ + AC_LANG_PREPROC_REQUIRE() + AC_CACHE_CHECK([whether the preprocessor supports include_next], + [gl_cv_have_include_next], + [rm -rf conftestd1a conftestd1b conftestd2 + mkdir conftestd1a conftestd1b conftestd2 + dnl IBM C 9.0, 10.1 (original versions, prior to the 2009-01 updates) on + dnl AIX 6.1 support include_next when used as first preprocessor directive + dnl in a file, but not when preceded by another include directive. Check + dnl for this bug by including <stdio.h>. + dnl Additionally, with this same compiler, include_next is a no-op when + dnl used in a header file that was included by specifying its absolute + dnl file name. Despite these two bugs, include_next is used in the + dnl compiler's <math.h>. By virtue of the second bug, we need to use + dnl include_next as well in this case. + cat <<EOF > conftestd1a/conftest.h +#define DEFINED_IN_CONFTESTD1 +#include_next <conftest.h> +#ifdef DEFINED_IN_CONFTESTD2 +int foo; +#else +#error "include_next doesn't work" +#endif +EOF + cat <<EOF > conftestd1b/conftest.h +#define DEFINED_IN_CONFTESTD1 +#include <stdio.h> +#include_next <conftest.h> +#ifdef DEFINED_IN_CONFTESTD2 +int foo; +#else +#error "include_next doesn't work" +#endif +EOF + cat <<EOF > conftestd2/conftest.h +#ifndef DEFINED_IN_CONFTESTD1 +#error "include_next test doesn't work" +#endif +#define DEFINED_IN_CONFTESTD2 +EOF + gl_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2" +dnl We intentionally avoid using AC_LANG_SOURCE here. + AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include <conftest.h>]], + [gl_cv_have_include_next=yes], + [CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2" + AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include <conftest.h>]], + [gl_cv_have_include_next=buggy], + [gl_cv_have_include_next=no]) + ]) + CPPFLAGS="$gl_save_CPPFLAGS" + rm -rf conftestd1a conftestd1b conftestd2 + ]) + PRAGMA_SYSTEM_HEADER= + if test $gl_cv_have_include_next = yes; then + INCLUDE_NEXT=include_next + INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next + if test -n "$GCC"; then + PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' + fi + else + if test $gl_cv_have_include_next = buggy; then + INCLUDE_NEXT=include + INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next + else + INCLUDE_NEXT=include + INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include + fi + fi + AC_SUBST([INCLUDE_NEXT]) + AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE]) + AC_SUBST([PRAGMA_SYSTEM_HEADER]) + AC_CACHE_CHECK([whether system header files limit the line length], + [gl_cv_pragma_columns], + [dnl HP NonStop systems, which define __TANDEM, have this misfeature. + AC_EGREP_CPP([choke me], + [ +#ifdef __TANDEM +choke me +#endif + ], + [gl_cv_pragma_columns=yes], + [gl_cv_pragma_columns=no]) + ]) + if test $gl_cv_pragma_columns = yes; then + PRAGMA_COLUMNS="#pragma COLUMNS 10000" + else + PRAGMA_COLUMNS= + fi + AC_SUBST([PRAGMA_COLUMNS]) +]) + +# gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...) +# ------------------------------------------ +# For each arg foo.h, if #include_next works, define NEXT_FOO_H to be +# '<foo.h>'; otherwise define it to be +# '"///usr/include/foo.h"', or whatever other absolute file name is suitable. +# Also, if #include_next works as first preprocessing directive in a file, +# define NEXT_AS_FIRST_DIRECTIVE_FOO_H to be '<foo.h>'; otherwise define it to +# be +# '"///usr/include/foo.h"', or whatever other absolute file name is suitable. +# That way, a header file with the following line: +# #@INCLUDE_NEXT@ @NEXT_FOO_H@ +# or +# #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_FOO_H@ +# behaves (after sed substitution) as if it contained +# #include_next <foo.h> +# even if the compiler does not support include_next. +# The three "///" are to pacify Sun C 5.8, which otherwise would say +# "warning: #include of /usr/include/... may be non-portable". +# Use '""', not '<>', so that the /// cannot be confused with a C99 comment. +# Note: This macro assumes that the header file is not empty after +# preprocessing, i.e. it does not only define preprocessor macros but also +# provides some type/enum definitions or function/variable declarations. +# +# This macro also checks whether each header exists, by invoking +# AC_CHECK_HEADERS_ONCE or AC_CHECK_HEADERS on each argument. +AC_DEFUN([gl_CHECK_NEXT_HEADERS], +[ + gl_NEXT_HEADERS_INTERNAL([$1], [check]) +]) + +# gl_NEXT_HEADERS(HEADER1 HEADER2 ...) +# ------------------------------------ +# Like gl_CHECK_NEXT_HEADERS, except do not check whether the headers exist. +# This is suitable for headers like <stddef.h> that are standardized by C89 +# and therefore can be assumed to exist. +AC_DEFUN([gl_NEXT_HEADERS], +[ + gl_NEXT_HEADERS_INTERNAL([$1], [assume]) +]) + +# The guts of gl_CHECK_NEXT_HEADERS and gl_NEXT_HEADERS. +AC_DEFUN([gl_NEXT_HEADERS_INTERNAL], +[ + AC_REQUIRE([gl_INCLUDE_NEXT]) + AC_REQUIRE([AC_CANONICAL_HOST]) + + m4_if([$2], [check], + [AC_CHECK_HEADERS_ONCE([$1]) + ]) + +dnl FIXME: gl_next_header and gl_header_exists must be used unquoted +dnl until we can assume autoconf 2.64 or newer. + m4_foreach_w([gl_HEADER_NAME], [$1], + [AS_VAR_PUSHDEF([gl_next_header], + [gl_cv_next_]m4_defn([gl_HEADER_NAME])) + if test $gl_cv_have_include_next = yes; then + AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>']) + else + AC_CACHE_CHECK( + [absolute name of <]m4_defn([gl_HEADER_NAME])[>], + m4_defn([gl_next_header]), + [m4_if([$2], [check], + [AS_VAR_PUSHDEF([gl_header_exists], + [ac_cv_header_]m4_defn([gl_HEADER_NAME])) + if test AS_VAR_GET(gl_header_exists) = yes; then + AS_VAR_POPDEF([gl_header_exists]) + ]) + AC_LANG_CONFTEST( + [AC_LANG_SOURCE( + [[#include <]]m4_dquote(m4_defn([gl_HEADER_NAME]))[[>]] + )]) + dnl AIX "xlc -E" and "cc -E" omit #line directives for header + dnl files that contain only a #include of other header files and + dnl no non-comment tokens of their own. This leads to a failure + dnl to detect the absolute name of <dirent.h>, <signal.h>, + dnl <poll.h> and others. The workaround is to force preservation + dnl of comments through option -C. This ensures all necessary + dnl #line directives are present. GCC supports option -C as well. + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac +changequote(,) + case "$host_os" in + mingw*) + dnl For the sake of native Windows compilers (excluding gcc), + dnl treat backslash as a directory separator, like /. + dnl Actually, these compilers use a double-backslash as + dnl directory separator, inside the + dnl # line "filename" + dnl directives. + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + dnl A sed expression that turns a string into a basic regular + dnl expression, for use within "/.../". + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' +changequote([,]) + gl_header_literal_regex=`echo ']m4_defn([gl_HEADER_NAME])[' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ +changequote(,)dnl + s|^/[^/]|//&| +changequote([,])dnl + p + q + }' + dnl eval is necessary to expand gl_absname_cpp. + dnl Ultrix and Pyramid sh refuse to redirect output of eval, + dnl so use subshell. + AS_VAR_SET(gl_next_header, + ['"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | + sed -n "$gl_absolute_header_sed"`'"']) + m4_if([$2], [check], + [else + AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>']) + fi + ]) + ]) + fi + AC_SUBST( + AS_TR_CPP([NEXT_]m4_defn([gl_HEADER_NAME])), + [AS_VAR_GET(gl_next_header)]) + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'gl_HEADER_NAME'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=AS_VAR_GET(gl_next_header) + fi + AC_SUBST( + AS_TR_CPP([NEXT_AS_FIRST_DIRECTIVE_]m4_defn([gl_HEADER_NAME])), + [$gl_next_as_first_directive]) + AS_VAR_POPDEF([gl_next_header])]) +]) + +# Autoconf 2.68 added warnings for our use of AC_COMPILE_IFELSE; +# this fallback is safe for all earlier autoconf versions. +m4_define_default([AC_LANG_DEFINES_PROVIDED]) diff --git a/gnulib/m4/intmax_t.m4 b/gnulib/m4/intmax_t.m4 new file mode 100644 index 0000000..c1a4a75 --- /dev/null +++ b/gnulib/m4/intmax_t.m4 @@ -0,0 +1,67 @@ +# intmax_t.m4 serial 8 +dnl Copyright (C) 1997-2004, 2006-2007, 2009-2012 Free Software Foundation, +dnl 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. + +dnl From Paul Eggert. + +AC_PREREQ([2.53]) + +# Define intmax_t to 'long' or 'long long' +# if it is not already defined in <stdint.h> or <inttypes.h>. + +AC_DEFUN([gl_AC_TYPE_INTMAX_T], +[ + dnl For simplicity, we assume that a header file defines 'intmax_t' if and + dnl only if it defines 'uintmax_t'. + AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) + AC_REQUIRE([gl_AC_HEADER_STDINT_H]) + if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) + test $ac_cv_type_long_long_int = yes \ + && ac_type='long long' \ + || ac_type='long' + AC_DEFINE_UNQUOTED([intmax_t], [$ac_type], + [Define to long or long long if <inttypes.h> and <stdint.h> don't define.]) + else + AC_DEFINE([HAVE_INTMAX_T], [1], + [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.]) + fi +]) + +dnl An alternative would be to explicitly test for 'intmax_t'. + +AC_DEFUN([gt_AC_TYPE_INTMAX_T], +[ + AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) + AC_REQUIRE([gl_AC_HEADER_STDINT_H]) + AC_CACHE_CHECK([for intmax_t], [gt_cv_c_intmax_t], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include <stddef.h> +#include <stdlib.h> +#if HAVE_STDINT_H_WITH_UINTMAX +#include <stdint.h> +#endif +#if HAVE_INTTYPES_H_WITH_UINTMAX +#include <inttypes.h> +#endif + ]], + [[intmax_t x = -1; return !x;]])], + [gt_cv_c_intmax_t=yes], + [gt_cv_c_intmax_t=no])]) + if test $gt_cv_c_intmax_t = yes; then + AC_DEFINE([HAVE_INTMAX_T], [1], + [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.]) + else + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) + test $ac_cv_type_long_long_int = yes \ + && ac_type='long long' \ + || ac_type='long' + AC_DEFINE_UNQUOTED([intmax_t], [$ac_type], + [Define to long or long long if <stdint.h> and <inttypes.h> don't define.]) + fi +]) diff --git a/gnulib/m4/inttypes_h.m4 b/gnulib/m4/inttypes_h.m4 new file mode 100644 index 0000000..91c7bca --- /dev/null +++ b/gnulib/m4/inttypes_h.m4 @@ -0,0 +1,29 @@ +# inttypes_h.m4 serial 10 +dnl Copyright (C) 1997-2004, 2006, 2008-2012 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. + +dnl From Paul Eggert. + +# Define HAVE_INTTYPES_H_WITH_UINTMAX if <inttypes.h> exists, +# doesn't clash with <sys/types.h>, and declares uintmax_t. + +AC_DEFUN([gl_AC_HEADER_INTTYPES_H], +[ + AC_CACHE_CHECK([for inttypes.h], [gl_cv_header_inttypes_h], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include <sys/types.h> +#include <inttypes.h> + ]], + [[uintmax_t i = (uintmax_t) -1; return !i;]])], + [gl_cv_header_inttypes_h=yes], + [gl_cv_header_inttypes_h=no])]) + if test $gl_cv_header_inttypes_h = yes; then + AC_DEFINE_UNQUOTED([HAVE_INTTYPES_H_WITH_UINTMAX], [1], + [Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, + and declares uintmax_t. ]) + fi +]) diff --git a/gnulib/m4/longlong.m4 b/gnulib/m4/longlong.m4 new file mode 100644 index 0000000..b9c65c7 --- /dev/null +++ b/gnulib/m4/longlong.m4 @@ -0,0 +1,113 @@ +# longlong.m4 serial 17 +dnl Copyright (C) 1999-2007, 2009-2012 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. + +dnl From Paul Eggert. + +# Define HAVE_LONG_LONG_INT if 'long long int' works. +# This fixes a bug in Autoconf 2.61, and can be faster +# than what's in Autoconf 2.62 through 2.68. + +# Note: If the type 'long long int' exists but is only 32 bits large +# (as on some very old compilers), HAVE_LONG_LONG_INT will not be +# defined. In this case you can treat 'long long int' like 'long int'. + +AC_DEFUN([AC_TYPE_LONG_LONG_INT], +[ + AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) + AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int], + [ac_cv_type_long_long_int=yes + if test "x${ac_cv_prog_cc_c99-no}" = xno; then + ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int + if test $ac_cv_type_long_long_int = yes; then + dnl Catch a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004. + dnl If cross compiling, assume the bug is not important, since + dnl nobody cross compiles for this platform as far as we know. + AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[@%:@include <limits.h> + @%:@ifndef LLONG_MAX + @%:@ define HALF \ + (1LL << (sizeof (long long int) * CHAR_BIT - 2)) + @%:@ define LLONG_MAX (HALF - 1 + HALF) + @%:@endif]], + [[long long int n = 1; + int i; + for (i = 0; ; i++) + { + long long int m = n << i; + if (m >> i != n) + return 1; + if (LLONG_MAX / 2 < m) + break; + } + return 0;]])], + [], + [ac_cv_type_long_long_int=no], + [:]) + fi + fi]) + if test $ac_cv_type_long_long_int = yes; then + AC_DEFINE([HAVE_LONG_LONG_INT], [1], + [Define to 1 if the system has the type 'long long int'.]) + fi +]) + +# Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works. +# This fixes a bug in Autoconf 2.61, and can be faster +# than what's in Autoconf 2.62 through 2.68. + +# Note: If the type 'unsigned long long int' exists but is only 32 bits +# large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT +# will not be defined. In this case you can treat 'unsigned long long int' +# like 'unsigned long int'. + +AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT], +[ + AC_CACHE_CHECK([for unsigned long long int], + [ac_cv_type_unsigned_long_long_int], + [ac_cv_type_unsigned_long_long_int=yes + if test "x${ac_cv_prog_cc_c99-no}" = xno; then + AC_LINK_IFELSE( + [_AC_TYPE_LONG_LONG_SNIPPET], + [], + [ac_cv_type_unsigned_long_long_int=no]) + fi]) + if test $ac_cv_type_unsigned_long_long_int = yes; then + AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1], + [Define to 1 if the system has the type 'unsigned long long int'.]) + fi +]) + +# Expands to a C program that can be used to test for simultaneous support +# of 'long long' and 'unsigned long long'. We don't want to say that +# 'long long' is available if 'unsigned long long' is not, or vice versa, +# because too many programs rely on the symmetry between signed and unsigned +# integer types (excluding 'bool'). +AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET], +[ + AC_LANG_PROGRAM( + [[/* For now, do not test the preprocessor; as of 2007 there are too many + implementations with broken preprocessors. Perhaps this can + be revisited in 2012. In the meantime, code should not expect + #if to work with literals wider than 32 bits. */ + /* Test literals. */ + long long int ll = 9223372036854775807ll; + long long int nll = -9223372036854775807LL; + unsigned long long int ull = 18446744073709551615ULL; + /* Test constant expressions. */ + typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) + ? 1 : -1)]; + typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 + ? 1 : -1)]; + int i = 63;]], + [[/* Test availability of runtime routines for shift and division. */ + long long int llmax = 9223372036854775807ll; + unsigned long long int ullmax = 18446744073709551615ull; + return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) + | (llmax / ll) | (llmax % ll) + | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) + | (ullmax / ull) | (ullmax % ull));]]) +]) diff --git a/gnulib/m4/malloc.m4 b/gnulib/m4/malloc.m4 new file mode 100644 index 0000000..d3c39f5 --- /dev/null +++ b/gnulib/m4/malloc.m4 @@ -0,0 +1,60 @@ +# malloc.m4 serial 13 +dnl Copyright (C) 2007, 2009-2012 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. + +# gl_FUNC_MALLOC_GNU +# ------------------ +# Test whether 'malloc (0)' is handled like in GNU libc, and replace malloc if +# it is not. +AC_DEFUN([gl_FUNC_MALLOC_GNU], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + dnl _AC_FUNC_MALLOC_IF is defined in Autoconf. + _AC_FUNC_MALLOC_IF( + [AC_DEFINE([HAVE_MALLOC_GNU], [1], + [Define to 1 if your system has a GNU libc compatible 'malloc' + function, and to 0 otherwise.])], + [AC_DEFINE([HAVE_MALLOC_GNU], [0]) + REPLACE_MALLOC=1 + ]) +]) + +# gl_FUNC_MALLOC_POSIX +# -------------------- +# Test whether 'malloc' is POSIX compliant (sets errno to ENOMEM when it +# fails), and replace malloc if it is not. +AC_DEFUN([gl_FUNC_MALLOC_POSIX], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + AC_REQUIRE([gl_CHECK_MALLOC_POSIX]) + if test $gl_cv_func_malloc_posix = yes; then + AC_DEFINE([HAVE_MALLOC_POSIX], [1], + [Define if the 'malloc' function is POSIX compliant.]) + else + REPLACE_MALLOC=1 + fi +]) + +# Test whether malloc, realloc, calloc are POSIX compliant, +# Set gl_cv_func_malloc_posix to yes or no accordingly. +AC_DEFUN([gl_CHECK_MALLOC_POSIX], +[ + AC_CACHE_CHECK([whether malloc, realloc, calloc are POSIX compliant], + [gl_cv_func_malloc_posix], + [ + dnl It is too dangerous to try to allocate a large amount of memory: + dnl some systems go to their knees when you do that. So assume that + dnl all Unix implementations of the function are POSIX compliant. + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[]], + [[#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + choke me + #endif + ]])], + [gl_cv_func_malloc_posix=yes], + [gl_cv_func_malloc_posix=no]) + ]) +]) diff --git a/gnulib/m4/math_h.m4 b/gnulib/m4/math_h.m4 new file mode 100644 index 0000000..ff1654e --- /dev/null +++ b/gnulib/m4/math_h.m4 @@ -0,0 +1,333 @@ +# math_h.m4 serial 104 +dnl Copyright (C) 2007-2012 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_MATH_H], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + gl_CHECK_NEXT_HEADERS([math.h]) + AC_REQUIRE([AC_C_INLINE]) + + AC_CACHE_CHECK([whether NAN macro works], [gl_cv_header_math_nan_works], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <math.h>]], + [[/* Solaris 10 has a broken definition of NAN. Other platforms + fail to provide NAN, or provide it only in C99 mode; this + test only needs to fail when NAN is provided but wrong. */ + float f = 1.0f; +#ifdef NAN + f = NAN; +#endif + return f == 0;]])], + [gl_cv_header_math_nan_works=yes], + [gl_cv_header_math_nan_works=no])]) + if test $gl_cv_header_math_nan_works = no; then + REPLACE_NAN=1 + fi + AC_CACHE_CHECK([whether HUGE_VAL works], [gl_cv_header_math_huge_val_works], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <math.h>]], + [[/* Solaris 10 has a broken definition of HUGE_VAL. */ + double d = HUGE_VAL; + return d == 0;]])], + [gl_cv_header_math_huge_val_works=yes], + [gl_cv_header_math_huge_val_works=no])]) + if test $gl_cv_header_math_huge_val_works = no; then + REPLACE_HUGE_VAL=1 + fi + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use. + gl_WARN_ON_USE_PREPARE([[#include <math.h>]], + [acosf acosl asinf asinl atanf atanl + cbrt cbrtf cbrtl ceilf ceill copysign copysignf copysignl cosf cosl coshf + expf expl exp2 exp2f exp2l expm1 expm1f expm1l + fabsf fabsl floorf floorl fma fmaf fmal + fmod fmodf fmodl frexpf frexpl hypotf hypotl + ldexpf ldexpl + logb log logf logl log10f log10l log1p log1pf log1pl log2 log2f log2l + modf modff modfl powf + remainder remainderf remainderl + rint rintf rintl round roundf roundl sinf sinl sinhf sqrtf sqrtl + tanf tanl tanhf trunc truncf truncl]) +]) + +AC_DEFUN([gl_MATH_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) + dnl Define it also as a C macro, for the benefit of the unit tests. + gl_MODULE_INDICATOR_FOR_TESTS([$1]) +]) + +AC_DEFUN([gl_MATH_H_DEFAULTS], +[ + GNULIB_ACOSF=0; AC_SUBST([GNULIB_ACOSF]) + GNULIB_ACOSL=0; AC_SUBST([GNULIB_ACOSL]) + GNULIB_ASINF=0; AC_SUBST([GNULIB_ASINF]) + GNULIB_ASINL=0; AC_SUBST([GNULIB_ASINL]) + GNULIB_ATANF=0; AC_SUBST([GNULIB_ATANF]) + GNULIB_ATANL=0; AC_SUBST([GNULIB_ATANL]) + GNULIB_ATAN2F=0; AC_SUBST([GNULIB_ATAN2F]) + GNULIB_CBRT=0; AC_SUBST([GNULIB_CBRT]) + GNULIB_CBRTF=0; AC_SUBST([GNULIB_CBRTF]) + GNULIB_CBRTL=0; AC_SUBST([GNULIB_CBRTL]) + GNULIB_CEIL=0; AC_SUBST([GNULIB_CEIL]) + GNULIB_CEILF=0; AC_SUBST([GNULIB_CEILF]) + GNULIB_CEILL=0; AC_SUBST([GNULIB_CEILL]) + GNULIB_COPYSIGN=0; AC_SUBST([GNULIB_COPYSIGN]) + GNULIB_COPYSIGNF=0; AC_SUBST([GNULIB_COPYSIGNF]) + GNULIB_COPYSIGNL=0; AC_SUBST([GNULIB_COPYSIGNL]) + GNULIB_COSF=0; AC_SUBST([GNULIB_COSF]) + GNULIB_COSL=0; AC_SUBST([GNULIB_COSL]) + GNULIB_COSHF=0; AC_SUBST([GNULIB_COSHF]) + GNULIB_EXPF=0; AC_SUBST([GNULIB_EXPF]) + GNULIB_EXPL=0; AC_SUBST([GNULIB_EXPL]) + GNULIB_EXP2=0; AC_SUBST([GNULIB_EXP2]) + GNULIB_EXP2F=0; AC_SUBST([GNULIB_EXP2F]) + GNULIB_EXP2L=0; AC_SUBST([GNULIB_EXP2L]) + GNULIB_EXPM1=0; AC_SUBST([GNULIB_EXPM1]) + GNULIB_EXPM1F=0; AC_SUBST([GNULIB_EXPM1F]) + GNULIB_EXPM1L=0; AC_SUBST([GNULIB_EXPM1L]) + GNULIB_FABSF=0; AC_SUBST([GNULIB_FABSF]) + GNULIB_FABSL=0; AC_SUBST([GNULIB_FABSL]) + GNULIB_FLOOR=0; AC_SUBST([GNULIB_FLOOR]) + GNULIB_FLOORF=0; AC_SUBST([GNULIB_FLOORF]) + GNULIB_FLOORL=0; AC_SUBST([GNULIB_FLOORL]) + GNULIB_FMA=0; AC_SUBST([GNULIB_FMA]) + GNULIB_FMAF=0; AC_SUBST([GNULIB_FMAF]) + GNULIB_FMAL=0; AC_SUBST([GNULIB_FMAL]) + GNULIB_FMOD=0; AC_SUBST([GNULIB_FMOD]) + GNULIB_FMODF=0; AC_SUBST([GNULIB_FMODF]) + GNULIB_FMODL=0; AC_SUBST([GNULIB_FMODL]) + GNULIB_FREXPF=0; AC_SUBST([GNULIB_FREXPF]) + GNULIB_FREXP=0; AC_SUBST([GNULIB_FREXP]) + GNULIB_FREXPL=0; AC_SUBST([GNULIB_FREXPL]) + GNULIB_HYPOT=0; AC_SUBST([GNULIB_HYPOT]) + GNULIB_HYPOTF=0; AC_SUBST([GNULIB_HYPOTF]) + GNULIB_HYPOTL=0; AC_SUBST([GNULIB_HYPOTL]) + GNULIB_ISFINITE=0; AC_SUBST([GNULIB_ISFINITE]) + GNULIB_ISINF=0; AC_SUBST([GNULIB_ISINF]) + GNULIB_ISNAN=0; AC_SUBST([GNULIB_ISNAN]) + GNULIB_ISNANF=0; AC_SUBST([GNULIB_ISNANF]) + GNULIB_ISNAND=0; AC_SUBST([GNULIB_ISNAND]) + GNULIB_ISNANL=0; AC_SUBST([GNULIB_ISNANL]) + GNULIB_LDEXPF=0; AC_SUBST([GNULIB_LDEXPF]) + GNULIB_LDEXPL=0; AC_SUBST([GNULIB_LDEXPL]) + GNULIB_LOGB=0; AC_SUBST([GNULIB_LOGB]) + GNULIB_LOG=0; AC_SUBST([GNULIB_LOG]) + GNULIB_LOGF=0; AC_SUBST([GNULIB_LOGF]) + GNULIB_LOGL=0; AC_SUBST([GNULIB_LOGL]) + GNULIB_LOG10F=0; AC_SUBST([GNULIB_LOG10F]) + GNULIB_LOG10L=0; AC_SUBST([GNULIB_LOG10L]) + GNULIB_LOG1P=0; AC_SUBST([GNULIB_LOG1P]) + GNULIB_LOG1PF=0; AC_SUBST([GNULIB_LOG1PF]) + GNULIB_LOG1PL=0; AC_SUBST([GNULIB_LOG1PL]) + GNULIB_LOG2=0; AC_SUBST([GNULIB_LOG2]) + GNULIB_LOG2F=0; AC_SUBST([GNULIB_LOG2F]) + GNULIB_LOG2L=0; AC_SUBST([GNULIB_LOG2L]) + GNULIB_MODF=0; AC_SUBST([GNULIB_MODF]) + GNULIB_MODFF=0; AC_SUBST([GNULIB_MODFF]) + GNULIB_MODFL=0; AC_SUBST([GNULIB_MODFL]) + GNULIB_POWF=0; AC_SUBST([GNULIB_POWF]) + GNULIB_REMAINDER=0; AC_SUBST([GNULIB_REMAINDER]) + GNULIB_REMAINDERF=0; AC_SUBST([GNULIB_REMAINDERF]) + GNULIB_REMAINDERL=0; AC_SUBST([GNULIB_REMAINDERL]) + GNULIB_RINT=0; AC_SUBST([GNULIB_RINT]) + GNULIB_RINTF=0; AC_SUBST([GNULIB_RINTF]) + GNULIB_RINTL=0; AC_SUBST([GNULIB_RINTL]) + GNULIB_ROUND=0; AC_SUBST([GNULIB_ROUND]) + GNULIB_ROUNDF=0; AC_SUBST([GNULIB_ROUNDF]) + GNULIB_ROUNDL=0; AC_SUBST([GNULIB_ROUNDL]) + GNULIB_SIGNBIT=0; AC_SUBST([GNULIB_SIGNBIT]) + GNULIB_SINF=0; AC_SUBST([GNULIB_SINF]) + GNULIB_SINL=0; AC_SUBST([GNULIB_SINL]) + GNULIB_SINHF=0; AC_SUBST([GNULIB_SINHF]) + GNULIB_SQRTF=0; AC_SUBST([GNULIB_SQRTF]) + GNULIB_SQRTL=0; AC_SUBST([GNULIB_SQRTL]) + GNULIB_TANF=0; AC_SUBST([GNULIB_TANF]) + GNULIB_TANL=0; AC_SUBST([GNULIB_TANL]) + GNULIB_TANHF=0; AC_SUBST([GNULIB_TANHF]) + GNULIB_TRUNC=0; AC_SUBST([GNULIB_TRUNC]) + GNULIB_TRUNCF=0; AC_SUBST([GNULIB_TRUNCF]) + GNULIB_TRUNCL=0; AC_SUBST([GNULIB_TRUNCL]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_ACOSF=1; AC_SUBST([HAVE_ACOSF]) + HAVE_ACOSL=1; AC_SUBST([HAVE_ACOSL]) + HAVE_ASINF=1; AC_SUBST([HAVE_ASINF]) + HAVE_ASINL=1; AC_SUBST([HAVE_ASINL]) + HAVE_ATANF=1; AC_SUBST([HAVE_ATANF]) + HAVE_ATANL=1; AC_SUBST([HAVE_ATANL]) + HAVE_ATAN2F=1; AC_SUBST([HAVE_ATAN2F]) + HAVE_CBRT=1; AC_SUBST([HAVE_CBRT]) + HAVE_CBRTF=1; AC_SUBST([HAVE_CBRTF]) + HAVE_CBRTL=1; AC_SUBST([HAVE_CBRTL]) + HAVE_COPYSIGN=1; AC_SUBST([HAVE_COPYSIGN]) + HAVE_COPYSIGNL=1; AC_SUBST([HAVE_COPYSIGNL]) + HAVE_COSF=1; AC_SUBST([HAVE_COSF]) + HAVE_COSL=1; AC_SUBST([HAVE_COSL]) + HAVE_COSHF=1; AC_SUBST([HAVE_COSHF]) + HAVE_EXPF=1; AC_SUBST([HAVE_EXPF]) + HAVE_EXPL=1; AC_SUBST([HAVE_EXPL]) + HAVE_EXPM1=1; AC_SUBST([HAVE_EXPM1]) + HAVE_EXPM1F=1; AC_SUBST([HAVE_EXPM1F]) + HAVE_FABSF=1; AC_SUBST([HAVE_FABSF]) + HAVE_FABSL=1; AC_SUBST([HAVE_FABSL]) + HAVE_FMA=1; AC_SUBST([HAVE_FMA]) + HAVE_FMAF=1; AC_SUBST([HAVE_FMAF]) + HAVE_FMAL=1; AC_SUBST([HAVE_FMAL]) + HAVE_FMODF=1; AC_SUBST([HAVE_FMODF]) + HAVE_FMODL=1; AC_SUBST([HAVE_FMODL]) + HAVE_FREXPF=1; AC_SUBST([HAVE_FREXPF]) + HAVE_HYPOTF=1; AC_SUBST([HAVE_HYPOTF]) + HAVE_HYPOTL=1; AC_SUBST([HAVE_HYPOTL]) + HAVE_ISNANF=1; AC_SUBST([HAVE_ISNANF]) + HAVE_ISNAND=1; AC_SUBST([HAVE_ISNAND]) + HAVE_ISNANL=1; AC_SUBST([HAVE_ISNANL]) + HAVE_LDEXPF=1; AC_SUBST([HAVE_LDEXPF]) + HAVE_LOGF=1; AC_SUBST([HAVE_LOGF]) + HAVE_LOGL=1; AC_SUBST([HAVE_LOGL]) + HAVE_LOG10F=1; AC_SUBST([HAVE_LOG10F]) + HAVE_LOG10L=1; AC_SUBST([HAVE_LOG10L]) + HAVE_LOG1P=1; AC_SUBST([HAVE_LOG1P]) + HAVE_LOG1PF=1; AC_SUBST([HAVE_LOG1PF]) + HAVE_LOG1PL=1; AC_SUBST([HAVE_LOG1PL]) + HAVE_MODFF=1; AC_SUBST([HAVE_MODFF]) + HAVE_MODFL=1; AC_SUBST([HAVE_MODFL]) + HAVE_POWF=1; AC_SUBST([HAVE_POWF]) + HAVE_REMAINDER=1; AC_SUBST([HAVE_REMAINDER]) + HAVE_REMAINDERF=1; AC_SUBST([HAVE_REMAINDERF]) + HAVE_RINT=1; AC_SUBST([HAVE_RINT]) + HAVE_RINTL=1; AC_SUBST([HAVE_RINTL]) + HAVE_SINF=1; AC_SUBST([HAVE_SINF]) + HAVE_SINL=1; AC_SUBST([HAVE_SINL]) + HAVE_SINHF=1; AC_SUBST([HAVE_SINHF]) + HAVE_SQRTF=1; AC_SUBST([HAVE_SQRTF]) + HAVE_SQRTL=1; AC_SUBST([HAVE_SQRTL]) + HAVE_TANF=1; AC_SUBST([HAVE_TANF]) + HAVE_TANL=1; AC_SUBST([HAVE_TANL]) + HAVE_TANHF=1; AC_SUBST([HAVE_TANHF]) + HAVE_DECL_ACOSL=1; AC_SUBST([HAVE_DECL_ACOSL]) + HAVE_DECL_ASINL=1; AC_SUBST([HAVE_DECL_ASINL]) + HAVE_DECL_ATANL=1; AC_SUBST([HAVE_DECL_ATANL]) + HAVE_DECL_CBRTF=1; AC_SUBST([HAVE_DECL_CBRTF]) + HAVE_DECL_CBRTL=1; AC_SUBST([HAVE_DECL_CBRTL]) + HAVE_DECL_CEILF=1; AC_SUBST([HAVE_DECL_CEILF]) + HAVE_DECL_CEILL=1; AC_SUBST([HAVE_DECL_CEILL]) + HAVE_DECL_COPYSIGNF=1; AC_SUBST([HAVE_DECL_COPYSIGNF]) + HAVE_DECL_COSL=1; AC_SUBST([HAVE_DECL_COSL]) + HAVE_DECL_EXPL=1; AC_SUBST([HAVE_DECL_EXPL]) + HAVE_DECL_EXP2=1; AC_SUBST([HAVE_DECL_EXP2]) + HAVE_DECL_EXP2F=1; AC_SUBST([HAVE_DECL_EXP2F]) + HAVE_DECL_EXP2L=1; AC_SUBST([HAVE_DECL_EXP2L]) + HAVE_DECL_EXPM1L=1; AC_SUBST([HAVE_DECL_EXPM1L]) + HAVE_DECL_FLOORF=1; AC_SUBST([HAVE_DECL_FLOORF]) + HAVE_DECL_FLOORL=1; AC_SUBST([HAVE_DECL_FLOORL]) + HAVE_DECL_FREXPL=1; AC_SUBST([HAVE_DECL_FREXPL]) + HAVE_DECL_LDEXPL=1; AC_SUBST([HAVE_DECL_LDEXPL]) + HAVE_DECL_LOGB=1; AC_SUBST([HAVE_DECL_LOGB]) + HAVE_DECL_LOGL=1; AC_SUBST([HAVE_DECL_LOGL]) + HAVE_DECL_LOG10L=1; AC_SUBST([HAVE_DECL_LOG10L]) + HAVE_DECL_LOG2=1; AC_SUBST([HAVE_DECL_LOG2]) + HAVE_DECL_LOG2F=1; AC_SUBST([HAVE_DECL_LOG2F]) + HAVE_DECL_LOG2L=1; AC_SUBST([HAVE_DECL_LOG2L]) + HAVE_DECL_REMAINDER=1; AC_SUBST([HAVE_DECL_REMAINDER]) + HAVE_DECL_REMAINDERL=1; AC_SUBST([HAVE_DECL_REMAINDERL]) + HAVE_DECL_RINTF=1; AC_SUBST([HAVE_DECL_RINTF]) + HAVE_DECL_ROUND=1; AC_SUBST([HAVE_DECL_ROUND]) + HAVE_DECL_ROUNDF=1; AC_SUBST([HAVE_DECL_ROUNDF]) + HAVE_DECL_ROUNDL=1; AC_SUBST([HAVE_DECL_ROUNDL]) + HAVE_DECL_SINL=1; AC_SUBST([HAVE_DECL_SINL]) + HAVE_DECL_SQRTL=1; AC_SUBST([HAVE_DECL_SQRTL]) + HAVE_DECL_TANL=1; AC_SUBST([HAVE_DECL_TANL]) + HAVE_DECL_TRUNC=1; AC_SUBST([HAVE_DECL_TRUNC]) + HAVE_DECL_TRUNCF=1; AC_SUBST([HAVE_DECL_TRUNCF]) + HAVE_DECL_TRUNCL=1; AC_SUBST([HAVE_DECL_TRUNCL]) + REPLACE_CBRTF=0; AC_SUBST([REPLACE_CBRTF]) + REPLACE_CBRTL=0; AC_SUBST([REPLACE_CBRTL]) + REPLACE_CEIL=0; AC_SUBST([REPLACE_CEIL]) + REPLACE_CEILF=0; AC_SUBST([REPLACE_CEILF]) + REPLACE_CEILL=0; AC_SUBST([REPLACE_CEILL]) + REPLACE_EXPM1=0; AC_SUBST([REPLACE_EXPM1]) + REPLACE_EXPM1F=0; AC_SUBST([REPLACE_EXPM1F]) + REPLACE_EXP2=0; AC_SUBST([REPLACE_EXP2]) + REPLACE_EXP2L=0; AC_SUBST([REPLACE_EXP2L]) + REPLACE_FABSL=0; AC_SUBST([REPLACE_FABSL]) + REPLACE_FLOOR=0; AC_SUBST([REPLACE_FLOOR]) + REPLACE_FLOORF=0; AC_SUBST([REPLACE_FLOORF]) + REPLACE_FLOORL=0; AC_SUBST([REPLACE_FLOORL]) + REPLACE_FMA=0; AC_SUBST([REPLACE_FMA]) + REPLACE_FMAF=0; AC_SUBST([REPLACE_FMAF]) + REPLACE_FMAL=0; AC_SUBST([REPLACE_FMAL]) + REPLACE_FMOD=0; AC_SUBST([REPLACE_FMOD]) + REPLACE_FMODF=0; AC_SUBST([REPLACE_FMODF]) + REPLACE_FMODL=0; AC_SUBST([REPLACE_FMODL]) + REPLACE_FREXPF=0; AC_SUBST([REPLACE_FREXPF]) + REPLACE_FREXP=0; AC_SUBST([REPLACE_FREXP]) + REPLACE_FREXPL=0; AC_SUBST([REPLACE_FREXPL]) + REPLACE_HUGE_VAL=0; AC_SUBST([REPLACE_HUGE_VAL]) + REPLACE_HYPOT=0; AC_SUBST([REPLACE_HYPOT]) + REPLACE_HYPOTF=0; AC_SUBST([REPLACE_HYPOTF]) + REPLACE_HYPOTL=0; AC_SUBST([REPLACE_HYPOTL]) + REPLACE_ISFINITE=0; AC_SUBST([REPLACE_ISFINITE]) + REPLACE_ISINF=0; AC_SUBST([REPLACE_ISINF]) + REPLACE_ISNAN=0; AC_SUBST([REPLACE_ISNAN]) + REPLACE_LDEXPL=0; AC_SUBST([REPLACE_LDEXPL]) + REPLACE_LOG=0; AC_SUBST([REPLACE_LOG]) + REPLACE_LOGF=0; AC_SUBST([REPLACE_LOGF]) + REPLACE_LOGL=0; AC_SUBST([REPLACE_LOGL]) + REPLACE_LOG1P=0; AC_SUBST([REPLACE_LOG1P]) + REPLACE_LOG1PF=0; AC_SUBST([REPLACE_LOG1PF]) + REPLACE_LOG1PL=0; AC_SUBST([REPLACE_LOG1PL]) + REPLACE_LOG2=0; AC_SUBST([REPLACE_LOG2]) + REPLACE_LOG2F=0; AC_SUBST([REPLACE_LOG2F]) + REPLACE_LOG2L=0; AC_SUBST([REPLACE_LOG2L]) + REPLACE_MODF=0; AC_SUBST([REPLACE_MODF]) + REPLACE_MODFF=0; AC_SUBST([REPLACE_MODFF]) + REPLACE_MODFL=0; AC_SUBST([REPLACE_MODFL]) + REPLACE_NAN=0; AC_SUBST([REPLACE_NAN]) + REPLACE_REMAINDER=0; AC_SUBST([REPLACE_REMAINDER]) + REPLACE_REMAINDERF=0; AC_SUBST([REPLACE_REMAINDERF]) + REPLACE_REMAINDERL=0; AC_SUBST([REPLACE_REMAINDERL]) + REPLACE_ROUND=0; AC_SUBST([REPLACE_ROUND]) + REPLACE_ROUNDF=0; AC_SUBST([REPLACE_ROUNDF]) + REPLACE_ROUNDL=0; AC_SUBST([REPLACE_ROUNDL]) + REPLACE_SIGNBIT=0; AC_SUBST([REPLACE_SIGNBIT]) + REPLACE_SIGNBIT_USING_GCC=0; AC_SUBST([REPLACE_SIGNBIT_USING_GCC]) + REPLACE_SQRTL=0; AC_SUBST([REPLACE_SQRTL]) + REPLACE_TRUNC=0; AC_SUBST([REPLACE_TRUNC]) + REPLACE_TRUNCF=0; AC_SUBST([REPLACE_TRUNCF]) + REPLACE_TRUNCL=0; AC_SUBST([REPLACE_TRUNCL]) +]) + +# gl_LONG_DOUBLE_VS_DOUBLE +# determines whether 'long double' and 'double' have the same representation. +# Sets variable HAVE_SAME_LONG_DOUBLE_AS_DOUBLE to 0 or 1, and defines +# HAVE_SAME_LONG_DOUBLE_AS_DOUBLE accordingly. +# The currently known platforms where this is the case are: +# Linux/HPPA, Minix 3.1.8, AIX 5, AIX 6 and 7 with xlc, MSVC 9. +AC_DEFUN([gl_LONG_DOUBLE_VS_DOUBLE], +[ + AC_CACHE_CHECK([whether long double and double are the same], + [gl_cv_long_double_equals_double], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[#include <float.h>]], + [[typedef int check[sizeof (long double) == sizeof (double) + && LDBL_MANT_DIG == DBL_MANT_DIG + && LDBL_MAX_EXP == DBL_MAX_EXP + && LDBL_MIN_EXP == DBL_MIN_EXP + ? 1 : -1]; + ]])], + [gl_cv_long_double_equals_double=yes], + [gl_cv_long_double_equals_double=no]) + ]) + if test $gl_cv_long_double_equals_double = yes; then + AC_DEFINE([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE], [1], + [Define to 1 if 'long double' and 'double' have the same representation.]) + HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1 + else + HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0 + fi + AC_SUBST([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]) +]) diff --git a/gnulib/m4/memchr.m4 b/gnulib/m4/memchr.m4 new file mode 100644 index 0000000..0040294 --- /dev/null +++ b/gnulib/m4/memchr.m4 @@ -0,0 +1,88 @@ +# memchr.m4 serial 12 +dnl Copyright (C) 2002-2004, 2009-2012 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_ONCE([gl_FUNC_MEMCHR], +[ + dnl Check for prerequisites for memory fence checks. + gl_FUNC_MMAP_ANON + AC_CHECK_HEADERS_ONCE([sys/mman.h]) + AC_CHECK_FUNCS_ONCE([mprotect]) + + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + m4_ifdef([gl_FUNC_MEMCHR_OBSOLETE], [ + dnl These days, we assume memchr is present. But if support for old + dnl platforms is desired: + AC_CHECK_FUNCS_ONCE([memchr]) + if test $ac_cv_func_memchr = no; then + HAVE_MEMCHR=0 + fi + ]) + if test $HAVE_MEMCHR = 1; then + # Detect platform-specific bugs in some versions of glibc: + # memchr should not dereference anything with length 0 + # http://bugzilla.redhat.com/499689 + # memchr should not dereference overestimated length after a match + # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737 + # http://sourceware.org/bugzilla/show_bug.cgi?id=10162 + # Assume that memchr works on platforms that lack mprotect. + AC_CACHE_CHECK([whether memchr works], [gl_cv_func_memchr_works], + [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ +#include <string.h> +#if HAVE_SYS_MMAN_H +# include <fcntl.h> +# include <unistd.h> +# include <sys/types.h> +# include <sys/mman.h> +# ifndef MAP_FILE +# define MAP_FILE 0 +# endif +#endif +]], [[ + int result = 0; + char *fence = NULL; +#if HAVE_SYS_MMAN_H && HAVE_MPROTECT +# if HAVE_MAP_ANONYMOUS + const int flags = MAP_ANONYMOUS | MAP_PRIVATE; + const int fd = -1; +# else /* !HAVE_MAP_ANONYMOUS */ + const int flags = MAP_FILE | MAP_PRIVATE; + int fd = open ("/dev/zero", O_RDONLY, 0666); + if (fd >= 0) +# endif + { + int pagesize = getpagesize (); + char *two_pages = + (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE, + flags, fd, 0); + if (two_pages != (char *)(-1) + && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0) + fence = two_pages + pagesize; + } +#endif + if (fence) + { + if (memchr (fence, 0, 0)) + result |= 1; + strcpy (fence - 9, "12345678"); + if (memchr (fence - 9, 0, 79) != fence - 1) + result |= 2; + if (memchr (fence - 1, 0, 3) != fence - 1) + result |= 4; + } + return result; +]])], [gl_cv_func_memchr_works=yes], [gl_cv_func_memchr_works=no], + [dnl Be pessimistic for now. + gl_cv_func_memchr_works="guessing no"])]) + if test "$gl_cv_func_memchr_works" != yes; then + REPLACE_MEMCHR=1 + fi + fi +]) + +# Prerequisites of lib/memchr.c. +AC_DEFUN([gl_PREREQ_MEMCHR], [ + AC_CHECK_HEADERS([bp-sym.h]) +]) diff --git a/gnulib/m4/mempcpy.m4 b/gnulib/m4/mempcpy.m4 new file mode 100644 index 0000000..c926941 --- /dev/null +++ b/gnulib/m4/mempcpy.m4 @@ -0,0 +1,26 @@ +# mempcpy.m4 serial 11 +dnl Copyright (C) 2003-2004, 2006-2007, 2009-2012 Free Software Foundation, +dnl 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_MEMPCPY], +[ + dnl Persuade glibc <string.h> to declare mempcpy(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + dnl The mempcpy() declaration in lib/string.in.h uses 'restrict'. + AC_REQUIRE([AC_C_RESTRICT]) + + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + AC_CHECK_FUNCS([mempcpy]) + if test $ac_cv_func_mempcpy = no; then + HAVE_MEMPCPY=0 + fi +]) + +# Prerequisites of lib/mempcpy.c. +AC_DEFUN([gl_PREREQ_MEMPCPY], [ + : +]) diff --git a/gnulib/m4/mmap-anon.m4 b/gnulib/m4/mmap-anon.m4 new file mode 100644 index 0000000..4613cbe --- /dev/null +++ b/gnulib/m4/mmap-anon.m4 @@ -0,0 +1,55 @@ +# mmap-anon.m4 serial 9 +dnl Copyright (C) 2005, 2007, 2009-2012 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. + +# Detect how mmap can be used to create anonymous (not file-backed) memory +# mappings. +# - On Linux, AIX, OSF/1, Solaris, Cygwin, Interix, Haiku, both MAP_ANONYMOUS +# and MAP_ANON exist and have the same value. +# - On HP-UX, only MAP_ANONYMOUS exists. +# - On MacOS X, FreeBSD, NetBSD, OpenBSD, only MAP_ANON exists. +# - On IRIX, neither exists, and a file descriptor opened to /dev/zero must be +# used. + +AC_DEFUN([gl_FUNC_MMAP_ANON], +[ + dnl Persuade glibc <sys/mman.h> to define MAP_ANONYMOUS. + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + + # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it + # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is + # irrelevant for anonymous mappings. + AC_CHECK_FUNC([mmap], [gl_have_mmap=yes], [gl_have_mmap=no]) + + # Try to allow MAP_ANONYMOUS. + gl_have_mmap_anonymous=no + if test $gl_have_mmap = yes; then + AC_MSG_CHECKING([for MAP_ANONYMOUS]) + AC_EGREP_CPP([I cant identify this map], [ +#include <sys/mman.h> +#ifdef MAP_ANONYMOUS + I cant identify this map +#endif +], + [gl_have_mmap_anonymous=yes]) + if test $gl_have_mmap_anonymous != yes; then + AC_EGREP_CPP([I cant identify this map], [ +#include <sys/mman.h> +#ifdef MAP_ANON + I cant identify this map +#endif +], + [AC_DEFINE([MAP_ANONYMOUS], [MAP_ANON], + [Define to a substitute value for mmap()'s MAP_ANONYMOUS flag.]) + gl_have_mmap_anonymous=yes]) + fi + AC_MSG_RESULT([$gl_have_mmap_anonymous]) + if test $gl_have_mmap_anonymous = yes; then + AC_DEFINE([HAVE_MAP_ANONYMOUS], [1], + [Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including + config.h and <sys/mman.h>.]) + fi + fi +]) diff --git a/gnulib/m4/multiarch.m4 b/gnulib/m4/multiarch.m4 new file mode 100644 index 0000000..b424dce --- /dev/null +++ b/gnulib/m4/multiarch.m4 @@ -0,0 +1,62 @@ +# multiarch.m4 serial 6 +dnl Copyright (C) 2008-2012 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. + +# Determine whether the compiler is or may be producing universal binaries. +# +# On MacOS X 10.5 and later systems, the user can create libraries and +# executables that work on multiple system types--known as "fat" or +# "universal" binaries--by specifying multiple '-arch' options to the +# compiler but only a single '-arch' option to the preprocessor. Like +# this: +# +# ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ +# CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ +# CPP="gcc -E" CXXCPP="g++ -E" +# +# Detect this situation and set APPLE_UNIVERSAL_BUILD accordingly. + +AC_DEFUN_ONCE([gl_MULTIARCH], +[ + dnl Code similar to autoconf-2.63 AC_C_BIGENDIAN. + gl_cv_c_multiarch=no + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + ]])], + [ + dnl Check for potential -arch flags. It is not universal unless + dnl there are at least two -arch flags with different values. + arch= + prev= + for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do + if test -n "$prev"; then + case $word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$arch" || test "$arch" = "$word"; then + arch="$word" + else + gl_cv_c_multiarch=yes + fi + ;; + esac + prev= + else + if test "x$word" = "x-arch"; then + prev=arch + fi + fi + done + ]) + if test $gl_cv_c_multiarch = yes; then + APPLE_UNIVERSAL_BUILD=1 + else + APPLE_UNIVERSAL_BUILD=0 + fi + AC_SUBST([APPLE_UNIVERSAL_BUILD]) +]) diff --git a/gnulib/m4/nocrash.m4 b/gnulib/m4/nocrash.m4 new file mode 100644 index 0000000..08ef825 --- /dev/null +++ b/gnulib/m4/nocrash.m4 @@ -0,0 +1,130 @@ +# nocrash.m4 serial 3 +dnl Copyright (C) 2005, 2009-2012 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. + +dnl Based on libsigsegv, from Bruno Haible and Paolo Bonzini. + +AC_PREREQ([2.13]) + +dnl Expands to some code for use in .c programs that will cause the configure +dnl test to exit instead of crashing. This is useful to avoid triggering +dnl action from a background debugger and to avoid core dumps. +dnl Usage: ... +dnl ]GL_NOCRASH[ +dnl ... +dnl int main() { nocrash_init(); ... } +AC_DEFUN([GL_NOCRASH],[[ +#include <stdlib.h> +#if defined __MACH__ && defined __APPLE__ +/* Avoid a crash on MacOS X. */ +#include <mach/mach.h> +#include <mach/mach_error.h> +#include <mach/thread_status.h> +#include <mach/exception.h> +#include <mach/task.h> +#include <pthread.h> +/* The exception port on which our thread listens. */ +static mach_port_t our_exception_port; +/* The main function of the thread listening for exceptions of type + EXC_BAD_ACCESS. */ +static void * +mach_exception_thread (void *arg) +{ + /* Buffer for a message to be received. */ + struct { + mach_msg_header_t head; + mach_msg_body_t msgh_body; + char data[1024]; + } msg; + mach_msg_return_t retval; + /* Wait for a message on the exception port. */ + retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), + our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); + if (retval != MACH_MSG_SUCCESS) + abort (); + exit (1); +} +static void +nocrash_init (void) +{ + mach_port_t self = mach_task_self (); + /* Allocate a port on which the thread shall listen for exceptions. */ + if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) + == KERN_SUCCESS) { + /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ + if (mach_port_insert_right (self, our_exception_port, our_exception_port, + MACH_MSG_TYPE_MAKE_SEND) + == KERN_SUCCESS) { + /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting + for us. */ + exception_mask_t mask = EXC_MASK_BAD_ACCESS; + /* Create the thread listening on the exception port. */ + pthread_attr_t attr; + pthread_t thread; + if (pthread_attr_init (&attr) == 0 + && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 + && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { + pthread_attr_destroy (&attr); + /* Replace the exception port info for these exceptions with our own. + Note that we replace the exception port for the entire task, not only + for a particular thread. This has the effect that when our exception + port gets the message, the thread specific exception port has already + been asked, and we don't need to bother about it. + See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ + task_set_exception_ports (self, mask, our_exception_port, + EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); + } + } + } +} +#elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +/* Avoid a crash on native Windows. */ +#define WIN32_LEAN_AND_MEAN +#include <windows.h> +#include <winerror.h> +static LONG WINAPI +exception_filter (EXCEPTION_POINTERS *ExceptionInfo) +{ + switch (ExceptionInfo->ExceptionRecord->ExceptionCode) + { + case EXCEPTION_ACCESS_VIOLATION: + case EXCEPTION_IN_PAGE_ERROR: + case EXCEPTION_STACK_OVERFLOW: + case EXCEPTION_GUARD_PAGE: + case EXCEPTION_PRIV_INSTRUCTION: + case EXCEPTION_ILLEGAL_INSTRUCTION: + case EXCEPTION_DATATYPE_MISALIGNMENT: + case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: + case EXCEPTION_NONCONTINUABLE_EXCEPTION: + exit (1); + } + return EXCEPTION_CONTINUE_SEARCH; +} +static void +nocrash_init (void) +{ + SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter); +} +#else +/* Avoid a crash on POSIX systems. */ +#include <signal.h> +/* A POSIX signal handler. */ +static void +exception_handler (int sig) +{ + exit (1); +} +static void +nocrash_init (void) +{ +#ifdef SIGSEGV + signal (SIGSEGV, exception_handler); +#endif +#ifdef SIGBUS + signal (SIGBUS, exception_handler); +#endif +} +#endif +]]) diff --git a/gnulib/m4/onceonly.m4 b/gnulib/m4/onceonly.m4 new file mode 100644 index 0000000..275d73c --- /dev/null +++ b/gnulib/m4/onceonly.m4 @@ -0,0 +1,104 @@ +# onceonly.m4 serial 9 +dnl Copyright (C) 2002-2003, 2005-2006, 2008-2012 Free Software Foundation, +dnl Inc. +dnl +dnl This file is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 3 of the License, or +dnl (at your option) any later version. +dnl +dnl This file is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +dnl GNU General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this file. If not, see <http://www.gnu.org/licenses/>. +dnl +dnl As a special exception to the GNU General Public License, +dnl this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +dnl This file defines some "once only" variants of standard autoconf macros. +dnl AC_CHECK_HEADERS_ONCE like AC_CHECK_HEADERS +dnl AC_CHECK_FUNCS_ONCE like AC_CHECK_FUNCS +dnl AC_CHECK_DECLS_ONCE like AC_CHECK_DECLS +dnl AC_REQUIRE([AC_FUNC_STRCOLL]) like AC_FUNC_STRCOLL +dnl The advantage is that the check for each of the headers/functions/decls +dnl will be put only once into the 'configure' file. It keeps the size of +dnl the 'configure' file down, and avoids redundant output when 'configure' +dnl is run. +dnl The drawback is that the checks cannot be conditionalized. If you write +dnl if some_condition; then gl_CHECK_HEADERS(stdlib.h); fi +dnl inside an AC_DEFUNed function, the gl_CHECK_HEADERS macro call expands to +dnl empty, and the check will be inserted before the body of the AC_DEFUNed +dnl function. + +dnl The original code implemented AC_CHECK_HEADERS_ONCE and AC_CHECK_FUNCS_ONCE +dnl in terms of AC_DEFUN and AC_REQUIRE. This implementation uses diversions to +dnl named sections DEFAULTS and INIT_PREPARE in order to check all requested +dnl headers at once, thus reducing the size of 'configure'. It is known to work +dnl with autoconf 2.57..2.62 at least . The size reduction is ca. 9%. + +dnl Autoconf version 2.59 plus gnulib is required; this file is not needed +dnl with Autoconf 2.60 or greater. But note that autoconf's implementation of +dnl AC_CHECK_DECLS_ONCE expects a comma-separated list of symbols as first +dnl argument! +AC_PREREQ([2.59]) + +# AC_CHECK_HEADERS_ONCE(HEADER1 HEADER2 ...) is a once-only variant of +# AC_CHECK_HEADERS(HEADER1 HEADER2 ...). +AC_DEFUN([AC_CHECK_HEADERS_ONCE], [ + : + m4_foreach_w([gl_HEADER_NAME], [$1], [ + AC_DEFUN([gl_CHECK_HEADER_]m4_quote(m4_translit(gl_HEADER_NAME, + [./-], [___])), [ + m4_divert_text([INIT_PREPARE], + [gl_header_list="$gl_header_list gl_HEADER_NAME"]) + gl_HEADERS_EXPANSION + AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_HEADER_NAME])), + [Define to 1 if you have the <]m4_defn([gl_HEADER_NAME])[> header file.]) + ]) + AC_REQUIRE([gl_CHECK_HEADER_]m4_quote(m4_translit(gl_HEADER_NAME, + [./-], [___]))) + ]) +]) +m4_define([gl_HEADERS_EXPANSION], [ + m4_divert_text([DEFAULTS], [gl_header_list=]) + AC_CHECK_HEADERS([$gl_header_list]) + m4_define([gl_HEADERS_EXPANSION], []) +]) + +# AC_CHECK_FUNCS_ONCE(FUNC1 FUNC2 ...) is a once-only variant of +# AC_CHECK_FUNCS(FUNC1 FUNC2 ...). +AC_DEFUN([AC_CHECK_FUNCS_ONCE], [ + : + m4_foreach_w([gl_FUNC_NAME], [$1], [ + AC_DEFUN([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME]), [ + m4_divert_text([INIT_PREPARE], + [gl_func_list="$gl_func_list gl_FUNC_NAME"]) + gl_FUNCS_EXPANSION + AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_FUNC_NAME])), + [Define to 1 if you have the ']m4_defn([gl_FUNC_NAME])[' function.]) + ]) + AC_REQUIRE([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME])) + ]) +]) +m4_define([gl_FUNCS_EXPANSION], [ + m4_divert_text([DEFAULTS], [gl_func_list=]) + AC_CHECK_FUNCS([$gl_func_list]) + m4_define([gl_FUNCS_EXPANSION], []) +]) + +# AC_CHECK_DECLS_ONCE(DECL1 DECL2 ...) is a once-only variant of +# AC_CHECK_DECLS(DECL1, DECL2, ...). +AC_DEFUN([AC_CHECK_DECLS_ONCE], [ + : + m4_foreach_w([gl_DECL_NAME], [$1], [ + AC_DEFUN([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME]), [ + AC_CHECK_DECLS(m4_defn([gl_DECL_NAME])) + ]) + AC_REQUIRE([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME])) + ]) +]) diff --git a/gnulib/m4/printf.m4 b/gnulib/m4/printf.m4 new file mode 100644 index 0000000..d75aca0 --- /dev/null +++ b/gnulib/m4/printf.m4 @@ -0,0 +1,1569 @@ +# printf.m4 serial 48 +dnl Copyright (C) 2003, 2007-2012 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. + +dnl Test whether the *printf family of functions supports the 'j', 'z', 't', +dnl 'L' size specifiers. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_printf_sizes_c99. + +AC_DEFUN([gl_PRINTF_SIZES_C99], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gl_AC_HEADER_STDINT_H]) + AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports size specifiers as in C99], + [gl_cv_func_printf_sizes_c99], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stddef.h> +#include <stdio.h> +#include <string.h> +#include <sys/types.h> +#if HAVE_STDINT_H_WITH_UINTMAX +# include <stdint.h> +#endif +#if HAVE_INTTYPES_H_WITH_UINTMAX +# include <inttypes.h> +#endif +static char buf[100]; +int main () +{ + int result = 0; +#if HAVE_STDINT_H_WITH_UINTMAX || HAVE_INTTYPES_H_WITH_UINTMAX + buf[0] = '\0'; + if (sprintf (buf, "%ju %d", (uintmax_t) 12345671, 33, 44, 55) < 0 + || strcmp (buf, "12345671 33") != 0) + result |= 1; +#endif + buf[0] = '\0'; + if (sprintf (buf, "%zu %d", (size_t) 12345672, 33, 44, 55) < 0 + || strcmp (buf, "12345672 33") != 0) + result |= 2; + buf[0] = '\0'; + if (sprintf (buf, "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55) < 0 + || strcmp (buf, "12345673 33") != 0) + result |= 4; + buf[0] = '\0'; + if (sprintf (buf, "%Lg %d", (long double) 1.5, 33, 44, 55) < 0 + || strcmp (buf, "1.5 33") != 0) + result |= 8; + return result; +}]])], + [gl_cv_func_printf_sizes_c99=yes], + [gl_cv_func_printf_sizes_c99=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_printf_sizes_c99="guessing yes";; + # Guess yes on FreeBSD >= 5. + freebsd[1-4]*) gl_cv_func_printf_sizes_c99="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_printf_sizes_c99="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_printf_sizes_c99="guessing no";; + darwin*) gl_cv_func_printf_sizes_c99="guessing yes";; + # Guess yes on OpenBSD >= 3.9. + openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) + gl_cv_func_printf_sizes_c99="guessing no";; + openbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; + # Guess yes on Solaris >= 2.10. + solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; + solaris*) gl_cv_func_printf_sizes_c99="guessing no";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_printf_sizes_c99="guessing no";; + netbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_sizes_c99="guessing no";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports 'long double' +dnl arguments together with the 'L' size specifier. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_printf_long_double. + +AC_DEFUN([gl_PRINTF_LONG_DOUBLE], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports 'long double' arguments], + [gl_cv_func_printf_long_double], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#include <string.h> +static char buf[10000]; +int main () +{ + int result = 0; + buf[0] = '\0'; + if (sprintf (buf, "%Lf %d", 1.75L, 33, 44, 55) < 0 + || strcmp (buf, "1.750000 33") != 0) + result |= 1; + buf[0] = '\0'; + if (sprintf (buf, "%Le %d", 1.75L, 33, 44, 55) < 0 + || strcmp (buf, "1.750000e+00 33") != 0) + result |= 2; + buf[0] = '\0'; + if (sprintf (buf, "%Lg %d", 1.75L, 33, 44, 55) < 0 + || strcmp (buf, "1.75 33") != 0) + result |= 4; + return result; +}]])], + [gl_cv_func_printf_long_double=yes], + [gl_cv_func_printf_long_double=no], + [ +changequote(,)dnl + case "$host_os" in + beos*) gl_cv_func_printf_long_double="guessing no";; + mingw* | pw*) gl_cv_func_printf_long_double="guessing no";; + *) gl_cv_func_printf_long_double="guessing yes";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports infinite and NaN +dnl 'double' arguments and negative zero arguments in the %f, %e, %g +dnl directives. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_printf_infinite. + +AC_DEFUN([gl_PRINTF_INFINITE], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports infinite 'double' arguments], + [gl_cv_func_printf_infinite], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#include <string.h> +static int +strisnan (const char *string, size_t start_index, size_t end_index) +{ + if (start_index < end_index) + { + if (string[start_index] == '-') + start_index++; + if (start_index + 3 <= end_index + && memcmp (string + start_index, "nan", 3) == 0) + { + start_index += 3; + if (start_index == end_index + || (string[start_index] == '(' && string[end_index - 1] == ')')) + return 1; + } + } + return 0; +} +static int +have_minus_zero () +{ + static double plus_zero = 0.0; + double minus_zero = - plus_zero; + return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0; +} +static char buf[10000]; +static double zero = 0.0; +int main () +{ + int result = 0; + if (sprintf (buf, "%f", 1.0 / zero) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + result |= 1; + if (sprintf (buf, "%f", -1.0 / zero) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + result |= 1; + if (sprintf (buf, "%f", zero / zero) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 2; + if (sprintf (buf, "%e", 1.0 / zero) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + result |= 4; + if (sprintf (buf, "%e", -1.0 / zero) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + result |= 4; + if (sprintf (buf, "%e", zero / zero) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 8; + if (sprintf (buf, "%g", 1.0 / zero) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + result |= 16; + if (sprintf (buf, "%g", -1.0 / zero) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + result |= 16; + if (sprintf (buf, "%g", zero / zero) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 32; + /* This test fails on HP-UX 10.20. */ + if (have_minus_zero ()) + if (sprintf (buf, "%g", - zero) < 0 + || strcmp (buf, "-0") != 0) + result |= 64; + return result; +}]])], + [gl_cv_func_printf_infinite=yes], + [gl_cv_func_printf_infinite=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on FreeBSD >= 6. + freebsd[1-5]*) gl_cv_func_printf_infinite="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_printf_infinite="guessing no";; + darwin*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on HP-UX >= 11. + hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite="guessing no";; + hpux*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_printf_infinite="guessing no";; + netbsd*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_printf_infinite="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_infinite="guessing no";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports infinite and NaN +dnl 'long double' arguments in the %f, %e, %g directives. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_printf_infinite_long_double. + +AC_DEFUN([gl_PRINTF_INFINITE_LONG_DOUBLE], +[ + AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gl_BIGENDIAN]) + AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + dnl The user can set or unset the variable gl_printf_safe to indicate + dnl that he wishes a safe handling of non-IEEE-754 'long double' values. + if test -n "$gl_printf_safe"; then + AC_DEFINE([CHECK_PRINTF_SAFE], [1], + [Define if you wish *printf() functions that have a safe handling of + non-IEEE-754 'long double' values.]) + fi + case "$gl_cv_func_printf_long_double" in + *yes) + AC_CACHE_CHECK([whether printf supports infinite 'long double' arguments], + [gl_cv_func_printf_infinite_long_double], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +]GL_NOCRASH[ +#include <float.h> +#include <stdio.h> +#include <string.h> +static int +strisnan (const char *string, size_t start_index, size_t end_index) +{ + if (start_index < end_index) + { + if (string[start_index] == '-') + start_index++; + if (start_index + 3 <= end_index + && memcmp (string + start_index, "nan", 3) == 0) + { + start_index += 3; + if (start_index == end_index + || (string[start_index] == '(' && string[end_index - 1] == ')')) + return 1; + } + } + return 0; +} +static char buf[10000]; +static long double zeroL = 0.0L; +int main () +{ + int result = 0; + nocrash_init(); + if (sprintf (buf, "%Lf", 1.0L / zeroL) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + result |= 1; + if (sprintf (buf, "%Lf", -1.0L / zeroL) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + result |= 1; + if (sprintf (buf, "%Lf", zeroL / zeroL) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 1; + if (sprintf (buf, "%Le", 1.0L / zeroL) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + result |= 1; + if (sprintf (buf, "%Le", -1.0L / zeroL) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + result |= 1; + if (sprintf (buf, "%Le", zeroL / zeroL) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 1; + if (sprintf (buf, "%Lg", 1.0L / zeroL) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + result |= 1; + if (sprintf (buf, "%Lg", -1.0L / zeroL) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + result |= 1; + if (sprintf (buf, "%Lg", zeroL / zeroL) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 1; +#if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE +/* Representation of an 80-bit 'long double' as an initializer for a sequence + of 'unsigned int' words. */ +# ifdef WORDS_BIGENDIAN +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ + ((unsigned int) (manthi) << 16) | (unsigned int) (mantlo) >> 16), \ + (unsigned int) (mantlo) << 16 \ + } +# else +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { mantlo, manthi, exponent } +# endif + { /* Quiet NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 2; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 2; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 2; + } + { + /* Signalling NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 2; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 2; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 2; + } + { /* Pseudo-NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 4; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 4; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 4; + } + { /* Pseudo-Infinity. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 8; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 8; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 8; + } + { /* Pseudo-Zero. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 16; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 16; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 16; + } + { /* Unnormalized number. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 32; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 32; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 32; + } + { /* Pseudo-Denormal. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 64; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 64; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 64; + } +#endif + return result; +}]])], + [gl_cv_func_printf_infinite_long_double=yes], + [gl_cv_func_printf_infinite_long_double=no], + [ +changequote(,)dnl + case "$host_cpu" in + # Guess no on ia64, x86_64, i386. + ia64 | x86_64 | i*86) gl_cv_func_printf_infinite_long_double="guessing no";; + *) + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_printf_infinite_long_double="guessing yes";; + # Guess yes on FreeBSD >= 6. + freebsd[1-5]*) gl_cv_func_printf_infinite_long_double="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; + # Guess yes on HP-UX >= 11. + hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite_long_double="guessing no";; + hpux*) gl_cv_func_printf_infinite_long_double="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_infinite_long_double="guessing no";; + esac + ;; + esac +changequote([,])dnl + ]) + ]) + ;; + *) + gl_cv_func_printf_infinite_long_double="irrelevant" + ;; + esac +]) + +dnl Test whether the *printf family of functions supports the 'a' and 'A' +dnl conversion specifier for hexadecimal output of floating-point numbers. +dnl (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_printf_directive_a. + +AC_DEFUN([gl_PRINTF_DIRECTIVE_A], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports the 'a' and 'A' directives], + [gl_cv_func_printf_directive_a], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#include <string.h> +static char buf[100]; +static double zero = 0.0; +int main () +{ + int result = 0; + if (sprintf (buf, "%a %d", 3.1416015625, 33, 44, 55) < 0 + || (strcmp (buf, "0x1.922p+1 33") != 0 + && strcmp (buf, "0x3.244p+0 33") != 0 + && strcmp (buf, "0x6.488p-1 33") != 0 + && strcmp (buf, "0xc.91p-2 33") != 0)) + result |= 1; + if (sprintf (buf, "%A %d", -3.1416015625, 33, 44, 55) < 0 + || (strcmp (buf, "-0X1.922P+1 33") != 0 + && strcmp (buf, "-0X3.244P+0 33") != 0 + && strcmp (buf, "-0X6.488P-1 33") != 0 + && strcmp (buf, "-0XC.91P-2 33") != 0)) + result |= 2; + /* This catches a FreeBSD 6.1 bug: it doesn't round. */ + if (sprintf (buf, "%.2a %d", 1.51, 33, 44, 55) < 0 + || (strcmp (buf, "0x1.83p+0 33") != 0 + && strcmp (buf, "0x3.05p-1 33") != 0 + && strcmp (buf, "0x6.0ap-2 33") != 0 + && strcmp (buf, "0xc.14p-3 33") != 0)) + result |= 4; + /* This catches a FreeBSD 6.1 bug. See + <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */ + if (sprintf (buf, "%010a %d", 1.0 / zero, 33, 44, 55) < 0 + || buf[0] == '0') + result |= 8; + /* This catches a MacOS X 10.3.9 (Darwin 7.9) bug. */ + if (sprintf (buf, "%.1a", 1.999) < 0 + || (strcmp (buf, "0x1.0p+1") != 0 + && strcmp (buf, "0x2.0p+0") != 0 + && strcmp (buf, "0x4.0p-1") != 0 + && strcmp (buf, "0x8.0p-2") != 0)) + result |= 16; + /* This catches the same MacOS X 10.3.9 (Darwin 7.9) bug and also a + glibc 2.4 bug <http://sourceware.org/bugzilla/show_bug.cgi?id=2908>. */ + if (sprintf (buf, "%.1La", 1.999L) < 0 + || (strcmp (buf, "0x1.0p+1") != 0 + && strcmp (buf, "0x2.0p+0") != 0 + && strcmp (buf, "0x4.0p-1") != 0 + && strcmp (buf, "0x8.0p-2") != 0)) + result |= 32; + return result; +}]])], + [gl_cv_func_printf_directive_a=yes], + [gl_cv_func_printf_directive_a=no], + [ + case "$host_os" in + # Guess yes on glibc >= 2.5 systems. + *-gnu*) + AC_EGREP_CPP([BZ2908], [ + #include <features.h> + #ifdef __GNU_LIBRARY__ + #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 5) || (__GLIBC__ > 2)) && !defined __UCLIBC__ + BZ2908 + #endif + #endif + ], + [gl_cv_func_printf_directive_a="guessing yes"], + [gl_cv_func_printf_directive_a="guessing no"]) + ;; + # If we don't know, assume the worst. + *) gl_cv_func_printf_directive_a="guessing no";; + esac + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports the %F format +dnl directive. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_printf_directive_f. + +AC_DEFUN([gl_PRINTF_DIRECTIVE_F], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports the 'F' directive], + [gl_cv_func_printf_directive_f], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#include <string.h> +static char buf[100]; +static double zero = 0.0; +int main () +{ + int result = 0; + if (sprintf (buf, "%F %d", 1234567.0, 33, 44, 55) < 0 + || strcmp (buf, "1234567.000000 33") != 0) + result |= 1; + if (sprintf (buf, "%F", 1.0 / zero) < 0 + || (strcmp (buf, "INF") != 0 && strcmp (buf, "INFINITY") != 0)) + result |= 2; + /* This catches a Cygwin 1.5.x bug. */ + if (sprintf (buf, "%.F", 1234.0) < 0 + || strcmp (buf, "1234") != 0) + result |= 4; + return result; +}]])], + [gl_cv_func_printf_directive_f=yes], + [gl_cv_func_printf_directive_f=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_printf_directive_f="guessing yes";; + # Guess yes on FreeBSD >= 6. + freebsd[1-5]*) gl_cv_func_printf_directive_f="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_printf_directive_f="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_printf_directive_f="guessing no";; + darwin*) gl_cv_func_printf_directive_f="guessing yes";; + # Guess yes on Solaris >= 2.10. + solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; + solaris*) gl_cv_func_printf_sizes_c99="guessing no";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_directive_f="guessing no";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports the %n format +dnl directive. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_printf_directive_n. + +AC_DEFUN([gl_PRINTF_DIRECTIVE_N], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports the 'n' directive], + [gl_cv_func_printf_directive_n], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#ifdef _MSC_VER +/* See page about "Parameter Validation" on msdn.microsoft.com. */ +static void cdecl +invalid_parameter_handler (const wchar_t *expression, + const wchar_t *function, + const wchar_t *file, unsigned int line, + uintptr_t dummy) +{ + exit (1); +} +#endif +static char fmtstring[10]; +static char buf[100]; +int main () +{ + int count = -1; +#ifdef _MSC_VER + _set_invalid_parameter_handler (invalid_parameter_handler); +#endif + /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) + support %n in format strings in read-only memory but not in writable + memory. */ + strcpy (fmtstring, "%d %n"); + if (sprintf (buf, fmtstring, 123, &count, 33, 44, 55) < 0 + || strcmp (buf, "123 ") != 0 + || count != 4) + return 1; + return 0; +}]])], + [gl_cv_func_printf_directive_n=yes], + [gl_cv_func_printf_directive_n=no], + [ +changequote(,)dnl + case "$host_os" in + mingw*) gl_cv_func_printf_directive_n="guessing no";; + *) gl_cv_func_printf_directive_n="guessing yes";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports the %ls format +dnl directive and in particular, when a precision is specified, whether +dnl the functions stop converting the wide string argument when the number +dnl of bytes that have been produced by this conversion equals or exceeds +dnl the precision. +dnl Result is gl_cv_func_printf_directive_ls. + +AC_DEFUN([gl_PRINTF_DIRECTIVE_LS], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports the 'ls' directive], + [gl_cv_func_printf_directive_ls], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +#include <string.h> +int main () +{ + int result = 0; + char buf[100]; + /* Test whether %ls works at all. + This test fails on OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku, but not on + Cygwin 1.5. */ + { + static const wchar_t wstring[] = { 'a', 'b', 'c', 0 }; + buf[0] = '\0'; + if (sprintf (buf, "%ls", wstring) < 0 + || strcmp (buf, "abc") != 0) + result |= 1; + } + /* This test fails on IRIX 6.5, Solaris 2.6, Cygwin 1.5, Haiku (with an + assertion failure inside libc), but not on OpenBSD 4.0. */ + { + static const wchar_t wstring[] = { 'a', 0 }; + buf[0] = '\0'; + if (sprintf (buf, "%ls", wstring) < 0 + || strcmp (buf, "a") != 0) + result |= 2; + } + /* Test whether precisions in %ls are supported as specified in ISO C 99 + section 7.19.6.1: + "If a precision is specified, no more than that many bytes are written + (including shift sequences, if any), and the array shall contain a + null wide character if, to equal the multibyte character sequence + length given by the precision, the function would need to access a + wide character one past the end of the array." + This test fails on Solaris 10. */ + { + static const wchar_t wstring[] = { 'a', 'b', (wchar_t) 0xfdfdfdfd, 0 }; + buf[0] = '\0'; + if (sprintf (buf, "%.2ls", wstring) < 0 + || strcmp (buf, "ab") != 0) + result |= 8; + } + return result; +}]])], + [gl_cv_func_printf_directive_ls=yes], + [gl_cv_func_printf_directive_ls=no], + [ +changequote(,)dnl + case "$host_os" in + openbsd*) gl_cv_func_printf_directive_ls="guessing no";; + irix*) gl_cv_func_printf_directive_ls="guessing no";; + solaris*) gl_cv_func_printf_directive_ls="guessing no";; + cygwin*) gl_cv_func_printf_directive_ls="guessing no";; + beos* | haiku*) gl_cv_func_printf_directive_ls="guessing no";; + *) gl_cv_func_printf_directive_ls="guessing yes";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports POSIX/XSI format +dnl strings with positions. (POSIX:2001) +dnl Result is gl_cv_func_printf_positions. + +AC_DEFUN([gl_PRINTF_POSITIONS], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports POSIX/XSI format strings with positions], + [gl_cv_func_printf_positions], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#include <string.h> +/* The string "%2$d %1$d", with dollar characters protected from the shell's + dollar expansion (possibly an autoconf bug). */ +static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; +static char buf[100]; +int main () +{ + sprintf (buf, format, 33, 55); + return (strcmp (buf, "55 33") != 0); +}]])], + [gl_cv_func_printf_positions=yes], + [gl_cv_func_printf_positions=no], + [ +changequote(,)dnl + case "$host_os" in + netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*) + gl_cv_func_printf_positions="guessing no";; + beos*) gl_cv_func_printf_positions="guessing no";; + mingw* | pw*) gl_cv_func_printf_positions="guessing no";; + *) gl_cv_func_printf_positions="guessing yes";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports POSIX/XSI format +dnl strings with the ' flag for grouping of decimal digits. (POSIX:2001) +dnl Result is gl_cv_func_printf_flag_grouping. + +AC_DEFUN([gl_PRINTF_FLAG_GROUPING], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports the grouping flag], + [gl_cv_func_printf_flag_grouping], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#include <string.h> +static char buf[100]; +int main () +{ + if (sprintf (buf, "%'d %d", 1234567, 99) < 0 + || buf[strlen (buf) - 1] != '9') + return 1; + return 0; +}]])], + [gl_cv_func_printf_flag_grouping=yes], + [gl_cv_func_printf_flag_grouping=no], + [ +changequote(,)dnl + case "$host_os" in + cygwin*) gl_cv_func_printf_flag_grouping="guessing no";; + netbsd*) gl_cv_func_printf_flag_grouping="guessing no";; + mingw* | pw*) gl_cv_func_printf_flag_grouping="guessing no";; + *) gl_cv_func_printf_flag_grouping="guessing yes";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports the - flag correctly. +dnl (ISO C99.) See +dnl <http://lists.gnu.org/archive/html/bug-coreutils/2008-02/msg00035.html> +dnl Result is gl_cv_func_printf_flag_leftadjust. + +AC_DEFUN([gl_PRINTF_FLAG_LEFTADJUST], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports the left-adjust flag correctly], + [gl_cv_func_printf_flag_leftadjust], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#include <string.h> +static char buf[100]; +int main () +{ + /* Check that a '-' flag is not annihilated by a negative width. */ + if (sprintf (buf, "a%-*sc", -3, "b") < 0 + || strcmp (buf, "ab c") != 0) + return 1; + return 0; +}]])], + [gl_cv_func_printf_flag_leftadjust=yes], + [gl_cv_func_printf_flag_leftadjust=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on HP-UX 11. + hpux11*) gl_cv_func_printf_flag_leftadjust="guessing yes";; + # Guess no on HP-UX 10 and older. + hpux*) gl_cv_func_printf_flag_leftadjust="guessing no";; + # Guess yes otherwise. + *) gl_cv_func_printf_flag_leftadjust="guessing yes";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports padding of non-finite +dnl values with the 0 flag correctly. (ISO C99 + TC1 + TC2.) See +dnl <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> +dnl Result is gl_cv_func_printf_flag_zero. + +AC_DEFUN([gl_PRINTF_FLAG_ZERO], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports the zero flag correctly], + [gl_cv_func_printf_flag_zero], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#include <string.h> +static char buf[100]; +static double zero = 0.0; +int main () +{ + if (sprintf (buf, "%010f", 1.0 / zero, 33, 44, 55) < 0 + || (strcmp (buf, " inf") != 0 + && strcmp (buf, " infinity") != 0)) + return 1; + return 0; +}]])], + [gl_cv_func_printf_flag_zero=yes], + [gl_cv_func_printf_flag_zero=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_printf_flag_zero="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_printf_flag_zero="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_flag_zero="guessing no";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports large precisions. +dnl On mingw, precisions larger than 512 are treated like 512, in integer, +dnl floating-point or pointer output. On Solaris 10/x86, precisions larger +dnl than 510 in floating-point output crash the program. On Solaris 10/SPARC, +dnl precisions larger than 510 in floating-point output yield wrong results. +dnl On AIX 7.1, precisions larger than 998 in floating-point output yield +dnl wrong results. On BeOS, precisions larger than 1044 crash the program. +dnl Result is gl_cv_func_printf_precision. + +AC_DEFUN([gl_PRINTF_PRECISION], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports large precisions], + [gl_cv_func_printf_precision], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#include <string.h> +static char buf[5000]; +int main () +{ + int result = 0; +#ifdef __BEOS__ + /* On BeOS, this would crash and show a dialog box. Avoid the crash. */ + return 1; +#endif + if (sprintf (buf, "%.4000d %d", 1, 33, 44) < 4000 + 3) + result |= 1; + if (sprintf (buf, "%.4000f %d", 1.0, 33, 44) < 4000 + 5) + result |= 2; + if (sprintf (buf, "%.511f %d", 1.0, 33, 44) < 511 + 5 + || buf[0] != '1') + result |= 4; + if (sprintf (buf, "%.999f %d", 1.0, 33, 44) < 999 + 5 + || buf[0] != '1') + result |= 4; + return result; +}]])], + [gl_cv_func_printf_precision=yes], + [gl_cv_func_printf_precision=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess no only on Solaris, native Windows, and BeOS systems. + solaris*) gl_cv_func_printf_precision="guessing no" ;; + mingw* | pw*) gl_cv_func_printf_precision="guessing no" ;; + beos*) gl_cv_func_printf_precision="guessing no" ;; + *) gl_cv_func_printf_precision="guessing yes" ;; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions recovers gracefully in case +dnl of an out-of-memory condition, or whether it crashes the entire program. +dnl Result is gl_cv_func_printf_enomem. + +AC_DEFUN([gl_PRINTF_ENOMEM], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gl_MULTIARCH]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf survives out-of-memory conditions], + [gl_cv_func_printf_enomem], + [ + gl_cv_func_printf_enomem="guessing no" + if test "$cross_compiling" = no; then + if test $APPLE_UNIVERSAL_BUILD = 0; then + AC_LANG_CONFTEST([AC_LANG_SOURCE([ +]GL_NOCRASH[ +changequote(,)dnl +#include <stdio.h> +#include <sys/types.h> +#include <sys/time.h> +#include <sys/resource.h> +#include <errno.h> +int main() +{ + struct rlimit limit; + int ret; + nocrash_init (); + /* Some printf implementations allocate temporary space with malloc. */ + /* On BSD systems, malloc() is limited by RLIMIT_DATA. */ +#ifdef RLIMIT_DATA + if (getrlimit (RLIMIT_DATA, &limit) < 0) + return 77; + if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) + limit.rlim_max = 5000000; + limit.rlim_cur = limit.rlim_max; + if (setrlimit (RLIMIT_DATA, &limit) < 0) + return 77; +#endif + /* On Linux systems, malloc() is limited by RLIMIT_AS. */ +#ifdef RLIMIT_AS + if (getrlimit (RLIMIT_AS, &limit) < 0) + return 77; + if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) + limit.rlim_max = 5000000; + limit.rlim_cur = limit.rlim_max; + if (setrlimit (RLIMIT_AS, &limit) < 0) + return 77; +#endif + /* Some printf implementations allocate temporary space on the stack. */ +#ifdef RLIMIT_STACK + if (getrlimit (RLIMIT_STACK, &limit) < 0) + return 77; + if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) + limit.rlim_max = 5000000; + limit.rlim_cur = limit.rlim_max; + if (setrlimit (RLIMIT_STACK, &limit) < 0) + return 77; +#endif + ret = printf ("%.5000000f", 1.0); + return !(ret == 5000002 || (ret < 0 && errno == ENOMEM)); +} +changequote([,])dnl + ])]) + if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then + (./conftest + result=$? + if test $result != 0 && test $result != 77; then result=1; fi + exit $result + ) >/dev/null 2>/dev/null + case $? in + 0) gl_cv_func_printf_enomem="yes" ;; + 77) gl_cv_func_printf_enomem="guessing no" ;; + *) gl_cv_func_printf_enomem="no" ;; + esac + else + gl_cv_func_printf_enomem="guessing no" + fi + rm -fr conftest* + else + dnl A universal build on Apple MacOS X platforms. + dnl The result would be 'no' in 32-bit mode and 'yes' in 64-bit mode. + dnl But we need a configuration result that is valid in both modes. + gl_cv_func_printf_enomem="guessing no" + fi + fi + if test "$gl_cv_func_printf_enomem" = "guessing no"; then +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on Solaris. + solaris*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on AIX. + aix*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on HP-UX/hppa. + hpux*) case "$host_cpu" in + hppa*) gl_cv_func_printf_enomem="guessing yes";; + *) gl_cv_func_printf_enomem="guessing no";; + esac + ;; + # Guess yes on IRIX. + irix*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on OSF/1. + osf*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on Haiku. + haiku*) gl_cv_func_printf_enomem="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_enomem="guessing no";; + esac +changequote([,])dnl + fi + ]) +]) + +dnl Test whether the snprintf function exists. (ISO C99, POSIX:2001) +dnl Result is ac_cv_func_snprintf. + +AC_DEFUN([gl_SNPRINTF_PRESENCE], +[ + AC_CHECK_FUNCS_ONCE([snprintf]) +]) + +dnl Test whether the string produced by the snprintf function is always NUL +dnl terminated. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_snprintf_truncation_c99. + +AC_DEFUN([gl_SNPRINTF_TRUNCATION_C99], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_REQUIRE([gl_SNPRINTF_PRESENCE]) + AC_CACHE_CHECK([whether snprintf truncates the result as in C99], + [gl_cv_func_snprintf_truncation_c99], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#include <string.h> +#if HAVE_SNPRINTF +# define my_snprintf snprintf +#else +# include <stdarg.h> +static int my_snprintf (char *buf, int size, const char *format, ...) +{ + va_list args; + int ret; + va_start (args, format); + ret = vsnprintf (buf, size, format, args); + va_end (args); + return ret; +} +#endif +static char buf[100]; +int main () +{ + strcpy (buf, "ABCDEF"); + my_snprintf (buf, 3, "%d %d", 4567, 89); + if (memcmp (buf, "45\0DEF", 6) != 0) + return 1; + return 0; +}]])], + [gl_cv_func_snprintf_truncation_c99=yes], + [gl_cv_func_snprintf_truncation_c99=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on FreeBSD >= 5. + freebsd[1-4]*) gl_cv_func_snprintf_truncation_c99="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_snprintf_truncation_c99="guessing no";; + darwin*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on OpenBSD >= 3.9. + openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) + gl_cv_func_snprintf_truncation_c99="guessing no";; + openbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on Solaris >= 2.6. + solaris2.[0-5] | solaris2.[0-5].*) + gl_cv_func_snprintf_truncation_c99="guessing no";; + solaris*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on AIX >= 4. + aix[1-3]*) gl_cv_func_snprintf_truncation_c99="guessing no";; + aix*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on HP-UX >= 11. + hpux[7-9]* | hpux10*) gl_cv_func_snprintf_truncation_c99="guessing no";; + hpux*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on IRIX >= 6.5. + irix6.5) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on OSF/1 >= 5. + osf[3-4]*) gl_cv_func_snprintf_truncation_c99="guessing no";; + osf*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_snprintf_truncation_c99="guessing no";; + netbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_snprintf_truncation_c99="guessing no";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the return value of the snprintf function is the number +dnl of bytes (excluding the terminating NUL) that would have been produced +dnl if the buffer had been large enough. (ISO C99, POSIX:2001) +dnl For example, this test program fails on IRIX 6.5: +dnl --------------------------------------------------------------------- +dnl #include <stdio.h> +dnl int main() +dnl { +dnl static char buf[8]; +dnl int retval = snprintf (buf, 3, "%d", 12345); +dnl return retval >= 0 && retval < 3; +dnl } +dnl --------------------------------------------------------------------- +dnl Result is gl_cv_func_snprintf_retval_c99. + +AC_DEFUN_ONCE([gl_SNPRINTF_RETVAL_C99], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_REQUIRE([gl_SNPRINTF_PRESENCE]) + AC_CACHE_CHECK([whether snprintf returns a byte count as in C99], + [gl_cv_func_snprintf_retval_c99], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#include <string.h> +#if HAVE_SNPRINTF +# define my_snprintf snprintf +#else +# include <stdarg.h> +static int my_snprintf (char *buf, int size, const char *format, ...) +{ + va_list args; + int ret; + va_start (args, format); + ret = vsnprintf (buf, size, format, args); + va_end (args); + return ret; +} +#endif +static char buf[100]; +int main () +{ + strcpy (buf, "ABCDEF"); + if (my_snprintf (buf, 3, "%d %d", 4567, 89) != 7) + return 1; + if (my_snprintf (buf, 0, "%d %d", 4567, 89) != 7) + return 2; + if (my_snprintf (NULL, 0, "%d %d", 4567, 89) != 7) + return 3; + return 0; +}]])], + [gl_cv_func_snprintf_retval_c99=yes], + [gl_cv_func_snprintf_retval_c99=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on FreeBSD >= 5. + freebsd[1-4]*) gl_cv_func_snprintf_retval_c99="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_snprintf_retval_c99="guessing no";; + darwin*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on OpenBSD >= 3.9. + openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) + gl_cv_func_snprintf_retval_c99="guessing no";; + openbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on Solaris >= 2.10. + solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; + solaris*) gl_cv_func_printf_sizes_c99="guessing no";; + # Guess yes on AIX >= 4. + aix[1-3]*) gl_cv_func_snprintf_retval_c99="guessing no";; + aix*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_snprintf_retval_c99="guessing no";; + netbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_snprintf_retval_c99="guessing no";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the snprintf function supports the %n format directive +dnl also in truncated portions of the format string. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_snprintf_directive_n. + +AC_DEFUN([gl_SNPRINTF_DIRECTIVE_N], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_REQUIRE([gl_SNPRINTF_PRESENCE]) + AC_CACHE_CHECK([whether snprintf fully supports the 'n' directive], + [gl_cv_func_snprintf_directive_n], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#include <string.h> +#if HAVE_SNPRINTF +# define my_snprintf snprintf +#else +# include <stdarg.h> +static int my_snprintf (char *buf, int size, const char *format, ...) +{ + va_list args; + int ret; + va_start (args, format); + ret = vsnprintf (buf, size, format, args); + va_end (args); + return ret; +} +#endif +static char fmtstring[10]; +static char buf[100]; +int main () +{ + int count = -1; + /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) + support %n in format strings in read-only memory but not in writable + memory. */ + strcpy (fmtstring, "%d %n"); + my_snprintf (buf, 4, fmtstring, 12345, &count, 33, 44, 55); + if (count != 6) + return 1; + return 0; +}]])], + [gl_cv_func_snprintf_directive_n=yes], + [gl_cv_func_snprintf_directive_n=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on FreeBSD >= 5. + freebsd[1-4]*) gl_cv_func_snprintf_directive_n="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_snprintf_directive_n="guessing no";; + darwin*) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on Solaris >= 2.6. + solaris2.[0-5] | solaris2.[0-5].*) + gl_cv_func_snprintf_directive_n="guessing no";; + solaris*) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on AIX >= 4. + aix[1-3]*) gl_cv_func_snprintf_directive_n="guessing no";; + aix*) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on IRIX >= 6.5. + irix6.5) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on OSF/1 >= 5. + osf[3-4]*) gl_cv_func_snprintf_directive_n="guessing no";; + osf*) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_snprintf_directive_n="guessing no";; + netbsd*) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_snprintf_directive_n="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_snprintf_directive_n="guessing no";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the snprintf function, when passed a size = 1, writes any +dnl output without bounds in this case, behaving like sprintf. This is the +dnl case on Linux libc5. +dnl Result is gl_cv_func_snprintf_size1. + +AC_DEFUN([gl_SNPRINTF_SIZE1], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gl_SNPRINTF_PRESENCE]) + AC_CACHE_CHECK([whether snprintf respects a size of 1], + [gl_cv_func_snprintf_size1], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#if HAVE_SNPRINTF +# define my_snprintf snprintf +#else +# include <stdarg.h> +static int my_snprintf (char *buf, int size, const char *format, ...) +{ + va_list args; + int ret; + va_start (args, format); + ret = vsnprintf (buf, size, format, args); + va_end (args); + return ret; +} +#endif +int main() +{ + static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; + my_snprintf (buf, 1, "%d", 12345); + return buf[1] != 'E'; +}]])], + [gl_cv_func_snprintf_size1=yes], + [gl_cv_func_snprintf_size1=no], + [gl_cv_func_snprintf_size1="guessing yes"]) + ]) +]) + +dnl Test whether the vsnprintf function, when passed a zero size, produces no +dnl output. (ISO C99, POSIX:2001) +dnl For example, snprintf nevertheless writes a NUL byte in this case +dnl on OSF/1 5.1: +dnl --------------------------------------------------------------------- +dnl #include <stdio.h> +dnl int main() +dnl { +dnl static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; +dnl snprintf (buf, 0, "%d", 12345); +dnl return buf[0] != 'D'; +dnl } +dnl --------------------------------------------------------------------- +dnl And vsnprintf writes any output without bounds in this case, behaving like +dnl vsprintf, on HP-UX 11 and OSF/1 5.1: +dnl --------------------------------------------------------------------- +dnl #include <stdarg.h> +dnl #include <stdio.h> +dnl static int my_snprintf (char *buf, int size, const char *format, ...) +dnl { +dnl va_list args; +dnl int ret; +dnl va_start (args, format); +dnl ret = vsnprintf (buf, size, format, args); +dnl va_end (args); +dnl return ret; +dnl } +dnl int main() +dnl { +dnl static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; +dnl my_snprintf (buf, 0, "%d", 12345); +dnl return buf[0] != 'D'; +dnl } +dnl --------------------------------------------------------------------- +dnl Result is gl_cv_func_vsnprintf_zerosize_c99. + +AC_DEFUN([gl_VSNPRINTF_ZEROSIZE_C99], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether vsnprintf respects a zero size as in C99], + [gl_cv_func_vsnprintf_zerosize_c99], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdarg.h> +#include <stdio.h> +static int my_snprintf (char *buf, int size, const char *format, ...) +{ + va_list args; + int ret; + va_start (args, format); + ret = vsnprintf (buf, size, format, args); + va_end (args); + return ret; +} +int main() +{ + static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; + my_snprintf (buf, 0, "%d", 12345); + return buf[0] != 'D'; +}]])], + [gl_cv_func_vsnprintf_zerosize_c99=yes], + [gl_cv_func_vsnprintf_zerosize_c99=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on FreeBSD >= 5. + freebsd[1-4]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; + darwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on Cygwin. + cygwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on Solaris >= 2.6. + solaris2.[0-5] | solaris2.[0-5].*) + gl_cv_func_vsnprintf_zerosize_c99="guessing no";; + solaris*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on AIX >= 4. + aix[1-3]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; + aix*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on IRIX >= 6.5. + irix6.5) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_vsnprintf_zerosize_c99="guessing no";; + netbsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on mingw. + mingw* | pw*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl The results of these tests on various platforms are: +dnl +dnl 1 = gl_PRINTF_SIZES_C99 +dnl 2 = gl_PRINTF_LONG_DOUBLE +dnl 3 = gl_PRINTF_INFINITE +dnl 4 = gl_PRINTF_INFINITE_LONG_DOUBLE +dnl 5 = gl_PRINTF_DIRECTIVE_A +dnl 6 = gl_PRINTF_DIRECTIVE_F +dnl 7 = gl_PRINTF_DIRECTIVE_N +dnl 8 = gl_PRINTF_DIRECTIVE_LS +dnl 9 = gl_PRINTF_POSITIONS +dnl 10 = gl_PRINTF_FLAG_GROUPING +dnl 11 = gl_PRINTF_FLAG_LEFTADJUST +dnl 12 = gl_PRINTF_FLAG_ZERO +dnl 13 = gl_PRINTF_PRECISION +dnl 14 = gl_PRINTF_ENOMEM +dnl 15 = gl_SNPRINTF_PRESENCE +dnl 16 = gl_SNPRINTF_TRUNCATION_C99 +dnl 17 = gl_SNPRINTF_RETVAL_C99 +dnl 18 = gl_SNPRINTF_DIRECTIVE_N +dnl 19 = gl_SNPRINTF_SIZE1 +dnl 20 = gl_VSNPRINTF_ZEROSIZE_C99 +dnl +dnl 1 = checking whether printf supports size specifiers as in C99... +dnl 2 = checking whether printf supports 'long double' arguments... +dnl 3 = checking whether printf supports infinite 'double' arguments... +dnl 4 = checking whether printf supports infinite 'long double' arguments... +dnl 5 = checking whether printf supports the 'a' and 'A' directives... +dnl 6 = checking whether printf supports the 'F' directive... +dnl 7 = checking whether printf supports the 'n' directive... +dnl 8 = checking whether printf supports the 'ls' directive... +dnl 9 = checking whether printf supports POSIX/XSI format strings with positions... +dnl 10 = checking whether printf supports the grouping flag... +dnl 11 = checking whether printf supports the left-adjust flag correctly... +dnl 12 = checking whether printf supports the zero flag correctly... +dnl 13 = checking whether printf supports large precisions... +dnl 14 = checking whether printf survives out-of-memory conditions... +dnl 15 = checking for snprintf... +dnl 16 = checking whether snprintf truncates the result as in C99... +dnl 17 = checking whether snprintf returns a byte count as in C99... +dnl 18 = checking whether snprintf fully supports the 'n' directive... +dnl 19 = checking whether snprintf respects a size of 1... +dnl 20 = checking whether vsnprintf respects a zero size as in C99... +dnl +dnl . = yes, # = no. +dnl +dnl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 +dnl glibc 2.5 . . . . . . . . . . . . . . . . . . . . +dnl glibc 2.3.6 . . . . # . . . . . . . . . . . . . . . +dnl FreeBSD 5.4, 6.1 . . . . # . . . . . . # . # . . . . . . +dnl MacOS X 10.5.8 . . . # # . . . . . . # . . . . . . . . +dnl MacOS X 10.3.9 . . . . # . . . . . . # . # . . . . . . +dnl OpenBSD 3.9, 4.0 . . # # # # . # . # . # . # . . . . . . +dnl Cygwin 1.7.0 (2009) . . . # . . . ? . . . . . ? . . . . . . +dnl Cygwin 1.5.25 (2008) . . . # # . . # . . . . . # . . . . . . +dnl Cygwin 1.5.19 (2006) # . . # # # . # . # . # # # . . . . . . +dnl Solaris 11 2011-11 . . # # # . . # . . . # . . . . . . . . +dnl Solaris 10 . . # # # . . # . . . # # . . . . . . . +dnl Solaris 2.6 ... 9 # . # # # # . # . . . # # . . . # . . . +dnl Solaris 2.5.1 # . # # # # . # . . . # . . # # # # # # +dnl AIX 7.1 . . # # # . . . . . . # # . . . . . . . +dnl AIX 5.2 . . # # # . . . . . . # . . . . . . . . +dnl AIX 4.3.2, 5.1 # . # # # # . . . . . # . . . . # . . . +dnl HP-UX 11.31 . . . . # . . . . . . # . . . . # # . . +dnl HP-UX 11.{00,11,23} # . . . # # . . . . . # . . . . # # . # +dnl HP-UX 10.20 # . # . # # . ? . . # # . . . . # # ? # +dnl IRIX 6.5 # . # # # # . # . . . # . . . . # . . . +dnl OSF/1 5.1 # . # # # # . . . . . # . . . . # . . # +dnl OSF/1 4.0d # . # # # # . . . . . # . . # # # # # # +dnl NetBSD 5.0 . . . # # . . . . . . # . # . . . . . . +dnl NetBSD 4.0 . ? ? ? ? ? . ? . ? ? ? ? ? . . . ? ? ? +dnl NetBSD 3.0 . . . . # # . ? # # ? # . # . . . . . . +dnl Haiku . . . # # # . # . . . . . ? . . ? . . . +dnl BeOS # # . # # # . ? # . ? . # ? . . ? . . . +dnl old mingw / msvcrt # # # # # # . . # # . # # ? . # # # . . +dnl MSVC 9 # # # # # # # . # # . # # ? # # # # . . +dnl mingw 2009-2011 . # . # . . . . # # . . . ? . . . . . . +dnl mingw-w64 2011 # # # # # # . . # # . # # ? . # # # . . diff --git a/gnulib/m4/rawmemchr.m4 b/gnulib/m4/rawmemchr.m4 new file mode 100644 index 0000000..1930164 --- /dev/null +++ b/gnulib/m4/rawmemchr.m4 @@ -0,0 +1,20 @@ +# rawmemchr.m4 serial 2 +dnl Copyright (C) 2003, 2007-2012 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_RAWMEMCHR], +[ + dnl Persuade glibc <string.h> to declare rawmemchr(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + AC_CHECK_FUNCS([rawmemchr]) + if test $ac_cv_func_rawmemchr = no; then + HAVE_RAWMEMCHR=0 + fi +]) + +# Prerequisites of lib/strchrnul.c. +AC_DEFUN([gl_PREREQ_RAWMEMCHR], [:]) diff --git a/gnulib/m4/size_max.m4 b/gnulib/m4/size_max.m4 new file mode 100644 index 0000000..5a8162b --- /dev/null +++ b/gnulib/m4/size_max.m4 @@ -0,0 +1,79 @@ +# size_max.m4 serial 10 +dnl Copyright (C) 2003, 2005-2006, 2008-2012 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. + +dnl From Bruno Haible. + +AC_DEFUN([gl_SIZE_MAX], +[ + AC_CHECK_HEADERS([stdint.h]) + dnl First test whether the system already has SIZE_MAX. + AC_CACHE_CHECK([for SIZE_MAX], [gl_cv_size_max], [ + gl_cv_size_max= + AC_EGREP_CPP([Found it], [ +#include <limits.h> +#if HAVE_STDINT_H +#include <stdint.h> +#endif +#ifdef SIZE_MAX +Found it +#endif +], [gl_cv_size_max=yes]) + if test -z "$gl_cv_size_max"; then + dnl Define it ourselves. Here we assume that the type 'size_t' is not wider + dnl than the type 'unsigned long'. Try hard to find a definition that can + dnl be used in a preprocessor #if, i.e. doesn't contain a cast. + AC_COMPUTE_INT([size_t_bits_minus_1], [sizeof (size_t) * CHAR_BIT - 1], + [#include <stddef.h> +#include <limits.h>], [size_t_bits_minus_1=]) + AC_COMPUTE_INT([fits_in_uint], [sizeof (size_t) <= sizeof (unsigned int)], + [#include <stddef.h>], [fits_in_uint=]) + if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then + if test $fits_in_uint = 1; then + dnl Even though SIZE_MAX fits in an unsigned int, it must be of type + dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'. + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <stddef.h> + extern size_t foo; + extern unsigned long foo; + ]], + [[]])], + [fits_in_uint=0]) + fi + dnl We cannot use 'expr' to simplify this expression, because 'expr' + dnl works only with 'long' integers in the host environment, while we + dnl might be cross-compiling from a 32-bit platform to a 64-bit platform. + if test $fits_in_uint = 1; then + gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)" + else + gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)" + fi + else + dnl Shouldn't happen, but who knows... + gl_cv_size_max='((size_t)~(size_t)0)' + fi + fi + ]) + if test "$gl_cv_size_max" != yes; then + AC_DEFINE_UNQUOTED([SIZE_MAX], [$gl_cv_size_max], + [Define as the maximum value of type 'size_t', if the system doesn't define it.]) + fi + dnl Don't redefine SIZE_MAX in config.h if config.h is re-included after + dnl <stdint.h>. Remember that the #undef in AH_VERBATIM gets replaced with + dnl #define by AC_DEFINE_UNQUOTED. + AH_VERBATIM([SIZE_MAX], +[/* Define as the maximum value of type 'size_t', if the system doesn't define + it. */ +#ifndef SIZE_MAX +# undef SIZE_MAX +#endif]) +]) + +dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. +dnl Remove this when we can assume autoconf >= 2.61. +m4_ifdef([AC_COMPUTE_INT], [], [ + AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) +]) diff --git a/gnulib/m4/sleep.m4 b/gnulib/m4/sleep.m4 new file mode 100644 index 0000000..7e736d4 --- /dev/null +++ b/gnulib/m4/sleep.m4 @@ -0,0 +1,52 @@ +# sleep.m4 serial 6 +dnl Copyright (C) 2007-2012 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_SLEEP], +[ + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + dnl We expect to see the declaration of sleep() in a header file. + dnl Older versions of mingw have a sleep() function that is an alias to + dnl _sleep() in MSVCRT. It has a different signature than POSIX sleep(): + dnl it takes the number of milliseconds as argument and returns void. + dnl mingw does not declare this function. + AC_CHECK_DECLS([sleep], , , [[#include <unistd.h>]]) + AC_CHECK_FUNCS_ONCE([sleep]) + if test $ac_cv_have_decl_sleep != yes; then + HAVE_SLEEP=0 + else + dnl Cygwin 1.5.x has a bug where sleep can't exceed 49.7 days. + AC_CACHE_CHECK([for working sleep], [gl_cv_func_sleep_works], + [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ +#include <errno.h> +#include <unistd.h> +#include <signal.h> +static void +handle_alarm (int sig) +{ + if (sig != SIGALRM) + _exit (2); +} +]], [[ + /* Failure to compile this test due to missing alarm is okay, + since all such platforms (mingw) also lack sleep. */ + unsigned int pentecost = 50 * 24 * 60 * 60; /* 50 days. */ + unsigned int remaining; + signal (SIGALRM, handle_alarm); + alarm (1); + remaining = sleep (pentecost); + if (remaining > pentecost) + return 3; + if (remaining <= pentecost - 10) + return 4; + return 0; + ]])], + [gl_cv_func_sleep_works=yes], [gl_cv_func_sleep_works=no], + [gl_cv_func_sleep_works="guessing no"])]) + if test "$gl_cv_func_sleep_works" != yes; then + REPLACE_SLEEP=1 + fi + fi +]) diff --git a/gnulib/m4/ssize_t.m4 b/gnulib/m4/ssize_t.m4 new file mode 100644 index 0000000..209d64c --- /dev/null +++ b/gnulib/m4/ssize_t.m4 @@ -0,0 +1,23 @@ +# ssize_t.m4 serial 5 (gettext-0.18.2) +dnl Copyright (C) 2001-2003, 2006, 2010-2012 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. + +dnl From Bruno Haible. +dnl Test whether ssize_t is defined. + +AC_DEFUN([gt_TYPE_SSIZE_T], +[ + AC_CACHE_CHECK([for ssize_t], [gt_cv_ssize_t], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <sys/types.h>]], + [[int x = sizeof (ssize_t *) + sizeof (ssize_t); + return !x;]])], + [gt_cv_ssize_t=yes], [gt_cv_ssize_t=no])]) + if test $gt_cv_ssize_t = no; then + AC_DEFINE([ssize_t], [int], + [Define as a signed type of the same size as size_t.]) + fi +]) diff --git a/gnulib/m4/stdalign.m4 b/gnulib/m4/stdalign.m4 new file mode 100644 index 0000000..6659c9c --- /dev/null +++ b/gnulib/m4/stdalign.m4 @@ -0,0 +1,51 @@ +# Check for stdalign.h that conforms to C11. + +dnl Copyright 2011-2012 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. + +# Prepare for substituting <stdalign.h> if it is not supported. + +AC_DEFUN([gl_STDALIGN_H], +[ + AC_CACHE_CHECK([for working stdalign.h], + [gl_cv_header_working_stdalign_h], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <stdalign.h> + #include <stddef.h> + + /* Test that alignof yields a result consistent with offsetof. + This catches GCC bug 52023 + <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023>. */ + #ifdef __cplusplus + template <class t> struct alignof_helper { char a; t b; }; + # define ao(type) offsetof (alignof_helper<type>, b) + #else + # define ao(type) offsetof (struct { char a; type b; }, b) + #endif + char test_double[ao (double) % _Alignof (double) == 0 ? 1 : -1]; + char test_long[ao (long int) % _Alignof (long int) == 0 ? 1 : -1]; + char test_alignof[alignof (double) == _Alignof (double) ? 1 : -1]; + + /* Test _Alignas only on platforms where gnulib can help. */ + #if \ + (__GNUC__ || __IBMC__ || __IBMCPP__ \ + || 0x5110 <= __SUNPRO_C || 1300 <= _MSC_VER) + int alignas (8) alignas_int = 1; + char test_alignas[_Alignof (alignas_int) == 8 ? 1 : -1]; + #endif + ]])], + [gl_cv_header_working_stdalign_h=yes], + [gl_cv_header_working_stdalign_h=no])]) + + if test $gl_cv_header_working_stdalign_h = yes; then + STDALIGN_H='' + else + STDALIGN_H='stdalign.h' + fi + + AC_SUBST([STDALIGN_H]) + AM_CONDITIONAL([GL_GENERATE_STDALIGN_H], [test -n "$STDALIGN_H"]) +]) diff --git a/gnulib/m4/stdbool.m4 b/gnulib/m4/stdbool.m4 new file mode 100644 index 0000000..eabfa64 --- /dev/null +++ b/gnulib/m4/stdbool.m4 @@ -0,0 +1,100 @@ +# Check for stdbool.h that conforms to C99. + +dnl Copyright (C) 2002-2006, 2009-2012 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. + +#serial 5 + +# Prepare for substituting <stdbool.h> if it is not supported. + +AC_DEFUN([AM_STDBOOL_H], +[ + AC_REQUIRE([AC_CHECK_HEADER_STDBOOL]) + + # Define two additional variables used in the Makefile substitution. + + if test "$ac_cv_header_stdbool_h" = yes; then + STDBOOL_H='' + else + STDBOOL_H='stdbool.h' + fi + AC_SUBST([STDBOOL_H]) + AM_CONDITIONAL([GL_GENERATE_STDBOOL_H], [test -n "$STDBOOL_H"]) + + if test "$ac_cv_type__Bool" = yes; then + HAVE__BOOL=1 + else + HAVE__BOOL=0 + fi + AC_SUBST([HAVE__BOOL]) +]) + +# AM_STDBOOL_H will be renamed to gl_STDBOOL_H in the future. +AC_DEFUN([gl_STDBOOL_H], [AM_STDBOOL_H]) + +# This version of the macro is needed in autoconf <= 2.68. + +AC_DEFUN([AC_CHECK_HEADER_STDBOOL], + [AC_CACHE_CHECK([for stdbool.h that conforms to C99], + [ac_cv_header_stdbool_h], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[ + #include <stdbool.h> + #ifndef bool + "error: bool is not defined" + #endif + #ifndef false + "error: false is not defined" + #endif + #if false + "error: false is not 0" + #endif + #ifndef true + "error: true is not defined" + #endif + #if true != 1 + "error: true is not 1" + #endif + #ifndef __bool_true_false_are_defined + "error: __bool_true_false_are_defined is not defined" + #endif + + struct s { _Bool s: 1; _Bool t; } s; + + char a[true == 1 ? 1 : -1]; + char b[false == 0 ? 1 : -1]; + char c[__bool_true_false_are_defined == 1 ? 1 : -1]; + char d[(bool) 0.5 == true ? 1 : -1]; + /* See body of main program for 'e'. */ + char f[(_Bool) 0.0 == false ? 1 : -1]; + char g[true]; + char h[sizeof (_Bool)]; + char i[sizeof s.t]; + enum { j = false, k = true, l = false * true, m = true * 256 }; + /* The following fails for + HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ + _Bool n[m]; + char o[sizeof n == m * sizeof n[0] ? 1 : -1]; + char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; + /* Catch a bug in an HP-UX C compiler. See + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + */ + _Bool q = true; + _Bool *pq = &q; + ]], + [[ + bool e = &s; + *pq |= q; + *pq |= ! q; + /* Refer to every declared value, to avoid compiler optimizations. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + + !m + !n + !o + !p + !q + !pq); + ]])], + [ac_cv_header_stdbool_h=yes], + [ac_cv_header_stdbool_h=no])]) + AC_CHECK_TYPES([_Bool]) +]) diff --git a/gnulib/m4/stddef_h.m4 b/gnulib/m4/stddef_h.m4 new file mode 100644 index 0000000..cc11609 --- /dev/null +++ b/gnulib/m4/stddef_h.m4 @@ -0,0 +1,47 @@ +dnl A placeholder for POSIX 2008 <stddef.h>, for platforms that have issues. +# stddef_h.m4 serial 4 +dnl Copyright (C) 2009-2012 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_STDDEF_H], +[ + AC_REQUIRE([gl_STDDEF_H_DEFAULTS]) + AC_REQUIRE([gt_TYPE_WCHAR_T]) + STDDEF_H= + if test $gt_cv_c_wchar_t = no; then + HAVE_WCHAR_T=0 + STDDEF_H=stddef.h + fi + AC_CACHE_CHECK([whether NULL can be used in arbitrary expressions], + [gl_cv_decl_null_works], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stddef.h> + int test[2 * (sizeof NULL == sizeof (void *)) -1]; +]])], + [gl_cv_decl_null_works=yes], + [gl_cv_decl_null_works=no])]) + if test $gl_cv_decl_null_works = no; then + REPLACE_NULL=1 + STDDEF_H=stddef.h + fi + AC_SUBST([STDDEF_H]) + AM_CONDITIONAL([GL_GENERATE_STDDEF_H], [test -n "$STDDEF_H"]) + if test -n "$STDDEF_H"; then + gl_NEXT_HEADERS([stddef.h]) + fi +]) + +AC_DEFUN([gl_STDDEF_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_STDDEF_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) +]) + +AC_DEFUN([gl_STDDEF_H_DEFAULTS], +[ + dnl Assume proper GNU behavior unless another module says otherwise. + REPLACE_NULL=0; AC_SUBST([REPLACE_NULL]) + HAVE_WCHAR_T=1; AC_SUBST([HAVE_WCHAR_T]) +]) diff --git a/gnulib/m4/stdint.m4 b/gnulib/m4/stdint.m4 new file mode 100644 index 0000000..28d342e --- /dev/null +++ b/gnulib/m4/stdint.m4 @@ -0,0 +1,484 @@ +# stdint.m4 serial 43 +dnl Copyright (C) 2001-2012 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. + +dnl From Paul Eggert and Bruno Haible. +dnl Test whether <stdint.h> is supported or must be substituted. + +AC_DEFUN_ONCE([gl_STDINT_H], +[ + AC_PREREQ([2.59])dnl + + dnl Check for long long int and unsigned long long int. + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) + if test $ac_cv_type_long_long_int = yes; then + HAVE_LONG_LONG_INT=1 + else + HAVE_LONG_LONG_INT=0 + fi + AC_SUBST([HAVE_LONG_LONG_INT]) + AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) + if test $ac_cv_type_unsigned_long_long_int = yes; then + HAVE_UNSIGNED_LONG_LONG_INT=1 + else + HAVE_UNSIGNED_LONG_LONG_INT=0 + fi + AC_SUBST([HAVE_UNSIGNED_LONG_LONG_INT]) + + dnl Check for <wchar.h>, in the same way as gl_WCHAR_H does. + AC_CHECK_HEADERS_ONCE([wchar.h]) + if test $ac_cv_header_wchar_h = yes; then + HAVE_WCHAR_H=1 + else + HAVE_WCHAR_H=0 + fi + AC_SUBST([HAVE_WCHAR_H]) + + dnl Check for <inttypes.h>. + dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_inttypes_h. + if test $ac_cv_header_inttypes_h = yes; then + HAVE_INTTYPES_H=1 + else + HAVE_INTTYPES_H=0 + fi + AC_SUBST([HAVE_INTTYPES_H]) + + dnl Check for <sys/types.h>. + dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_sys_types_h. + if test $ac_cv_header_sys_types_h = yes; then + HAVE_SYS_TYPES_H=1 + else + HAVE_SYS_TYPES_H=0 + fi + AC_SUBST([HAVE_SYS_TYPES_H]) + + gl_CHECK_NEXT_HEADERS([stdint.h]) + if test $ac_cv_header_stdint_h = yes; then + HAVE_STDINT_H=1 + else + HAVE_STDINT_H=0 + fi + AC_SUBST([HAVE_STDINT_H]) + + dnl Now see whether we need a substitute <stdint.h>. + if test $ac_cv_header_stdint_h = yes; then + AC_CACHE_CHECK([whether stdint.h conforms to C99], + [gl_cv_header_working_stdint_h], + [gl_cv_header_working_stdint_h=no + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ +#include <stdint.h> +/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>. */ +#if !(defined WCHAR_MIN && defined WCHAR_MAX) +#error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>" +#endif +] +gl_STDINT_INCLUDES +[ +#ifdef INT8_MAX +int8_t a1 = INT8_MAX; +int8_t a1min = INT8_MIN; +#endif +#ifdef INT16_MAX +int16_t a2 = INT16_MAX; +int16_t a2min = INT16_MIN; +#endif +#ifdef INT32_MAX +int32_t a3 = INT32_MAX; +int32_t a3min = INT32_MIN; +#endif +#ifdef INT64_MAX +int64_t a4 = INT64_MAX; +int64_t a4min = INT64_MIN; +#endif +#ifdef UINT8_MAX +uint8_t b1 = UINT8_MAX; +#else +typedef int b1[(unsigned char) -1 != 255 ? 1 : -1]; +#endif +#ifdef UINT16_MAX +uint16_t b2 = UINT16_MAX; +#endif +#ifdef UINT32_MAX +uint32_t b3 = UINT32_MAX; +#endif +#ifdef UINT64_MAX +uint64_t b4 = UINT64_MAX; +#endif +int_least8_t c1 = INT8_C (0x7f); +int_least8_t c1max = INT_LEAST8_MAX; +int_least8_t c1min = INT_LEAST8_MIN; +int_least16_t c2 = INT16_C (0x7fff); +int_least16_t c2max = INT_LEAST16_MAX; +int_least16_t c2min = INT_LEAST16_MIN; +int_least32_t c3 = INT32_C (0x7fffffff); +int_least32_t c3max = INT_LEAST32_MAX; +int_least32_t c3min = INT_LEAST32_MIN; +int_least64_t c4 = INT64_C (0x7fffffffffffffff); +int_least64_t c4max = INT_LEAST64_MAX; +int_least64_t c4min = INT_LEAST64_MIN; +uint_least8_t d1 = UINT8_C (0xff); +uint_least8_t d1max = UINT_LEAST8_MAX; +uint_least16_t d2 = UINT16_C (0xffff); +uint_least16_t d2max = UINT_LEAST16_MAX; +uint_least32_t d3 = UINT32_C (0xffffffff); +uint_least32_t d3max = UINT_LEAST32_MAX; +uint_least64_t d4 = UINT64_C (0xffffffffffffffff); +uint_least64_t d4max = UINT_LEAST64_MAX; +int_fast8_t e1 = INT_FAST8_MAX; +int_fast8_t e1min = INT_FAST8_MIN; +int_fast16_t e2 = INT_FAST16_MAX; +int_fast16_t e2min = INT_FAST16_MIN; +int_fast32_t e3 = INT_FAST32_MAX; +int_fast32_t e3min = INT_FAST32_MIN; +int_fast64_t e4 = INT_FAST64_MAX; +int_fast64_t e4min = INT_FAST64_MIN; +uint_fast8_t f1 = UINT_FAST8_MAX; +uint_fast16_t f2 = UINT_FAST16_MAX; +uint_fast32_t f3 = UINT_FAST32_MAX; +uint_fast64_t f4 = UINT_FAST64_MAX; +#ifdef INTPTR_MAX +intptr_t g = INTPTR_MAX; +intptr_t gmin = INTPTR_MIN; +#endif +#ifdef UINTPTR_MAX +uintptr_t h = UINTPTR_MAX; +#endif +intmax_t i = INTMAX_MAX; +uintmax_t j = UINTMAX_MAX; + +#include <limits.h> /* for CHAR_BIT */ +#define TYPE_MINIMUM(t) \ + ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t))) +#define TYPE_MAXIMUM(t) \ + ((t) ((t) 0 < (t) -1 \ + ? (t) -1 \ + : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) +struct s { + int check_PTRDIFF: + PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) + && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) + ? 1 : -1; + /* Detect bug in FreeBSD 6.0 / ia64. */ + int check_SIG_ATOMIC: + SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) + && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) + ? 1 : -1; + int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; + int check_WCHAR: + WCHAR_MIN == TYPE_MINIMUM (wchar_t) + && WCHAR_MAX == TYPE_MAXIMUM (wchar_t) + ? 1 : -1; + /* Detect bug in mingw. */ + int check_WINT: + WINT_MIN == TYPE_MINIMUM (wint_t) + && WINT_MAX == TYPE_MAXIMUM (wint_t) + ? 1 : -1; + + /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ + int check_UINT8_C: + (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1; + int check_UINT16_C: + (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1; + + /* Detect bugs in OpenBSD 3.9 stdint.h. */ +#ifdef UINT8_MAX + int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1; +#endif +#ifdef UINT16_MAX + int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1; +#endif +#ifdef UINT32_MAX + int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1; +#endif +#ifdef UINT64_MAX + int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1; +#endif + int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1; + int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1; + int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1; + int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1; + int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1; + int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1; + int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1; + int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1; + int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1; + int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1; + int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; +}; + ]])], + [dnl Determine whether the various *_MIN, *_MAX macros are usable + dnl in preprocessor expression. We could do it by compiling a test + dnl program for each of these macros. It is faster to run a program + dnl that inspects the macro expansion. + dnl This detects a bug on HP-UX 11.23/ia64. + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[ +#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ +#include <stdint.h> +] +gl_STDINT_INCLUDES +[ +#include <stdio.h> +#include <string.h> +#define MVAL(macro) MVAL1(macro) +#define MVAL1(expression) #expression +static const char *macro_values[] = + { +#ifdef INT8_MAX + MVAL (INT8_MAX), +#endif +#ifdef INT16_MAX + MVAL (INT16_MAX), +#endif +#ifdef INT32_MAX + MVAL (INT32_MAX), +#endif +#ifdef INT64_MAX + MVAL (INT64_MAX), +#endif +#ifdef UINT8_MAX + MVAL (UINT8_MAX), +#endif +#ifdef UINT16_MAX + MVAL (UINT16_MAX), +#endif +#ifdef UINT32_MAX + MVAL (UINT32_MAX), +#endif +#ifdef UINT64_MAX + MVAL (UINT64_MAX), +#endif + NULL + }; +]], [[ + const char **mv; + for (mv = macro_values; *mv != NULL; mv++) + { + const char *value = *mv; + /* Test whether it looks like a cast expression. */ + if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0 + || strncmp (value, "((unsigned short)"/*)*/, 17) == 0 + || strncmp (value, "((unsigned char)"/*)*/, 16) == 0 + || strncmp (value, "((int)"/*)*/, 6) == 0 + || strncmp (value, "((signed short)"/*)*/, 15) == 0 + || strncmp (value, "((signed char)"/*)*/, 14) == 0) + return mv - macro_values + 1; + } + return 0; +]])], + [gl_cv_header_working_stdint_h=yes], + [], + [dnl When cross-compiling, assume it works. + gl_cv_header_working_stdint_h=yes + ]) + ]) + ]) + fi + if test "$gl_cv_header_working_stdint_h" = yes; then + STDINT_H= + else + dnl Check for <sys/inttypes.h>, and for + dnl <sys/bitypes.h> (used in Linux libc4 >= 4.6.7 and libc5). + AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h]) + if test $ac_cv_header_sys_inttypes_h = yes; then + HAVE_SYS_INTTYPES_H=1 + else + HAVE_SYS_INTTYPES_H=0 + fi + AC_SUBST([HAVE_SYS_INTTYPES_H]) + if test $ac_cv_header_sys_bitypes_h = yes; then + HAVE_SYS_BITYPES_H=1 + else + HAVE_SYS_BITYPES_H=0 + fi + AC_SUBST([HAVE_SYS_BITYPES_H]) + + gl_STDINT_TYPE_PROPERTIES + STDINT_H=stdint.h + fi + AC_SUBST([STDINT_H]) + AM_CONDITIONAL([GL_GENERATE_STDINT_H], [test -n "$STDINT_H"]) +]) + +dnl gl_STDINT_BITSIZEOF(TYPES, INCLUDES) +dnl Determine the size of each of the given types in bits. +AC_DEFUN([gl_STDINT_BITSIZEOF], +[ + dnl Use a shell loop, to avoid bloating configure, and + dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into + dnl config.h.in, + dnl - extra AC_SUBST calls, so that the right substitutions are made. + m4_foreach_w([gltype], [$1], + [AH_TEMPLATE([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), + [Define to the number of bits in type ']gltype['.])]) + for gltype in $1 ; do + AC_CACHE_CHECK([for bit size of $gltype], [gl_cv_bitsizeof_${gltype}], + [AC_COMPUTE_INT([result], [sizeof ($gltype) * CHAR_BIT], + [$2 +#include <limits.h>], [result=unknown]) + eval gl_cv_bitsizeof_${gltype}=\$result + ]) + eval result=\$gl_cv_bitsizeof_${gltype} + if test $result = unknown; then + dnl Use a nonempty default, because some compilers, such as IRIX 5 cc, + dnl do a syntax check even on unused #if conditions and give an error + dnl on valid C code like this: + dnl #if 0 + dnl # if > 32 + dnl # endif + dnl #endif + result=0 + fi + GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + AC_DEFINE_UNQUOTED([BITSIZEOF_${GLTYPE}], [$result]) + eval BITSIZEOF_${GLTYPE}=\$result + done + m4_foreach_w([gltype], [$1], + [AC_SUBST([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) +]) + +dnl gl_CHECK_TYPES_SIGNED(TYPES, INCLUDES) +dnl Determine the signedness of each of the given types. +dnl Define HAVE_SIGNED_TYPE if type is signed. +AC_DEFUN([gl_CHECK_TYPES_SIGNED], +[ + dnl Use a shell loop, to avoid bloating configure, and + dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into + dnl config.h.in, + dnl - extra AC_SUBST calls, so that the right substitutions are made. + m4_foreach_w([gltype], [$1], + [AH_TEMPLATE([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), + [Define to 1 if ']gltype[' is a signed integer type.])]) + for gltype in $1 ; do + AC_CACHE_CHECK([whether $gltype is signed], [gl_cv_type_${gltype}_signed], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([$2[ + int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];]])], + result=yes, result=no) + eval gl_cv_type_${gltype}_signed=\$result + ]) + eval result=\$gl_cv_type_${gltype}_signed + GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + if test "$result" = yes; then + AC_DEFINE_UNQUOTED([HAVE_SIGNED_${GLTYPE}], [1]) + eval HAVE_SIGNED_${GLTYPE}=1 + else + eval HAVE_SIGNED_${GLTYPE}=0 + fi + done + m4_foreach_w([gltype], [$1], + [AC_SUBST([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) +]) + +dnl gl_INTEGER_TYPE_SUFFIX(TYPES, INCLUDES) +dnl Determine the suffix to use for integer constants of the given types. +dnl Define t_SUFFIX for each such type. +AC_DEFUN([gl_INTEGER_TYPE_SUFFIX], +[ + dnl Use a shell loop, to avoid bloating configure, and + dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into + dnl config.h.in, + dnl - extra AC_SUBST calls, so that the right substitutions are made. + m4_foreach_w([gltype], [$1], + [AH_TEMPLATE(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX], + [Define to l, ll, u, ul, ull, etc., as suitable for + constants of type ']gltype['.])]) + for gltype in $1 ; do + AC_CACHE_CHECK([for $gltype integer literal suffix], + [gl_cv_type_${gltype}_suffix], + [eval gl_cv_type_${gltype}_suffix=no + eval result=\$gl_cv_type_${gltype}_signed + if test "$result" = yes; then + glsufu= + else + glsufu=u + fi + for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do + case $glsuf in + '') gltype1='int';; + l) gltype1='long int';; + ll) gltype1='long long int';; + i64) gltype1='__int64';; + u) gltype1='unsigned int';; + ul) gltype1='unsigned long int';; + ull) gltype1='unsigned long long int';; + ui64)gltype1='unsigned __int64';; + esac + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([$2[ + extern $gltype foo; + extern $gltype1 foo;]])], + [eval gl_cv_type_${gltype}_suffix=\$glsuf]) + eval result=\$gl_cv_type_${gltype}_suffix + test "$result" != no && break + done]) + GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + eval result=\$gl_cv_type_${gltype}_suffix + test "$result" = no && result= + eval ${GLTYPE}_SUFFIX=\$result + AC_DEFINE_UNQUOTED([${GLTYPE}_SUFFIX], [$result]) + done + m4_foreach_w([gltype], [$1], + [AC_SUBST(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX])]) +]) + +dnl gl_STDINT_INCLUDES +AC_DEFUN([gl_STDINT_INCLUDES], +[[ + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ + #include <stddef.h> + #include <signal.h> + #if HAVE_WCHAR_H + # include <stdio.h> + # include <time.h> + # include <wchar.h> + #endif +]]) + +dnl gl_STDINT_TYPE_PROPERTIES +dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t +dnl of interest to stdint.in.h. +AC_DEFUN([gl_STDINT_TYPE_PROPERTIES], +[ + AC_REQUIRE([gl_MULTIARCH]) + if test $APPLE_UNIVERSAL_BUILD = 0; then + gl_STDINT_BITSIZEOF([ptrdiff_t size_t], + [gl_STDINT_INCLUDES]) + fi + gl_STDINT_BITSIZEOF([sig_atomic_t wchar_t wint_t], + [gl_STDINT_INCLUDES]) + gl_CHECK_TYPES_SIGNED([sig_atomic_t wchar_t wint_t], + [gl_STDINT_INCLUDES]) + gl_cv_type_ptrdiff_t_signed=yes + gl_cv_type_size_t_signed=no + if test $APPLE_UNIVERSAL_BUILD = 0; then + gl_INTEGER_TYPE_SUFFIX([ptrdiff_t size_t], + [gl_STDINT_INCLUDES]) + fi + gl_INTEGER_TYPE_SUFFIX([sig_atomic_t wchar_t wint_t], + [gl_STDINT_INCLUDES]) + + dnl If wint_t is smaller than 'int', it cannot satisfy the ISO C 99 + dnl requirement that wint_t is "unchanged by default argument promotions". + dnl In this case gnulib's <wchar.h> and <wctype.h> override wint_t. + dnl Set the variable BITSIZEOF_WINT_T accordingly. + if test $BITSIZEOF_WINT_T -lt 32; then + BITSIZEOF_WINT_T=32 + fi +]) + +dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. +dnl Remove this when we can assume autoconf >= 2.61. +m4_ifdef([AC_COMPUTE_INT], [], [ + AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) +]) + +# Hey Emacs! +# Local Variables: +# indent-tabs-mode: nil +# End: diff --git a/gnulib/m4/stdint_h.m4 b/gnulib/m4/stdint_h.m4 new file mode 100644 index 0000000..581de96 --- /dev/null +++ b/gnulib/m4/stdint_h.m4 @@ -0,0 +1,27 @@ +# stdint_h.m4 serial 9 +dnl Copyright (C) 1997-2004, 2006, 2008-2012 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. + +dnl From Paul Eggert. + +# Define HAVE_STDINT_H_WITH_UINTMAX if <stdint.h> exists, +# doesn't clash with <sys/types.h>, and declares uintmax_t. + +AC_DEFUN([gl_AC_HEADER_STDINT_H], +[ + AC_CACHE_CHECK([for stdint.h], [gl_cv_header_stdint_h], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <sys/types.h> + #include <stdint.h>]], + [[uintmax_t i = (uintmax_t) -1; return !i;]])], + [gl_cv_header_stdint_h=yes], + [gl_cv_header_stdint_h=no])]) + if test $gl_cv_header_stdint_h = yes; then + AC_DEFINE_UNQUOTED([HAVE_STDINT_H_WITH_UINTMAX], [1], + [Define if <stdint.h> exists, doesn't clash with <sys/types.h>, + and declares uintmax_t. ]) + fi +]) diff --git a/gnulib/m4/stdio_h.m4 b/gnulib/m4/stdio_h.m4 new file mode 100644 index 0000000..1973e8d --- /dev/null +++ b/gnulib/m4/stdio_h.m4 @@ -0,0 +1,195 @@ +# stdio_h.m4 serial 40 +dnl Copyright (C) 2007-2012 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_STDIO_H], +[ + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + AC_REQUIRE([AC_C_INLINE]) + gl_NEXT_HEADERS([stdio.h]) + + dnl No need to create extra modules for these functions. Everyone who uses + dnl <stdio.h> likely needs them. + GNULIB_FSCANF=1 + GNULIB_SCANF=1 + GNULIB_FGETC=1 + GNULIB_GETC=1 + GNULIB_GETCHAR=1 + GNULIB_FGETS=1 + GNULIB_GETS=1 + GNULIB_FREAD=1 + dnl This ifdef is necessary to avoid an error "missing file lib/stdio-read.c" + dnl "expected source file, required through AC_LIBSOURCES, not found". It is + dnl also an optimization, to avoid performing a configure check whose result + dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING + dnl or GNULIB_NONBLOCKING redundant. + m4_ifdef([gl_NONBLOCKING_IO], [ + gl_NONBLOCKING_IO + if test $gl_cv_have_nonblocking != yes; then + REPLACE_STDIO_READ_FUNCS=1 + AC_LIBOBJ([stdio-read]) + fi + ]) + + dnl No need to create extra modules for these functions. Everyone who uses + dnl <stdio.h> likely needs them. + GNULIB_FPRINTF=1 + GNULIB_PRINTF=1 + GNULIB_VFPRINTF=1 + GNULIB_VPRINTF=1 + GNULIB_FPUTC=1 + GNULIB_PUTC=1 + GNULIB_PUTCHAR=1 + GNULIB_FPUTS=1 + GNULIB_PUTS=1 + GNULIB_FWRITE=1 + dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c" + dnl "expected source file, required through AC_LIBSOURCES, not found". It is + dnl also an optimization, to avoid performing a configure check whose result + dnl is not used. But it does not make the test of GNULIB_STDIO_H_SIGPIPE or + dnl GNULIB_SIGPIPE redundant. + m4_ifdef([gl_SIGNAL_SIGPIPE], [ + gl_SIGNAL_SIGPIPE + if test $gl_cv_header_signal_h_SIGPIPE != yes; then + REPLACE_STDIO_WRITE_FUNCS=1 + AC_LIBOBJ([stdio-write]) + fi + ]) + dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c" + dnl "expected source file, required through AC_LIBSOURCES, not found". It is + dnl also an optimization, to avoid performing a configure check whose result + dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING + dnl or GNULIB_NONBLOCKING redundant. + m4_ifdef([gl_NONBLOCKING_IO], [ + gl_NONBLOCKING_IO + if test $gl_cv_have_nonblocking != yes; then + REPLACE_STDIO_WRITE_FUNCS=1 + AC_LIBOBJ([stdio-write]) + fi + ]) + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use, and which is not + dnl guaranteed by C89. + gl_WARN_ON_USE_PREPARE([[#include <stdio.h> + ]], [dprintf fpurge fseeko ftello getdelim getline pclose popen renameat + snprintf tmpfile vdprintf vsnprintf]) +]) + +AC_DEFUN([gl_STDIO_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) + dnl Define it also as a C macro, for the benefit of the unit tests. + gl_MODULE_INDICATOR_FOR_TESTS([$1]) +]) + +AC_DEFUN([gl_STDIO_H_DEFAULTS], +[ + GNULIB_DPRINTF=0; AC_SUBST([GNULIB_DPRINTF]) + GNULIB_FCLOSE=0; AC_SUBST([GNULIB_FCLOSE]) + GNULIB_FDOPEN=0; AC_SUBST([GNULIB_FDOPEN]) + GNULIB_FFLUSH=0; AC_SUBST([GNULIB_FFLUSH]) + GNULIB_FGETC=0; AC_SUBST([GNULIB_FGETC]) + GNULIB_FGETS=0; AC_SUBST([GNULIB_FGETS]) + GNULIB_FOPEN=0; AC_SUBST([GNULIB_FOPEN]) + GNULIB_FPRINTF=0; AC_SUBST([GNULIB_FPRINTF]) + GNULIB_FPRINTF_POSIX=0; AC_SUBST([GNULIB_FPRINTF_POSIX]) + GNULIB_FPURGE=0; AC_SUBST([GNULIB_FPURGE]) + GNULIB_FPUTC=0; AC_SUBST([GNULIB_FPUTC]) + GNULIB_FPUTS=0; AC_SUBST([GNULIB_FPUTS]) + GNULIB_FREAD=0; AC_SUBST([GNULIB_FREAD]) + GNULIB_FREOPEN=0; AC_SUBST([GNULIB_FREOPEN]) + GNULIB_FSCANF=0; AC_SUBST([GNULIB_FSCANF]) + GNULIB_FSEEK=0; AC_SUBST([GNULIB_FSEEK]) + GNULIB_FSEEKO=0; AC_SUBST([GNULIB_FSEEKO]) + GNULIB_FTELL=0; AC_SUBST([GNULIB_FTELL]) + GNULIB_FTELLO=0; AC_SUBST([GNULIB_FTELLO]) + GNULIB_FWRITE=0; AC_SUBST([GNULIB_FWRITE]) + GNULIB_GETC=0; AC_SUBST([GNULIB_GETC]) + GNULIB_GETCHAR=0; AC_SUBST([GNULIB_GETCHAR]) + GNULIB_GETDELIM=0; AC_SUBST([GNULIB_GETDELIM]) + GNULIB_GETLINE=0; AC_SUBST([GNULIB_GETLINE]) + GNULIB_GETS=0; AC_SUBST([GNULIB_GETS]) + GNULIB_OBSTACK_PRINTF=0; AC_SUBST([GNULIB_OBSTACK_PRINTF]) + GNULIB_OBSTACK_PRINTF_POSIX=0; AC_SUBST([GNULIB_OBSTACK_PRINTF_POSIX]) + GNULIB_PCLOSE=0; AC_SUBST([GNULIB_PCLOSE]) + GNULIB_PERROR=0; AC_SUBST([GNULIB_PERROR]) + GNULIB_POPEN=0; AC_SUBST([GNULIB_POPEN]) + GNULIB_PRINTF=0; AC_SUBST([GNULIB_PRINTF]) + GNULIB_PRINTF_POSIX=0; AC_SUBST([GNULIB_PRINTF_POSIX]) + GNULIB_PUTC=0; AC_SUBST([GNULIB_PUTC]) + GNULIB_PUTCHAR=0; AC_SUBST([GNULIB_PUTCHAR]) + GNULIB_PUTS=0; AC_SUBST([GNULIB_PUTS]) + GNULIB_REMOVE=0; AC_SUBST([GNULIB_REMOVE]) + GNULIB_RENAME=0; AC_SUBST([GNULIB_RENAME]) + GNULIB_RENAMEAT=0; AC_SUBST([GNULIB_RENAMEAT]) + GNULIB_SCANF=0; AC_SUBST([GNULIB_SCANF]) + GNULIB_SNPRINTF=0; AC_SUBST([GNULIB_SNPRINTF]) + GNULIB_SPRINTF_POSIX=0; AC_SUBST([GNULIB_SPRINTF_POSIX]) + GNULIB_STDIO_H_NONBLOCKING=0; AC_SUBST([GNULIB_STDIO_H_NONBLOCKING]) + GNULIB_STDIO_H_SIGPIPE=0; AC_SUBST([GNULIB_STDIO_H_SIGPIPE]) + GNULIB_TMPFILE=0; AC_SUBST([GNULIB_TMPFILE]) + GNULIB_VASPRINTF=0; AC_SUBST([GNULIB_VASPRINTF]) + GNULIB_VFSCANF=0; AC_SUBST([GNULIB_VFSCANF]) + GNULIB_VSCANF=0; AC_SUBST([GNULIB_VSCANF]) + GNULIB_VDPRINTF=0; AC_SUBST([GNULIB_VDPRINTF]) + GNULIB_VFPRINTF=0; AC_SUBST([GNULIB_VFPRINTF]) + GNULIB_VFPRINTF_POSIX=0; AC_SUBST([GNULIB_VFPRINTF_POSIX]) + GNULIB_VPRINTF=0; AC_SUBST([GNULIB_VPRINTF]) + GNULIB_VPRINTF_POSIX=0; AC_SUBST([GNULIB_VPRINTF_POSIX]) + GNULIB_VSNPRINTF=0; AC_SUBST([GNULIB_VSNPRINTF]) + GNULIB_VSPRINTF_POSIX=0; AC_SUBST([GNULIB_VSPRINTF_POSIX]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_DECL_FPURGE=1; AC_SUBST([HAVE_DECL_FPURGE]) + HAVE_DECL_FSEEKO=1; AC_SUBST([HAVE_DECL_FSEEKO]) + HAVE_DECL_FTELLO=1; AC_SUBST([HAVE_DECL_FTELLO]) + HAVE_DECL_GETDELIM=1; AC_SUBST([HAVE_DECL_GETDELIM]) + HAVE_DECL_GETLINE=1; AC_SUBST([HAVE_DECL_GETLINE]) + HAVE_DECL_OBSTACK_PRINTF=1; AC_SUBST([HAVE_DECL_OBSTACK_PRINTF]) + HAVE_DECL_SNPRINTF=1; AC_SUBST([HAVE_DECL_SNPRINTF]) + HAVE_DECL_VSNPRINTF=1; AC_SUBST([HAVE_DECL_VSNPRINTF]) + HAVE_DPRINTF=1; AC_SUBST([HAVE_DPRINTF]) + HAVE_FSEEKO=1; AC_SUBST([HAVE_FSEEKO]) + HAVE_FTELLO=1; AC_SUBST([HAVE_FTELLO]) + HAVE_PCLOSE=1; AC_SUBST([HAVE_PCLOSE]) + HAVE_POPEN=1; AC_SUBST([HAVE_POPEN]) + HAVE_RENAMEAT=1; AC_SUBST([HAVE_RENAMEAT]) + HAVE_VASPRINTF=1; AC_SUBST([HAVE_VASPRINTF]) + HAVE_VDPRINTF=1; AC_SUBST([HAVE_VDPRINTF]) + REPLACE_DPRINTF=0; AC_SUBST([REPLACE_DPRINTF]) + REPLACE_FCLOSE=0; AC_SUBST([REPLACE_FCLOSE]) + REPLACE_FDOPEN=0; AC_SUBST([REPLACE_FDOPEN]) + REPLACE_FFLUSH=0; AC_SUBST([REPLACE_FFLUSH]) + REPLACE_FOPEN=0; AC_SUBST([REPLACE_FOPEN]) + REPLACE_FPRINTF=0; AC_SUBST([REPLACE_FPRINTF]) + REPLACE_FPURGE=0; AC_SUBST([REPLACE_FPURGE]) + REPLACE_FREOPEN=0; AC_SUBST([REPLACE_FREOPEN]) + REPLACE_FSEEK=0; AC_SUBST([REPLACE_FSEEK]) + REPLACE_FSEEKO=0; AC_SUBST([REPLACE_FSEEKO]) + REPLACE_FTELL=0; AC_SUBST([REPLACE_FTELL]) + REPLACE_FTELLO=0; AC_SUBST([REPLACE_FTELLO]) + REPLACE_GETDELIM=0; AC_SUBST([REPLACE_GETDELIM]) + REPLACE_GETLINE=0; AC_SUBST([REPLACE_GETLINE]) + REPLACE_OBSTACK_PRINTF=0; AC_SUBST([REPLACE_OBSTACK_PRINTF]) + REPLACE_PERROR=0; AC_SUBST([REPLACE_PERROR]) + REPLACE_POPEN=0; AC_SUBST([REPLACE_POPEN]) + REPLACE_PRINTF=0; AC_SUBST([REPLACE_PRINTF]) + REPLACE_REMOVE=0; AC_SUBST([REPLACE_REMOVE]) + REPLACE_RENAME=0; AC_SUBST([REPLACE_RENAME]) + REPLACE_RENAMEAT=0; AC_SUBST([REPLACE_RENAMEAT]) + REPLACE_SNPRINTF=0; AC_SUBST([REPLACE_SNPRINTF]) + REPLACE_SPRINTF=0; AC_SUBST([REPLACE_SPRINTF]) + REPLACE_STDIO_READ_FUNCS=0; AC_SUBST([REPLACE_STDIO_READ_FUNCS]) + REPLACE_STDIO_WRITE_FUNCS=0; AC_SUBST([REPLACE_STDIO_WRITE_FUNCS]) + REPLACE_TMPFILE=0; AC_SUBST([REPLACE_TMPFILE]) + REPLACE_VASPRINTF=0; AC_SUBST([REPLACE_VASPRINTF]) + REPLACE_VDPRINTF=0; AC_SUBST([REPLACE_VDPRINTF]) + REPLACE_VFPRINTF=0; AC_SUBST([REPLACE_VFPRINTF]) + REPLACE_VPRINTF=0; AC_SUBST([REPLACE_VPRINTF]) + REPLACE_VSNPRINTF=0; AC_SUBST([REPLACE_VSNPRINTF]) + REPLACE_VSPRINTF=0; AC_SUBST([REPLACE_VSPRINTF]) +]) diff --git a/gnulib/m4/stdlib_h.m4 b/gnulib/m4/stdlib_h.m4 new file mode 100644 index 0000000..ab43728 --- /dev/null +++ b/gnulib/m4/stdlib_h.m4 @@ -0,0 +1,114 @@ +# stdlib_h.m4 serial 41 +dnl Copyright (C) 2007-2012 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_STDLIB_H], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + gl_NEXT_HEADERS([stdlib.h]) + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use, and which is not + dnl guaranteed by C89. + gl_WARN_ON_USE_PREPARE([[#include <stdlib.h> +#if HAVE_SYS_LOADAVG_H +# include <sys/loadavg.h> +#endif +#if HAVE_RANDOM_H +# include <random.h> +#endif + ]], [_Exit atoll canonicalize_file_name getloadavg getsubopt grantpt + initstate initstate_r mkdtemp mkostemp mkostemps mkstemp mkstemps + posix_openpt ptsname ptsname_r random random_r realpath rpmatch + setenv setstate setstate_r srandom srandom_r + strtod strtoll strtoull unlockpt unsetenv]) +]) + +AC_DEFUN([gl_STDLIB_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) + dnl Define it also as a C macro, for the benefit of the unit tests. + gl_MODULE_INDICATOR_FOR_TESTS([$1]) +]) + +AC_DEFUN([gl_STDLIB_H_DEFAULTS], +[ + GNULIB__EXIT=0; AC_SUBST([GNULIB__EXIT]) + GNULIB_ATOLL=0; AC_SUBST([GNULIB_ATOLL]) + GNULIB_CALLOC_POSIX=0; AC_SUBST([GNULIB_CALLOC_POSIX]) + GNULIB_CANONICALIZE_FILE_NAME=0; AC_SUBST([GNULIB_CANONICALIZE_FILE_NAME]) + GNULIB_GETLOADAVG=0; AC_SUBST([GNULIB_GETLOADAVG]) + GNULIB_GETSUBOPT=0; AC_SUBST([GNULIB_GETSUBOPT]) + GNULIB_GRANTPT=0; AC_SUBST([GNULIB_GRANTPT]) + GNULIB_MALLOC_POSIX=0; AC_SUBST([GNULIB_MALLOC_POSIX]) + GNULIB_MBTOWC=0; AC_SUBST([GNULIB_MBTOWC]) + GNULIB_MKDTEMP=0; AC_SUBST([GNULIB_MKDTEMP]) + GNULIB_MKOSTEMP=0; AC_SUBST([GNULIB_MKOSTEMP]) + GNULIB_MKOSTEMPS=0; AC_SUBST([GNULIB_MKOSTEMPS]) + GNULIB_MKSTEMP=0; AC_SUBST([GNULIB_MKSTEMP]) + GNULIB_MKSTEMPS=0; AC_SUBST([GNULIB_MKSTEMPS]) + GNULIB_POSIX_OPENPT=0; AC_SUBST([GNULIB_POSIX_OPENPT]) + GNULIB_PTSNAME=0; AC_SUBST([GNULIB_PTSNAME]) + GNULIB_PTSNAME_R=0; AC_SUBST([GNULIB_PTSNAME_R]) + GNULIB_PUTENV=0; AC_SUBST([GNULIB_PUTENV]) + GNULIB_RANDOM=0; AC_SUBST([GNULIB_RANDOM]) + GNULIB_RANDOM_R=0; AC_SUBST([GNULIB_RANDOM_R]) + GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX]) + GNULIB_REALPATH=0; AC_SUBST([GNULIB_REALPATH]) + GNULIB_RPMATCH=0; AC_SUBST([GNULIB_RPMATCH]) + GNULIB_SETENV=0; AC_SUBST([GNULIB_SETENV]) + GNULIB_STRTOD=0; AC_SUBST([GNULIB_STRTOD]) + GNULIB_STRTOLL=0; AC_SUBST([GNULIB_STRTOLL]) + GNULIB_STRTOULL=0; AC_SUBST([GNULIB_STRTOULL]) + GNULIB_SYSTEM_POSIX=0; AC_SUBST([GNULIB_SYSTEM_POSIX]) + GNULIB_UNLOCKPT=0; AC_SUBST([GNULIB_UNLOCKPT]) + GNULIB_UNSETENV=0; AC_SUBST([GNULIB_UNSETENV]) + GNULIB_WCTOMB=0; AC_SUBST([GNULIB_WCTOMB]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE__EXIT=1; AC_SUBST([HAVE__EXIT]) + HAVE_ATOLL=1; AC_SUBST([HAVE_ATOLL]) + HAVE_CANONICALIZE_FILE_NAME=1; AC_SUBST([HAVE_CANONICALIZE_FILE_NAME]) + HAVE_DECL_GETLOADAVG=1; AC_SUBST([HAVE_DECL_GETLOADAVG]) + HAVE_GETSUBOPT=1; AC_SUBST([HAVE_GETSUBOPT]) + HAVE_GRANTPT=1; AC_SUBST([HAVE_GRANTPT]) + HAVE_MKDTEMP=1; AC_SUBST([HAVE_MKDTEMP]) + HAVE_MKOSTEMP=1; AC_SUBST([HAVE_MKOSTEMP]) + HAVE_MKOSTEMPS=1; AC_SUBST([HAVE_MKOSTEMPS]) + HAVE_MKSTEMP=1; AC_SUBST([HAVE_MKSTEMP]) + HAVE_MKSTEMPS=1; AC_SUBST([HAVE_MKSTEMPS]) + HAVE_POSIX_OPENPT=1; AC_SUBST([HAVE_POSIX_OPENPT]) + HAVE_PTSNAME=1; AC_SUBST([HAVE_PTSNAME]) + HAVE_PTSNAME_R=1; AC_SUBST([HAVE_PTSNAME_R]) + HAVE_RANDOM=1; AC_SUBST([HAVE_RANDOM]) + HAVE_RANDOM_H=1; AC_SUBST([HAVE_RANDOM_H]) + HAVE_RANDOM_R=1; AC_SUBST([HAVE_RANDOM_R]) + HAVE_REALPATH=1; AC_SUBST([HAVE_REALPATH]) + HAVE_RPMATCH=1; AC_SUBST([HAVE_RPMATCH]) + HAVE_SETENV=1; AC_SUBST([HAVE_SETENV]) + HAVE_DECL_SETENV=1; AC_SUBST([HAVE_DECL_SETENV]) + HAVE_STRTOD=1; AC_SUBST([HAVE_STRTOD]) + HAVE_STRTOLL=1; AC_SUBST([HAVE_STRTOLL]) + HAVE_STRTOULL=1; AC_SUBST([HAVE_STRTOULL]) + HAVE_STRUCT_RANDOM_DATA=1; AC_SUBST([HAVE_STRUCT_RANDOM_DATA]) + HAVE_SYS_LOADAVG_H=0; AC_SUBST([HAVE_SYS_LOADAVG_H]) + HAVE_UNLOCKPT=1; AC_SUBST([HAVE_UNLOCKPT]) + HAVE_DECL_UNSETENV=1; AC_SUBST([HAVE_DECL_UNSETENV]) + REPLACE_CALLOC=0; AC_SUBST([REPLACE_CALLOC]) + REPLACE_CANONICALIZE_FILE_NAME=0; AC_SUBST([REPLACE_CANONICALIZE_FILE_NAME]) + REPLACE_MALLOC=0; AC_SUBST([REPLACE_MALLOC]) + REPLACE_MBTOWC=0; AC_SUBST([REPLACE_MBTOWC]) + REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP]) + REPLACE_PTSNAME_R=0; AC_SUBST([REPLACE_PTSNAME_R]) + REPLACE_PUTENV=0; AC_SUBST([REPLACE_PUTENV]) + REPLACE_RANDOM_R=0; AC_SUBST([REPLACE_RANDOM_R]) + REPLACE_REALLOC=0; AC_SUBST([REPLACE_REALLOC]) + REPLACE_REALPATH=0; AC_SUBST([REPLACE_REALPATH]) + REPLACE_SETENV=0; AC_SUBST([REPLACE_SETENV]) + REPLACE_STRTOD=0; AC_SUBST([REPLACE_STRTOD]) + REPLACE_UNSETENV=0; AC_SUBST([REPLACE_UNSETENV]) + REPLACE_WCTOMB=0; AC_SUBST([REPLACE_WCTOMB]) +]) diff --git a/gnulib/m4/strcase.m4 b/gnulib/m4/strcase.m4 new file mode 100644 index 0000000..717fa9c --- /dev/null +++ b/gnulib/m4/strcase.m4 @@ -0,0 +1,45 @@ +# strcase.m4 serial 11 +dnl Copyright (C) 2002, 2005-2012 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_STRCASE], +[ + gl_FUNC_STRCASECMP + gl_FUNC_STRNCASECMP +]) + +AC_DEFUN([gl_FUNC_STRCASECMP], +[ + AC_REQUIRE([gl_HEADER_STRINGS_H_DEFAULTS]) + AC_CHECK_FUNCS([strcasecmp]) + if test $ac_cv_func_strcasecmp = no; then + HAVE_STRCASECMP=0 + fi +]) + +AC_DEFUN([gl_FUNC_STRNCASECMP], +[ + AC_REQUIRE([gl_HEADER_STRINGS_H_DEFAULTS]) + AC_CHECK_FUNCS([strncasecmp]) + if test $ac_cv_func_strncasecmp = yes; then + HAVE_STRNCASECMP=1 + else + HAVE_STRNCASECMP=0 + fi + AC_CHECK_DECLS([strncasecmp]) + if test $ac_cv_have_decl_strncasecmp = no; then + HAVE_DECL_STRNCASECMP=0 + fi +]) + +# Prerequisites of lib/strcasecmp.c. +AC_DEFUN([gl_PREREQ_STRCASECMP], [ + : +]) + +# Prerequisites of lib/strncasecmp.c. +AC_DEFUN([gl_PREREQ_STRNCASECMP], [ + : +]) diff --git a/gnulib/m4/strchrnul.m4 b/gnulib/m4/strchrnul.m4 new file mode 100644 index 0000000..d3dfb9a --- /dev/null +++ b/gnulib/m4/strchrnul.m4 @@ -0,0 +1,50 @@ +# strchrnul.m4 serial 9 +dnl Copyright (C) 2003, 2007, 2009-2012 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_STRCHRNUL], +[ + dnl Persuade glibc <string.h> to declare strchrnul(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + AC_CHECK_FUNCS([strchrnul]) + if test $ac_cv_func_strchrnul = no; then + HAVE_STRCHRNUL=0 + else + AC_CACHE_CHECK([whether strchrnul works], + [gl_cv_func_strchrnul_works], + [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ +#include <string.h> /* for strchrnul */ +]], [[const char *buf = "a"; + return strchrnul (buf, 'b') != buf + 1; + ]])], + [gl_cv_func_strchrnul_works=yes], + [gl_cv_func_strchrnul_works=no], + [dnl Cygwin 1.7.9 introduced strchrnul, but it was broken until 1.7.10 + AC_EGREP_CPP([Lucky user], + [ +#if defined __CYGWIN__ + #include <cygwin/version.h> + #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 9) + Lucky user + #endif +#else + Lucky user +#endif + ], + [gl_cv_func_strchrnul_works="guessing yes"], + [gl_cv_func_strchrnul_works="guessing no"]) + ]) + ]) + case "$gl_cv_func_strchrnul_works" in + *yes) ;; + *) REPLACE_STRCHRNUL=1 ;; + esac + fi +]) + +# Prerequisites of lib/strchrnul.c. +AC_DEFUN([gl_PREREQ_STRCHRNUL], [:]) diff --git a/gnulib/m4/strerror.m4 b/gnulib/m4/strerror.m4 new file mode 100644 index 0000000..6bf14ef --- /dev/null +++ b/gnulib/m4/strerror.m4 @@ -0,0 +1,78 @@ +# strerror.m4 serial 16 +dnl Copyright (C) 2002, 2007-2012 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_STRERROR], +[ + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + AC_REQUIRE([gl_HEADER_ERRNO_H]) + AC_REQUIRE([gl_FUNC_STRERROR_0]) + m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [ + AC_REQUIRE([gl_FUNC_STRERROR_R_WORKS]) + ]) + if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then + AC_CACHE_CHECK([for working strerror function], + [gl_cv_func_working_strerror], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include <string.h> + ]], + [[if (!*strerror (-2)) return 1;]])], + [gl_cv_func_working_strerror=yes], + [gl_cv_func_working_strerror=no], + [dnl Be pessimistic on cross-compiles for now. + gl_cv_func_working_strerror="guessing no"]) + ]) + if test "$gl_cv_func_working_strerror" != yes; then + dnl The system's strerror() fails to return a string for out-of-range + dnl integers. Replace it. + REPLACE_STRERROR=1 + fi + m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [ + dnl If the system's strerror_r or __xpg_strerror_r clobbers strerror's + dnl buffer, we must replace strerror. + case "$gl_cv_func_strerror_r_works" in + *no) REPLACE_STRERROR=1 ;; + esac + ]) + else + dnl The system's strerror() cannot know about the new errno values we add + dnl to <errno.h>, or any fix for strerror(0). Replace it. + REPLACE_STRERROR=1 + fi +]) + +dnl Detect if strerror(0) passes (that is, does not set errno, and does not +dnl return a string that matches strerror(-1)). +AC_DEFUN([gl_FUNC_STRERROR_0], +[ + REPLACE_STRERROR_0=0 + AC_CACHE_CHECK([whether strerror(0) succeeds], + [gl_cv_func_strerror_0_works], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include <string.h> + #include <errno.h> + ]], + [[int result = 0; + char *str; + errno = 0; + str = strerror (0); + if (!*str) result |= 1; + if (errno) result |= 2; + if (strstr (str, "nknown") || strstr (str, "ndefined")) + result |= 4; + return result;]])], + [gl_cv_func_strerror_0_works=yes], + [gl_cv_func_strerror_0_works=no], + [dnl Be pessimistic on cross-compiles for now. + gl_cv_func_strerror_0_works="guessing no"]) + ]) + if test "$gl_cv_func_strerror_0_works" != yes; then + REPLACE_STRERROR_0=1 + AC_DEFINE([REPLACE_STRERROR_0], [1], [Define to 1 if strerror(0) + does not return a message implying success.]) + fi +]) diff --git a/gnulib/m4/string_h.m4 b/gnulib/m4/string_h.m4 new file mode 100644 index 0000000..5677e09 --- /dev/null +++ b/gnulib/m4/string_h.m4 @@ -0,0 +1,120 @@ +# Configure a GNU-like replacement for <string.h>. + +# Copyright (C) 2007-2012 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. + +# serial 21 + +# Written by Paul Eggert. + +AC_DEFUN([gl_HEADER_STRING_H], +[ + dnl Use AC_REQUIRE here, so that the default behavior below is expanded + dnl once only, before all statements that occur in other macros. + AC_REQUIRE([gl_HEADER_STRING_H_BODY]) +]) + +AC_DEFUN([gl_HEADER_STRING_H_BODY], +[ + AC_REQUIRE([AC_C_RESTRICT]) + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + gl_NEXT_HEADERS([string.h]) + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use, and which is not + dnl guaranteed by C89. + gl_WARN_ON_USE_PREPARE([[#include <string.h> + ]], + [ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul + strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r + strerror_r strsignal strverscmp]) +]) + +AC_DEFUN([gl_STRING_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) + dnl Define it also as a C macro, for the benefit of the unit tests. + gl_MODULE_INDICATOR_FOR_TESTS([$1]) +]) + +AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS], +[ + GNULIB_FFSL=0; AC_SUBST([GNULIB_FFSL]) + GNULIB_FFSLL=0; AC_SUBST([GNULIB_FFSLL]) + GNULIB_MEMCHR=0; AC_SUBST([GNULIB_MEMCHR]) + GNULIB_MEMMEM=0; AC_SUBST([GNULIB_MEMMEM]) + GNULIB_MEMPCPY=0; AC_SUBST([GNULIB_MEMPCPY]) + GNULIB_MEMRCHR=0; AC_SUBST([GNULIB_MEMRCHR]) + GNULIB_RAWMEMCHR=0; AC_SUBST([GNULIB_RAWMEMCHR]) + GNULIB_STPCPY=0; AC_SUBST([GNULIB_STPCPY]) + GNULIB_STPNCPY=0; AC_SUBST([GNULIB_STPNCPY]) + GNULIB_STRCHRNUL=0; AC_SUBST([GNULIB_STRCHRNUL]) + GNULIB_STRDUP=0; AC_SUBST([GNULIB_STRDUP]) + GNULIB_STRNCAT=0; AC_SUBST([GNULIB_STRNCAT]) + GNULIB_STRNDUP=0; AC_SUBST([GNULIB_STRNDUP]) + GNULIB_STRNLEN=0; AC_SUBST([GNULIB_STRNLEN]) + GNULIB_STRPBRK=0; AC_SUBST([GNULIB_STRPBRK]) + GNULIB_STRSEP=0; AC_SUBST([GNULIB_STRSEP]) + GNULIB_STRSTR=0; AC_SUBST([GNULIB_STRSTR]) + GNULIB_STRCASESTR=0; AC_SUBST([GNULIB_STRCASESTR]) + GNULIB_STRTOK_R=0; AC_SUBST([GNULIB_STRTOK_R]) + GNULIB_MBSLEN=0; AC_SUBST([GNULIB_MBSLEN]) + GNULIB_MBSNLEN=0; AC_SUBST([GNULIB_MBSNLEN]) + GNULIB_MBSCHR=0; AC_SUBST([GNULIB_MBSCHR]) + GNULIB_MBSRCHR=0; AC_SUBST([GNULIB_MBSRCHR]) + GNULIB_MBSSTR=0; AC_SUBST([GNULIB_MBSSTR]) + GNULIB_MBSCASECMP=0; AC_SUBST([GNULIB_MBSCASECMP]) + GNULIB_MBSNCASECMP=0; AC_SUBST([GNULIB_MBSNCASECMP]) + GNULIB_MBSPCASECMP=0; AC_SUBST([GNULIB_MBSPCASECMP]) + GNULIB_MBSCASESTR=0; AC_SUBST([GNULIB_MBSCASESTR]) + GNULIB_MBSCSPN=0; AC_SUBST([GNULIB_MBSCSPN]) + GNULIB_MBSPBRK=0; AC_SUBST([GNULIB_MBSPBRK]) + GNULIB_MBSSPN=0; AC_SUBST([GNULIB_MBSSPN]) + GNULIB_MBSSEP=0; AC_SUBST([GNULIB_MBSSEP]) + GNULIB_MBSTOK_R=0; AC_SUBST([GNULIB_MBSTOK_R]) + GNULIB_STRERROR=0; AC_SUBST([GNULIB_STRERROR]) + GNULIB_STRERROR_R=0; AC_SUBST([GNULIB_STRERROR_R]) + GNULIB_STRSIGNAL=0; AC_SUBST([GNULIB_STRSIGNAL]) + GNULIB_STRVERSCMP=0; AC_SUBST([GNULIB_STRVERSCMP]) + HAVE_MBSLEN=0; AC_SUBST([HAVE_MBSLEN]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_FFSL=1; AC_SUBST([HAVE_FFSL]) + HAVE_FFSLL=1; AC_SUBST([HAVE_FFSLL]) + HAVE_MEMCHR=1; AC_SUBST([HAVE_MEMCHR]) + HAVE_DECL_MEMMEM=1; AC_SUBST([HAVE_DECL_MEMMEM]) + HAVE_MEMPCPY=1; AC_SUBST([HAVE_MEMPCPY]) + HAVE_DECL_MEMRCHR=1; AC_SUBST([HAVE_DECL_MEMRCHR]) + HAVE_RAWMEMCHR=1; AC_SUBST([HAVE_RAWMEMCHR]) + HAVE_STPCPY=1; AC_SUBST([HAVE_STPCPY]) + HAVE_STPNCPY=1; AC_SUBST([HAVE_STPNCPY]) + HAVE_STRCHRNUL=1; AC_SUBST([HAVE_STRCHRNUL]) + HAVE_DECL_STRDUP=1; AC_SUBST([HAVE_DECL_STRDUP]) + HAVE_DECL_STRNDUP=1; AC_SUBST([HAVE_DECL_STRNDUP]) + HAVE_DECL_STRNLEN=1; AC_SUBST([HAVE_DECL_STRNLEN]) + HAVE_STRPBRK=1; AC_SUBST([HAVE_STRPBRK]) + HAVE_STRSEP=1; AC_SUBST([HAVE_STRSEP]) + HAVE_STRCASESTR=1; AC_SUBST([HAVE_STRCASESTR]) + HAVE_DECL_STRTOK_R=1; AC_SUBST([HAVE_DECL_STRTOK_R]) + HAVE_DECL_STRERROR_R=1; AC_SUBST([HAVE_DECL_STRERROR_R]) + HAVE_DECL_STRSIGNAL=1; AC_SUBST([HAVE_DECL_STRSIGNAL]) + HAVE_STRVERSCMP=1; AC_SUBST([HAVE_STRVERSCMP]) + REPLACE_MEMCHR=0; AC_SUBST([REPLACE_MEMCHR]) + REPLACE_MEMMEM=0; AC_SUBST([REPLACE_MEMMEM]) + REPLACE_STPNCPY=0; AC_SUBST([REPLACE_STPNCPY]) + REPLACE_STRDUP=0; AC_SUBST([REPLACE_STRDUP]) + REPLACE_STRSTR=0; AC_SUBST([REPLACE_STRSTR]) + REPLACE_STRCASESTR=0; AC_SUBST([REPLACE_STRCASESTR]) + REPLACE_STRCHRNUL=0; AC_SUBST([REPLACE_STRCHRNUL]) + REPLACE_STRERROR=0; AC_SUBST([REPLACE_STRERROR]) + REPLACE_STRERROR_R=0; AC_SUBST([REPLACE_STRERROR_R]) + REPLACE_STRNCAT=0; AC_SUBST([REPLACE_STRNCAT]) + REPLACE_STRNDUP=0; AC_SUBST([REPLACE_STRNDUP]) + REPLACE_STRNLEN=0; AC_SUBST([REPLACE_STRNLEN]) + REPLACE_STRSIGNAL=0; AC_SUBST([REPLACE_STRSIGNAL]) + REPLACE_STRTOK_R=0; AC_SUBST([REPLACE_STRTOK_R]) + UNDEFINE_STRTOK_R=0; AC_SUBST([UNDEFINE_STRTOK_R]) +]) diff --git a/gnulib/m4/strings_h.m4 b/gnulib/m4/strings_h.m4 new file mode 100644 index 0000000..a057e1c --- /dev/null +++ b/gnulib/m4/strings_h.m4 @@ -0,0 +1,52 @@ +# Configure a replacement for <strings.h>. +# serial 6 + +# Copyright (C) 2007, 2009-2012 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. + +AC_DEFUN([gl_HEADER_STRINGS_H], +[ + dnl Use AC_REQUIRE here, so that the default behavior below is expanded + dnl once only, before all statements that occur in other macros. + AC_REQUIRE([gl_HEADER_STRINGS_H_BODY]) +]) + +AC_DEFUN([gl_HEADER_STRINGS_H_BODY], +[ + AC_REQUIRE([gl_HEADER_STRINGS_H_DEFAULTS]) + + gl_CHECK_NEXT_HEADERS([strings.h]) + if test $ac_cv_header_strings_h = yes; then + HAVE_STRINGS_H=1 + else + HAVE_STRINGS_H=0 + fi + AC_SUBST([HAVE_STRINGS_H]) + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use. + gl_WARN_ON_USE_PREPARE([[ + /* Minix 3.1.8 has a bug: <sys/types.h> must be included before + <strings.h>. */ + #include <sys/types.h> + #include <strings.h> + ]], [ffs strcasecmp strncasecmp]) +]) + +AC_DEFUN([gl_STRINGS_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_HEADER_STRINGS_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) +]) + +AC_DEFUN([gl_HEADER_STRINGS_H_DEFAULTS], +[ + GNULIB_FFS=0; AC_SUBST([GNULIB_FFS]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_FFS=1; AC_SUBST([HAVE_FFS]) + HAVE_STRCASECMP=1; AC_SUBST([HAVE_STRCASECMP]) + HAVE_DECL_STRNCASECMP=1; AC_SUBST([HAVE_DECL_STRNCASECMP]) +]) diff --git a/gnulib/m4/strndup.m4 b/gnulib/m4/strndup.m4 new file mode 100644 index 0000000..bdde5fe --- /dev/null +++ b/gnulib/m4/strndup.m4 @@ -0,0 +1,55 @@ +# strndup.m4 serial 20 +dnl Copyright (C) 2002-2003, 2005-2012 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_STRNDUP], +[ + dnl Persuade glibc <string.h> to declare strndup(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + AC_CHECK_DECLS_ONCE([strndup]) + AC_CHECK_FUNCS_ONCE([strndup]) + if test $ac_cv_have_decl_strndup = no; then + HAVE_DECL_STRNDUP=0 + fi + + if test $ac_cv_func_strndup = yes; then + HAVE_STRNDUP=1 + # AIX 4.3.3, AIX 5.1 have a function that fails to add the terminating '\0'. + AC_CACHE_CHECK([for working strndup], [gl_cv_func_strndup_works], + [AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[#include <string.h> + #include <stdlib.h>]], [[ +#ifndef HAVE_DECL_STRNDUP + extern + #ifdef __cplusplus + "C" + #endif + char *strndup (const char *, size_t); +#endif + char *s; + s = strndup ("some longer string", 15); + free (s); + s = strndup ("shorter string", 13); + return s[13] != '\0';]])], + [gl_cv_func_strndup_works=yes], + [gl_cv_func_strndup_works=no], + [ +changequote(,)dnl + case $host_os in + aix | aix[3-6]*) gl_cv_func_strndup_works="guessing no";; + *) gl_cv_func_strndup_works="guessing yes";; + esac +changequote([,])dnl + ])]) + case $gl_cv_func_strndup_works in + *no) REPLACE_STRNDUP=1 ;; + esac + else + HAVE_STRNDUP=0 + fi +]) diff --git a/gnulib/m4/strnlen.m4 b/gnulib/m4/strnlen.m4 new file mode 100644 index 0000000..d97e307 --- /dev/null +++ b/gnulib/m4/strnlen.m4 @@ -0,0 +1,30 @@ +# strnlen.m4 serial 13 +dnl Copyright (C) 2002-2003, 2005-2007, 2009-2012 Free Software Foundation, +dnl 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_STRNLEN], +[ + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + + dnl Persuade glibc <string.h> to declare strnlen(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_CHECK_DECLS_ONCE([strnlen]) + if test $ac_cv_have_decl_strnlen = no; then + HAVE_DECL_STRNLEN=0 + else + m4_pushdef([AC_LIBOBJ], [:]) + dnl Note: AC_FUNC_STRNLEN does AC_LIBOBJ([strnlen]). + AC_FUNC_STRNLEN + m4_popdef([AC_LIBOBJ]) + if test $ac_cv_func_strnlen_working = no; then + REPLACE_STRNLEN=1 + fi + fi +]) + +# Prerequisites of lib/strnlen.c. +AC_DEFUN([gl_PREREQ_STRNLEN], [:]) diff --git a/gnulib/m4/sys_socket_h.m4 b/gnulib/m4/sys_socket_h.m4 new file mode 100644 index 0000000..8d4e7e1 --- /dev/null +++ b/gnulib/m4/sys_socket_h.m4 @@ -0,0 +1,177 @@ +# sys_socket_h.m4 serial 22 +dnl Copyright (C) 2005-2012 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. + +dnl From Simon Josefsson. + +AC_DEFUN([gl_HEADER_SYS_SOCKET], +[ + AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AC_C_INLINE]) + + dnl On OSF/1, the functions recv(), send(), recvfrom(), sendto() have + dnl old-style declarations (with return type 'int' instead of 'ssize_t') + dnl unless _POSIX_PII_SOCKET is defined. + case "$host_os" in + osf*) + AC_DEFINE([_POSIX_PII_SOCKET], [1], + [Define to 1 in order to get the POSIX compatible declarations + of socket functions.]) + ;; + esac + + AC_CACHE_CHECK([whether <sys/socket.h> is self-contained], + [gl_cv_header_sys_socket_h_selfcontained], + [ + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]], [[]])], + [gl_cv_header_sys_socket_h_selfcontained=yes], + [gl_cv_header_sys_socket_h_selfcontained=no]) + ]) + if test $gl_cv_header_sys_socket_h_selfcontained = yes; then + dnl If the shutdown function exists, <sys/socket.h> should define + dnl SHUT_RD, SHUT_WR, SHUT_RDWR. + AC_CHECK_FUNCS([shutdown]) + if test $ac_cv_func_shutdown = yes; then + AC_CACHE_CHECK([whether <sys/socket.h> defines the SHUT_* macros], + [gl_cv_header_sys_socket_h_shut], + [ + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[#include <sys/socket.h>]], + [[int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR };]])], + [gl_cv_header_sys_socket_h_shut=yes], + [gl_cv_header_sys_socket_h_shut=no]) + ]) + if test $gl_cv_header_sys_socket_h_shut = no; then + SYS_SOCKET_H='sys/socket.h' + fi + fi + fi + # We need to check for ws2tcpip.h now. + gl_PREREQ_SYS_H_SOCKET + AC_CHECK_TYPES([struct sockaddr_storage, sa_family_t],,,[ + /* sys/types.h is not needed according to POSIX, but the + sys/socket.h in i386-unknown-freebsd4.10 and + powerpc-apple-darwin5.5 required it. */ +#include <sys/types.h> +#ifdef HAVE_SYS_SOCKET_H +#include <sys/socket.h> +#endif +#ifdef HAVE_WS2TCPIP_H +#include <ws2tcpip.h> +#endif +]) + if test $ac_cv_type_struct_sockaddr_storage = no; then + HAVE_STRUCT_SOCKADDR_STORAGE=0 + fi + if test $ac_cv_type_sa_family_t = no; then + HAVE_SA_FAMILY_T=0 + fi + if test $ac_cv_type_struct_sockaddr_storage != no; then + AC_CHECK_MEMBERS([struct sockaddr_storage.ss_family], + [], + [HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=0], + [#include <sys/types.h> + #ifdef HAVE_SYS_SOCKET_H + #include <sys/socket.h> + #endif + #ifdef HAVE_WS2TCPIP_H + #include <ws2tcpip.h> + #endif + ]) + fi + if test $HAVE_STRUCT_SOCKADDR_STORAGE = 0 || test $HAVE_SA_FAMILY_T = 0 \ + || test $HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = 0; then + SYS_SOCKET_H='sys/socket.h' + fi + gl_PREREQ_SYS_H_WINSOCK2 + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use. + gl_WARN_ON_USE_PREPARE([[ +/* Some systems require prerequisite headers. */ +#include <sys/types.h> +#include <sys/socket.h> + ]], [socket connect accept bind getpeername getsockname getsockopt + listen recv send recvfrom sendto setsockopt shutdown accept4]) +]) + +AC_DEFUN([gl_PREREQ_SYS_H_SOCKET], +[ + dnl Check prerequisites of the <sys/socket.h> replacement. + AC_REQUIRE([gl_CHECK_SOCKET_HEADERS]) + gl_CHECK_NEXT_HEADERS([sys/socket.h]) + if test $ac_cv_header_sys_socket_h = yes; then + HAVE_SYS_SOCKET_H=1 + HAVE_WS2TCPIP_H=0 + else + HAVE_SYS_SOCKET_H=0 + if test $ac_cv_header_ws2tcpip_h = yes; then + HAVE_WS2TCPIP_H=1 + else + HAVE_WS2TCPIP_H=0 + fi + fi + AC_SUBST([HAVE_SYS_SOCKET_H]) + AC_SUBST([HAVE_WS2TCPIP_H]) +]) + +# Common prerequisites of the <sys/socket.h> replacement and of the +# <sys/select.h> replacement. +# Sets and substitutes HAVE_WINSOCK2_H. +AC_DEFUN([gl_PREREQ_SYS_H_WINSOCK2], +[ + m4_ifdef([gl_UNISTD_H_DEFAULTS], [AC_REQUIRE([gl_UNISTD_H_DEFAULTS])]) + m4_ifdef([gl_SYS_IOCTL_H_DEFAULTS], [AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS])]) + AC_CHECK_HEADERS_ONCE([sys/socket.h]) + if test $ac_cv_header_sys_socket_h != yes; then + dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make + dnl the check for those headers unconditional; yet cygwin reports + dnl that the headers are present but cannot be compiled (since on + dnl cygwin, all socket information should come from sys/socket.h). + AC_CHECK_HEADERS([winsock2.h]) + fi + if test "$ac_cv_header_winsock2_h" = yes; then + HAVE_WINSOCK2_H=1 + UNISTD_H_HAVE_WINSOCK2_H=1 + SYS_IOCTL_H_HAVE_WINSOCK2_H=1 + else + HAVE_WINSOCK2_H=0 + fi + AC_SUBST([HAVE_WINSOCK2_H]) +]) + +AC_DEFUN([gl_SYS_SOCKET_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) + dnl Define it also as a C macro, for the benefit of the unit tests. + gl_MODULE_INDICATOR_FOR_TESTS([$1]) +]) + +AC_DEFUN([gl_SYS_SOCKET_H_DEFAULTS], +[ + GNULIB_SOCKET=0; AC_SUBST([GNULIB_SOCKET]) + GNULIB_CONNECT=0; AC_SUBST([GNULIB_CONNECT]) + GNULIB_ACCEPT=0; AC_SUBST([GNULIB_ACCEPT]) + GNULIB_BIND=0; AC_SUBST([GNULIB_BIND]) + GNULIB_GETPEERNAME=0; AC_SUBST([GNULIB_GETPEERNAME]) + GNULIB_GETSOCKNAME=0; AC_SUBST([GNULIB_GETSOCKNAME]) + GNULIB_GETSOCKOPT=0; AC_SUBST([GNULIB_GETSOCKOPT]) + GNULIB_LISTEN=0; AC_SUBST([GNULIB_LISTEN]) + GNULIB_RECV=0; AC_SUBST([GNULIB_RECV]) + GNULIB_SEND=0; AC_SUBST([GNULIB_SEND]) + GNULIB_RECVFROM=0; AC_SUBST([GNULIB_RECVFROM]) + GNULIB_SENDTO=0; AC_SUBST([GNULIB_SENDTO]) + GNULIB_SETSOCKOPT=0; AC_SUBST([GNULIB_SETSOCKOPT]) + GNULIB_SHUTDOWN=0; AC_SUBST([GNULIB_SHUTDOWN]) + GNULIB_ACCEPT4=0; AC_SUBST([GNULIB_ACCEPT4]) + HAVE_STRUCT_SOCKADDR_STORAGE=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE]) + HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=1; + AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY]) + HAVE_SA_FAMILY_T=1; AC_SUBST([HAVE_SA_FAMILY_T]) + HAVE_ACCEPT4=1; AC_SUBST([HAVE_ACCEPT4]) +]) diff --git a/gnulib/m4/sys_types_h.m4 b/gnulib/m4/sys_types_h.m4 new file mode 100644 index 0000000..8d18ddb --- /dev/null +++ b/gnulib/m4/sys_types_h.m4 @@ -0,0 +1,21 @@ +# sys_types_h.m4 serial 2 +dnl Copyright (C) 2011-2012 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_SYS_TYPES_H], +[ + AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS]) + gl_NEXT_HEADERS([sys/types.h]) + + dnl Ensure the type pid_t gets defined. + AC_REQUIRE([AC_TYPE_PID_T]) + + dnl Ensure the type mode_t gets defined. + AC_REQUIRE([AC_TYPE_MODE_T]) +]) + +AC_DEFUN([gl_SYS_TYPES_H_DEFAULTS], +[ +]) diff --git a/gnulib/m4/sysexits.m4 b/gnulib/m4/sysexits.m4 new file mode 100644 index 0000000..c5741d2 --- /dev/null +++ b/gnulib/m4/sysexits.m4 @@ -0,0 +1,44 @@ +# sysexits.m4 serial 6 +dnl Copyright (C) 2003, 2005, 2007, 2009-2012 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_SYSEXITS], +[ + AC_CHECK_HEADERS_ONCE([sysexits.h]) + if test $ac_cv_header_sysexits_h = yes; then + HAVE_SYSEXITS_H=1 + gl_CHECK_NEXT_HEADERS([sysexits.h]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sysexits.h>]], + [[switch (0) + { + case EX_OK: + case EX_USAGE: + case EX_DATAERR: + case EX_NOINPUT: + case EX_NOUSER: + case EX_NOHOST: + case EX_UNAVAILABLE: + case EX_SOFTWARE: + case EX_OSERR: + case EX_OSFILE: + case EX_CANTCREAT: + case EX_IOERR: + case EX_TEMPFAIL: + case EX_PROTOCOL: + case EX_NOPERM: + case EX_CONFIG: + break; + } + ]])], + [SYSEXITS_H=], + [SYSEXITS_H=sysexits.h]) + else + HAVE_SYSEXITS_H=0 + SYSEXITS_H=sysexits.h + fi + AC_SUBST([HAVE_SYSEXITS_H]) + AC_SUBST([SYSEXITS_H]) + AM_CONDITIONAL([GL_GENERATE_SYSEXITS_H], [test -n "$SYSEXITS_H"]) +]) diff --git a/gnulib/m4/unistd_h.m4 b/gnulib/m4/unistd_h.m4 new file mode 100644 index 0000000..7595534 --- /dev/null +++ b/gnulib/m4/unistd_h.m4 @@ -0,0 +1,183 @@ +# unistd_h.m4 serial 63 +dnl Copyright (C) 2006-2012 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. + +dnl Written by Simon Josefsson, Bruno Haible. + +AC_DEFUN([gl_UNISTD_H], +[ + dnl Use AC_REQUIRE here, so that the default behavior below is expanded + dnl once only, before all statements that occur in other macros. + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + AC_REQUIRE([AC_C_INLINE]) + + gl_CHECK_NEXT_HEADERS([unistd.h]) + if test $ac_cv_header_unistd_h = yes; then + HAVE_UNISTD_H=1 + else + HAVE_UNISTD_H=0 + fi + AC_SUBST([HAVE_UNISTD_H]) + + dnl Ensure the type pid_t gets defined. + AC_REQUIRE([AC_TYPE_PID_T]) + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use. + gl_WARN_ON_USE_PREPARE([[ +#if HAVE_UNISTD_H +# include <unistd.h> +#endif +/* Some systems declare various items in the wrong headers. */ +#if !(defined __GLIBC__ && !defined __UCLIBC__) +# include <fcntl.h> +# include <stdio.h> +# include <stdlib.h> +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +# include <io.h> +# endif +#endif + ]], [chdir chown dup dup2 dup3 environ euidaccess faccessat fchdir fchownat + fdatasync fsync ftruncate getcwd getdomainname getdtablesize getgroups + gethostname getlogin getlogin_r getpagesize + getusershell setusershell endusershell + group_member isatty lchown link linkat lseek pipe pipe2 pread pwrite + readlink readlinkat rmdir sethostname sleep symlink symlinkat ttyname_r + unlink unlinkat usleep]) +]) + +AC_DEFUN([gl_UNISTD_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) + dnl Define it also as a C macro, for the benefit of the unit tests. + gl_MODULE_INDICATOR_FOR_TESTS([$1]) +]) + +AC_DEFUN([gl_UNISTD_H_DEFAULTS], +[ + GNULIB_CHDIR=0; AC_SUBST([GNULIB_CHDIR]) + GNULIB_CHOWN=0; AC_SUBST([GNULIB_CHOWN]) + GNULIB_CLOSE=0; AC_SUBST([GNULIB_CLOSE]) + GNULIB_DUP=0; AC_SUBST([GNULIB_DUP]) + GNULIB_DUP2=0; AC_SUBST([GNULIB_DUP2]) + GNULIB_DUP3=0; AC_SUBST([GNULIB_DUP3]) + GNULIB_ENVIRON=0; AC_SUBST([GNULIB_ENVIRON]) + GNULIB_EUIDACCESS=0; AC_SUBST([GNULIB_EUIDACCESS]) + GNULIB_FACCESSAT=0; AC_SUBST([GNULIB_FACCESSAT]) + GNULIB_FCHDIR=0; AC_SUBST([GNULIB_FCHDIR]) + GNULIB_FCHOWNAT=0; AC_SUBST([GNULIB_FCHOWNAT]) + GNULIB_FDATASYNC=0; AC_SUBST([GNULIB_FDATASYNC]) + GNULIB_FSYNC=0; AC_SUBST([GNULIB_FSYNC]) + GNULIB_FTRUNCATE=0; AC_SUBST([GNULIB_FTRUNCATE]) + GNULIB_GETCWD=0; AC_SUBST([GNULIB_GETCWD]) + GNULIB_GETDOMAINNAME=0; AC_SUBST([GNULIB_GETDOMAINNAME]) + GNULIB_GETDTABLESIZE=0; AC_SUBST([GNULIB_GETDTABLESIZE]) + GNULIB_GETGROUPS=0; AC_SUBST([GNULIB_GETGROUPS]) + GNULIB_GETHOSTNAME=0; AC_SUBST([GNULIB_GETHOSTNAME]) + GNULIB_GETLOGIN=0; AC_SUBST([GNULIB_GETLOGIN]) + GNULIB_GETLOGIN_R=0; AC_SUBST([GNULIB_GETLOGIN_R]) + GNULIB_GETPAGESIZE=0; AC_SUBST([GNULIB_GETPAGESIZE]) + GNULIB_GETUSERSHELL=0; AC_SUBST([GNULIB_GETUSERSHELL]) + GNULIB_GROUP_MEMBER=0; AC_SUBST([GNULIB_GROUP_MEMBER]) + GNULIB_ISATTY=0; AC_SUBST([GNULIB_ISATTY]) + GNULIB_LCHOWN=0; AC_SUBST([GNULIB_LCHOWN]) + GNULIB_LINK=0; AC_SUBST([GNULIB_LINK]) + GNULIB_LINKAT=0; AC_SUBST([GNULIB_LINKAT]) + GNULIB_LSEEK=0; AC_SUBST([GNULIB_LSEEK]) + GNULIB_PIPE=0; AC_SUBST([GNULIB_PIPE]) + GNULIB_PIPE2=0; AC_SUBST([GNULIB_PIPE2]) + GNULIB_PREAD=0; AC_SUBST([GNULIB_PREAD]) + GNULIB_PWRITE=0; AC_SUBST([GNULIB_PWRITE]) + GNULIB_READ=0; AC_SUBST([GNULIB_READ]) + GNULIB_READLINK=0; AC_SUBST([GNULIB_READLINK]) + GNULIB_READLINKAT=0; AC_SUBST([GNULIB_READLINKAT]) + GNULIB_RMDIR=0; AC_SUBST([GNULIB_RMDIR]) + GNULIB_SETHOSTNAME=0; AC_SUBST([GNULIB_SETHOSTNAME]) + GNULIB_SLEEP=0; AC_SUBST([GNULIB_SLEEP]) + GNULIB_SYMLINK=0; AC_SUBST([GNULIB_SYMLINK]) + GNULIB_SYMLINKAT=0; AC_SUBST([GNULIB_SYMLINKAT]) + GNULIB_TTYNAME_R=0; AC_SUBST([GNULIB_TTYNAME_R]) + GNULIB_UNISTD_H_NONBLOCKING=0; AC_SUBST([GNULIB_UNISTD_H_NONBLOCKING]) + GNULIB_UNISTD_H_SIGPIPE=0; AC_SUBST([GNULIB_UNISTD_H_SIGPIPE]) + GNULIB_UNLINK=0; AC_SUBST([GNULIB_UNLINK]) + GNULIB_UNLINKAT=0; AC_SUBST([GNULIB_UNLINKAT]) + GNULIB_USLEEP=0; AC_SUBST([GNULIB_USLEEP]) + GNULIB_WRITE=0; AC_SUBST([GNULIB_WRITE]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_CHOWN=1; AC_SUBST([HAVE_CHOWN]) + HAVE_DUP2=1; AC_SUBST([HAVE_DUP2]) + HAVE_DUP3=1; AC_SUBST([HAVE_DUP3]) + HAVE_EUIDACCESS=1; AC_SUBST([HAVE_EUIDACCESS]) + HAVE_FACCESSAT=1; AC_SUBST([HAVE_FACCESSAT]) + HAVE_FCHDIR=1; AC_SUBST([HAVE_FCHDIR]) + HAVE_FCHOWNAT=1; AC_SUBST([HAVE_FCHOWNAT]) + HAVE_FDATASYNC=1; AC_SUBST([HAVE_FDATASYNC]) + HAVE_FSYNC=1; AC_SUBST([HAVE_FSYNC]) + HAVE_FTRUNCATE=1; AC_SUBST([HAVE_FTRUNCATE]) + HAVE_GETDTABLESIZE=1; AC_SUBST([HAVE_GETDTABLESIZE]) + HAVE_GETGROUPS=1; AC_SUBST([HAVE_GETGROUPS]) + HAVE_GETHOSTNAME=1; AC_SUBST([HAVE_GETHOSTNAME]) + HAVE_GETLOGIN=1; AC_SUBST([HAVE_GETLOGIN]) + HAVE_GETPAGESIZE=1; AC_SUBST([HAVE_GETPAGESIZE]) + HAVE_GROUP_MEMBER=1; AC_SUBST([HAVE_GROUP_MEMBER]) + HAVE_LCHOWN=1; AC_SUBST([HAVE_LCHOWN]) + HAVE_LINK=1; AC_SUBST([HAVE_LINK]) + HAVE_LINKAT=1; AC_SUBST([HAVE_LINKAT]) + HAVE_PIPE=1; AC_SUBST([HAVE_PIPE]) + HAVE_PIPE2=1; AC_SUBST([HAVE_PIPE2]) + HAVE_PREAD=1; AC_SUBST([HAVE_PREAD]) + HAVE_PWRITE=1; AC_SUBST([HAVE_PWRITE]) + HAVE_READLINK=1; AC_SUBST([HAVE_READLINK]) + HAVE_READLINKAT=1; AC_SUBST([HAVE_READLINKAT]) + HAVE_SETHOSTNAME=1; AC_SUBST([HAVE_SETHOSTNAME]) + HAVE_SLEEP=1; AC_SUBST([HAVE_SLEEP]) + HAVE_SYMLINK=1; AC_SUBST([HAVE_SYMLINK]) + HAVE_SYMLINKAT=1; AC_SUBST([HAVE_SYMLINKAT]) + HAVE_UNLINKAT=1; AC_SUBST([HAVE_UNLINKAT]) + HAVE_USLEEP=1; AC_SUBST([HAVE_USLEEP]) + HAVE_DECL_ENVIRON=1; AC_SUBST([HAVE_DECL_ENVIRON]) + HAVE_DECL_FCHDIR=1; AC_SUBST([HAVE_DECL_FCHDIR]) + HAVE_DECL_FDATASYNC=1; AC_SUBST([HAVE_DECL_FDATASYNC]) + HAVE_DECL_GETDOMAINNAME=1; AC_SUBST([HAVE_DECL_GETDOMAINNAME]) + HAVE_DECL_GETLOGIN_R=1; AC_SUBST([HAVE_DECL_GETLOGIN_R]) + HAVE_DECL_GETPAGESIZE=1; AC_SUBST([HAVE_DECL_GETPAGESIZE]) + HAVE_DECL_GETUSERSHELL=1; AC_SUBST([HAVE_DECL_GETUSERSHELL]) + HAVE_DECL_SETHOSTNAME=1; AC_SUBST([HAVE_DECL_SETHOSTNAME]) + HAVE_DECL_TTYNAME_R=1; AC_SUBST([HAVE_DECL_TTYNAME_R]) + HAVE_OS_H=0; AC_SUBST([HAVE_OS_H]) + HAVE_SYS_PARAM_H=0; AC_SUBST([HAVE_SYS_PARAM_H]) + REPLACE_CHOWN=0; AC_SUBST([REPLACE_CHOWN]) + REPLACE_CLOSE=0; AC_SUBST([REPLACE_CLOSE]) + REPLACE_DUP=0; AC_SUBST([REPLACE_DUP]) + REPLACE_DUP2=0; AC_SUBST([REPLACE_DUP2]) + REPLACE_FCHOWNAT=0; AC_SUBST([REPLACE_FCHOWNAT]) + REPLACE_GETCWD=0; AC_SUBST([REPLACE_GETCWD]) + REPLACE_GETDOMAINNAME=0; AC_SUBST([REPLACE_GETDOMAINNAME]) + REPLACE_GETLOGIN_R=0; AC_SUBST([REPLACE_GETLOGIN_R]) + REPLACE_GETGROUPS=0; AC_SUBST([REPLACE_GETGROUPS]) + REPLACE_GETPAGESIZE=0; AC_SUBST([REPLACE_GETPAGESIZE]) + REPLACE_ISATTY=0; AC_SUBST([REPLACE_ISATTY]) + REPLACE_LCHOWN=0; AC_SUBST([REPLACE_LCHOWN]) + REPLACE_LINK=0; AC_SUBST([REPLACE_LINK]) + REPLACE_LINKAT=0; AC_SUBST([REPLACE_LINKAT]) + REPLACE_LSEEK=0; AC_SUBST([REPLACE_LSEEK]) + REPLACE_PREAD=0; AC_SUBST([REPLACE_PREAD]) + REPLACE_PWRITE=0; AC_SUBST([REPLACE_PWRITE]) + REPLACE_READ=0; AC_SUBST([REPLACE_READ]) + REPLACE_READLINK=0; AC_SUBST([REPLACE_READLINK]) + REPLACE_RMDIR=0; AC_SUBST([REPLACE_RMDIR]) + REPLACE_SLEEP=0; AC_SUBST([REPLACE_SLEEP]) + REPLACE_SYMLINK=0; AC_SUBST([REPLACE_SYMLINK]) + REPLACE_TTYNAME_R=0; AC_SUBST([REPLACE_TTYNAME_R]) + REPLACE_UNLINK=0; AC_SUBST([REPLACE_UNLINK]) + REPLACE_UNLINKAT=0; AC_SUBST([REPLACE_UNLINKAT]) + REPLACE_USLEEP=0; AC_SUBST([REPLACE_USLEEP]) + REPLACE_WRITE=0; AC_SUBST([REPLACE_WRITE]) + UNISTD_H_HAVE_WINSOCK2_H=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H]) + UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0; + AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS]) +]) diff --git a/gnulib/m4/vasnprintf.m4 b/gnulib/m4/vasnprintf.m4 new file mode 100644 index 0000000..0ce11da --- /dev/null +++ b/gnulib/m4/vasnprintf.m4 @@ -0,0 +1,292 @@ +# vasnprintf.m4 serial 35 +dnl Copyright (C) 2002-2004, 2006-2012 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_VASNPRINTF], +[ + AC_CHECK_FUNCS_ONCE([vasnprintf]) + if test $ac_cv_func_vasnprintf = no; then + gl_REPLACE_VASNPRINTF + fi +]) + +AC_DEFUN([gl_REPLACE_VASNPRINTF], +[ + AC_CHECK_FUNCS_ONCE([vasnprintf]) + AC_LIBOBJ([vasnprintf]) + AC_LIBOBJ([printf-args]) + AC_LIBOBJ([printf-parse]) + AC_LIBOBJ([asnprintf]) + if test $ac_cv_func_vasnprintf = yes; then + AC_DEFINE([REPLACE_VASNPRINTF], [1], + [Define if vasnprintf exists but is overridden by gnulib.]) + fi + gl_PREREQ_PRINTF_ARGS + gl_PREREQ_PRINTF_PARSE + gl_PREREQ_VASNPRINTF + gl_PREREQ_ASNPRINTF +]) + +# Prerequisites of lib/printf-args.h, lib/printf-args.c. +AC_DEFUN([gl_PREREQ_PRINTF_ARGS], +[ + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) + AC_REQUIRE([gt_TYPE_WCHAR_T]) + AC_REQUIRE([gt_TYPE_WINT_T]) +]) + +# Prerequisites of lib/printf-parse.h, lib/printf-parse.c. +AC_DEFUN([gl_PREREQ_PRINTF_PARSE], +[ + AC_REQUIRE([gl_FEATURES_H]) + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) + AC_REQUIRE([gt_TYPE_WCHAR_T]) + AC_REQUIRE([gt_TYPE_WINT_T]) + AC_REQUIRE([AC_TYPE_SIZE_T]) + AC_CHECK_TYPE([ptrdiff_t], , + [AC_DEFINE([ptrdiff_t], [long], + [Define as the type of the result of subtracting two pointers, if the system doesn't define it.]) + ]) + AC_REQUIRE([gt_AC_TYPE_INTMAX_T]) +]) + +# Prerequisites of lib/vasnprintf.c. +AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF], +[ + AC_REQUIRE([AC_C_INLINE]) + AC_REQUIRE([AC_FUNC_ALLOCA]) + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) + AC_REQUIRE([gt_TYPE_WCHAR_T]) + AC_REQUIRE([gt_TYPE_WINT_T]) + AC_CHECK_FUNCS([snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb]) + dnl Use the _snprintf function only if it is declared (because on NetBSD it + dnl is defined as a weak alias of snprintf; we prefer to use the latter). + AC_CHECK_DECLS([_snprintf], , , [[#include <stdio.h>]]) + dnl Knowing DBL_EXPBIT0_WORD and DBL_EXPBIT0_BIT enables an optimization + dnl in the code for NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE. + AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION]) + dnl We can avoid a lot of code by assuming that snprintf's return value + dnl conforms to ISO C99. So check that. + AC_REQUIRE([gl_SNPRINTF_RETVAL_C99]) + case "$gl_cv_func_snprintf_retval_c99" in + *yes) + AC_DEFINE([HAVE_SNPRINTF_RETVAL_C99], [1], + [Define if the return value of the snprintf function is the number of + of bytes (excluding the terminating NUL) that would have been produced + if the buffer had been large enough.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting 'long double' +# arguments. +AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE], +[ + AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) + case "$gl_cv_func_printf_long_double" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], + [Define if the vasnprintf implementation needs special code for + 'long double' arguments.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting infinite 'double' +# arguments. +AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE], +[ + AC_REQUIRE([gl_PRINTF_INFINITE]) + case "$gl_cv_func_printf_infinite" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_INFINITE_DOUBLE], [1], + [Define if the vasnprintf implementation needs special code for + infinite 'double' arguments.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting infinite 'long double' +# arguments. +AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE], +[ + AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) + dnl There is no need to set NEED_PRINTF_INFINITE_LONG_DOUBLE if + dnl NEED_PRINTF_LONG_DOUBLE is already set. + AC_REQUIRE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE]) + case "$gl_cv_func_printf_long_double" in + *yes) + case "$gl_cv_func_printf_infinite_long_double" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_INFINITE_LONG_DOUBLE], [1], + [Define if the vasnprintf implementation needs special code for + infinite 'long double' arguments.]) + ;; + esac + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting the 'a' directive. +AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_A], +[ + AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) + case "$gl_cv_func_printf_directive_a" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_DIRECTIVE_A], [1], + [Define if the vasnprintf implementation needs special code for + the 'a' and 'A' directives.]) + AC_CHECK_FUNCS([nl_langinfo]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting the 'F' directive. +AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_F], +[ + AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) + case "$gl_cv_func_printf_directive_f" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_DIRECTIVE_F], [1], + [Define if the vasnprintf implementation needs special code for + the 'F' directive.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting the 'ls' directive. +AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_LS], +[ + AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) + case "$gl_cv_func_printf_directive_ls" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_DIRECTIVE_LS], [1], + [Define if the vasnprintf implementation needs special code for + the 'ls' directive.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting the ' flag. +AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_GROUPING], +[ + AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) + case "$gl_cv_func_printf_flag_grouping" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_FLAG_GROUPING], [1], + [Define if the vasnprintf implementation needs special code for the + ' flag.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting the '-' flag. +AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST], +[ + AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) + case "$gl_cv_func_printf_flag_leftadjust" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_FLAG_LEFTADJUST], [1], + [Define if the vasnprintf implementation needs special code for the + '-' flag.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting the 0 flag. +AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_ZERO], +[ + AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) + case "$gl_cv_func_printf_flag_zero" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_FLAG_ZERO], [1], + [Define if the vasnprintf implementation needs special code for the + 0 flag.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting large precisions. +AC_DEFUN([gl_PREREQ_VASNPRINTF_PRECISION], +[ + AC_REQUIRE([gl_PRINTF_PRECISION]) + case "$gl_cv_func_printf_precision" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_UNBOUNDED_PRECISION], [1], + [Define if the vasnprintf implementation needs special code for + supporting large precisions without arbitrary bounds.]) + AC_DEFINE([NEED_PRINTF_DOUBLE], [1], + [Define if the vasnprintf implementation needs special code for + 'double' arguments.]) + AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], + [Define if the vasnprintf implementation needs special code for + 'long double' arguments.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for surviving out-of-memory +# conditions. +AC_DEFUN([gl_PREREQ_VASNPRINTF_ENOMEM], +[ + AC_REQUIRE([gl_PRINTF_ENOMEM]) + case "$gl_cv_func_printf_enomem" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_ENOMEM], [1], + [Define if the vasnprintf implementation needs special code for + surviving out-of-memory conditions.]) + AC_DEFINE([NEED_PRINTF_DOUBLE], [1], + [Define if the vasnprintf implementation needs special code for + 'double' arguments.]) + AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], + [Define if the vasnprintf implementation needs special code for + 'long double' arguments.]) + ;; + esac +]) + +# Prerequisites of lib/vasnprintf.c including all extras for POSIX compliance. +AC_DEFUN([gl_PREREQ_VASNPRINTF_WITH_EXTRAS], +[ + AC_REQUIRE([gl_PREREQ_VASNPRINTF]) + gl_PREREQ_VASNPRINTF_LONG_DOUBLE + gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE + gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE + gl_PREREQ_VASNPRINTF_DIRECTIVE_A + gl_PREREQ_VASNPRINTF_DIRECTIVE_F + gl_PREREQ_VASNPRINTF_DIRECTIVE_LS + gl_PREREQ_VASNPRINTF_FLAG_GROUPING + gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST + gl_PREREQ_VASNPRINTF_FLAG_ZERO + gl_PREREQ_VASNPRINTF_PRECISION + gl_PREREQ_VASNPRINTF_ENOMEM +]) + +# Prerequisites of lib/asnprintf.c. +AC_DEFUN([gl_PREREQ_ASNPRINTF], +[ +]) diff --git a/gnulib/m4/vsnprintf.m4 b/gnulib/m4/vsnprintf.m4 new file mode 100644 index 0000000..22ec57b --- /dev/null +++ b/gnulib/m4/vsnprintf.m4 @@ -0,0 +1,54 @@ +# vsnprintf.m4 serial 6 +dnl Copyright (C) 2002-2004, 2007-2012 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. + +dnl Libintl 0.17 will replace vsnprintf only if it does not support %1$s, +dnl but defers to any gnulib vsnprintf replacements. Therefore, gnulib +dnl must guarantee that the decision for replacing vsnprintf is a superset +dnl of the reasons checked by libintl. +AC_DEFUN([gl_FUNC_VSNPRINTF], +[ + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + gl_cv_func_vsnprintf_usable=no + AC_CHECK_FUNCS([vsnprintf]) + if test $ac_cv_func_vsnprintf = yes; then + gl_SNPRINTF_SIZE1 + case "$gl_cv_func_snprintf_size1" in + *yes) + gl_SNPRINTF_RETVAL_C99 + case "$gl_cv_func_snprintf_retval_c99" in + *yes) + gl_PRINTF_POSITIONS + case "$gl_cv_func_printf_positions" in + *yes) + gl_cv_func_vsnprintf_usable=yes + ;; + esac + ;; + esac + ;; + esac + fi + if test $gl_cv_func_vsnprintf_usable = no; then + gl_REPLACE_VSNPRINTF + fi + AC_CHECK_DECLS_ONCE([vsnprintf]) + if test $ac_cv_have_decl_vsnprintf = no; then + HAVE_DECL_VSNPRINTF=0 + fi +]) + +AC_DEFUN([gl_REPLACE_VSNPRINTF], +[ + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + AC_LIBOBJ([vsnprintf]) + if test $ac_cv_func_vsnprintf = yes; then + REPLACE_VSNPRINTF=1 + fi + gl_PREREQ_VSNPRINTF +]) + +# Prerequisites of lib/vsnprintf.c. +AC_DEFUN([gl_PREREQ_VSNPRINTF], [:]) diff --git a/gnulib/m4/warn-on-use.m4 b/gnulib/m4/warn-on-use.m4 new file mode 100644 index 0000000..03b113c --- /dev/null +++ b/gnulib/m4/warn-on-use.m4 @@ -0,0 +1,47 @@ +# warn-on-use.m4 serial 4 +dnl Copyright (C) 2010-2012 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. + +# gl_WARN_ON_USE_PREPARE(INCLUDES, NAMES) +# --------------------------------------- +# For each whitespace-separated element in the list of NAMES, define +# HAVE_RAW_DECL_name if the function has a declaration among INCLUDES +# even after being undefined as a macro. +# +# See warn-on-use.h for some hints on how to poison function names, as +# well as ideas on poisoning global variables and macros. NAMES may +# include global variables, but remember that only functions work with +# _GL_WARN_ON_USE. Typically, INCLUDES only needs to list a single +# header, but if the replacement header pulls in other headers because +# some systems declare functions in the wrong header, then INCLUDES +# should do likewise. +# +# If you assume C89, then it is generally safe to assume declarations +# for functions declared in that standard (such as gets) without +# needing gl_WARN_ON_USE_PREPARE. +AC_DEFUN([gl_WARN_ON_USE_PREPARE], +[ + m4_foreach_w([gl_decl], [$2], + [AH_TEMPLATE([HAVE_RAW_DECL_]AS_TR_CPP(m4_defn([gl_decl])), + [Define to 1 if ]m4_defn([gl_decl])[ is declared even after + undefining macros.])])dnl +dnl FIXME: gl_Symbol must be used unquoted until we can assume +dnl autoconf 2.64 or newer. + for gl_func in m4_flatten([$2]); do + AS_VAR_PUSHDEF([gl_Symbol], [gl_cv_have_raw_decl_$gl_func])dnl + AC_CACHE_CHECK([whether $gl_func is declared without a macro], + gl_Symbol, + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$1], +[@%:@undef $gl_func + (void) $gl_func;])], + [AS_VAR_SET(gl_Symbol, [yes])], [AS_VAR_SET(gl_Symbol, [no])])]) + AS_VAR_IF(gl_Symbol, [yes], + [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_RAW_DECL_$gl_func]), [1]) + dnl shortcut - if the raw declaration exists, then set a cache + dnl variable to allow skipping any later AC_CHECK_DECL efforts + eval ac_cv_have_decl_$gl_func=yes]) + AS_VAR_POPDEF([gl_Symbol])dnl + done +]) diff --git a/gnulib/m4/wchar_h.m4 b/gnulib/m4/wchar_h.m4 new file mode 100644 index 0000000..c7a8b2d --- /dev/null +++ b/gnulib/m4/wchar_h.m4 @@ -0,0 +1,225 @@ +dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues. + +dnl Copyright (C) 2007-2012 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. + +dnl Written by Eric Blake. + +# wchar_h.m4 serial 39 + +AC_DEFUN([gl_WCHAR_H], +[ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + AC_REQUIRE([gl_WCHAR_H_INLINE_OK]) + dnl Prepare for creating substitute <wchar.h>. + dnl Check for <wchar.h> (missing in Linux uClibc when built without wide + dnl character support). + dnl <wchar.h> is always overridden, because of GNULIB_POSIXCHECK. + gl_CHECK_NEXT_HEADERS([wchar.h]) + if test $ac_cv_header_wchar_h = yes; then + HAVE_WCHAR_H=1 + else + HAVE_WCHAR_H=0 + fi + AC_SUBST([HAVE_WCHAR_H]) + + AC_REQUIRE([gl_FEATURES_H]) + + AC_REQUIRE([gt_TYPE_WINT_T]) + if test $gt_cv_c_wint_t = yes; then + HAVE_WINT_T=1 + else + HAVE_WINT_T=0 + fi + AC_SUBST([HAVE_WINT_T]) + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use. + gl_WARN_ON_USE_PREPARE([[ +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#if !(defined __GLIBC__ && !defined __UCLIBC__) +# include <stddef.h> +# include <stdio.h> +# include <time.h> +#endif +#include <wchar.h> + ]], + [btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb + wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmemset + wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp + wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr + wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth + ]) +]) + +dnl Check whether <wchar.h> is usable at all. +AC_DEFUN([gl_WCHAR_H_INLINE_OK], +[ + dnl Test whether <wchar.h> suffers due to the transition from '__inline' to + dnl 'gnu_inline'. See <http://sourceware.org/bugzilla/show_bug.cgi?id=4022> + dnl and <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>. In summary, + dnl glibc version 2.5 or older, together with gcc version 4.3 or newer and + dnl the option -std=c99 or -std=gnu99, leads to a broken <wchar.h>. + AC_CACHE_CHECK([whether <wchar.h> uses 'inline' correctly], + [gl_cv_header_wchar_h_correct_inline], + [gl_cv_header_wchar_h_correct_inline=yes + AC_LANG_CONFTEST([ + AC_LANG_SOURCE([[#define wcstod renamed_wcstod +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +extern int zero (void); +int main () { return zero(); } +]])]) + if AC_TRY_EVAL([ac_compile]); then + mv conftest.$ac_objext conftest1.$ac_objext + AC_LANG_CONFTEST([ + AC_LANG_SOURCE([[#define wcstod renamed_wcstod +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int zero (void) { return 0; } +]])]) + if AC_TRY_EVAL([ac_compile]); then + mv conftest.$ac_objext conftest2.$ac_objext + if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&AS_MESSAGE_LOG_FD 2>&1; then + : + else + gl_cv_header_wchar_h_correct_inline=no + fi + fi + fi + rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext + ]) + if test $gl_cv_header_wchar_h_correct_inline = no; then + AC_MSG_ERROR([<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS). +This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in +C99 mode. You have four options: + - Add the flag -fgnu89-inline to CC and reconfigure, or + - Fix your include files, using parts of + <http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or + - Use a gcc version older than 4.3, or + - Don't use the flags -std=c99 or -std=gnu99. +Configuration aborted.]) + fi +]) + +AC_DEFUN([gl_WCHAR_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) + dnl Define it also as a C macro, for the benefit of the unit tests. + gl_MODULE_INDICATOR_FOR_TESTS([$1]) +]) + +AC_DEFUN([gl_WCHAR_H_DEFAULTS], +[ + GNULIB_BTOWC=0; AC_SUBST([GNULIB_BTOWC]) + GNULIB_WCTOB=0; AC_SUBST([GNULIB_WCTOB]) + GNULIB_MBSINIT=0; AC_SUBST([GNULIB_MBSINIT]) + GNULIB_MBRTOWC=0; AC_SUBST([GNULIB_MBRTOWC]) + GNULIB_MBRLEN=0; AC_SUBST([GNULIB_MBRLEN]) + GNULIB_MBSRTOWCS=0; AC_SUBST([GNULIB_MBSRTOWCS]) + GNULIB_MBSNRTOWCS=0; AC_SUBST([GNULIB_MBSNRTOWCS]) + GNULIB_WCRTOMB=0; AC_SUBST([GNULIB_WCRTOMB]) + GNULIB_WCSRTOMBS=0; AC_SUBST([GNULIB_WCSRTOMBS]) + GNULIB_WCSNRTOMBS=0; AC_SUBST([GNULIB_WCSNRTOMBS]) + GNULIB_WCWIDTH=0; AC_SUBST([GNULIB_WCWIDTH]) + GNULIB_WMEMCHR=0; AC_SUBST([GNULIB_WMEMCHR]) + GNULIB_WMEMCMP=0; AC_SUBST([GNULIB_WMEMCMP]) + GNULIB_WMEMCPY=0; AC_SUBST([GNULIB_WMEMCPY]) + GNULIB_WMEMMOVE=0; AC_SUBST([GNULIB_WMEMMOVE]) + GNULIB_WMEMSET=0; AC_SUBST([GNULIB_WMEMSET]) + GNULIB_WCSLEN=0; AC_SUBST([GNULIB_WCSLEN]) + GNULIB_WCSNLEN=0; AC_SUBST([GNULIB_WCSNLEN]) + GNULIB_WCSCPY=0; AC_SUBST([GNULIB_WCSCPY]) + GNULIB_WCPCPY=0; AC_SUBST([GNULIB_WCPCPY]) + GNULIB_WCSNCPY=0; AC_SUBST([GNULIB_WCSNCPY]) + GNULIB_WCPNCPY=0; AC_SUBST([GNULIB_WCPNCPY]) + GNULIB_WCSCAT=0; AC_SUBST([GNULIB_WCSCAT]) + GNULIB_WCSNCAT=0; AC_SUBST([GNULIB_WCSNCAT]) + GNULIB_WCSCMP=0; AC_SUBST([GNULIB_WCSCMP]) + GNULIB_WCSNCMP=0; AC_SUBST([GNULIB_WCSNCMP]) + GNULIB_WCSCASECMP=0; AC_SUBST([GNULIB_WCSCASECMP]) + GNULIB_WCSNCASECMP=0; AC_SUBST([GNULIB_WCSNCASECMP]) + GNULIB_WCSCOLL=0; AC_SUBST([GNULIB_WCSCOLL]) + GNULIB_WCSXFRM=0; AC_SUBST([GNULIB_WCSXFRM]) + GNULIB_WCSDUP=0; AC_SUBST([GNULIB_WCSDUP]) + GNULIB_WCSCHR=0; AC_SUBST([GNULIB_WCSCHR]) + GNULIB_WCSRCHR=0; AC_SUBST([GNULIB_WCSRCHR]) + GNULIB_WCSCSPN=0; AC_SUBST([GNULIB_WCSCSPN]) + GNULIB_WCSSPN=0; AC_SUBST([GNULIB_WCSSPN]) + GNULIB_WCSPBRK=0; AC_SUBST([GNULIB_WCSPBRK]) + GNULIB_WCSSTR=0; AC_SUBST([GNULIB_WCSSTR]) + GNULIB_WCSTOK=0; AC_SUBST([GNULIB_WCSTOK]) + GNULIB_WCSWIDTH=0; AC_SUBST([GNULIB_WCSWIDTH]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_BTOWC=1; AC_SUBST([HAVE_BTOWC]) + HAVE_MBSINIT=1; AC_SUBST([HAVE_MBSINIT]) + HAVE_MBRTOWC=1; AC_SUBST([HAVE_MBRTOWC]) + HAVE_MBRLEN=1; AC_SUBST([HAVE_MBRLEN]) + HAVE_MBSRTOWCS=1; AC_SUBST([HAVE_MBSRTOWCS]) + HAVE_MBSNRTOWCS=1; AC_SUBST([HAVE_MBSNRTOWCS]) + HAVE_WCRTOMB=1; AC_SUBST([HAVE_WCRTOMB]) + HAVE_WCSRTOMBS=1; AC_SUBST([HAVE_WCSRTOMBS]) + HAVE_WCSNRTOMBS=1; AC_SUBST([HAVE_WCSNRTOMBS]) + HAVE_WMEMCHR=1; AC_SUBST([HAVE_WMEMCHR]) + HAVE_WMEMCMP=1; AC_SUBST([HAVE_WMEMCMP]) + HAVE_WMEMCPY=1; AC_SUBST([HAVE_WMEMCPY]) + HAVE_WMEMMOVE=1; AC_SUBST([HAVE_WMEMMOVE]) + HAVE_WMEMSET=1; AC_SUBST([HAVE_WMEMSET]) + HAVE_WCSLEN=1; AC_SUBST([HAVE_WCSLEN]) + HAVE_WCSNLEN=1; AC_SUBST([HAVE_WCSNLEN]) + HAVE_WCSCPY=1; AC_SUBST([HAVE_WCSCPY]) + HAVE_WCPCPY=1; AC_SUBST([HAVE_WCPCPY]) + HAVE_WCSNCPY=1; AC_SUBST([HAVE_WCSNCPY]) + HAVE_WCPNCPY=1; AC_SUBST([HAVE_WCPNCPY]) + HAVE_WCSCAT=1; AC_SUBST([HAVE_WCSCAT]) + HAVE_WCSNCAT=1; AC_SUBST([HAVE_WCSNCAT]) + HAVE_WCSCMP=1; AC_SUBST([HAVE_WCSCMP]) + HAVE_WCSNCMP=1; AC_SUBST([HAVE_WCSNCMP]) + HAVE_WCSCASECMP=1; AC_SUBST([HAVE_WCSCASECMP]) + HAVE_WCSNCASECMP=1; AC_SUBST([HAVE_WCSNCASECMP]) + HAVE_WCSCOLL=1; AC_SUBST([HAVE_WCSCOLL]) + HAVE_WCSXFRM=1; AC_SUBST([HAVE_WCSXFRM]) + HAVE_WCSDUP=1; AC_SUBST([HAVE_WCSDUP]) + HAVE_WCSCHR=1; AC_SUBST([HAVE_WCSCHR]) + HAVE_WCSRCHR=1; AC_SUBST([HAVE_WCSRCHR]) + HAVE_WCSCSPN=1; AC_SUBST([HAVE_WCSCSPN]) + HAVE_WCSSPN=1; AC_SUBST([HAVE_WCSSPN]) + HAVE_WCSPBRK=1; AC_SUBST([HAVE_WCSPBRK]) + HAVE_WCSSTR=1; AC_SUBST([HAVE_WCSSTR]) + HAVE_WCSTOK=1; AC_SUBST([HAVE_WCSTOK]) + HAVE_WCSWIDTH=1; AC_SUBST([HAVE_WCSWIDTH]) + HAVE_DECL_WCTOB=1; AC_SUBST([HAVE_DECL_WCTOB]) + HAVE_DECL_WCWIDTH=1; AC_SUBST([HAVE_DECL_WCWIDTH]) + REPLACE_MBSTATE_T=0; AC_SUBST([REPLACE_MBSTATE_T]) + REPLACE_BTOWC=0; AC_SUBST([REPLACE_BTOWC]) + REPLACE_WCTOB=0; AC_SUBST([REPLACE_WCTOB]) + REPLACE_MBSINIT=0; AC_SUBST([REPLACE_MBSINIT]) + REPLACE_MBRTOWC=0; AC_SUBST([REPLACE_MBRTOWC]) + REPLACE_MBRLEN=0; AC_SUBST([REPLACE_MBRLEN]) + REPLACE_MBSRTOWCS=0; AC_SUBST([REPLACE_MBSRTOWCS]) + REPLACE_MBSNRTOWCS=0; AC_SUBST([REPLACE_MBSNRTOWCS]) + REPLACE_WCRTOMB=0; AC_SUBST([REPLACE_WCRTOMB]) + REPLACE_WCSRTOMBS=0; AC_SUBST([REPLACE_WCSRTOMBS]) + REPLACE_WCSNRTOMBS=0; AC_SUBST([REPLACE_WCSNRTOMBS]) + REPLACE_WCWIDTH=0; AC_SUBST([REPLACE_WCWIDTH]) + REPLACE_WCSWIDTH=0; AC_SUBST([REPLACE_WCSWIDTH]) +]) diff --git a/gnulib/m4/wchar_t.m4 b/gnulib/m4/wchar_t.m4 new file mode 100644 index 0000000..534735d --- /dev/null +++ b/gnulib/m4/wchar_t.m4 @@ -0,0 +1,24 @@ +# wchar_t.m4 serial 4 (gettext-0.18.2) +dnl Copyright (C) 2002-2003, 2008-2012 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. + +dnl From Bruno Haible. +dnl Test whether <stddef.h> has the 'wchar_t' type. +dnl Prerequisite: AC_PROG_CC + +AC_DEFUN([gt_TYPE_WCHAR_T], +[ + AC_CACHE_CHECK([for wchar_t], [gt_cv_c_wchar_t], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <stddef.h> + wchar_t foo = (wchar_t)'\0';]], + [[]])], + [gt_cv_c_wchar_t=yes], + [gt_cv_c_wchar_t=no])]) + if test $gt_cv_c_wchar_t = yes; then + AC_DEFINE([HAVE_WCHAR_T], [1], [Define if you have the 'wchar_t' type.]) + fi +]) diff --git a/gnulib/m4/wint_t.m4 b/gnulib/m4/wint_t.m4 new file mode 100644 index 0000000..3260cce --- /dev/null +++ b/gnulib/m4/wint_t.m4 @@ -0,0 +1,32 @@ +# wint_t.m4 serial 5 (gettext-0.18.2) +dnl Copyright (C) 2003, 2007-2012 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. + +dnl From Bruno Haible. +dnl Test whether <wchar.h> has the 'wint_t' type. +dnl Prerequisite: AC_PROG_CC + +AC_DEFUN([gt_TYPE_WINT_T], +[ + AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[ +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included + before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> + wint_t foo = (wchar_t)'\0';]], + [[]])], + [gt_cv_c_wint_t=yes], + [gt_cv_c_wint_t=no])]) + if test $gt_cv_c_wint_t = yes; then + AC_DEFINE([HAVE_WINT_T], [1], [Define if you have the 'wint_t' type.]) + fi +]) diff --git a/gnulib/m4/xsize.m4 b/gnulib/m4/xsize.m4 new file mode 100644 index 0000000..b3b7fee --- /dev/null +++ b/gnulib/m4/xsize.m4 @@ -0,0 +1,13 @@ +# xsize.m4 serial 4 +dnl Copyright (C) 2003-2004, 2008-2012 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_XSIZE], +[ + dnl Prerequisites of lib/xsize.h. + AC_REQUIRE([gl_SIZE_MAX]) + AC_REQUIRE([AC_C_INLINE]) + AC_CHECK_HEADERS([stdint.h]) +]) diff --git a/gnulib/po/LINGUAS b/gnulib/po/LINGUAS new file mode 100644 index 0000000..a1c9db7 --- /dev/null +++ b/gnulib/po/LINGUAS @@ -0,0 +1,38 @@ +# Set of available languages. +af +be +bg +ca +cs +da +de +el +eo +es +et +eu +fi +fr +ga +gl +hu +it +ja +ko +ms +nb +nl +pl +pt +pt_BR +ro +ru +rw +sk +sl +sv +tr +uk +vi +zh_CN +zh_TW diff --git a/gnulib/po/Makefile.in.in b/gnulib/po/Makefile.in.in new file mode 100644 index 0000000..83d8838 --- /dev/null +++ b/gnulib/po/Makefile.in.in @@ -0,0 +1,444 @@ +# Makefile for PO directory in any package using GNU gettext. +# Copyright (C) 1995-1997, 2000-2007, 2009-2010 by Ulrich Drepper <drepper@gnu.ai.mit.edu> +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU General Public +# License but which still want to provide support for the GNU gettext +# functionality. +# Please note that the actual code of GNU gettext is covered by the GNU +# General Public License and is *not* in the public domain. +# +# Origin: gettext-0.18 +GETTEXT_MACRO_VERSION = 0.18 + +PACKAGE = @PACKAGE@ +VERSION = @VERSION@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ + +SHELL = /bin/sh +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +datarootdir = @datarootdir@ +datadir = @datadir@ +localedir = @localedir@ +gettextsrcdir = $(datadir)/gettext/po + +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ + +# We use $(mkdir_p). +# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as +# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions, +# @install_sh@ does not start with $(SHELL), so we add it. +# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined +# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake +# versions, $(mkinstalldirs) and $(install_sh) are unused. +mkinstalldirs = $(SHELL) @install_sh@ -d +install_sh = $(SHELL) @install_sh@ +MKDIR_P = @MKDIR_P@ +mkdir_p = @mkdir_p@ + +GMSGFMT_ = @GMSGFMT@ +GMSGFMT_no = @GMSGFMT@ +GMSGFMT_yes = @GMSGFMT_015@ +GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT)) +MSGFMT_ = @MSGFMT@ +MSGFMT_no = @MSGFMT@ +MSGFMT_yes = @MSGFMT_015@ +MSGFMT = $(MSGFMT_$(USE_MSGCTXT)) +XGETTEXT_ = @XGETTEXT@ +XGETTEXT_no = @XGETTEXT@ +XGETTEXT_yes = @XGETTEXT_015@ +XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT)) +MSGMERGE = msgmerge +MSGMERGE_UPDATE = @MSGMERGE@ --update +MSGINIT = msginit +MSGCONV = msgconv +MSGFILTER = msgfilter + +POFILES = @POFILES@ +GMOFILES = @GMOFILES@ +UPDATEPOFILES = @UPDATEPOFILES@ +DUMMYPOFILES = @DUMMYPOFILES@ +DISTFILES.common = Makefile.in.in remove-potcdate.sin \ +$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) +DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ +$(POFILES) $(GMOFILES) \ +$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) + +POTFILES = \ + +CATALOGS = @CATALOGS@ + +# Makevars gets inserted here. (Don't remove this line!) + +.SUFFIXES: +.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update + +.po.mo: + @echo "$(MSGFMT) -c -o $@ $<"; \ + $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ + +.po.gmo: + @lang=`echo $* | sed -e 's,.*/,,'`; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.po"; \ + cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo + +.sin.sed: + sed -e '/^#/d' $< > t-$@ + mv t-$@ $@ + + +all: check-macro-version all-@USE_NLS@ + +all-yes: stamp-po +all-no: + +# Ensure that the gettext macros and this Makefile.in.in are in sync. +check-macro-version: + @test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \ + || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \ + exit 1; \ + } + +# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no +# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because +# we don't want to bother translators with empty POT files). We assume that +# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. +# In this case, stamp-po is a nop (i.e. a phony target). + +# stamp-po is a timestamp denoting the last time at which the CATALOGS have +# been loosely updated. Its purpose is that when a developer or translator +# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, +# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent +# invocations of "make" will do nothing. This timestamp would not be necessary +# if updating the $(CATALOGS) would always touch them; however, the rule for +# $(POFILES) has been designed to not touch files that don't need to be +# changed. +stamp-po: $(srcdir)/$(DOMAIN).pot + test ! -f $(srcdir)/$(DOMAIN).pot || \ + test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) + @test ! -f $(srcdir)/$(DOMAIN).pot || { \ + echo "touch stamp-po" && \ + echo timestamp > stamp-poT && \ + mv stamp-poT stamp-po; \ + } + +# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', +# otherwise packages like GCC can not be built if only parts of the source +# have been downloaded. + +# This target rebuilds $(DOMAIN).pot; it is an expensive operation. +# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. +$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed + if LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null | grep -v 'libtool:' >/dev/null; then \ + package_gnu='GNU '; \ + else \ + package_gnu=''; \ + fi; \ + if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ + msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ + else \ + msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ + fi; \ + case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \ + $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ + --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ + --files-from=$(srcdir)/POTFILES.in \ + --copyright-holder='$(COPYRIGHT_HOLDER)' \ + --msgid-bugs-address="$$msgid_bugs_address" \ + ;; \ + *) \ + $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ + --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ + --files-from=$(srcdir)/POTFILES.in \ + --copyright-holder='$(COPYRIGHT_HOLDER)' \ + --package-name="$${package_gnu}@PACKAGE@" \ + --package-version='@VERSION@' \ + --msgid-bugs-address="$$msgid_bugs_address" \ + ;; \ + esac + test ! -f $(DOMAIN).po || { \ + if test -f $(srcdir)/$(DOMAIN).pot; then \ + sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ + sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ + if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ + rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ + else \ + rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ + mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ + fi; \ + else \ + mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ + fi; \ + } + +# This rule has no dependencies: we don't need to update $(DOMAIN).pot at +# every "make" invocation, only create it when it is missing. +# Only "make $(DOMAIN).pot-update" or "make dist" will force an update. +$(srcdir)/$(DOMAIN).pot: + $(MAKE) $(DOMAIN).pot-update + +# This target rebuilds a PO file if $(DOMAIN).pot has changed. +# Note that a PO file is not touched if it doesn't need to be changed. +$(POFILES): $(srcdir)/$(DOMAIN).pot + @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ + if test -f "$(srcdir)/$${lang}.po"; then \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \ + cd $(srcdir) \ + && { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ + $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \ + *) \ + $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot;; \ + esac; \ + }; \ + else \ + $(MAKE) $${lang}.po-create; \ + fi + + +install: install-exec install-data +install-exec: +install-data: install-data-@USE_NLS@ + if test "$(PACKAGE)" = "gettext-tools"; then \ + $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ + for file in $(DISTFILES.common) Makevars.template; do \ + $(INSTALL_DATA) $(srcdir)/$$file \ + $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + for file in Makevars; do \ + rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi +install-data-no: all +install-data-yes: all + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + $(mkdir_p) $(DESTDIR)$$dir; \ + if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ + $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ + echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ + for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ + if test -n "$$lc"; then \ + if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ + link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ + mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ + for file in *; do \ + if test -f $$file; then \ + ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ + fi; \ + done); \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + else \ + if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ + :; \ + else \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + fi; \ + fi; \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ + ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ + cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ + fi; \ + done; \ + done + +install-strip: install + +installdirs: installdirs-exec installdirs-data +installdirs-exec: +installdirs-data: installdirs-data-@USE_NLS@ + if test "$(PACKAGE)" = "gettext-tools"; then \ + $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ + else \ + : ; \ + fi +installdirs-data-no: +installdirs-data-yes: + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + $(mkdir_p) $(DESTDIR)$$dir; \ + for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ + if test -n "$$lc"; then \ + if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ + link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ + mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ + for file in *; do \ + if test -f $$file; then \ + ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ + fi; \ + done); \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + else \ + if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ + :; \ + else \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + fi; \ + fi; \ + fi; \ + done; \ + done + +# Define this as empty until I found a useful application. +installcheck: + +uninstall: uninstall-exec uninstall-data +uninstall-exec: +uninstall-data: uninstall-data-@USE_NLS@ + if test "$(PACKAGE)" = "gettext-tools"; then \ + for file in $(DISTFILES.common) Makevars.template; do \ + rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi +uninstall-data-no: +uninstall-data-yes: + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + done; \ + done + +check: all + +info dvi ps pdf html tags TAGS ctags CTAGS ID: + +mostlyclean: + rm -f remove-potcdate.sed + rm -f stamp-poT + rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po + rm -fr *.o + +clean: mostlyclean + +distclean: clean + rm -f Makefile Makefile.in POTFILES *.mo + +maintainer-clean: distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + rm -f stamp-po $(GMOFILES) + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) +dist distdir: + $(MAKE) update-po + @$(MAKE) dist2 +# This is a separate target because 'update-po' must be executed before. +dist2: stamp-po $(DISTFILES) + dists="$(DISTFILES)"; \ + if test "$(PACKAGE)" = "gettext-tools"; then \ + dists="$$dists Makevars.template"; \ + fi; \ + if test -f $(srcdir)/$(DOMAIN).pot; then \ + dists="$$dists $(DOMAIN).pot stamp-po"; \ + fi; \ + if test -f $(srcdir)/ChangeLog; then \ + dists="$$dists ChangeLog"; \ + fi; \ + for i in 0 1 2 3 4 5 6 7 8 9; do \ + if test -f $(srcdir)/ChangeLog.$$i; then \ + dists="$$dists ChangeLog.$$i"; \ + fi; \ + done; \ + if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ + for file in $$dists; do \ + if test -f $$file; then \ + cp -p $$file $(distdir) || exit 1; \ + else \ + cp -p $(srcdir)/$$file $(distdir) || exit 1; \ + fi; \ + done + +update-po: Makefile + $(MAKE) $(DOMAIN).pot-update + test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) + $(MAKE) update-gmo + +# General rule for creating PO files. + +.nop.po-create: + @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ + echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ + exit 1 + +# General rule for updating PO files. + +.nop.po-update: + @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ + if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \ + tmpdir=`pwd`; \ + echo "$$lang:"; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ + cd $(srcdir); \ + if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ + $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ + *) \ + $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ + esac; \ + }; then \ + if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ + rm -f $$tmpdir/$$lang.new.po; \ + else \ + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ + :; \ + else \ + echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ + exit 1; \ + fi; \ + fi; \ + else \ + echo "msgmerge for $$lang.po failed!" 1>&2; \ + rm -f $$tmpdir/$$lang.new.po; \ + fi + +$(DUMMYPOFILES): + +update-gmo: Makefile $(GMOFILES) + @: + +# Recreate Makefile by invoking config.status. Explicitly invoke the shell, +# because execution permission bits may not work on the current file system. +# Use @SHELL@, which is the shell determined by autoconf for the use by its +# scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient. +Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@ + cd $(top_builddir) \ + && @SHELL@ ./config.status $(subdir)/$@.in po-directories + +force: + +# Tell versions [3.59,3.63) of GNU make not to export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gnulib/po/Makevars b/gnulib/po/Makevars new file mode 100644 index 0000000..ca32342 --- /dev/null +++ b/gnulib/po/Makevars @@ -0,0 +1,68 @@ +## DO NOT EDIT! GENERATED AUTOMATICALLY! +# Copyright (C) 2002-2012 Free Software Foundation, Inc. +# +# This file 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 file 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 file. If not, see <http://www.gnu.org/licenses/>. +# +# As a special exception to the GNU General Public License, +# this file may be distributed as part of a program that +# contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# Generated by gnulib-tool. + +# Usually the message domain is the same as the package name. +# But here it has a '-gnulib' suffix. +DOMAIN = dctrl-tools-gnulib + +# These two variables depend on the location of this directory. +subdir = gnulib/po +top_builddir = ../.. + +# These options get passed to xgettext. +XGETTEXT_OPTIONS = \ + --keyword=_ --flag=_:1:pass-c-format \ + --keyword=N_ --flag=N_:1:pass-c-format \ + --keyword='proper_name:1,"This is a proper name. See the gettext manual, section Names."' \ + --keyword='proper_name_utf8:1,"This is a proper name. See the gettext manual, section Names."' \ + --flag=error:3:c-format --flag=error_at_line:5:c-format + +# This is the copyright holder that gets inserted into the header of the +# $(DOMAIN).pot file. gnulib is copyrighted by the FSF. +COPYRIGHT_HOLDER = Free Software Foundation, Inc. + +# This is the email address or URL to which the translators shall report +# bugs in the untranslated strings: +# - Strings which are not entire sentences, see the maintainer guidelines +# in the GNU gettext documentation, section 'Preparing Strings'. +# - Strings which use unclear terms or require additional context to be +# understood. +# - Strings which make invalid assumptions about notation of date, time or +# money. +# - Pluralisation problems. +# - Incorrect English spelling. +# - Incorrect formatting. +# It can be your email address, or a mailing list address where translators +# can write to without being subscribed, or the URL of a web page through +# which the translators can contact you. +MSGID_BUGS_ADDRESS = bug-gnulib@gnu.org + +# This is the list of locale categories, beyond LC_MESSAGES, for which the +# message catalogs shall be used. It is usually empty. +EXTRA_LOCALE_CATEGORIES = + +# This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt' +# context. Possible values are "yes" and "no". Set this to yes if the +# package uses functions taking also a message context, like pgettext(), or +# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument. +USE_MSGCTXT = no diff --git a/gnulib/po/POTFILES.in b/gnulib/po/POTFILES.in new file mode 100644 index 0000000..ead82a9 --- /dev/null +++ b/gnulib/po/POTFILES.in @@ -0,0 +1,94 @@ +## DO NOT EDIT! GENERATED AUTOMATICALLY! +# Copyright (C) 2002-2012 Free Software Foundation, Inc. +# +# This file 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 file 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 file. If not, see <http://www.gnu.org/licenses/>. +# +# As a special exception to the GNU General Public License, +# this file may be distributed as part of a program that +# contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# Generated by gnulib-tool. + +# List of files which contain translatable strings. +gnulib/lib/alloca.c +gnulib/lib/alloca.in.h +gnulib/lib/argp-ba.c +gnulib/lib/argp-eexst.c +gnulib/lib/argp-fmtstream.c +gnulib/lib/argp-fmtstream.h +gnulib/lib/argp-fs-xinl.c +gnulib/lib/argp-help.c +gnulib/lib/argp-namefrob.h +gnulib/lib/argp-parse.c +gnulib/lib/argp-pin.c +gnulib/lib/argp-pv.c +gnulib/lib/argp-pvh.c +gnulib/lib/argp-xinl.c +gnulib/lib/argp.h +gnulib/lib/asnprintf.c +gnulib/lib/basename-lgpl.c +gnulib/lib/dirname-lgpl.c +gnulib/lib/dirname.h +gnulib/lib/dosname.h +gnulib/lib/errno.in.h +gnulib/lib/float+.h +gnulib/lib/float.c +gnulib/lib/float.in.h +gnulib/lib/getopt.c +gnulib/lib/getopt.in.h +gnulib/lib/getopt1.c +gnulib/lib/getopt_int.h +gnulib/lib/gettext.h +gnulib/lib/intprops.h +gnulib/lib/itold.c +gnulib/lib/malloc.c +gnulib/lib/memchr.c +gnulib/lib/memchr.valgrind +gnulib/lib/mempcpy.c +gnulib/lib/printf-args.c +gnulib/lib/printf-args.h +gnulib/lib/printf-parse.c +gnulib/lib/printf-parse.h +gnulib/lib/rawmemchr.c +gnulib/lib/rawmemchr.valgrind +gnulib/lib/size_max.h +gnulib/lib/sleep.c +gnulib/lib/stdalign.in.h +gnulib/lib/stdbool.in.h +gnulib/lib/stddef.in.h +gnulib/lib/stdint.in.h +gnulib/lib/stdio.in.h +gnulib/lib/stdlib.in.h +gnulib/lib/strcasecmp.c +gnulib/lib/strchrnul.c +gnulib/lib/strchrnul.valgrind +gnulib/lib/strerror-override.c +gnulib/lib/strerror-override.h +gnulib/lib/strerror.c +gnulib/lib/string.in.h +gnulib/lib/strings.in.h +gnulib/lib/stripslash.c +gnulib/lib/strncasecmp.c +gnulib/lib/strndup.c +gnulib/lib/strnlen.c +gnulib/lib/sys_types.in.h +gnulib/lib/sysexits.in.h +gnulib/lib/unistd.in.h +gnulib/lib/vasnprintf.c +gnulib/lib/vasnprintf.h +gnulib/lib/verify.h +gnulib/lib/vsnprintf.c +gnulib/lib/wchar.in.h +gnulib/lib/xsize.h diff --git a/gnulib/po/af.po b/gnulib/po/af.po new file mode 100644 index 0000000..e740338 --- /dev/null +++ b/gnulib/po/af.po @@ -0,0 +1,462 @@ +# coreutils-5.2.1.af.po. +# Copyright (C) 2004 Free Software Foundation, Inc. +# This file is distributed under the same license as the PACKAGE package. +# Petri Jooste <rkwjpj@puknet.puk.ac.za>, 2004. +# +msgid "" +msgstr "" +"Project-Id-Version: coreutils 5.2.1\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2004-03-17 11:58+0200\n" +"Last-Translator: Petri Jooste <rkwjpj@puk.ac.za>\n" +"Language-Team: Afrikaans <i18n@af.org.za>\n" +"Language: af\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "" + +#: gnulib/lib/argp-help.c:1247 +#, fuzzy +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Verpligte parameters vir langformaat opsies is ook verpligtend vir " +"kortformaat opsies.\n" + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr "" + +#: gnulib/lib/argp-help.c:1656 +#, fuzzy +msgid " [OPTION...]" +msgstr "Gebruik so: %s [OPSIE]...\n" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Probeer `%s --help' vir meer inligting.\n" + +#: gnulib/lib/argp-help.c:1711 +#, fuzzy, c-format +msgid "Report bugs to %s.\n" +msgstr "" +"\n" +"Rapporteer foute aan <%s>.\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "Onbekende stelselfout" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "NAAM" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "" + +#: gnulib/lib/argp-parse.c:142 +#, fuzzy +msgid "print program version" +msgstr "leesfout" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "" + +#: gnulib/lib/argp-parse.c:612 +#, fuzzy, c-format +msgid "%s: Too many arguments\n" +msgstr "te veel parameters\n" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: opsie `%s' is dubbelsinnig\n" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: opsie `--%s' laat nie 'n parameter toe nie\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: opsie `%c%s' laat nie 'n parameter toe nie\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: opsie `%s' benodig 'n parameter\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: onbekende opsie `--%s'\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: onbekende opsie `%c%s'\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: ongeldige opsie -- %c\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: opsie benodig 'n parameter -- %c\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: opsie `-W %s' is dubbelsinnig\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: opsie `-W %s' laat nie 'n parameter toe nie\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: opsie `%s' benodig 'n parameter\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "ongeldige parameter %s vir %s" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "dubbelsinnige parameter %s vir %s" + +#~ msgid "Valid arguments are:" +#~ msgstr "Geldige parameters is soos volg:" + +#~ msgid "write error" +#~ msgstr "skryffout" + +#, fuzzy +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "kan nie %s oopmaak om te lees nie" + +#, fuzzy +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "kan nie %s oopmaak om te lees nie" + +#, fuzzy +#~ msgid "error reading \"%s\"" +#~ msgstr "fout met die les van %s" + +#, fuzzy +#~ msgid "error writing \"%s\"" +#~ msgstr "fout met die skryf na %s" + +#, fuzzy +#~ msgid "error after reading \"%s\"" +#~ msgstr "fout met die les van %s" + +#, fuzzy +#~ msgid "fdopen() failed" +#~ msgstr "'open' het gefaal" + +#, fuzzy +#~ msgid "%s subprocess failed" +#~ msgstr "%s: seek het misluk" + +#~ msgid "regular empty file" +#~ msgstr "gewone le ler" + +#~ msgid "regular file" +#~ msgstr "gewone ler" + +#~ msgid "directory" +#~ msgstr "lergids" + +#~ msgid "block special file" +#~ msgstr "spesiale blokler" + +#~ msgid "character special file" +#~ msgstr "spesiale karakterler" + +#~ msgid "fifo" +#~ msgstr "fifo" + +#~ msgid "symbolic link" +#~ msgstr "simboliese skakel" + +#~ msgid "socket" +#~ msgstr "sok" + +#~ msgid "message queue" +#~ msgstr "boodskapwagtou" + +#~ msgid "semaphore" +#~ msgstr "semafoor" + +#~ msgid "shared memory object" +#~ msgstr "gedeeldegeheue-objek" + +#, fuzzy +#~ msgid "typed memory object" +#~ msgstr "gedeeldegeheue-objek" + +#~ msgid "weird file" +#~ msgstr "vreemde ler" + +#, fuzzy +#~ msgid "Address family for hostname not supported" +#~ msgstr "fifo-lers word nie ondersteun nie" + +#, fuzzy +#~ msgid "ai_family not supported" +#~ msgstr "fifo-lers word nie ondersteun nie" + +#, fuzzy +#~ msgid "ai_socktype not supported" +#~ msgstr "fifo-lers word nie ondersteun nie" + +#, fuzzy +#~ msgid "System error" +#~ msgstr "skryffout" + +#, fuzzy +#~ msgid "Unknown error" +#~ msgstr "Onbekende stelselfout" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: onwettige opsie -- %c\n" + +#~ msgid "block size" +#~ msgstr "blokgrootte" + +#~ msgid "%s exists but is not a directory" +#~ msgstr "%s bestaan maar is nie 'n lergids nie" + +#~ msgid "cannot change owner and/or group of %s" +#~ msgstr "kan nie die eienaar en/of groep van %s verander nie" + +#~ msgid "cannot create directory %s" +#~ msgstr "Kan nie lergids %s skep nie." + +#~ msgid "cannot chdir to directory %s" +#~ msgstr "kan nie chdir doen om na gids %s te gaan nie" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "kan nie toegangsregte van %s verander nie" + +#~ msgid "memory exhausted" +#~ msgstr "geheue uitgeput" + +#, fuzzy +#~ msgid "unable to record current working directory" +#~ msgstr "kon nie na aanvanklike werkgids terugkeer nie" + +#~ msgid "failed to return to initial working directory" +#~ msgstr "kon nie na aanvanklike werkgids terugkeer nie" + +#, fuzzy +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "magtigings vir %s kon nie behou word nie" + +#, fuzzy +#~ msgid "cannot create pipe" +#~ msgstr "kan nie die skakel %s skep nie" + +#~ msgid "`" +#~ msgstr "`" + +#~ msgid "'" +#~ msgstr "'" + +#, fuzzy +#~ msgid "Invalid regular expression" +#~ msgstr "%s: ongeldige relmatige uitdrukking: %s" + +#, fuzzy +#~ msgid "Invalid character class name" +#~ msgstr "ongeldige karakterklas `%s'" + +#, fuzzy +#~ msgid "Memory exhausted" +#~ msgstr "geheue uitgeput" + +#, fuzzy +#~ msgid "Invalid preceding regular expression" +#~ msgstr "%s: ongeldige relmatige uitdrukking: %s" + +#, fuzzy +#~ msgid "Premature end of regular expression" +#~ msgstr "fout in soektog met relmatige uitdrukking" + +#, fuzzy +#~ msgid "Regular expression too big" +#~ msgstr "%s: ongeldige relmatige uitdrukking: %s" + +#, fuzzy +#~ msgid "No previous regular expression" +#~ msgstr "fout in soektog met relmatige uitdrukking" + +#~ msgid "^[yY]" +#~ msgstr "^[jJ]" + +#~ msgid "^[nN]" +#~ msgstr "^[nN]" + +#~ msgid "iconv function not usable" +#~ msgstr "iconv-funksie onbruikbaar" + +#~ msgid "iconv function not available" +#~ msgstr "iconv-funksie is nie beskikbaar nie" + +#~ msgid "character out of range" +#~ msgstr "karakter is buite die grense" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "kan nie U+%04X omskakel na 'n plaaslike karakterstel nie" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "kan nie U+%04X omskakel na 'n plaaslike karakterstel nie: %s" + +#~ msgid "invalid user" +#~ msgstr "ongeldige gebruiker" + +#~ msgid "invalid group" +#~ msgstr "ongeldige groep " + +#~ msgid "cannot get the login group of a numeric UID" +#~ msgstr "kan nie die aantekengroep van 'n numeriese UID verkry nie" + +# TRANSLATORS: %s denotes an author name. +# TRANSLATORS: %s denotes an author name. +#~ msgid "Written by %s.\n" +#~ msgstr "Geskryf deur %s.\n" + +# TRANSLATORS: Each %s denotes an author name. +# TRANSLATORS: Each %s denotes an author name. +#~ msgid "Written by %s and %s.\n" +#~ msgstr "Geskryf deur %s en %s.\n" + +# TRANSLATORS: Each %s denotes an author name. +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "Geskryf deur %s, %s en %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Geskryf deur %s, %s, %s \n" +#~ "en %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Geskryf deur %s, %s, %s, \n" +#~ "%s en %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, and %s.\n" +#~ msgstr "" +#~ "Geskryf deur %s, %s, %s, \n" +#~ "%s, %s en %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, and %s.\n" +#~ msgstr "" +#~ "Geskryf deur %s, %s, %s, \n" +#~ "%s, %s, %s en %s.\n" + +# TRANSLATORS: Each %s denotes an author name. +# You can use line breaks, estimating that each author name occupies +# ca. 16 screen columns and that a screen line has ca. 80 columns. +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Geskryf deur %s, %s, %s, \n" +#~ "%s, %s, %s, %s\n" +#~ "en %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Geskryf deur %s, %s, %s, \n" +#~ "%s, %s, %s, %s,\n" +#~ "%s en %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, and others.\n" +#~ msgstr "" +#~ "Geskryf deur %s, %s, %s, \n" +#~ "%s, %s, %s, %s\n" +#~ "%s, %s en ander.\n" + +#~ msgid "string comparison failed" +#~ msgstr "stringvergelyking het gefaal" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "Stel LC_ALL='C' om die probleem te systap" + +#~ msgid "The strings compared were %s and %s." +#~ msgstr "Die stringe wat vergelyk is, is %s en %s." diff --git a/gnulib/po/be.po b/gnulib/po/be.po new file mode 100644 index 0000000..9b12941 --- /dev/null +++ b/gnulib/po/be.po @@ -0,0 +1,414 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2002, 2003 Free Software Foundation, Inc. +# This file is distributed under the same license as the coreutils package. +# Ales Nyakhaychyk <nab@mail.by>, 2002, 2003. +# +msgid "" +msgstr "" +"Project-Id-Version: coreutils 5.0.91\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2003-10-30 01:10+0200\n" +"Last-Translator: Ales Nyakhaychyk <nab@mail.by>\n" +"Language-Team: Belarusian <i18n@mova.org>\n" +"Language: be\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: KBabel 1.0.2\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "" + +#: gnulib/lib/argp-help.c:1247 +#, fuzzy +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "Довады, абавязковыя для доўгіх выбараў, абавязковыя й для кароткіх.\n" + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr "" + +#: gnulib/lib/argp-help.c:1656 +#, fuzzy +msgid " [OPTION...]" +msgstr "Выкарыстаньне: %s [ВЫБАР]...\n" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Паспрабуйце \"%s --help\" для больш падрабязных зьвестак.\n" + +#: gnulib/lib/argp-help.c:1711 +#, fuzzy, c-format +msgid "Report bugs to %s.\n" +msgstr "" +"\n" +"Паведамляйце пра памылкі на <%s>.\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "Невядомая сыстэмная памылка" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "НАЗВА" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "" + +#: gnulib/lib/argp-parse.c:142 +#, fuzzy +msgid "print program version" +msgstr "памылка чытаньня" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "" + +#: gnulib/lib/argp-parse.c:612 +#, fuzzy, c-format +msgid "%s: Too many arguments\n" +msgstr "зашмат довадаў\n" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: выбар `%s' неадназначны\n" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: выбар `--%s' не дазваляе довад\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: выбар `%c%s' не дазваляе довад\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: выбар `%s' патрабуе довад\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: нераспазнаны выбар `--%s'\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: нераспазнаны выбар `%c%s'\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: нерэчаісны выбар -- %c\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: выбар патрабуе довад -- %c\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: выбар `-W %s' неадназначыны\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: выбар `-W %s' не дазваляе довад\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: выбар `%s' патрабуе довад\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "нерэчаісны довад %s для %s" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "неадназначны довад %s для %s" + +#~ msgid "Valid arguments are:" +#~ msgstr "Рэчаісныя довады:" + +#~ msgid "write error" +#~ msgstr "памылка запісу" + +#, fuzzy +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "немагыма адчыніць %s для чытаньня" + +#, fuzzy +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "немагыма адчыніць %s для чытаньня" + +#, fuzzy +#~ msgid "error reading \"%s\"" +#~ msgstr "памылка чытаньня %s" + +#, fuzzy +#~ msgid "error writing \"%s\"" +#~ msgstr "памылка запісу %s" + +#, fuzzy +#~ msgid "error after reading \"%s\"" +#~ msgstr "памылка чытаньня %s" + +#, fuzzy +#~ msgid "fdopen() failed" +#~ msgstr "памылка адкрыцьця" + +#, fuzzy +#~ msgid "%s subprocess failed" +#~ msgstr "%s: збой seek" + +#~ msgid "regular empty file" +#~ msgstr "звычайны парожні файл" + +#~ msgid "regular file" +#~ msgstr "звычайны файл" + +#~ msgid "directory" +#~ msgstr "тэчка" + +#~ msgid "block special file" +#~ msgstr "асаблівы кавалкавы файл" + +#~ msgid "character special file" +#~ msgstr "асаблівы знакавы файл" + +#~ msgid "fifo" +#~ msgstr "fifo" + +#~ msgid "symbolic link" +#~ msgstr "знакавае лучыва" + +#~ msgid "socket" +#~ msgstr "socket" + +#~ msgid "message queue" +#~ msgstr "чарга паведамленьняў" + +#~ msgid "semaphore" +#~ msgstr "сэмафор" + +#~ msgid "shared memory object" +#~ msgstr "абьект з агульнай памяцьцю" + +#, fuzzy +#~ msgid "typed memory object" +#~ msgstr "абьект з агульнай памяцьцю" + +#~ msgid "weird file" +#~ msgstr "лёсавы файл" + +#, fuzzy +#~ msgid "Address family for hostname not supported" +#~ msgstr "fifo файлы непадтрымліваюцца" + +#, fuzzy +#~ msgid "ai_family not supported" +#~ msgstr "fifo файлы непадтрымліваюцца" + +#, fuzzy +#~ msgid "ai_socktype not supported" +#~ msgstr "fifo файлы непадтрымліваюцца" + +#, fuzzy +#~ msgid "System error" +#~ msgstr "памылка запісу" + +#, fuzzy +#~ msgid "Unknown error" +#~ msgstr "Невядомая сыстэмная памылка" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: недапушчальны выраб -- %c\n" + +#~ msgid "block size" +#~ msgstr "памер кавалку" + +#~ msgid "%s exists but is not a directory" +#~ msgstr "%s існуе, але гэта ня тэчка" + +#~ msgid "cannot change owner and/or group of %s" +#~ msgstr "немагчыма зьмяніць уладальніка й/ці групу %s" + +#~ msgid "cannot create directory %s" +#~ msgstr "немагчыма стварыць тэчку %s" + +#~ msgid "cannot chdir to directory %s" +#~ msgstr "немагчыма перайсьці да тэчкі %s" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "немагчыма зьмяніць правы %s" + +#~ msgid "memory exhausted" +#~ msgstr "памяць вычарпана" + +#, fuzzy +#~ msgid "unable to record current working directory" +#~ msgstr "немагчыма вярнуцца ў пачатковую працоўную тэчку" + +#~ msgid "failed to return to initial working directory" +#~ msgstr "немагчыма вярнуцца ў пачатковую працоўную тэчку" + +#, fuzzy +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "збой пры захаваньні правоў для %s" + +#, fuzzy +#~ msgid "cannot create pipe" +#~ msgstr "немагчыма стварыць лучыва %s" + +#~ msgid "`" +#~ msgstr "`" + +#~ msgid "'" +#~ msgstr "'" + +#, fuzzy +#~ msgid "Invalid regular expression" +#~ msgstr "%s: нерэчаісны звычайны выраз: %s" + +#, fuzzy +#~ msgid "Invalid character class name" +#~ msgstr "нерэчаісны знак %s у радку рэжыму %s" + +#, fuzzy +#~ msgid "Memory exhausted" +#~ msgstr "памяць вычарпана" + +#, fuzzy +#~ msgid "Invalid preceding regular expression" +#~ msgstr "%s: нерэчаісны звычайны выраз: %s" + +#, fuzzy +#~ msgid "Premature end of regular expression" +#~ msgstr "памылка ў пошуку звычайнага выразу" + +#, fuzzy +#~ msgid "Regular expression too big" +#~ msgstr "%s: нерэчаісны звычайны выраз: %s" + +#, fuzzy +#~ msgid "No previous regular expression" +#~ msgstr "памылка ў пошуку звычайнага выразу" + +#~ msgid "^[yY]" +#~ msgstr "^[тТ]" + +#~ msgid "^[nN]" +#~ msgstr "^[нН]" + +#~ msgid "iconv function not usable" +#~ msgstr "функцыя iconv непрыгодна для выкарыстаньня" + +#~ msgid "iconv function not available" +#~ msgstr "недаступна функцыя iconv" + +#~ msgid "character out of range" +#~ msgstr "знак па за дапушчальнымі межамі" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "немагчыма пераўтварыць U+%04X у мясцовы набор знакаў" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "немагчыма пераўтварыць U+%04X у мясцовы набор знакаў: %s" + +#~ msgid "invalid user" +#~ msgstr "нерэчаісны карыстальнік" + +#~ msgid "invalid group" +#~ msgstr "нерэчаісная група" + +#~ msgid "cannot get the login group of a numeric UID" +#~ msgstr "немагчыма атрымаць уліковую групу лічбавага UID" + +#~ msgid "Written by %s.\n" +#~ msgstr "Стваральнік %s.\n" + +#, fuzzy +#~ msgid "Written by %s and %s.\n" +#~ msgstr "Стваральнік %s.\n" + +#, fuzzy +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "Стваральнік %s.\n" + +#, fuzzy +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "Стваральнік %s.\n" + +#, fuzzy +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "Стваральнік %s.\n" + +#~ msgid "string comparison failed" +#~ msgstr "памылка параўнаньня радку" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "Усталюйце LC_ALL='C' каб працаваць без пытаньняў." + +#~ msgid "The strings compared were %s and %s." +#~ msgstr "Радкі былі параўнаны тут %s і тут %s." diff --git a/gnulib/po/bg.po b/gnulib/po/bg.po new file mode 100644 index 0000000..8d52f12 --- /dev/null +++ b/gnulib/po/bg.po @@ -0,0 +1,520 @@ +# translation of coreutils.bg.po to Bulgarian +# Message catalog for coreutils +# Copyright (C) 2003 Free Software Foundation, Inc. +# This file is distributed under the same license as the coreutils package. +# Anton Zinoviev <zinoviev@debian.org>, 2003,2004. +# +msgid "" +msgstr "" +"Project-Id-Version: coreutils 5.90\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2005-10-12 21:41+0300\n" +"Last-Translator: Anton Zinoviev <zinoviev@debian.org>\n" +"Language-Team: Bulgarian <dict@fsa-bg.org>\n" +"Language: bg\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "" + +#: gnulib/lib/argp-help.c:1247 +#, fuzzy +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Аргументите, задължителни за дългите опции, са задължителни и за късите.\n" + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr "" + +#: gnulib/lib/argp-help.c:1656 +#, fuzzy +msgid " [OPTION...]" +msgstr "Използване: %s [ОПЦИЯ]...\n" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Използвайте \"%s --help\" за повече информация.\n" + +#: gnulib/lib/argp-help.c:1711 +#, fuzzy, c-format +msgid "Report bugs to %s.\n" +msgstr "" +"\n" +"Съобщавайте за програмни грешки на <%s>.\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "Непозната системна грешка" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "ИМЕ" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "" + +#: gnulib/lib/argp-parse.c:142 +#, fuzzy +msgid "print program version" +msgstr "грешка при четене" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "" + +#: gnulib/lib/argp-parse.c:612 +#, fuzzy, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: твърде много редове с контролни суми" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: опцията \"%s\" е двусмислена\n" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: опцията \"--%s\" не допуска аргумент\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: опцията \"%c%s\" не допуска аргумент\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: опцията \"%s\" изисква аргумент\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: непозната опция \"--%s\"\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: непозната опция \"%c%s\"\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: неправилна опция -- %c\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: опция изисква аргумент -- %c\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: опцията \"-W %s\" е двусмислена\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: опцията \"-W %s\" не допуска аргумент\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: опцията \"%s\" изисква аргумент\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "недопустим аргумент %s за %s" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "двусмислен аргумент %s за %s" + +#~ msgid "Valid arguments are:" +#~ msgstr "Допустими аргументи са:" + +#~ msgid "write error" +#~ msgstr "грешка при запис" + +#, fuzzy +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "не може да се отвори %s за четене" + +#, fuzzy +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "не може да се отвори %s за запис" + +#, fuzzy +#~ msgid "error reading \"%s\"" +#~ msgstr "грешка при четене на %s" + +#, fuzzy +#~ msgid "error writing \"%s\"" +#~ msgstr "грешка при запис в %s" + +#, fuzzy +#~ msgid "error after reading \"%s\"" +#~ msgstr "грешка при четене на %s" + +#, fuzzy +#~ msgid "fdopen() failed" +#~ msgstr "неуспешно отваряне на файл" + +#, fuzzy +#~ msgid "%s subprocess failed" +#~ msgstr "%s: неуспешно позициониране (seek) във файл" + +#~ msgid "regular empty file" +#~ msgstr "обикновеният празен файл" + +#~ msgid "regular file" +#~ msgstr "обикновеният файл" + +#~ msgid "directory" +#~ msgstr "каталогът" + +#~ msgid "block special file" +#~ msgstr "специалният блоков файл" + +#~ msgid "character special file" +#~ msgstr "специалният символен файл" + +#~ msgid "fifo" +#~ msgstr "именуваният канал" + +#~ msgid "symbolic link" +#~ msgstr "символната връзка" + +#~ msgid "socket" +#~ msgstr "гнездото" + +#~ msgid "message queue" +#~ msgstr "опашката със съобщения" + +#~ msgid "semaphore" +#~ msgstr "семафорът" + +#~ msgid "shared memory object" +#~ msgstr "споделеният обект в паметта" + +#~ msgid "typed memory object" +#~ msgstr "типизираният обект в паметта" + +#~ msgid "weird file" +#~ msgstr "странният файл" + +#~ msgid "Address family for hostname not supported" +#~ msgstr "Този тип адреси не се поддържа за името на хоста" + +#~ msgid "Temporary failure in name resolution" +#~ msgstr "Временен проблем при намиране IP-адреса на хост" + +#~ msgid "Bad value for ai_flags" +#~ msgstr "Неправил на стойност за ai_flags" + +#~ msgid "Non-recoverable failure in name resolution" +#~ msgstr "Окончателен неуспех при намиране IP-адреса на хост" + +#~ msgid "ai_family not supported" +#~ msgstr "не се поддържа посочването на тип адреси (ai_family)" + +#~ msgid "Memory allocation failure" +#~ msgstr "Неуспешно заделяне на памет" + +#~ msgid "No address associated with hostname" +#~ msgstr "Няма IP-адрес с посоченото име на хост" + +#~ msgid "Name or service not known" +#~ msgstr "Името или услугата са непознати" + +#~ msgid "Servname not supported for ai_socktype" +#~ msgstr "" +#~ "Името на услугата не се поддържа за използваното тип гнездо (ai_socktype)" + +#~ msgid "ai_socktype not supported" +#~ msgstr "не се поддържа посочването на тип гнездо (ai_socktype)" + +#~ msgid "System error" +#~ msgstr "грешка в системата" + +#~ msgid "Processing request in progress" +#~ msgstr "Заявката е в процес на изпълнение" + +#~ msgid "Request canceled" +#~ msgstr "Заявката е отменена" + +#~ msgid "Request not canceled" +#~ msgstr "Заявката не е отменена" + +#~ msgid "All requests done" +#~ msgstr "Изпълнени са всички заявки" + +#~ msgid "Interrupted by a signal" +#~ msgstr "Прекъснат със сигнал" + +#~ msgid "Parameter string not correctly encoded" +#~ msgstr "Неправилно кодиран низ на аргумент" + +#~ msgid "Unknown error" +#~ msgstr "Непозната грешка" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: неправилна опция -- %c\n" + +#~ msgid "block size" +#~ msgstr "блоковият размер" + +#~ msgid "%s exists but is not a directory" +#~ msgstr "%s съществува, но не е каталог" + +#~ msgid "cannot change owner and/or group of %s" +#~ msgstr "не може да се смени собственика и/или групата на %s" + +#~ msgid "cannot create directory %s" +#~ msgstr "не може да се създаде каталог %s" + +#~ msgid "cannot chdir to directory %s" +#~ msgstr "не може да се влезе в каталога %s" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "не може да се сменят правата за достъп до %s" + +#~ msgid "memory exhausted" +#~ msgstr "паметта е изчерпана" + +#~ msgid "unable to record current working directory" +#~ msgstr "не може да се запомни текущият работен каталог" + +#~ msgid "failed to return to initial working directory" +#~ msgstr "невъзможно връщане в първоначалния работен каталог" + +#, fuzzy +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "%s: не може да се отвори в режим за писане" + +#, fuzzy +#~ msgid "cannot create pipe" +#~ msgstr "не може да се създаде връзка %s" + +#~ msgid "`" +#~ msgstr "\"" + +#~ msgid "'" +#~ msgstr "\"" + +#, fuzzy +#~ msgid "Invalid regular expression" +#~ msgstr "%s: неправилен регулярен израз: %s" + +#, fuzzy +#~ msgid "Invalid collation character" +#~ msgstr "неправилен клас от символи %s" + +#, fuzzy +#~ msgid "Invalid character class name" +#~ msgstr "неправилен клас от символи %s" + +#, fuzzy +#~ msgid "Invalid back reference" +#~ msgstr "Неправилен диапазон от страници %s" + +#, fuzzy +#~ msgid "Invalid range end" +#~ msgstr "Неправилен диапазон от страници %s" + +#, fuzzy +#~ msgid "Memory exhausted" +#~ msgstr "паметта е изчерпана" + +#, fuzzy +#~ msgid "Invalid preceding regular expression" +#~ msgstr "%s: неправилен регулярен израз: %s" + +#, fuzzy +#~ msgid "Premature end of regular expression" +#~ msgstr "грешка при търсене на регулярен израз" + +#, fuzzy +#~ msgid "Regular expression too big" +#~ msgstr "грешка при пасването на регулярния израз" + +#, fuzzy +#~ msgid "No previous regular expression" +#~ msgstr "грешка при търсене на регулярен израз" + +# Клавишът О (латинско) генерира "Д" според подредбата по БДС +#~ msgid "^[yY]" +#~ msgstr "^[дДoOyY]" + +# Клавишът K (латинско) генерира "Н" според подредбата по БДС +#~ msgid "^[nN]" +#~ msgstr "^[нНkKnN]" + +#~ msgid "iconv function not usable" +#~ msgstr "функцията iconv не е използваема" + +#~ msgid "iconv function not available" +#~ msgstr "функцията iconv е недостъпна" + +#~ msgid "character out of range" +#~ msgstr "знак извън диапазона" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "не може да се конвертира U+%04X в локалното кодиране" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "не може да се конвертира U+%04X в локалното кодиране: %s" + +#~ msgid "invalid user" +#~ msgstr "несъществуващ потребител" + +#~ msgid "invalid group" +#~ msgstr "несъществуваща група" + +#~ msgid "cannot get the login group of a numeric UID" +#~ msgstr "не може да се получи входящата група по потребителски номер" + +#~ msgid "(C)" +#~ msgstr "©" + +#~ msgid "" +#~ "\n" +#~ "This is free software. You may redistribute copies of it under the terms " +#~ "of\n" +#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "Това е свободен софтуер. Можете да разпространявате негови копия " +#~ "съгласно\n" +#~ "условията на Основната общодостъпна лицензия на ГНУ\n" +#~ " <http://www.gnu.org/licenses/gpl.html>.\n" +#~ "Не се дават НИКАКВИ ГАРАНЦИИ до степента, позволявана от закона.\n" + +#~ msgid "Written by %s.\n" +#~ msgstr "Написан от %s.\n" + +#~ msgid "Written by %s and %s.\n" +#~ msgstr "Написан от %s и %s.\n" + +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "Написан от %s, %s и %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Написан от %s, %s, %s\n" +#~ "и %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Написан от %s, %s, %s,\n" +#~ "%s и %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, and %s.\n" +#~ msgstr "" +#~ "Написан от %s, %s, %s,\n" +#~ "%s, %s и %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, and %s.\n" +#~ msgstr "" +#~ "Написан от %s, %s, %s,\n" +#~ "%s, %s, %s и %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Написан от %s, %s, %s,\n" +#~ "%s, %s, %s, %s\n" +#~ "и %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Написан от %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s и %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, and others.\n" +#~ msgstr "" +#~ "Написан от %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s и други.\n" + +#~ msgid "string comparison failed" +#~ msgstr "сравнението на низове не успя" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "Използвайте LC_ALL='C', за да заобиколите този проблем." + +#~ msgid "The strings compared were %s and %s." +#~ msgstr "Сравняваните низове бяха %s и %s." diff --git a/gnulib/po/ca.po b/gnulib/po/ca.po new file mode 100644 index 0000000..6884f9d --- /dev/null +++ b/gnulib/po/ca.po @@ -0,0 +1,518 @@ +# GNU Mailutils Catalan translation. +# Copyright © 2002, 2003, 2004, 2005 Free Software Foundation, Inc. +# This file is distributed under the same license as the mailutils package. +# Jordi Mallach <jordi@gnu.org>, 2002, 2003, 2004, 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: mailutils 0.6.90\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2005-05-21 04:10+0200\n" +"Last-Translator: Jordi Mallach <jordi@gnu.org>\n" +"Language-Team: Catalan <ca@dodds.net>\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n!=1;\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: El paràmetre ARGP_HELP_FMT requereix un valor" + +#: gnulib/lib/argp-help.c:226 +#, fuzzy, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: El paràmetre ARGP_HELP_FMT requereix un valor" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: El paràmetre d'ARGP_HELP_FMT és desconegut" + +# pfft, escombraries... jm +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Hi ha escombraries en ARGP_HELP_FMT: %s" + +#: gnulib/lib/argp-help.c:1247 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Els arguments necessaris o opcionals per a les opcions llargues també són " +"necessaris o opcionals per a qualsevol opció curta corresponent." + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "Forma d'ús:" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr " ó: " + +#: gnulib/lib/argp-help.c:1656 +msgid " [OPTION...]" +msgstr " [OPCIÓ...]" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Proveu «%s --help» o «%s --usage» per a obtindre més informació.\n" + +#: gnulib/lib/argp-help.c:1711 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Informeu dels errors a %s.\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "S'ha produït un error desconegut del sistema" + +#: gnulib/lib/argp-parse.c:81 +#, fuzzy +msgid "give this help list" +msgstr "Mostra aquesta llista d'ajuda" + +#: gnulib/lib/argp-parse.c:82 +#, fuzzy +msgid "give a short usage message" +msgstr "Mostra un curt missatge sobre l'ús" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "NOM" + +#: gnulib/lib/argp-parse.c:83 +#, fuzzy +msgid "set the program name" +msgstr "Estableix el nom del programa" + +#: gnulib/lib/argp-parse.c:84 +#, fuzzy +msgid "SECS" +msgstr "SEGONS" + +#: gnulib/lib/argp-parse.c:85 +#, fuzzy +msgid "hang for SECS seconds (default 3600)" +msgstr "Penja durant SEGS segons (per defecte 3600)" + +#: gnulib/lib/argp-parse.c:142 +#, fuzzy +msgid "print program version" +msgstr "Mostra la versió del programa" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(ERROR DEL PROGRAMA) Cap versió coneguda!?" + +#: gnulib/lib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Massa arguments\n" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(ERROR DEL PROGRAMA) L'opció s'hauria d'haver reconegut!?" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: l'opció «%s» és ambigua\n" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: l'opció «--%s» no accepta arguments\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: l'opció «%c%s» no accepta arguments\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: l'opció «%s» requereix un argument\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: l'opció «--%s» no es reconeix\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: l'opció «%c%s» no es reconeix\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: l'opció no és vàlida -- %c\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: l'opció requereix un argument -- %c\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: l'opció «-W %s» és ambigua\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: l'opció «-W %s» no accepta arguments\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: l'opció «%s» requereix un argument\n" + +# Usa quote() en els 2 args. ivb +#~ msgid "invalid argument %s for %s" +#~ msgstr "l'argument %s no és vàlid per %s" + +# Usa quote() en els 2 args. ivb +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "l'argument %s és ambigu per %s" + +#~ msgid "Valid arguments are:" +#~ msgstr "Els arguments vàlids són:" + +#, fuzzy +#~ msgid "program error" +#~ msgstr "error de lectura" + +# "underflow", bonico el paraulo.. jm +#, fuzzy +#~ msgid "stack overflow" +#~ msgstr "pila buida" + +#~ msgid "write error" +#~ msgstr "error d'escriptura" + +# Usa quote(). ivb +#, fuzzy +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "no s'ha pogut obrir %s per llegir" + +# Usa quote(). ivb +#, fuzzy +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "no s'ha pogut obrir %s per a escriure" + +# uniq no usa quote(). ivb +#, fuzzy +#~ msgid "error reading \"%s\"" +#~ msgstr "error en llegir %s" + +# uniq no usa quote(). ivb +#, fuzzy +#~ msgid "error writing \"%s\"" +#~ msgstr "error en escriure %s" + +# uniq no usa quote(). ivb +#, fuzzy +#~ msgid "error after reading \"%s\"" +#~ msgstr "error en llegir %s" + +#, fuzzy +#~ msgid "fdopen() failed" +#~ msgstr "no s'ha pogut obrir" + +#, fuzzy +#~ msgid "%s subprocess failed" +#~ msgstr "%s: ha fallat el desplaçament" + +#~ msgid "regular empty file" +#~ msgstr "fitxer ordinari buit" + +#~ msgid "regular file" +#~ msgstr "fitxer ordinari" + +#~ msgid "directory" +#~ msgstr "directori" + +#~ msgid "block special file" +#~ msgstr "fitxer especial de blocs" + +#~ msgid "character special file" +#~ msgstr "fitxer especial de caràcters" + +#~ msgid "fifo" +#~ msgstr "cua FIFO" + +#~ msgid "symbolic link" +#~ msgstr "enllaç simbòlic" + +#~ msgid "socket" +#~ msgstr "connector" + +#~ msgid "message queue" +#~ msgstr "cua de missatges" + +#~ msgid "semaphore" +#~ msgstr "semàfor" + +#~ msgid "shared memory object" +#~ msgstr "objecte de memòria compartida" + +#~ msgid "typed memory object" +#~ msgstr "objecte de memòria amb tipus" + +#~ msgid "weird file" +#~ msgstr "fitxer estrany" + +#, fuzzy +#~ msgid "Address family for hostname not supported" +#~ msgstr "els fitxers FIFO no són suportats" + +#, fuzzy +#~ msgid "ai_family not supported" +#~ msgstr "els fitxers FIFO no són suportats" + +#, fuzzy +#~ msgid "Memory allocation failure" +#~ msgstr "L'operació ha fallat" + +#, fuzzy +#~ msgid "ai_socktype not supported" +#~ msgstr "els fitxers FIFO no són suportats" + +#, fuzzy +#~ msgid "System error" +#~ msgstr "error d'escriptura" + +#, fuzzy +#~ msgid "Request not canceled" +#~ msgstr "No es troba l'element sol·licitat" + +#, fuzzy +#~ msgid "Unknown error" +#~ msgstr "S'ha produït un error desconegut del sistema" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: l'opció és il·legal -- %c\n" + +# FIXME: xmalloc.h: _STRTOL_ERROR lacks i18n. ivb +# Açò quedarà com «invalid mida de bloc `MIDA'» mentre no ho facen. ivb +#~ msgid "block size" +#~ msgstr "mida de bloc" + +# Els 4 usen quote(). ivb +#~ msgid "%s exists but is not a directory" +#~ msgstr "%s existeix però no és un directori" + +# Els 3 usen quote(). ivb +#~ msgid "cannot change owner and/or group of %s" +#~ msgstr "no s'ha pogut canviar el propietari o grup de %s" + +# Els 3 usen quote(). ivb +#~ msgid "cannot create directory %s" +#~ msgstr "no s'ha pogut crear el directori %s" + +# Usa quote(). ivb +#~ msgid "cannot chdir to directory %s" +#~ msgstr "no s'ha pogut canviar al directori %s" + +# Els 2 usen quote(). ivb +#~ msgid "cannot change permissions of %s" +#~ msgstr "no s'han pogut canviar els permisos de %s" + +#~ msgid "memory exhausted" +#~ msgstr "la memòria s'ha exhaurit" + +#, fuzzy +#~ msgid "unable to record current working directory" +#~ msgstr "openat: no s'ha pogut registrar el directori de treball actual" + +#~ msgid "failed to return to initial working directory" +#~ msgstr "no s'ha pogut tornar al directori inicial de treball" + +#, fuzzy +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "%s: no s'ha pogut obrir per a escriure" + +#, fuzzy +#~ msgid "cannot create pipe" +#~ msgstr "No es pot crear la llista" + +#~ msgid "`" +#~ msgstr "«" + +#~ msgid "'" +#~ msgstr "»" + +#, fuzzy +#~ msgid "Invalid regular expression" +#~ msgstr "%s: l'expressió regular no és vàlida: %s" + +#, fuzzy +#~ msgid "Invalid character class name" +#~ msgstr "la classe de caràcters «%s» no és vàlida" + +#, fuzzy +#~ msgid "Invalid back reference" +#~ msgstr "El número no és vàlid" + +#, fuzzy +#~ msgid "Invalid content of \\{\\}" +#~ msgstr "L'opció no és vàlida -- %s" + +#, fuzzy +#~ msgid "Invalid range end" +#~ msgstr "el rang de pàgines no és vàlid: «%s»" + +#, fuzzy +#~ msgid "Memory exhausted" +#~ msgstr "la memòria s'ha exhaurit" + +#, fuzzy +#~ msgid "Invalid preceding regular expression" +#~ msgstr "%s: l'expressió regular no és vàlida: %s" + +#, fuzzy +#~ msgid "Premature end of regular expression" +#~ msgstr "error en la recerca de l'expressió regular" + +#, fuzzy +#~ msgid "Regular expression too big" +#~ msgstr "%s: l'expressió regular no és vàlida: %s" + +#, fuzzy +#~ msgid "No previous regular expression" +#~ msgstr "error en la recerca de l'expressió regular" + +#~ msgid "^[yY]" +#~ msgstr "^[sS]" + +#~ msgid "^[nN]" +#~ msgstr "^[nN]" + +#~ msgid "iconv function not usable" +#~ msgstr "la funció iconv() no és útil" + +#~ msgid "iconv function not available" +#~ msgstr "la funció iconv() no es troba disponible" + +#~ msgid "character out of range" +#~ msgstr "el caràcter es troba fora del rang" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "no s'ha pogut convertir U+%04X al joc de caràcters local" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "no s'ha pogut convertir U+%04X al joc de caràcters local: %s" + +#~ msgid "invalid user" +#~ msgstr "l'usuari no és vàlid" + +#~ msgid "invalid group" +#~ msgstr "el grup no és vàlid" + +#~ msgid "cannot get the login group of a numeric UID" +#~ msgstr "no s'ha pogut obtenir el grup d'entrada d'un UID numèric" + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "This is free software. You may redistribute copies of it under the terms " +#~ "of\n" +#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "Aquest és programari lliure; podeu redistribuir-lo i/o modificar-lo sota " +#~ "els\n" +#~ "termes de la Llicència Pública General GNU tal i com ha estat publicada " +#~ "per la\n" +#~ "Free Software Foundation; bé sota la versió 2 de la Llicència o bé (si " +#~ "ho\n" +#~ "preferiu) sota qualsevol versió posterior.\n" +#~ "\n" + +#~ msgid "Written by %s.\n" +#~ msgstr "Escrit per %s.\n" + +#~ msgid "Written by %s and %s.\n" +#~ msgstr "Escrit per %s i %s.\n" + +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "Escrit per %s, %s i %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Escrit per %s, %s, %s\n" +#~ "i %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Escrit per %s, %s, %s,\n" +#~ "%s i %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, and %s.\n" +#~ msgstr "" +#~ "Escrit per %s, %s, %s,\n" +#~ "%s, %s i %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, and %s.\n" +#~ msgstr "" +#~ "Escrit per %s, %s, %s,\n" +#~ "%s, %s, %s i %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Escrit per %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "i %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Escrit per %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s i %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, and others.\n" +#~ msgstr "" +#~ "Escrit per %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s i d'altres.\n" + +#~ msgid "string comparison failed" +#~ msgstr "ha fallat la comparació de cadenes" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "Establiu la variable LC_ALL a «C» per evitar el problema." + +# Usa quote() en les 2. ivb +#~ msgid "The strings compared were %s and %s." +#~ msgstr "Les cadenes comparades eren %s i %s." diff --git a/gnulib/po/cs.po b/gnulib/po/cs.po new file mode 100644 index 0000000..6b75004 --- /dev/null +++ b/gnulib/po/cs.po @@ -0,0 +1,771 @@ +# Czech translations for GNU textutils +# This file is distributed under the same license as the gnulib package. +# Copyright (C) 1996 Free Software Foundation, Inc. +# +# Vladimir Michl <Vladimir.Michl@seznam.cz>, 1996. +# Marek Černocký <marek@manet.cz>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2011-12-04 08:50+0100\n" +"Last-Translator: Marek Černocký <marek@manet.cz>\n" +"Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: hodnota %s je menší nebo rovna %s" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: Parametr ARGP_HELP_FMT vyžaduje hodnotu" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: Parametr ARGP_HELP_FMT musí být kladný" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Neznámý parametr ARGP_HELP_FMT" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Nesmysly v ARGP_HELP_FMT: %s" + +#: gnulib/lib/argp-help.c:1247 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Povinné či volitelné, argumenty pro dlouhé přepínače jsou povinné či " +"volitelné, i pro případné odpovídající krátké přepínače." + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "Použití:" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr " nebo:" + +#: gnulib/lib/argp-help.c:1656 +msgid " [OPTION...]" +msgstr " [PŘEPÍNAČ…]" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Více informací získáte příkazem „%s --help“ nebo „%s --usage“.\n" + +#: gnulib/lib/argp-help.c:1711 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Chyby hlaste na %s.\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "Neznámá chyba systému" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "poskytne tuto přehledovou nápovědu" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "poskytne stručnou informaci o používání" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "NÁZEV" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "nastavit název programu" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "SEK" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "zastavit na SEK sekund (výchozí je 3600)" + +#: gnulib/lib/argp-parse.c:142 +msgid "print program version" +msgstr "vypsat verzi programu" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(CHYBA PROGRAMU) Neznámá verze!?" + +#: gnulib/lib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Příliš mnoho argumentů\n" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(CHYBA PROGRAMU) Měl by být rozpoznán přepínač!?" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: přepínač „%s“ není jednoznačný; možnosti:" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: přepínač „--%s“ musí být zadán bez argumentu\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: přepínač „%c%s“ musí být zadán bez argumentu\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: přepínač „--%s“ vyžaduje argument\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: neznámý přepínač „--%s“\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: neznámý přepínač „%c%s“\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: neplatný přepínač -- „%c“\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: přepínač vyžaduje argument -- „%c“\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: přepínač „-W %s“ není jednoznačný\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: přepínač „-W %s“ musí být zadán bez argumentu\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: přepínač „-W %s“ vyžaduje argument\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "argument %s je pro %s neplatný" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "argument %s je pro %s nejednoznačný" + +#~ msgid "Valid arguments are:" +#~ msgstr "Platné argumenty jsou:" + +#~ msgid "program error" +#~ msgstr "chyba programu" + +#~ msgid "stack overflow" +#~ msgstr "přetečení zásobníku" + +#~ msgid "cannot find a temporary directory, try setting $TMPDIR" +#~ msgstr "nelze najít dočasnou složku, zkusí se nastavit $TMPDIR" + +#~ msgid "cannot create a temporary directory using template \"%s\"" +#~ msgstr "nelze vytvořit dočasnou složku pomocí šablony „%s“" + +#~ msgid "cannot remove temporary file %s" +#~ msgstr "nelze odstranit dočasný soubor %s" + +#~ msgid "cannot remove temporary directory %s" +#~ msgstr "nelze odstranit dočasnou složku %s" + +#~ msgid "error closing file" +#~ msgstr "chyba při zavírání souboru" + +#~ msgid "write error" +#~ msgstr "chyba při zápisu" + +#~ msgid "preserving permissions for %s" +#~ msgstr "zachování práv k souboru %s" + +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "chyba při otevírání souboru „%s“ pro čtení" + +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "nelze otevřít záložní soubor „%s“ pro zápis" + +#~ msgid "error reading \"%s\"" +#~ msgstr "chyba při čtení souboru „%s“" + +#~ msgid "error writing \"%s\"" +#~ msgstr "chyba při zápisu do souboru „%s“" + +#~ msgid "error after reading \"%s\"" +#~ msgstr "chyba po přečtení souboru „%s“" + +#~ msgid "fdopen() failed" +#~ msgstr "selhala funkce fdopen()" + +#~ msgid "C# compiler not found, try installing pnet" +#~ msgstr "Překladač C# nebyl nalezen, zkuste nainstalovat pnet" + +#~ msgid "C# virtual machine not found, try installing pnet" +#~ msgstr "Virtuální stroj C# nebyl nalezen, zkuste nainstalovat pnet" + +#~ msgid "%s subprocess failed" +#~ msgstr "selhal podřízený proces %s" + +#~ msgid "regular empty file" +#~ msgstr "prázdný běžný soubor" + +#~ msgid "regular file" +#~ msgstr "běžný soubor" + +#~ msgid "directory" +#~ msgstr "složka" + +#~ msgid "block special file" +#~ msgstr "speciální soubor blokového zařízení" + +#~ msgid "character special file" +#~ msgstr "speciální soubor znakového zařízení" + +#~ msgid "fifo" +#~ msgstr "fronta fifo" + +#~ msgid "symbolic link" +#~ msgstr "symbolický odkaz" + +#~ msgid "socket" +#~ msgstr "soket" + +#~ msgid "message queue" +#~ msgstr "fronta zpráv" + +#~ msgid "semaphore" +#~ msgstr "semafor" + +#~ msgid "shared memory object" +#~ msgstr "sdílený paměťový objekt" + +#~ msgid "typed memory object" +#~ msgstr "typový paměťový objekt" + +#~ msgid "weird file" +#~ msgstr "podivný soubor" + +#~ msgid "Address family for hostname not supported" +#~ msgstr "Pro název počítače není rodina adres podporována" + +#~ msgid "Temporary failure in name resolution" +#~ msgstr "Dočasné selhání při překladu názvu" + +#~ msgid "Bad value for ai_flags" +#~ msgstr "Špatná hodnota pro příznaky ai_flags" + +#~ msgid "Non-recoverable failure in name resolution" +#~ msgstr "Nenapravitelné selhání při překladu názvu" + +#~ msgid "ai_family not supported" +#~ msgstr "ai_family není podporována" + +#~ msgid "Memory allocation failure" +#~ msgstr "Selhalo přidělení paměti" + +#~ msgid "No address associated with hostname" +#~ msgstr "K názvu počítače není přiřazena žádná adresa" + +#~ msgid "Name or service not known" +#~ msgstr "Název nebo služba nejsou známy" + +#~ msgid "Servname not supported for ai_socktype" +#~ msgstr "Název služby není podporován pro ai_socktype" + +#~ msgid "ai_socktype not supported" +#~ msgstr "ai_socktype není podporován" + +#~ msgid "System error" +#~ msgstr "Chyba systému" + +#~ msgid "Argument buffer too small" +#~ msgstr "Vyrovnávací paměť argumentů je příliš malá" + +#~ msgid "Processing request in progress" +#~ msgstr "Probíhá zpracování požadavku" + +#~ msgid "Request canceled" +#~ msgstr "Požadavek byl zrušen" + +#~ msgid "Request not canceled" +#~ msgstr "Požadavek nebyl zrušen" + +#~ msgid "All requests done" +#~ msgstr "Všechny požadavky dokončeny" + +#~ msgid "Interrupted by a signal" +#~ msgstr "Přerušeno signálem" + +#~ msgid "Parameter string not correctly encoded" +#~ msgstr "Řetězec s parametry není správně kódován" + +#~ msgid "Unknown error" +#~ msgstr "Neznámá chyba" + +#~ msgid "invalid source_version argument to compile_java_class" +#~ msgstr "neplatný argument source_version pro compile_java_class" + +#~ msgid "invalid target_version argument to compile_java_class" +#~ msgstr "neplatný argument target_version pro compile_java_class" + +#~ msgid "failed to create \"%s\"" +#~ msgstr "selhalo vytvoření „%s“" + +#~ msgid "error while writing \"%s\" file" +#~ msgstr "chyba při zápisu souboru „%s“" + +#~ msgid "Java compiler not found, try installing gcj or set $JAVAC" +#~ msgstr "" +#~ "Překladač jazyka Java nebyl nalezen, zkuste nainstalovat gcj nebo " +#~ "nastavit proměnnou $JAVAC" + +#~ msgid "Java virtual machine not found, try installing gij or set $JAVA" +#~ msgstr "" +#~ "Virtuální stroj Java nebyl nalezen, zkuste nainstalovat gij nebo nastavit " +#~ "proměnnou $JAVAC" + +#~ msgid "%s subprocess I/O error" +#~ msgstr "V/V chyba podřízeného procesu %s" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "nelze změnit oprávnění k %s" + +#~ msgid "cannot create directory %s" +#~ msgstr "nelze vytvořit složku %s" + +#~ msgid "memory exhausted" +#~ msgstr "paměť byla vyčerpána" + +#~ msgid "unable to record current working directory" +#~ msgstr "nelze zaznamenat aktuální pracovní složku" + +#~ msgid "failed to return to initial working directory" +#~ msgstr "selhalo vrácení počáteční pracovní složky" + +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "Selhalo otevření /dev/zero pro čtení" + +#~ msgid "creation of reading thread failed" +#~ msgstr "vytvoření čtecího vlákna selhalo" + +#~ msgid "cannot set up nonblocking I/O to %s subprocess" +#~ msgstr "nelze nastavit neblokující V/V pro podřízený proces %s" + +#~ msgid "communication with %s subprocess failed" +#~ msgstr "komunikace s podřízeným procesem %s selhala" + +#~ msgid "write to %s subprocess failed" +#~ msgstr "zápis do podřízeného procesu %s selhal" + +#~ msgid "read from %s subprocess failed" +#~ msgstr "čtení z podřízeného procesu %s selhalo" + +#~ msgid "subprocess %s terminated with exit code %d" +#~ msgstr "podřízený proces %s byl ukončen s návratovým kódem %d" + +#~ msgid "creation of threads failed" +#~ msgstr "vytvoření vlákna selhalo" + +#~ msgid "%s subprocess terminated with exit code %d" +#~ msgstr "podřízený proces %s byl ukončen s návratovým kódem %d" + +#~ msgid "Franc,ois Pinard" +#~ msgstr "Franc, ois Pinard" + +#~ msgid "`" +#~ msgstr "„" + +#~ msgid "'" +#~ msgstr "“" + +#~ msgid "Success" +#~ msgstr "Úspěch" + +#~ msgid "No match" +#~ msgstr "Žádná shoda" + +#~ msgid "Invalid regular expression" +#~ msgstr "neplatný regulární výraz" + +#~ msgid "Invalid collation character" +#~ msgstr "neplatný znak pro porovnávání" + +#~ msgid "Invalid character class name" +#~ msgstr "neplatný název třídy znaku" + +#~ msgid "Trailing backslash" +#~ msgstr "Zpětné lomítko na konci" + +#~ msgid "Invalid back reference" +#~ msgstr "Neplatný zpětný odkaz" + +#~ msgid "Unmatched [ or [^" +#~ msgstr "Chybí odpovídající závorka k [ nebo [^" + +#~ msgid "Unmatched ( or \\(" +#~ msgstr "Chybí odpovídající závorka k ( nebo \\(" + +#~ msgid "Unmatched \\{" +#~ msgstr "Chybí odpovídající závorka k \\{" + +#~ msgid "Invalid content of \\{\\}" +#~ msgstr "Neplatný obsah \\{\\}" + +#~ msgid "Invalid range end" +#~ msgstr "Neplatný konec rozsahu" + +#~ msgid "Memory exhausted" +#~ msgstr "Paměť byla vyčerpána" + +#~ msgid "Invalid preceding regular expression" +#~ msgstr "Neplatný předchozí regulární výraz" + +#~ msgid "Premature end of regular expression" +#~ msgstr "Předčasný konec regulárního výrazu" + +#~ msgid "Regular expression too big" +#~ msgstr "Regulární výraz je příliš velký" + +#~ msgid "Unmatched ) or \\)" +#~ msgstr "Chybí odpovídající závorka k ) nebo \\)" + +#~ msgid "No previous regular expression" +#~ msgstr "Žádný předchozí regulární výraz" + +#~ msgid "^[yY]" +#~ msgstr "^[aAyY]" + +#~ msgid "^[nN]" +#~ msgstr "^[nN]" + +#~ msgid "setting permissions for %s" +#~ msgstr "nastavení oprávnění k %s" + +#~ msgid "Hangup" +#~ msgstr "Zavěsit" + +#~ msgid "Interrupt" +#~ msgstr "Přerušení" + +#~ msgid "Quit" +#~ msgstr "Ukončit" + +#~ msgid "Illegal instruction" +#~ msgstr "Neplatná instrukce" + +#~ msgid "Trace/breakpoint trap" +#~ msgstr "Krokování/bod přerušení" + +#~ msgid "Aborted" +#~ msgstr "Přerušen" + +#~ msgid "Floating point exception" +#~ msgstr "Výjimka ve výpočtu s plovoucí čárkou" + +#~ msgid "Killed" +#~ msgstr "Zabit" + +#~ msgid "Bus error" +#~ msgstr "Chyba sběrnice" + +#~ msgid "Segmentation fault" +#~ msgstr "Porušení ochrany paměti" + +#~ msgid "Broken pipe" +#~ msgstr "Porušená roura" + +#~ msgid "Alarm clock" +#~ msgstr "Alarm od hodin" + +#~ msgid "Terminated" +#~ msgstr "Ukončen" + +#~ msgid "Urgent I/O condition" +#~ msgstr "Urgentní stav V/V" + +#~ msgid "Stopped (signal)" +#~ msgstr "Pozastavit (signál)" + +#~ msgid "Stopped" +#~ msgstr "Pozastaven" + +#~ msgid "Continued" +#~ msgstr "Pokračuje" + +#~ msgid "Child exited" +#~ msgstr "Potomek skončil" + +#~ msgid "Stopped (tty input)" +#~ msgstr "Pozastaven (vstup tty)" + +#~ msgid "Stopped (tty output)" +#~ msgstr "Pozastaven (výstup tty)" + +#~ msgid "I/O possible" +#~ msgstr "Možný V/V" + +#~ msgid "CPU time limit exceeded" +#~ msgstr "Překročeno časové omezení procesoru" + +#~ msgid "File size limit exceeded" +#~ msgstr "Překročeno omezení velikosti souboru" + +#~ msgid "Virtual timer expired" +#~ msgstr "Virtuální časovač doběhl" + +#~ msgid "Profiling timer expired" +#~ msgstr "Profilovací časovač doběhl" + +#~ msgid "Window changed" +#~ msgstr "Změnilo se okno" + +#~ msgid "User defined signal 1" +#~ msgstr "Uživatelsky definovaný signál 1" + +#~ msgid "User defined signal 2" +#~ msgstr "Uživatelsky definovaný signál 2" + +#~ msgid "EMT trap" +#~ msgstr "Krokování emulátoru (EMT)" + +#~ msgid "Bad system call" +#~ msgstr "Chybné systémové volání" + +#~ msgid "Stack fault" +#~ msgstr "Porušení zásobníku" + +#~ msgid "Information request" +#~ msgstr "Žádost o informace" + +#~ msgid "Power failure" +#~ msgstr "Selhalo napájení" + +#~ msgid "Resource lost" +#~ msgstr "Prostředek přestal být k dispozici" + +#~ msgid "error writing to a closed pipe or socket" +#~ msgstr "chyba zápisu do zavřené roury nebo soketu" + +#~ msgid "cannot create pipe" +#~ msgstr "nelze vytvořit rouru" + +#~ msgid "Real-time signal %d" +#~ msgstr "Signál reálného času %d" + +#~ msgid "Unknown signal %d" +#~ msgstr "Neznámý signál %d" + +#~ msgid "iconv function not usable" +#~ msgstr "funkce iconv není použitelná" + +#~ msgid "iconv function not available" +#~ msgstr "funkce iconv není dostupná" + +#~ msgid "character out of range" +#~ msgstr "znak je mimo rozsah" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "znak U+%04X nelze převést do místní znakové sady" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "znak U+%04X nelze převést do místní znakové sady: %s" + +#~ msgid "invalid user" +#~ msgstr "neplatný uživatel" + +#~ msgid "invalid group" +#~ msgstr "neplatná skupina" + +#~ msgid "invalid spec" +#~ msgstr "neplatné zadání" + +#~ msgid "unable to display error message" +#~ msgstr "nelze zobrazit chybovou zprávu" + +#~ msgid "Packaged by %s (%s)\n" +#~ msgstr "Zabalil %s (%s)\n" + +#~ msgid "Packaged by %s\n" +#~ msgstr "Zabalil %s\n" + +#~ msgid "(C)" +#~ msgstr "©" + +#~ msgid "" +#~ "\n" +#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +#~ "html>.\n" +#~ "This is free software: you are free to change and redistribute it.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "Licence GPLv3+: GNU GPL verze 3 nebo novější <http://gnu.org/licenses/gpl." +#~ "html>.\n" +#~ "Jde o svobodný software: můžete jej volně měnit a šířit.\n" +#~ "Nejsou poskytovány ŽÁDNÉ ZÁRUKY, mimo těch daných zákonem.\n" +#~ "\n" + +#~ msgid "Written by %s.\n" +#~ msgstr "Napsal %s.\n" + +#~ msgid "Written by %s and %s.\n" +#~ msgstr "Napsali %s a %s.\n" + +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "Napsali %s, %s a %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Napsali %s, %s, %s\n" +#~ "a %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Napsali %s, %s, %s,\n" +#~ "%s a %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, and %s.\n" +#~ msgstr "" +#~ "Napsali %s, %s, %s,\n" +#~ "%s, %s a %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, and %s.\n" +#~ msgstr "" +#~ "Napsali %s, %s, %s,\n" +#~ "%s, %s, %s a %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Napsali %s, %s, %s,\n" +#~ "%s, %s, %s, %s\n" +#~ "a %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Napsali %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s a %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, and others.\n" +#~ msgstr "" +#~ "Napsali %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s a další.\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to: %s\n" +#~ msgstr "" +#~ "\n" +#~ "Chyby hlaste na: %s\n" + +#~ msgid "Report %s bugs to: %s\n" +#~ msgstr "Chyby balíčku %s hlaste na: %s\n" + +#~ msgid "%s home page: <%s>\n" +#~ msgstr "Domovská stránka projektu %s: <%s>\n" + +#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +#~ msgstr "Domovská stránka projektu %s: <http://www.gnu.org/software/%s/>\n" + +#~ msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +#~ msgstr "" +#~ "Obecná nápověda k používání softwaru GNU: <http://www.gnu.org/gethelp/>\n" + +#~ msgid "_open_osfhandle failed" +#~ msgstr "selhala funkce _open_osfhandle" + +#~ msgid "cannot restore fd %d: dup2 failed" +#~ msgstr "nelze obnovit fd %d: selhala funkce dup2" + +#~ msgid "%s subprocess" +#~ msgstr "podřízený proces %s" + +#~ msgid "%s subprocess got fatal signal %d" +#~ msgstr "podřízený proces %s obdržel kritický signál %d" + +#~ msgid "stdin" +#~ msgstr "standardní vstup" + +#~ msgid "stdout" +#~ msgstr "standardní výstup" + +#~ msgid "stderr" +#~ msgstr "standardní chybový výstup" + +#~ msgid "unknown stream" +#~ msgstr "neznámý proud" + +#~ msgid "failed to reopen %s with mode %s" +#~ msgstr "selhalo opětovné otevření %s v režimu %s" + +#~ msgid "string comparison failed" +#~ msgstr "selhalo porovnání řetězců" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "Problém obejdete nastavením LC_ALL='C'." + +#~ msgid "The strings compared were %s and %s." +#~ msgstr "Porovnávané řetězce byly %s a %s." + +#~ msgid "cannot perform formatted output" +#~ msgstr "nelze provést formátovaný výstup" + +#~ msgid "invalid %s%s argument `%s'" +#~ msgstr "neplatný argument „%3$s“ pro %1$s%2$s" + +#~ msgid "invalid suffix in %s%s argument `%s'" +#~ msgstr "neplatná přípona v argumentu „%3$s“ pro %1$s%2$s" + +#~ msgid "%s%s argument `%s' too large" +#~ msgstr "argument „%3$s“ pro %1$s%2$s je příliš velký" diff --git a/gnulib/po/da.po b/gnulib/po/da.po new file mode 100644 index 0000000..e65182e --- /dev/null +++ b/gnulib/po/da.po @@ -0,0 +1,775 @@ +# Danish messages for gnulib. +# Copyright 1997, 2002, 2003, 2004, 2005, 2007, 2009, 2010 Free Software Foundation, Inc. +# This file is distributed under the same license as the gnulib package. +# Peter Antman <peter.antman@abc.se>, 1997. +# Thomas Olsson <cid95tho@lustudat.student.lu.se>, 1997. +# Daniel Resare <daniel@resare.com>, 1999, 2000. +# Gran Uddeborg <goeran@uddeborg.se>, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009, 2010. +# Keld Simonsen <keld@keldix.com>, 2011 +# +# $Revision: 1.8 $ +# +msgid "" +msgstr "" +"Project-Id-Version: gnulib 2.0.0.3462.e9796\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2011-01-20 22:11+0100\n" +"Last-Translator: Keld Simonsen <keld@keldix.com>\n" +"Language-Team: Danish <dansk@dansk-gruppen.dk>\n" +"Language: da\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: vrdien p %s er mindre end eller lig med %s" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: ARGP_HELP_FMT-parameteren krver en vrdi" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: ARGP_HELP_FMT-parameteren skal vre positiv" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Ukendt ARGP_HELP_FMT-parameter" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Snavs i ARGP_HELP_FMT: %s" + +#: gnulib/lib/argp-help.c:1247 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Obligatoriske eller valgfrie argumenter til lange flag er ogs obligatoriske " +"eller valgfrie for tilsvarende korte flag." + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "Brug:" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr " eller: " + +#: gnulib/lib/argp-help.c:1656 +msgid " [OPTION...]" +msgstr " [FLAG...]" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Forsg med '%s --help' eller '%s --usage' for mere information.\n" + +#: gnulib/lib/argp-help.c:1711 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "" +"Rapportr fejl til %s.\n" +"Send synspunkter p oversttelsen til <dansk@dansk-gruppen.dk>\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "Ukendt systemfejl" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "giv denne hjlpeliste" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "giv en kort meddelelse om brug" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "NAVN" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "angiv progravnavnet" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "S" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "hng i S sekunder (som standard 3600)" + +#: gnulib/lib/argp-parse.c:142 +msgid "print program version" +msgstr "udskriv programversion" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(PROGRAMFEJL) Ingen version kendt!?" + +#: gnulib/lib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: For mange argumenter\n" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(PROGRAMFEJL) Flaget burde vre blevet genkendt!?" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: flaget '%s' er flertydigt\n" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: flaget '--%s' tager intet argument\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: flaget '%c%s' tager intet argument\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: flaget '%s' krver et argument\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: ukendt flag '--%s'\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: ukendt flag '%c%s'\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: ugyldig flag -- '%c'\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: flaget krver et argument -- '%c'\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: flaget '-W %s' er flertydigt\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: flaget '-W %s' tager intet argument\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: flaget '%s' krver et argument\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "Ugyldigt argument %s til %s" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "flertydigt argument %s til %s" + +#~ msgid "Valid arguments are:" +#~ msgstr "gyldige argumenter er:" + +#~ msgid "program error" +#~ msgstr "programfejl" + +#~ msgid "stack overflow" +#~ msgstr "stakoverlb" + +#~ msgid "cannot find a temporary directory, try setting $TMPDIR" +#~ msgstr "kan ikke finde et temporrt katalog, forsg at stte $TMPDIR" + +#~ msgid "cannot create a temporary directory using template \"%s\"" +#~ msgstr "kan ikke oprette et temporrt katalog ved brug af skabelonen '%s'" + +#~ msgid "cannot remove temporary file %s" +#~ msgstr "kan ikke fjerne temporr fil %s" + +#~ msgid "cannot remove temporary directory %s" +#~ msgstr "kan ikke fjerne temporrt katalog %s" + +#~ msgid "error closing file" +#~ msgstr "fejl ved lukning af fil" + +#~ msgid "write error" +#~ msgstr "skrivefejl" + +#~ msgid "preserving permissions for %s" +#~ msgstr "bevarer rettigheder p %s" + +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "fejl ved bning af '%s' for lsning" + +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "kan ikke bne sikkerhedskopifil '%s' for skrivning" + +#~ msgid "error reading \"%s\"" +#~ msgstr "fejl ved lsning af '%s'" + +#~ msgid "error writing \"%s\"" +#~ msgstr "fejl ved skrivning af '%s'" + +#~ msgid "error after reading \"%s\"" +#~ msgstr "fejl efter lsning af '%s'" + +#~ msgid "fdopen() failed" +#~ msgstr "fdopen() mislykkedes" + +#~ msgid "C# compiler not found, try installing pnet" +#~ msgstr "C#-overstter ikke fundet, forsg at installere pnet" + +#~ msgid "C# virtual machine not found, try installing pnet" +#~ msgstr "virtuel C#-maskine ikke fundet, forsg at installere pnet" + +#~ msgid "%s subprocess failed" +#~ msgstr "%s-underproces mislykkedes" + +#~ msgid "regular empty file" +#~ msgstr "tom normal fil" + +#~ msgid "regular file" +#~ msgstr "normal fil" + +#~ msgid "directory" +#~ msgstr "katalog" + +#~ msgid "block special file" +#~ msgstr "blokspecialfil" + +#~ msgid "character special file" +#~ msgstr "tegnspecialfil" + +#~ msgid "fifo" +#~ msgstr "fifo" + +#~ msgid "symbolic link" +#~ msgstr "symbolsk lnke" + +#~ msgid "socket" +#~ msgstr "sokkel (socket)" + +#~ msgid "message queue" +#~ msgstr "meddelelsek" + +#~ msgid "semaphore" +#~ msgstr "semafor" + +#~ msgid "shared memory object" +#~ msgstr "objekt af delt hukommelse" + +#~ msgid "typed memory object" +#~ msgstr "objekt af typet hukommelse" + +#~ msgid "weird file" +#~ msgstr "mrkelig fil" + +#~ msgid "Address family for hostname not supported" +#~ msgstr "Adressefamilien for vrtsnavnet understttes ikke" + +#~ msgid "Temporary failure in name resolution" +#~ msgstr "Midlertidig fejl i navneopslag" + +#~ msgid "Bad value for ai_flags" +#~ msgstr "Fejlagtig vrdi for ai_flags" + +#~ msgid "Non-recoverable failure in name resolution" +#~ msgstr "Ureparrbar fejl i navneopslag" + +#~ msgid "ai_family not supported" +#~ msgstr "ai_family understttes ikke" + +#~ msgid "Memory allocation failure" +#~ msgstr "Hukommelsesallokeringsfejl" + +#~ msgid "No address associated with hostname" +#~ msgstr "Ingen adresse associeret med vrtsnavnet" + +#~ msgid "Name or service not known" +#~ msgstr "Navn eller tjeneste ikke kendt" + +#~ msgid "Servname not supported for ai_socktype" +#~ msgstr "Servname understttes ikke for ai_socktype" + +#~ msgid "ai_socktype not supported" +#~ msgstr "ai_socktype understttes ikke" + +#~ msgid "System error" +#~ msgstr "Systemfejl" + +#~ msgid "Argument buffer too small" +#~ msgstr "Argumentbufferen for lille" + +#~ msgid "Processing request in progress" +#~ msgstr "Bearbejder pgende anmodning" + +#~ msgid "Request canceled" +#~ msgstr "Anmodning annuleret" + +#~ msgid "Request not canceled" +#~ msgstr "Anmodning ikke annuleret" + +#~ msgid "All requests done" +#~ msgstr "Alle anmodninger udfrt" + +#~ msgid "Interrupted by a signal" +#~ msgstr "Afbrudt af et signal" + +#~ msgid "Parameter string not correctly encoded" +#~ msgstr "Parameterstreng ikke korrekt kodet" + +#~ msgid "Unknown error" +#~ msgstr "Ukendt fejl" + +#~ msgid "invalid source_version argument to compile_java_class" +#~ msgstr "ugyldigt source_version-argument til compile_java_class" + +#~ msgid "invalid target_version argument to compile_java_class" +#~ msgstr "ugyldigt target_version-argument til compile_java_class" + +#~ msgid "failed to create \"%s\"" +#~ msgstr "det gik ikke at oprette '%s'" + +#~ msgid "error while writing \"%s\" file" +#~ msgstr "fejl ved skrivning af filen '%s'" + +#~ msgid "Java compiler not found, try installing gcj or set $JAVAC" +#~ msgstr "" +#~ "Javaoverstter ikke fundet, forsg at installere gcj eller stte $JAVAC" + +#~ msgid "Java virtual machine not found, try installing gij or set $JAVA" +#~ msgstr "" +#~ "Virtuel Javamaskine ikke fundet, forsg at installere gij eller stte " +#~ "$JAVA" + +#~ msgid "%s subprocess I/O error" +#~ msgstr "%s-underproces I/O-fejl" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "kan ikke ndre rettigheder p %s" + +#~ msgid "cannot create directory %s" +#~ msgstr "kan ikke oprette kataloget %s" + +#~ msgid "memory exhausted" +#~ msgstr "hukommelsen opbrugt" + +#~ msgid "unable to record current working directory" +#~ msgstr "kan ikke notere aktuelt arbejdskatalog" + +#~ msgid "failed to return to initial working directory" +#~ msgstr "kunne ikke g tilbage til det oprindelige arbejdskatalog" + +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "Mislykkedes med at bne /dev/zero for lsning" + +#~ msgid "creation of reading thread failed" +#~ msgstr "oprettelse af lsetrd mislykkedes" + +#~ msgid "cannot set up nonblocking I/O to %s subprocess" +#~ msgstr "kan ikke opstte ikke-blokerende I/O til %s-underproces" + +#~ msgid "communication with %s subprocess failed" +#~ msgstr "kommunikation med %s-underproces mislykkedes" + +#~ msgid "write to %s subprocess failed" +#~ msgstr "skrivning til %s-underproces mislykkedes" + +#~ msgid "read from %s subprocess failed" +#~ msgstr "lsning fra %s-underproces mislykkedes" + +#~ msgid "subprocess %s terminated with exit code %d" +#~ msgstr "underproces %s afsluttet med slutstatus %d" + +#~ msgid "creation of threads failed" +#~ msgstr "oprettelse af trde mislykkedes" + +#~ msgid "%s subprocess terminated with exit code %d" +#~ msgstr "%s-underproces afslutted med slutstatus %d" + +#~ msgid "cannot create pipe" +#~ msgstr "kan ikke oprette datakanal" + +#~ msgid "`" +#~ msgstr "'" + +#~ msgid "'" +#~ msgstr "'" + +#~ msgid "Success" +#~ msgstr "Lykkedes" + +#~ msgid "No match" +#~ msgstr "Ingen trffer" + +#~ msgid "Invalid regular expression" +#~ msgstr "Fejlagtigt regulrt udtryk" + +#~ msgid "Invalid collation character" +#~ msgstr "Ugyldigt sorteringstegn" + +#~ msgid "Invalid character class name" +#~ msgstr "Ugyldigt tegnklassenavn" + +#~ msgid "Trailing backslash" +#~ msgstr "Afsluttende baglns skrstreg" + +#~ msgid "Invalid back reference" +#~ msgstr "Ugyldig bagudreference" + +#~ msgid "Unmatched [ or [^" +#~ msgstr "Ensomt [ eller [^" + +#~ msgid "Unmatched ( or \\(" +#~ msgstr "Ensomt ( eller \\(" + +#~ msgid "Unmatched \\{" +#~ msgstr "Ensomt \\\\{" + +#~ msgid "Invalid content of \\{\\}" +#~ msgstr "Ugyldigt indhold i \\{\\}" + +#~ msgid "Invalid range end" +#~ msgstr "Ugyldigt intervalslut" + +#~ msgid "Memory exhausted" +#~ msgstr "Hukommelse opbrugt" + +#~ msgid "Invalid preceding regular expression" +#~ msgstr "Fejlagtigt foregende regulrt udtryk" + +#~ msgid "Premature end of regular expression" +#~ msgstr "For tidlig afslutning af regulrt udtryk" + +#~ msgid "Regular expression too big" +#~ msgstr "For stort regulrt udtryk" + +#~ msgid "Unmatched ) or \\)" +#~ msgstr "Ensomt ) eller \\)" + +#~ msgid "No previous regular expression" +#~ msgstr "Intet foregende regulrt udtryk" + +#~ msgid "^[yY]" +#~ msgstr "^[yYjJ]" + +#~ msgid "^[nN]" +#~ msgstr "^[nN]" + +#~ msgid "setting permissions for %s" +#~ msgstr "ndrer rettigheder p %s" + +#~ msgid "Hangup" +#~ msgstr "Lagt p" + +#~ msgid "Interrupt" +#~ msgstr "Afbrudt" + +#~ msgid "Quit" +#~ msgstr "Afslut" + +#~ msgid "Illegal instruction" +#~ msgstr "Utilladt instruktion" + +#~ msgid "Trace/breakpoint trap" +#~ msgstr "Sporings-/afbrudspunktsflde" + +#~ msgid "Aborted" +#~ msgstr "Afbrudt (abort)" + +#~ msgid "Floating point exception" +#~ msgstr "Undtagelse ved flydende tal" + +#~ msgid "Killed" +#~ msgstr "Drbt" + +#~ msgid "Bus error" +#~ msgstr "Busfejl" + +#~ msgid "Segmentation fault" +#~ msgstr "Segmenteringsfejl" + +#~ msgid "Broken pipe" +#~ msgstr "Brudt datakanal" + +#~ msgid "Alarm clock" +#~ msgstr "Alarmklokke" + +#~ msgid "Terminated" +#~ msgstr "Afsluttet" + +#~ msgid "Urgent I/O condition" +#~ msgstr "Hastende I/O-situation" + +#~ msgid "Stopped (signal)" +#~ msgstr "Stoppet (signal)" + +#~ msgid "Stopped" +#~ msgstr "Stoppet" + +#~ msgid "Continued" +#~ msgstr "Genoptaget" + +#~ msgid "Child exited" +#~ msgstr "Barn afsluttede" + +#~ msgid "Stopped (tty input)" +#~ msgstr "Stoppet (terminallsning)" + +#~ msgid "Stopped (tty output)" +#~ msgstr "Stoppet (terminalskrivning)" + +#~ msgid "I/O possible" +#~ msgstr "I/O muligt" + +#~ msgid "CPU time limit exceeded" +#~ msgstr "Grnse p CPU-tid overskredet" + +#~ msgid "File size limit exceeded" +#~ msgstr "Grnse p filstrrelse overskredet" + +#~ msgid "Virtual timer expired" +#~ msgstr "Alarmklokke - virtuel tid - udlb" + +#~ msgid "Profiling timer expired" +#~ msgstr "Profileringsklokke udlb" + +#~ msgid "Window changed" +#~ msgstr "ndret vindue" + +#~ msgid "User defined signal 1" +#~ msgstr "Brugersignal 1" + +#~ msgid "User defined signal 2" +#~ msgstr "Brugersignal 2" + +#~ msgid "EMT trap" +#~ msgstr "Emulatorflde" + +#~ msgid "Bad system call" +#~ msgstr "Fejlagtigt systemkald" + +#~ msgid "Stack fault" +#~ msgstr "Stakfejl" + +#~ msgid "Information request" +#~ msgstr "Informationsanmodning" + +#~ msgid "Power failure" +#~ msgstr "Strmafbrud" + +#~ msgid "Resource lost" +#~ msgstr "Tabt resurse" + +#~ msgid "error writing to a closed pipe or socket" +#~ msgstr "fejl ved skrivning til en lukket datakanal eller sokkel" + +#~ msgid "Real-time signal %d" +#~ msgstr "Realtidsignal %d" + +#~ msgid "Unknown signal %d" +#~ msgstr "Ukendt signal %d" + +#~ msgid "iconv function not usable" +#~ msgstr "iconv-funktion ikke brugbar" + +#~ msgid "iconv function not available" +#~ msgstr "iconv-funktion ikke tilgngelig" + +#~ msgid "character out of range" +#~ msgstr "tegn udenfor interval" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "kan ikke konvertere U+%04X til lokalt tegnst" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "kan ikke konvertere U+%04X til lokalt tegnst: %s" + +#~ msgid "invalid user" +#~ msgstr "ugyldig bruger" + +#~ msgid "invalid group" +#~ msgstr "ugyldig gruppe" + +#~ msgid "invalid spec" +#~ msgstr "ugyldig specifikation" + +#~ msgid "unable to display error message" +#~ msgstr "kan ikke vise fejlmeddelelse" + +#~ msgid "Packaged by %s (%s)\n" +#~ msgstr "Pakket af %s (%s)\n" + +#~ msgid "Packaged by %s\n" +#~ msgstr "Pakket af %s\n" + +#~ msgid "(C)" +#~ msgstr "" + +#~ msgid "" +#~ "\n" +#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +#~ "html>.\n" +#~ "This is free software: you are free to change and redistribute it.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "Licens GPLv3+: GNU GPL version 3 eller senere <http://gnu.org/licenses/" +#~ "gpl.html>.\n" +#~ "Dette er frit programmel: du m ndre og videredistribuere det.\n" +#~ "Der gives INGEN GARANTI, s vidt lov tillader.\n" +#~ "\n" + +#~ msgid "Written by %s.\n" +#~ msgstr "Skrevet af %s.\n" + +#~ msgid "Written by %s and %s.\n" +#~ msgstr "Skrevet af %s og %s.\n" + +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "Skrevet af %s, %s og %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Skrevet af %s, %s, %s\n" +#~ "og %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Skrevet af %s, %s, %s,\n" +#~ "%s og %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, and %s.\n" +#~ msgstr "" +#~ "Skrevet af %s, %s, %s,\n" +#~ "%s, %s og %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, and %s.\n" +#~ msgstr "" +#~ "Skrevet af %s, %s, %s,\n" +#~ "%s, %s, %s og %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Skrevet af %s, %s, %s,\n" +#~ "%s, %s, %s, %s\n" +#~ "og %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Skrevet af %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s og %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, and others.\n" +#~ msgstr "" +#~ "Skrevet af %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s med flere.\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to: %s\n" +#~ msgstr "" +#~ "\n" +#~ "Rapportr fejl til: %s\n" +#~ "Sende synspunkter p oversttelsen til: tp-sv@listor.tp-sv.se\n" + +#~ msgid "Report %s bugs to: %s\n" +#~ msgstr "Rapportr %s-fejl til: %s\n" + +#~ msgid "%s home page: <%s>\n" +#~ msgstr "%s hjemmeside: <%s>\n" + +#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +#~ msgstr "%s hjemmeside: <http://www.gnu.org/software/%s/>\n" + +#~ msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +#~ msgstr "" +#~ "Almindelig hjlp til at bruge GNU-programmer: <http://www.gnu.org/gethelp/" +#~ ">\n" + +#~ msgid "_open_osfhandle failed" +#~ msgstr "_open_osfhandle mislykkedes" + +#~ msgid "cannot restore fd %d: dup2 failed" +#~ msgstr "kan ikke genskabe fb %d: dup2 mislykkedes" + +#~ msgid "%s subprocess" +#~ msgstr "%s-underproces" + +#~ msgid "%s subprocess got fatal signal %d" +#~ msgstr "%s-underproces fik delggende signal %d" + +#~ msgid "stdin" +#~ msgstr "standard ind" + +#~ msgid "stdout" +#~ msgstr "standard ud" + +#~ msgid "stderr" +#~ msgstr "standard fejl" + +#~ msgid "unknown stream" +#~ msgstr "ukendt strm" + +#~ msgid "failed to reopen %s with mode %s" +#~ msgstr "kunne ikke genbne %s i tilstand %s" + +#~ msgid "string comparison failed" +#~ msgstr "strengsammenligning mislykkedes" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "St LC_ALL='C' for at omg problemet." + +#~ msgid "The strings compared were %s and %s." +#~ msgstr "De sammenlignede strenge var %s og %s." + +#~ msgid "cannot perform formatted output" +#~ msgstr "kan ikke udfre formateret udskrift" + +#~ msgid "invalid %s%s argument `%s'" +#~ msgstr "fejlagtigt %s%s-argument '%s'" + +#~ msgid "invalid suffix in %s%s argument `%s'" +#~ msgstr "fejlagtigt suffiks i %s%s-argument '%s'" + +#~ msgid "%s%s argument `%s' too large" +#~ msgstr "%s%s argument '%s' er for stort" diff --git a/gnulib/po/de.po b/gnulib/po/de.po new file mode 100644 index 0000000..34e63d5 --- /dev/null +++ b/gnulib/po/de.po @@ -0,0 +1,817 @@ +# German translation of gnulib messages. +# Copyright © 2011 Free Software Foundation, Inc. +# This file is distributed under the same license as the gnulib package. +# Karl Eichwalder <ke@suse.de>, 2001-2002. +# Lutz Behnke <lutz.behnke@gmx.de>, 1996, 1997, 1998, 1999, 2000, 2001. +# Michael Schmidt <michael@guug.de>, 1996, 1997, 1998, 1999, 2000. +# Michael Piefel <piefel@informatik.hu-berlin.de>, 2001, 2002, 2003, 2009. +# Kai Wasserbäch <debian@carbon-project.org>, 2009. +# Arun Persaud <arun@nubati.net>, 2012 +# +# TAB: spell it out („Tabulatoren“). -ke- +# Don't use obscure abbreviations, please. -ke- +# No hyphenation, please. -ke- +# +# space: Leerzeichen oder Leerschritt +# +# Check: +# idle - untätig +# idle: untätig, ruhig, „idle“, Leerlauf +# user idle time: Untätigkeitszeit des Benutzers, Ruhezeit, Idle-Time, +# Benutzer im Leerlauf +# digit - Zahl, Ziffer, Nummer, Stelle +# logged in - angemeldet, eingeloggt +# requested - gewünscht? +# +# Some comments on translations used in oder to ensure persistence: +# +# symbolic links: symbolische Verknüpfungen +# hard links: harte Verknüpfungen +# backup: Sicherung +# mount: einhängen +# +msgid "" +msgstr "" +"Project-Id-Version: GNU gnulib-3.0.0.6062.a6b16\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2012-06-03 12:41-0700\n" +"Last-Translator: Arun Persaud <arun@nubati.net>\n" +"Language-Team: German <translation-team-de@lists.sourceforge.net>\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: Der Wert %s ist kleiner oder gleich %s" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: ARGP_HELP_FMT Parameter benötigt einen Wert" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: ARGP_HELP_FMT Parameter muss positiv sein" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Unbekannter ARGP_HELP_FMT Parameter" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Müll in ARGP_HELP_FMT: %s" + +#: gnulib/lib/argp-help.c:1247 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Erforderliche oder optionale Argumente für lange Optionen sind auch für " +"kurze erforderlich bzw. optional." + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "Aufruf:" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr " oder: " + +#: gnulib/lib/argp-help.c:1656 +msgid " [OPTION...]" +msgstr " [OPTIONEN] " + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "»%s --help« oder »%s --usage« liefert weitere Informationen.\n" + +#: gnulib/lib/argp-help.c:1711 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Melden Sie Fehler (auf Englisch, mit LC_ALL=C) an <%s>.\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "Unbekannter Systemfehler" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "zeigt diese Hilfeliste" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "zeigt eine Kurzfassung des Aufrufs" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "NAME" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "den Programmnamen setzen" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "SEK" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "warte für SEK Sekunden (Standardwert 3600)" + +#: gnulib/lib/argp-parse.c:142 +msgid "print program version" +msgstr "zeige Programmversion an" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(PROGRAMM FEHLER) Keine Version bekannt!?" + +#: gnulib/lib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: zu viele Argumente\n" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(PROGRAMM FEHLER) Option hätte erkannt werden müssen!?" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: Option »%s« ist mehrdeutig; Möglichkeiten:" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: Option »--%s« erlaubt kein Argument\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: Option »%c%s« erlaubt kein Argument\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: Option »--%s« erfordert ein Argument\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: unbekannte Option »--%s«\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: unbekannte Option »%c%s«\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: ungültige Option -- »%c«\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: Option erfordert ein Argument -- »%c«\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: Option »-W %s« ist mehrdeutig\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: Option »-W %s« erlaubt kein Argument\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: Option »-W %s« erfordert ein Argument\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "ungültiges Argument %s für %s" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "mehrdeutiges Argument %s für %s" + +#~ msgid "Valid arguments are:" +#~ msgstr "Gültige Argumente sind:" + +#~ msgid "program error" +#~ msgstr "Programmfehler" + +#~ msgid "stack overflow" +#~ msgstr "Stacküberlauf" + +#~ msgid "cannot find a temporary directory, try setting $TMPDIR" +#~ msgstr "" +#~ "kann kein temporäres Verzeichnis finden, versuchen Sie, $TMPDIR zu setzen" + +#~ msgid "cannot create a temporary directory using template \"%s\"" +#~ msgstr "kann temporäres Verzeichnis mit der Schablone „%s“ nicht anlegen" + +#~ msgid "cannot remove temporary file %s" +#~ msgstr "kann temporäre Datei %s nicht entfernen" + +#~ msgid "cannot remove temporary directory %s" +#~ msgstr "kann temporäres Verzeichnis %s nicht entfernen" + +#~ msgid "error closing file" +#~ msgstr "Fehler beim Schließen der Datei" + +#~ msgid "write error" +#~ msgstr "Schreibfehler" + +#~ msgid "preserving permissions for %s" +#~ msgstr "erhalte Zugriffsrechte von %s" + +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "Fehler beim Versuch, „%s“ zum Lesen zu öffnen" + +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "kann Sicherungsdatei „%s“ nicht zum Schreiben öffnen" + +#~ msgid "error reading \"%s\"" +#~ msgstr "Fehler beim Lesen von „%s“" + +#~ msgid "error writing \"%s\"" +#~ msgstr "Fehler beim Schreiben von „%s“" + +#~ msgid "error after reading \"%s\"" +#~ msgstr "Fehler nach dem Lesen von „%s“" + +#~ msgid "fdopen() failed" +#~ msgstr "Fehler bei fdopen()" + +#~ msgid "C# compiler not found, try installing pnet" +#~ msgstr "C#-Compiler nicht gefunden, versuchen Sie, pnet zu installieren" + +#~ msgid "C# virtual machine not found, try installing pnet" +#~ msgstr "C#-VM nicht gefunden, versuchen Sie, pnet zu installieren" + +#~ msgid "%s subprocess failed" +#~ msgstr "%s: Unterprozess fehlgeschlagen" + +#~ msgid "regular empty file" +#~ msgstr "reguläre leere Datei" + +#~ msgid "regular file" +#~ msgstr "reguläre Datei" + +#~ msgid "directory" +#~ msgstr "Verzeichnis" + +#~ msgid "block special file" +#~ msgstr "blockorientierte Spezialdatei" + +#~ msgid "character special file" +#~ msgstr "zeichenorientierte Spezialdatei" + +#~ msgid "fifo" +#~ msgstr "FIFO" + +#~ msgid "symbolic link" +#~ msgstr "symbolische Verknüpfung" + +#~ msgid "socket" +#~ msgstr "Socket" + +#~ msgid "message queue" +#~ msgstr "Nachrichtenwarteschlange" + +#~ msgid "semaphore" +#~ msgstr "Semaphor" + +#~ msgid "shared memory object" +#~ msgstr "Objekt gemeinsamen Speichers" + +#~ msgid "typed memory object" +#~ msgstr "Objekt getypten Speichers" + +#~ msgid "weird file" +#~ msgstr "merkwürdige Datei" + +#~ msgid "Address family for hostname not supported" +#~ msgstr "Adressfamilie für Hostnamen nicht unterstützt" + +#~ msgid "Temporary failure in name resolution" +#~ msgstr "Temporäre Störung der Namensauflösung" + +#~ msgid "Bad value for ai_flags" +#~ msgstr "Ungültiger Wert für ai_flags" + +#~ msgid "Non-recoverable failure in name resolution" +#~ msgstr "Nicht zu umgehende Störung der Namensauflösung" + +#~ msgid "ai_family not supported" +#~ msgstr "ai_family nicht unterstützt" + +#~ msgid "Memory allocation failure" +#~ msgstr "Speicherallokationsfehler" + +#~ msgid "No address associated with hostname" +#~ msgstr "Keine Adresse mit Hostnamen verbunden" + +#~ msgid "Name or service not known" +#~ msgstr "Name oder Service unbekannt" + +#~ msgid "Servname not supported for ai_socktype" +#~ msgstr "Servname nicht unterstützt für ai_socktype" + +#~ msgid "ai_socktype not supported" +#~ msgstr "ai_socktype nicht unterstützt" + +#~ msgid "System error" +#~ msgstr "Systemfehler" + +#~ msgid "Argument buffer too small" +#~ msgstr "Argumentpuffer zu klein" + +#~ msgid "Processing request in progress" +#~ msgstr "Verarbeitungsanfrage in Bearbeitung" + +#~ msgid "Request canceled" +#~ msgstr "Anfrage abgebrochen" + +#~ msgid "Request not canceled" +#~ msgstr "Anfrage nicht abgebrochen" + +#~ msgid "All requests done" +#~ msgstr "Alle Anfragen erledigt" + +#~ msgid "Interrupted by a signal" +#~ msgstr "Durch Signal unterbrochen" + +#~ msgid "Parameter string not correctly encoded" +#~ msgstr "Parameterzeichenkette nicht korrekt kodiert" + +#~ msgid "Unknown error" +#~ msgstr "Unbekannter Fehler" + +#~ msgid "invalid source_version argument to compile_java_class" +#~ msgstr "ungültiges Argument source_version für compile_java_class" + +#~ msgid "invalid target_version argument to compile_java_class" +#~ msgstr "ungültiges Argument target_version für compile_java_class" + +#~ msgid "failed to create \"%s\"" +#~ msgstr "konnte „%s“ nicht erzeugen" + +#~ msgid "error while writing \"%s\" file" +#~ msgstr "Fehler beim Schreiben von der Datei „%s“" + +#~ msgid "Java compiler not found, try installing gcj or set $JAVAC" +#~ msgstr "" +#~ "Java-Compiler nicht gefunden, versuchen Sie, gcj zu installieren oder " +#~ "setzen Sie $JAVAC" + +#~ msgid "Java virtual machine not found, try installing gij or set $JAVA" +#~ msgstr "" +#~ "Java-VM nicht gefunden, versuchen Sie, gij zu installieren oder setzen " +#~ "Sie $JAVA" + +#~ msgid "%s subprocess I/O error" +#~ msgstr "%s-Unterprozess-E/A-Fehler" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "kann Zugriffsrechte von %s nicht ändern" + +#~ msgid "cannot create directory %s" +#~ msgstr "kann Verzeichnis %s nicht anlegen" + +#~ msgid "memory exhausted" +#~ msgstr "Speicher ausgeschöpft" + +#~ msgid "unable to record current working directory" +#~ msgstr "aktuelles Arbeitsverzeichnisses kann nicht aufgezeichnet werden" + +#~ msgid "failed to return to initial working directory" +#~ msgstr "" +#~ "es konnte nicht ins ursprüngliche Arbeitsverzeichnis zurückgekehrt werden" + +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "Konnte /dev/zero nicht zum Lesen öffnen" + +#~ msgid "creation of reading thread failed" +#~ msgstr "Erstellen des Lese-Threads fehlgeschlagen" + +#~ msgid "cannot set up nonblocking I/O to %s subprocess" +#~ msgstr "" +#~ "Nicht-blockierendes I/O zu Teilprozess %s kann nicht hergestellt werden" + +#~ msgid "communication with %s subprocess failed" +#~ msgstr "Kommunikation mit Teilprozess %s fehlgeschlagen" + +#~ msgid "write to %s subprocess failed" +#~ msgstr "Schreiben zu Teilprozess %s fehlgeschlagen" + +#~ msgid "read from %s subprocess failed" +#~ msgstr "Lesen von Teilprozess %s fehlgeschlagen" + +#~ msgid "subprocess %s terminated with exit code %d" +#~ msgstr "Teilprozess %s beendet mit Exitcode %d" + +#~ msgid "creation of threads failed" +#~ msgstr "Erstellen von Threads fehlgeschlagen" + +#~ msgid "%s subprocess terminated with exit code %d" +#~ msgstr "Teilprozess %s beendet mit Exitcode %d" + +#~ msgid "Franc,ois Pinard" +#~ msgstr "François Pinard" + +#~ msgid "`" +#~ msgstr "„" + +#~ msgid "'" +#~ msgstr "“" + +#~ msgid "Success" +#~ msgstr "Erfolg" + +#~ msgid "No match" +#~ msgstr "Keine Übereinstimmung" + +#~ msgid "Invalid regular expression" +#~ msgstr "ungültiger regulärer Ausdruck" + +#~ msgid "Invalid collation character" +#~ msgstr "Ungültige Zeichenklasse" + +#~ msgid "Invalid character class name" +#~ msgstr "Ungültiger Zeichenklassenname" + +#~ msgid "Trailing backslash" +#~ msgstr "abschließender Backslash" + +#~ msgid "Invalid back reference" +#~ msgstr "Ungültige Rückreferenz" + +#~ msgid "Unmatched [ or [^" +#~ msgstr "Keine Übereinstimmung für [ oder [^" + +#~ msgid "Unmatched ( or \\(" +#~ msgstr "Keine Übereinstimmung für ( oder \\(" + +#~ msgid "Unmatched \\{" +#~ msgstr "Keine Übereinstimmung für \\{" + +#~ msgid "Invalid content of \\{\\}" +#~ msgstr "Ungültiger Inhalt in \\{\\}" + +#~ msgid "Invalid range end" +#~ msgstr "Ungültiges Bereichsende" + +#~ msgid "Memory exhausted" +#~ msgstr "Speicher ausgeschöpft" + +#~ msgid "Invalid preceding regular expression" +#~ msgstr "ungültiger vorhergehender regulärer Ausdruck" + +#~ msgid "Premature end of regular expression" +#~ msgstr "Vorzeitiges Ende des regulären Ausdrucks" + +#~ msgid "Regular expression too big" +#~ msgstr "Der reguläre Ausdruck ist zu groß" + +#~ msgid "Unmatched ) or \\)" +#~ msgstr "Keine Übereinstimmung für ) oder \\)" + +#~ msgid "No previous regular expression" +#~ msgstr "Kein vorhergehender regulärer Ausdruck" + +#~ msgid "^[yY]" +#~ msgstr "^[jJyY]" + +#~ msgid "^[nN]" +#~ msgstr "^[nN]" + +#~ msgid "setting permissions for %s" +#~ msgstr "setze Zugriffsrechte von %s" + +#~ msgid "Hangup" +#~ msgstr "Aufgehängt" + +#~ msgid "Interrupt" +#~ msgstr "Unterbrechung" + +#~ msgid "Quit" +#~ msgstr "Beendet" + +#~ msgid "Illegal instruction" +#~ msgstr "Ungültige Anweisung" + +#~ msgid "Trace/breakpoint trap" +#~ msgstr "Trace-/Breakpoint-Falle" + +#~ msgid "Aborted" +#~ msgstr "Abgebrochen" + +#~ msgid "Floating point exception" +#~ msgstr "Fließkomma-Ausnahme" + +#~ msgid "Killed" +#~ msgstr "Getötet" + +#~ msgid "Bus error" +#~ msgstr "Busfehler" + +#~ msgid "Segmentation fault" +#~ msgstr "Speicheraufteilungsfehler" + +#~ msgid "Broken pipe" +#~ msgstr "Unterbrochene Weiterleitung" + +#~ msgid "Alarm clock" +#~ msgstr "Alarmuhr" + +#~ msgid "Terminated" +#~ msgstr "Terminiert" + +#~ msgid "Urgent I/O condition" +#~ msgstr "Dringende I/O-Bedingung" + +#~ msgid "Stopped (signal)" +#~ msgstr "Gestoppt (Signal)" + +#~ msgid "Stopped" +#~ msgstr "Gestoppt" + +#~ msgid "Continued" +#~ msgstr "Fortgesetzt" + +#~ msgid "Child exited" +#~ msgstr "Kind verlassen" + +#~ msgid "Stopped (tty input)" +#~ msgstr "Gestoppt (tty-Eingabe)" + +#~ msgid "Stopped (tty output)" +#~ msgstr "Gestoppt (tty-Ausgabe)" + +#~ msgid "I/O possible" +#~ msgstr "I/O möglich" + +#~ msgid "CPU time limit exceeded" +#~ msgstr "CPU-Zeitbegrenzung überschritten" + +#~ msgid "File size limit exceeded" +#~ msgstr "Dateigrößenbegrenzung überschritten" + +#~ msgid "Virtual timer expired" +#~ msgstr "Virtueller Zeitgeber abgelaufen" + +#~ msgid "Profiling timer expired" +#~ msgstr "Zeitmesser zur Leistungsmessung abgelaufen" + +#~ msgid "Window changed" +#~ msgstr "Fenster geändert" + +#~ msgid "User defined signal 1" +#~ msgstr "Benutzerdefiniertes Signal 1" + +#~ msgid "User defined signal 2" +#~ msgstr "Benutzerdefiniertes Signal 2" + +#~ msgid "EMT trap" +#~ msgstr "EMT-Falle" + +#~ msgid "Bad system call" +#~ msgstr "Fehlerhafter Systemaufruf" + +#~ msgid "Stack fault" +#~ msgstr "Stapelfehler" + +#~ msgid "Information request" +#~ msgstr "Informationsanfrage" + +#~ msgid "Power failure" +#~ msgstr "Stromausfall" + +#~ msgid "Resource lost" +#~ msgstr "Ressource verloren" + +#~ msgid "error writing to a closed pipe or socket" +#~ msgstr "Fehler beim Schreiben in geschlossene Pipe oder Socket" + +#~ msgid "cannot create pipe" +#~ msgstr "kann Pipe nicht erzeugen" + +#~ msgid "Real-time signal %d" +#~ msgstr "Echtzeitsignal %d" + +#~ msgid "Unknown signal %d" +#~ msgstr "Unbekanntes Signal %d" + +#~ msgid "iconv function not usable" +#~ msgstr "iconv-Funktion nicht benutzbar" + +#~ msgid "iconv function not available" +#~ msgstr "iconv-Funktion nicht verfügbar" + +#~ msgid "character out of range" +#~ msgstr "Zeichen außerhalb erlaubter Grenzen" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "kann U+%04X nicht in lokalen Zeichensatz konvertieren" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "kann U+%04X nicht in lokalen Zeichensatz konvertieren: %s" + +#~ msgid "invalid user" +#~ msgstr "ungültiger Benutzer" + +#~ msgid "invalid group" +#~ msgstr "ungültige Gruppe" + +#~ msgid "invalid spec" +#~ msgstr "ungültige Spec" + +#~ msgid "unable to display error message" +#~ msgstr "kann Fehlermeldung nicht anzeigen" + +#~ msgid "Packaged by %s (%s)\n" +#~ msgstr "Paket erstellt von %s (%s)\n" + +#~ msgid "Packaged by %s\n" +#~ msgstr "Paket erstellt von %s\n" + +#~ msgid "(C)" +#~ msgstr "©" + +#~ msgid "" +#~ "\n" +#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +#~ "html>.\n" +#~ "This is free software: you are free to change and redistribute it.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "Lizenz GPLv3+: GNU GPL Version 3 oder höher <http://gnu.org/licenses/gpl." +#~ "html>.\n" +#~ "Dies ist freie Software: Sie können sie ändern und weitergeben.\n" +#~ "Es gibt keinerlei Garantien, soweit wie es das Gesetz erlaubt.\n" +#~ "\n" + +#~ msgid "Written by %s.\n" +#~ msgstr "Geschrieben von %s.\n" + +#~ msgid "Written by %s and %s.\n" +#~ msgstr "Geschrieben von %s und %s.\n" + +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "Geschrieben von %s, %s und %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Geschrieben von %s, %s, %s\n" +#~ "und %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Geschrieben von %s, %s, %s,\n" +#~ "%s und %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, and %s.\n" +#~ msgstr "" +#~ "Geschrieben von %s, %s, %s,\n" +#~ "%s, %s und %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, and %s.\n" +#~ msgstr "" +#~ "Geschrieben von %s, %s, %s,\n" +#~ "%s, %s, %s und %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Geschrieben von %s, %s, %s,\n" +#~ "%s, %s, %s, %s\n" +#~ "und %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Geschrieben von %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s und %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, and others.\n" +#~ msgstr "" +#~ "Geschrieben von %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s und anderen.\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to: %s\n" +#~ msgstr "" +#~ "\n" +#~ "Melden Sie Fehler im Program (auf Englisch, mit LC_ALL=C) an <%s>.\n" +#~ "Melden Sie Fehler in der Übersetzung an <translation-team-de@lists." +#~ "sourceforge.net>.\n" + +#~ msgid "Report %s bugs to: %s\n" +#~ msgstr "Melden Sie %s-Fehler (auf Englisch, mit LC_ALL=C) an <%s>.\n" + +#~ msgid "%s home page: <%s>\n" +#~ msgstr "%s Homepage: <%s>\n" + +#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +#~ msgstr "Heimatseite von %s: <http://www.gnu.org/software/%s/>.\n" + +#~ msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +#~ msgstr "" +#~ "Allgemeine Hilfe zur Benutzung von GNU-Software: <http://www.gnu.org/" +#~ "gethelp/>\n" + +#~ msgid "_open_osfhandle failed" +#~ msgstr "_open_osfhandle fehlgeschlagen" + +#~ msgid "cannot restore fd %d: dup2 failed" +#~ msgstr "Kann Fd %d nicht wiederherstellen: dup2 fehlgeschlagen" + +#~ msgid "%s subprocess" +#~ msgstr "%s-Unterprozess" + +#~ msgid "%s subprocess got fatal signal %d" +#~ msgstr "%s-Unterprozess bekam tödliches Signal %d" + +#~ msgid "stdin" +#~ msgstr "Standardeingabe (stdin)" + +#~ msgid "stdout" +#~ msgstr "Standardausgabe (stdout)" + +#~ msgid "stderr" +#~ msgstr "Standardfehlerausgabe (stderr)" + +#~ msgid "unknown stream" +#~ msgstr "Unbekannter Datenstrom" + +#~ msgid "failed to reopen %s with mode %s" +#~ msgstr "Erneutes Öffnen von %s mit Mode %s fehlgeschlagen" + +#~ msgid "string comparison failed" +#~ msgstr "Zeichenkettenvergleich fehlgeschlagen" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "Setzen Sie LC_ALL=C, um das Problem zu umgehen." + +#~ msgid "The strings compared were %s and %s." +#~ msgstr "Die verglichenen Zeichenketten waren %s und %s." + +#~ msgid "cannot perform formatted output" +#~ msgstr "kann keine formatierte Ausgabe durchführen" + +#~ msgid "invalid %s%s argument `%s'" +#~ msgstr "ungültiges %s%s-Argument „%s“" + +#~ msgid "invalid suffix in %s%s argument `%s'" +#~ msgstr "ungültiger Suffix in %s%s-Argument „%s“" + +#~ msgid "%s%s argument `%s' too large" +#~ msgstr "%s%s-Argument „%s“ zu groß" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: ungültige Option -- %c\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "" +#~ "\n" +#~ "Melden Sie Fehler (auf Englisch, mit LC_ALL=C) an <%s>.\n" +#~ "Melden Sie Übersetzungsfehler an <translation-team-de@lists.sourceforge." +#~ "net>\n" + +#~ msgid "block size" +#~ msgstr "Blockgröße" diff --git a/gnulib/po/el.po b/gnulib/po/el.po new file mode 100644 index 0000000..46825e9 --- /dev/null +++ b/gnulib/po/el.po @@ -0,0 +1,630 @@ +# Greek messages for gnulib +# Copyright (C) 1999, 2000, 2001, 2002, 2012 Free Software Foundation, Inc. +# This file is distributed under the same license as the gnulib package. +# Simos Xenitellis <simos.lists@googlemail.com>, 1999, 2000, 2001, 2002, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2012-03-11 11:25+0100\n" +"Last-Translator: Simos Xenitellis <simos.lists@googlemail.com>\n" +"Language-Team: Greek <team@lists.gnome.gr>\n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "" + +#: gnulib/lib/argp-help.c:1247 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr "" + +# +#: gnulib/lib/argp-help.c:1656 +msgid " [OPTION...]" +msgstr " [ΕΠΙΛΟΓΗ...]" + +# +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Δοκιμάστε `%s --help' για περισσότερη βοήθεια.\n" + +# +#: gnulib/lib/argp-help.c:1711 +#, fuzzy, c-format +msgid "Report bugs to %s.\n" +msgstr "" +"\n" +"Αναφέρατε σφάλματα στο <%s>.\n" + +# +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "Άγνωστο σφάλμα συστήματος" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "" + +# +#: gnulib/lib/argp-parse.c:142 +#, fuzzy +msgid "print program version" +msgstr "σφάλμα προγράμματος" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "" + +# +#: gnulib/lib/argp-parse.c:612 +#, fuzzy, c-format +msgid "%s: Too many arguments\n" +msgstr "πάρα πολλά ορίσματα" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "" + +# +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: η επιλογή `%s' είναι ασαφής\n" + +# +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: η επιλογή `--%s' δεν επιτρέπει ορίσματα\n" + +# +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: η επιλογή `%c%s' δεν επιτρέπει ορίσματα\n" + +# +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: η επιλογή `-%s' απαιτεί ένα όρισμα\n" + +# +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: μη αναγνωρίσιμη επιλογή `--%s'\n" + +# +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: μη αναγνωρίσιμη επιλογή `%c%s'\n" + +# +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: μη έγκυρη επιλογή -- %c\n" + +# +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: η επιλογή απαιτεί ένα όρισμα -- %c\n" + +# +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: η επιλογή `-W %s' είναι ασαφής\n" + +# +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: η επιλογή `-W %s' δεν επιτρέπει ορίσματα\n" + +# +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: η επιλογή `-%s' απαιτεί ένα όρισμα\n" + +# +#~ msgid "invalid argument %s for %s" +#~ msgstr "μη έγκυρο όρισμα %s για %s" + +# +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "ασαφές όρισμα %s για %s" + +# +#~ msgid "Valid arguments are:" +#~ msgstr "Έγκυρα ορίσματα είναι:" + +# +#~ msgid "program error" +#~ msgstr "σφάλμα προγράμματος" + +# +#~ msgid "stack overflow" +#~ msgstr "υπερχείλιση στοίβας" + +# +#, fuzzy +#~ msgid "cannot create a temporary directory using template \"%s\"" +#~ msgstr "αδύνατη η δημιουργία καταλόγου `%s'" + +# +#, fuzzy +#~ msgid "cannot remove temporary file %s" +#~ msgstr "αδύνατη η δημιουργία καταλόγου `%s'" + +# +#, fuzzy +#~ msgid "cannot remove temporary directory %s" +#~ msgstr "αδύνατη η δημιουργία καταλόγου `%s'" + +# +#~ msgid "write error" +#~ msgstr "σφάλμα εγγραφής" + +# +#, fuzzy +#~ msgid "preserving permissions for %s" +#~ msgstr "αδυναμία αλλαγής ιδιοκτησίας στο %s" + +#, fuzzy +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "αδυναμία μεταφοράς του `%s' στο `%s'" + +#, fuzzy +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "αδυναμία μεταφοράς του `%s' στο `%s'" + +# +#, fuzzy +#~ msgid "error reading \"%s\"" +#~ msgstr "σφάλμα ανάγνωσης %s" + +# +#, fuzzy +#~ msgid "error writing \"%s\"" +#~ msgstr "σφάλμα εγγραφής %s" + +# +#, fuzzy +#~ msgid "error after reading \"%s\"" +#~ msgstr "σφάλμα ανάγνωσης %s" + +# +#, fuzzy +#~ msgid "fdopen() failed" +#~ msgstr "αποτυχία ανοίγματος" + +# +#, fuzzy +#~ msgid "%s subprocess failed" +#~ msgstr "%s: μη έγκυρη μορφή" + +# +#~ msgid "regular empty file" +#~ msgstr "κανονικό κενό αρχείο" + +# +#~ msgid "regular file" +#~ msgstr "κανονικό αρχείο" + +# +#~ msgid "directory" +#~ msgstr "κατάλογος" + +# +#~ msgid "block special file" +#~ msgstr "ειδικό αρχείο μπλοκ" + +# +#~ msgid "character special file" +#~ msgstr "ειδικό αρχείο χαρακτήρων" + +# +#~ msgid "fifo" +#~ msgstr "φίφο" + +# +#~ msgid "symbolic link" +#~ msgstr "συμβολικός σύνδεσμος" + +# +#~ msgid "socket" +#~ msgstr "υποδοχέας" + +# +#~ msgid "message queue" +#~ msgstr "ουρά μηνυμάτων" + +# +#~ msgid "semaphore" +#~ msgstr "σημαφόρος" + +# +#~ msgid "weird file" +#~ msgstr "παράξενο αρχείο" + +#, fuzzy +#~ msgid "Address family for hostname not supported" +#~ msgstr "αρχεία fifo δεν υποστηρίζονται" + +#, fuzzy +#~ msgid "ai_family not supported" +#~ msgstr "αρχεία fifo δεν υποστηρίζονται" + +#, fuzzy +#~ msgid "ai_socktype not supported" +#~ msgstr "αρχεία fifo δεν υποστηρίζονται" + +# +#, fuzzy +#~ msgid "System error" +#~ msgstr "σφάλμα εγγραφής" + +# +#, fuzzy +#~ msgid "Unknown error" +#~ msgstr "Άγνωστο σφάλμα συστήματος" + +# +#, fuzzy +#~ msgid "error while writing \"%s\" file" +#~ msgstr "σφάλμα εγγραφής %s" + +# +#, fuzzy +#~ msgid "%s subprocess I/O error" +#~ msgstr "%s: μη έγκυρη μορφή" + +# +#, fuzzy +#~ msgid "cannot change permissions of %s" +#~ msgstr "αδυναμία αλλαγής ιδιοκτησίας στο %s" + +# +#, fuzzy +#~ msgid "cannot create directory %s" +#~ msgstr "αδύνατη η δημιουργία καταλόγου `%s'" + +# +#~ msgid "memory exhausted" +#~ msgstr "η μνήμη εξαντλήθηκε" + +# +#, fuzzy +#~ msgid "unable to record current working directory" +#~ msgstr "αδύνατη η δημιουργία καταλόγου `%s'" + +# +#, fuzzy +#~ msgid "failed to return to initial working directory" +#~ msgstr "αδύνατη η δημιουργία καταλόγου `%s'" + +# +#, fuzzy +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "αδυναμία αλλαγής ιδιοκτησίας στο %s" + +# +#, fuzzy +#~ msgid "communication with %s subprocess failed" +#~ msgstr "%s: μη έγκυρη μορφή" + +# +#, fuzzy +#~ msgid "write to %s subprocess failed" +#~ msgstr "%s: μη έγκυρη μορφή" + +# +#, fuzzy +#~ msgid "read from %s subprocess failed" +#~ msgstr "%s: μη έγκυρη μορφή" + +# +#~ msgid "`" +#~ msgstr "`" + +# +#~ msgid "'" +#~ msgstr "'" + +# +#, fuzzy +#~ msgid "Invalid regular expression" +#~ msgstr "%s: μη έγκυρη κανονική έκφραση: %s" + +# +#, fuzzy +#~ msgid "Invalid collation character" +#~ msgstr "μη έγκυρη τάξη χαρακτήρων `%s'" + +# +#, fuzzy +#~ msgid "Invalid character class name" +#~ msgstr "μη έγκυρη τάξη χαρακτήρων `%s'" + +# +#, fuzzy +#~ msgid "Invalid range end" +#~ msgstr "%s: μη έγκυρη κανονική έκφραση: %s" + +# +#, fuzzy +#~ msgid "Memory exhausted" +#~ msgstr "η μνήμη εξαντλήθηκε" + +# +#, fuzzy +#~ msgid "Invalid preceding regular expression" +#~ msgstr "%s: μη έγκυρη κανονική έκφραση: %s" + +# +#, fuzzy +#~ msgid "Premature end of regular expression" +#~ msgstr "σφάλμα στην ανεύρεση μέσω κανονικής έκφρασης" + +# +#, fuzzy +#~ msgid "Regular expression too big" +#~ msgstr "%s: μη έγκυρη κανονική έκφραση: %s" + +# +#, fuzzy +#~ msgid "No previous regular expression" +#~ msgstr "σφάλμα στην ανεύρεση μέσω κανονικής έκφρασης" + +# +#~ msgid "^[yY]" +#~ msgstr "^[yYνΝ]" + +# +#~ msgid "^[nN]" +#~ msgstr "^[nNοΟ]" + +# +#, fuzzy +#~ msgid "setting permissions for %s" +#~ msgstr "αδυναμία αλλαγής ιδιοκτησίας στο %s" + +# +#, fuzzy +#~ msgid "Bus error" +#~ msgstr "σφάλμα εγγραφής" + +# +#, fuzzy +#~ msgid "cannot create pipe" +#~ msgstr "αδύνατη η δημιουργία καταλόγου `%s'" + +# +#, fuzzy +#~ msgid "character out of range" +#~ msgstr "%s: αριθμός γραμμής έξω από τα όρια" + +# +#~ msgid "invalid user" +#~ msgstr "μη έγκυρος χρήστης" + +# +#~ msgid "invalid group" +#~ msgstr "μη έγκυρη ομάδα" + +# +#, fuzzy +#~ msgid "invalid spec" +#~ msgstr "μη έγκυρος χρήστης" + +# +#~ msgid "Written by %s.\n" +#~ msgstr "Γραμμένο από τον/την %s.\n" + +# +#, fuzzy +#~ msgid "Written by %s and %s.\n" +#~ msgstr "Γραμμένο από τον/την %s.\n" + +# +#, fuzzy +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "Γραμμένο από τον/την %s.\n" + +# +#, fuzzy +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "Γραμμένο από τον/την %s.\n" + +# +#, fuzzy +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "Γραμμένο από τον/την %s.\n" + +# +#, fuzzy +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, and %s.\n" +#~ msgstr "Γραμμένο από τον/την %s.\n" + +# +#, fuzzy +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, and %s.\n" +#~ msgstr "Γραμμένο από τον/την %s.\n" + +# +#, fuzzy +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "Γραμμένο από τον/την %s.\n" + +# +#, fuzzy +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "Γραμμένο από τον/την %s.\n" + +# +#, fuzzy +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, and others.\n" +#~ msgstr "Γραμμένο από τον/την %s.\n" + +# +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "Report bugs to: %s\n" +#~ msgstr "" +#~ "\n" +#~ "Αναφέρατε σφάλματα στο <%s>.\n" + +# +#, fuzzy +#~ msgid "Report %s bugs to: %s\n" +#~ msgstr "" +#~ "\n" +#~ "Αναφέρατε σφάλματα στο <%s>.\n" + +# +#, fuzzy +#~ msgid "%s subprocess" +#~ msgstr "%s: μη έγκυρη μορφή" + +# +#, fuzzy +#~ msgid "%s subprocess got fatal signal %d" +#~ msgstr "%s: μη έγκυρη μορφή" + +# +#, fuzzy +#~ msgid "unknown stream" +#~ msgstr "Άγνωστο σφάλμα συστήματος" + +# +#, fuzzy +#~ msgid "string comparison failed" +#~ msgstr "αποτυχία εγγραφής" + +# +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "Θέστε LC_ALL='C' για να παρακάμψετε το πρόβλημα." + +#, fuzzy +#~ msgid "The strings compared were %s and %s." +#~ msgstr "δεν είναι δυνατό να δημιουργηθεί το %s `%s' στο `%s'" + +# +#, fuzzy +#~ msgid "invalid %s%s argument `%s'" +#~ msgstr "μη έγκυρο όρισμα %s για %s" + +# +#, fuzzy +#~ msgid "invalid suffix in %s%s argument `%s'" +#~ msgstr "μη έγκυρο όρισμα %s για %s" + +# +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: μη αναγνωρίσιμη επιλογή -- %c\n" + +# +#~ msgid "block size" +#~ msgstr "μέγεθος μπλοκ" + +# +#, fuzzy +#~ msgid "%s exists but is not a directory" +#~ msgstr "το `%s' υπάρχει ήδη άλλα δεν είναι κατάλογος" + +# +#, fuzzy +#~ msgid "cannot change owner and/or group of %s" +#~ msgstr "δεν είναι δυνατό να παραληφθεί χρήστης και ομάδα" + +# +#, fuzzy +#~ msgid "cannot chdir to directory %s" +#~ msgstr "αδύνατη η αλλαγή στο κατάλογο %s" + +# +#~ msgid "cannot get the login group of a numeric UID" +#~ msgstr "" +#~ "αδύνατη η λήψη της ομάδας εισαγωγής στο σύστημα ενός αριθμητικού UID" diff --git a/gnulib/po/eo.po b/gnulib/po/eo.po new file mode 100644 index 0000000..7058fef --- /dev/null +++ b/gnulib/po/eo.po @@ -0,0 +1,766 @@ +# translation of gnubiff-2.0.2.po to Esperanto +# Copyright (C) 2013 Free Software Foundation, Inc. +# This file is distributed under the same license as the gnulib package. +# Felipe Castro <fefcas@gmail.com>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2013-02-06 15:17-0300\n" +"Last-Translator: Felipe Castro <fefcas@gmail.com>\n" +"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n" +"Language: eo\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: valoro de %s estas malpli aŭ egala al %s" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: parametro ARGP_HELP_FMT postulas valoron" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: parametro ARGP_HELP_FMT devas esti pozitiva" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Nekonata parametro ARGP_HELP_FMT" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Rubaĵo en ARGP_HELP_FMT: %s" + +#: gnulib/lib/argp-help.c:1247 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Devigaj aŭ nedevigaj argumentoj por longaj modifiloj ankaŭ estas devigaj aŭ " +"nedevigaj por iu ajn korespondanta mallonga modifilo." + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "Uzmaniero:" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr " aŭ: " + +#: gnulib/lib/argp-help.c:1656 +msgid " [OPTION...]" +msgstr " [MODIFILO...]" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Provu '%s --help' aŭ '%s --usage' por pli da informo.\n" + +#: gnulib/lib/argp-help.c:1711 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Raportu program-misojn al %s.\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "Nekonata sistem-eraro" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "montri tiun ĉi help-liston" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "montri mallongan mesaĝon pri la uzmaniero" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "NOMO" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "difini la program-nomon" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "SEK" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "halti dum SEK sekundoj (apriore 3600)" + +#: gnulib/lib/argp-parse.c:142 +msgid "print program version" +msgstr "montri program-version" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(PROGRAM-ERARO) Neniu versio estas konata!?" + +#: gnulib/lib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: tro da argumentoj\n" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(PROGRAM-ERARO) Modifilo devus esti rekonita!?" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: la modifilo '%s' estas plursenca; eblecoj:" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: la modifilo '--%s' ne permesas argumenton\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: la modifilo '%c%s' ne permesas argumenton\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: la modifilo '--%s' postulas argumenton\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: nerekonata modifilo '--%s'\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: nerekonata modifilo '%c%s'\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: malvalida modifilo -- '%c'\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: la modifilo postulas argumenton -- '%c'\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: la modifilo '-W %s' estas plursenca\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: la modifilo '-W %s' ne permesas argumenton\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: la modifilo '-W %s' postulas argumenton\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "malvalida argumento %s por %s" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "plursenca argumento %s por %s" + +#~ msgid "Valid arguments are:" +#~ msgstr "Validaj argumentoj estas:" + +#~ msgid "program error" +#~ msgstr "programeraro" + +#~ msgid "stack overflow" +#~ msgstr "staka troigo" + +#~ msgid "cannot find a temporary directory, try setting $TMPDIR" +#~ msgstr "ne eblas trovi provizoran dosierujon, provu difini $TMPDIR" + +#~ msgid "cannot create a temporary directory using template \"%s\"" +#~ msgstr "ne eblas krei provizoran dosierujon uzante la ŝablonon \"%s\"" + +#~ msgid "cannot remove temporary file %s" +#~ msgstr "ne eblas forigi la provizoran dosieron %s" + +#~ msgid "cannot remove temporary directory %s" +#~ msgstr "ne eblas forigi la provizoran dosierujon %s" + +#~ msgid "error closing file" +#~ msgstr "eraro dum fermo de dosiero" + +#~ msgid "write error" +#~ msgstr "skrib-eraro" + +#~ msgid "preserving permissions for %s" +#~ msgstr "ni tenas la permesojn por %s" + +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "eraro dum malfermo de \"%s\" por legi" + +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "ne eblas malfermi la savdosieron \"%s\" por skribi" + +#~ msgid "error reading \"%s\"" +#~ msgstr "eraro legante \"%s\"" + +#~ msgid "error writing \"%s\"" +#~ msgstr "eraro skribante \"%s\"" + +#~ msgid "error after reading \"%s\"" +#~ msgstr "eraro post legi \"%s\"" + +#~ msgid "fdopen() failed" +#~ msgstr "fdopen() fiaskis" + +#~ msgid "C# compiler not found, try installing pnet" +#~ msgstr "Kompililo C# ne estis trovata, ni provas instali pnet" + +#~ msgid "C# virtual machine not found, try installing pnet" +#~ msgstr "Virtuala maŝino C# ne estis trovata, ni provas instali pnet" + +#~ msgid "%s subprocess failed" +#~ msgstr "subprocezo de %s fiaskis" + +#~ msgid "regular empty file" +#~ msgstr "regula malplena dosiero" + +#~ msgid "regular file" +#~ msgstr "regula dosiero" + +#~ msgid "directory" +#~ msgstr "dosierujo" + +#~ msgid "block special file" +#~ msgstr "bloka speciala dosiero" + +#~ msgid "character special file" +#~ msgstr "bajta speciala dosiero" + +#~ msgid "fifo" +#~ msgstr "fifo" + +#~ msgid "symbolic link" +#~ msgstr "simbola ligo" + +#~ msgid "socket" +#~ msgstr "konektingo" + +#~ msgid "message queue" +#~ msgstr "mesaĝovico" + +#~ msgid "semaphore" +#~ msgstr "semaforo" + +#~ msgid "shared memory object" +#~ msgstr "komuna memorobjekto" + +#~ msgid "typed memory object" +#~ msgstr "tipita memorbjekto" + +#~ msgid "weird file" +#~ msgstr "stranga dosiero" + +#~ msgid "Address family for hostname not supported" +#~ msgstr "Adresfamilio por komputilretnomo ne estas subtenata" + +#~ msgid "Temporary failure in name resolution" +#~ msgstr "Provizora paneo en solvo de retnomo" + +#~ msgid "Bad value for ai_flags" +#~ msgstr "Malĝusta valoro por ai_flags" + +#~ msgid "Non-recoverable failure in name resolution" +#~ msgstr "Neriparebla paneo en solvo de retnomo" + +#~ msgid "ai_family not supported" +#~ msgstr "ai_family ne estas subtenata" + +#~ msgid "Memory allocation failure" +#~ msgstr "Rezervo de memoro fiaskis" + +#~ msgid "No address associated with hostname" +#~ msgstr "Neniu adreso estas asociita kun komputilretnomo" + +#~ msgid "Name or service not known" +#~ msgstr "Nomo aŭ servo ne estas konata" + +#~ msgid "Servname not supported for ai_socktype" +#~ msgstr "Servname ne estas subtenata por ai_socktype" + +#~ msgid "ai_socktype not supported" +#~ msgstr "ai_socktype ne estas subtenata" + +#~ msgid "System error" +#~ msgstr "Sistem-eraro" + +#~ msgid "Argument buffer too small" +#~ msgstr "Bufro por argumentoj tro malgrandas" + +#~ msgid "Processing request in progress" +#~ msgstr "Procezado de peto daŭras" + +#~ msgid "Request canceled" +#~ msgstr "Peto estas nuligita" + +#~ msgid "Request not canceled" +#~ msgstr "Peto ne estas nuligita" + +#~ msgid "All requests done" +#~ msgstr "Ĉiuj petoj estas plenumitaj" + +#~ msgid "Interrupted by a signal" +#~ msgstr "Interrompita de signalo" + +#~ msgid "Parameter string not correctly encoded" +#~ msgstr "Parametra ĉeno ne estas ĝuste enkodita" + +#~ msgid "Unknown error" +#~ msgstr "Nekonata eraro" + +#~ msgid "invalid source_version argument to compile_java_class" +#~ msgstr "malvalida argumento source_version por compile_java_class" + +#~ msgid "invalid target_version argument to compile_java_class" +#~ msgstr "malvalida argumento target_version por compile_java_class" + +#~ msgid "failed to create \"%s\"" +#~ msgstr "ni fiaskis krei \"%s\"" + +#~ msgid "error while writing \"%s\" file" +#~ msgstr "eraro dum skribo de dosiero \"%s\"" + +#~ msgid "Java compiler not found, try installing gcj or set $JAVAC" +#~ msgstr "Ĵava kompililo ne estis trovata, provu instali gcj aŭ difinu $JAVAC" + +#~ msgid "Java virtual machine not found, try installing gij or set $JAVA" +#~ msgstr "" +#~ "Ĵava virtuala maŝino ne estis trovata, provu instali gij aŭ difinu $JAVA" + +#~ msgid "%s subprocess I/O error" +#~ msgstr "%s subproceza eraro de en/eligo" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "ne eblas ŝanĝi permesojn de %s" + +#~ msgid "cannot create directory %s" +#~ msgstr "ne eblas krei la dosierujon %s" + +#~ msgid "memory exhausted" +#~ msgstr "memoro estas plenigita" + +#~ msgid "unable to record current working directory" +#~ msgstr "ne eblas registri la aktualan labordosierujon" + +#~ msgid "failed to return to initial working directory" +#~ msgstr "ni fiaskis reveni al la komenca labordosierujo" + +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "Ni fiaskis malfermi /dev/zero por legi" + +#~ msgid "creation of reading thread failed" +#~ msgstr "kreo de leganta fadeno fiaskis" + +#~ msgid "cannot set up nonblocking I/O to %s subprocess" +#~ msgstr "ne eblas difini neblokantan en/eligon al la subprocezo %s" + +#~ msgid "communication with %s subprocess failed" +#~ msgstr "komunikado kun la subprocezo %s fiaskis" + +#~ msgid "write to %s subprocess failed" +#~ msgstr "skribo al la subprocezo %s fiaskis" + +#~ msgid "read from %s subprocess failed" +#~ msgstr "lego el la subprocezo %s fiaskis" + +#~ msgid "subprocess %s terminated with exit code %d" +#~ msgstr "la subproceso %s ĉesis kun elira kodo %d" + +#~ msgid "creation of threads failed" +#~ msgstr "kreo de fadenoj fiaskis" + +#~ msgid "%s subprocess terminated with exit code %d" +#~ msgstr "la subproceso %s ĉesis kun elira kodo %d" + +#~ msgid "Franc,ois Pinard" +#~ msgstr "François Pinard" + +#~ msgid "`" +#~ msgstr "‘" + +#~ msgid "'" +#~ msgstr "’" + +#~ msgid "Success" +#~ msgstr "Sukceso" + +#~ msgid "No match" +#~ msgstr "Neniu kongruaĵo" + +#~ msgid "Invalid regular expression" +#~ msgstr "Malvalida regulesprimo" + +#~ msgid "Invalid collation character" +#~ msgstr "Malvalida ordodifina signo" + +#~ msgid "Invalid character class name" +#~ msgstr "Malvalida signa klasnomo" + +#~ msgid "Trailing backslash" +#~ msgstr "Vosta retroklino" + +#~ msgid "Invalid back reference" +#~ msgstr "Malvalida retroreferenco" + +#~ msgid "Unmatched [ or [^" +#~ msgstr "Senpara [ aŭ [^" + +#~ msgid "Unmatched ( or \\(" +#~ msgstr "Senpara ( aŭ \\(" + +#~ msgid "Unmatched \\{" +#~ msgstr "Senpara \\{" + +#~ msgid "Invalid content of \\{\\}" +#~ msgstr "Malvalida enhavo de \\{\\}" + +#~ msgid "Invalid range end" +#~ msgstr "Malvalida intervalofino" + +#~ msgid "Memory exhausted" +#~ msgstr "Memoro estas plenigita" + +#~ msgid "Invalid preceding regular expression" +#~ msgstr "Malvalida antaŭa regulesprimo" + +#~ msgid "Premature end of regular expression" +#~ msgstr "Tro frua fino de regulesprimo" + +#~ msgid "Regular expression too big" +#~ msgstr "Regulesprimo tro grandas" + +#~ msgid "Unmatched ) or \\)" +#~ msgstr "Senpara ) aŭ \\)" + +#~ msgid "No previous regular expression" +#~ msgstr "Neniu antaŭa regulesprimo" + +#~ msgid "^[yY]" +#~ msgstr "^[jJyY]" + +#~ msgid "^[nN]" +#~ msgstr "^[nN]" + +#~ msgid "setting permissions for %s" +#~ msgstr "agordo de permesoj por %s" + +#~ msgid "Hangup" +#~ msgstr "Malkonekto" + +#~ msgid "Interrupt" +#~ msgstr "Interrompo" + +#~ msgid "Quit" +#~ msgstr "Eliri" + +#~ msgid "Illegal instruction" +#~ msgstr "Malvalida instrukcio" + +#~ msgid "Trace/breakpoint trap" +#~ msgstr "Spursekva/paŭzopunkta kaptilo" + +#~ msgid "Aborted" +#~ msgstr "Ĉesigita" + +#~ msgid "Floating point exception" +#~ msgstr "Glitkoma escepto" + +#~ msgid "Killed" +#~ msgstr "Mortigita" + +#~ msgid "Bus error" +#~ msgstr "Bus-eraro" + +#~ msgid "Segmentation fault" +#~ msgstr "Adres-eraro" + +#~ msgid "Broken pipe" +#~ msgstr "Rompita dukto" + +#~ msgid "Alarm clock" +#~ msgstr "Vekhorloĝo" + +#~ msgid "Terminated" +#~ msgstr "Finigita" + +#~ msgid "Urgent I/O condition" +#~ msgstr "Urĝa en/eliga stato" + +#~ msgid "Stopped (signal)" +#~ msgstr "Haltigita (signalo)" + +#~ msgid "Stopped" +#~ msgstr "Haltigita" + +#~ msgid "Continued" +#~ msgstr "Daŭrigita" + +#~ msgid "Child exited" +#~ msgstr "Ido finis" + +#~ msgid "Stopped (tty input)" +#~ msgstr "Haltigita (enigo tty)" + +#~ msgid "Stopped (tty output)" +#~ msgstr "Haltigita (eligo tty)" + +#~ msgid "I/O possible" +#~ msgstr "En/eligo eblas" + +#~ msgid "CPU time limit exceeded" +#~ msgstr "Procezila tempolimo estas atingita" + +#~ msgid "File size limit exceeded" +#~ msgstr "Dosiergranda limo estas atingita" + +#~ msgid "Virtual timer expired" +#~ msgstr "Virtuala horloĝo senvalidiĝis" + +#~ msgid "Profiling timer expired" +#~ msgstr "Profilanta horloĝo senvalidiĝis" + +#~ msgid "Window changed" +#~ msgstr "Fenestro ŝanĝis" + +#~ msgid "User defined signal 1" +#~ msgstr "Signalo 1 difinita de uzanto" + +#~ msgid "User defined signal 2" +#~ msgstr "Signalo 2 difinita de uzanto" + +#~ msgid "EMT trap" +#~ msgstr "kaptilo EMT" + +#~ msgid "Bad system call" +#~ msgstr "Malĝusta sistemvoko" + +#~ msgid "Stack fault" +#~ msgstr "Stak-eraro" + +#~ msgid "Information request" +#~ msgstr "Informo-peto" + +#~ msgid "Power failure" +#~ msgstr "Elektra paneo" + +#~ msgid "Resource lost" +#~ msgstr "Perdo de rimedo" + +#~ msgid "error writing to a closed pipe or socket" +#~ msgstr "eraro skribante al fermida dukto aŭ konektingo" + +#~ msgid "cannot create pipe" +#~ msgstr "ne eblas krei dukton" + +#~ msgid "Real-time signal %d" +#~ msgstr "Realtempa signalo %d" + +#~ msgid "Unknown signal %d" +#~ msgstr "Nekonata signalo %d" + +#~ msgid "iconv function not usable" +#~ msgstr "funkcio iconv ne uzeblas" + +#~ msgid "iconv function not available" +#~ msgstr "funkcio iconv ne disponeblas" + +#~ msgid "character out of range" +#~ msgstr "signo estas for de intervalo" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "ne eblas konverti U+%04X al loka signaro" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "ne eblas konverti U+%04X al loka signaro: %s" + +#~ msgid "invalid user" +#~ msgstr "malvalida uzanto" + +#~ msgid "invalid group" +#~ msgstr "malvalida grupo" + +#~ msgid "invalid spec" +#~ msgstr "malvalida spec" + +#~ msgid "unable to display error message" +#~ msgstr "ne eblas montri erarmesaĝon" + +#~ msgid "Packaged by %s (%s)\n" +#~ msgstr "Pakigita de %s (%s)\n" + +#~ msgid "Packaged by %s\n" +#~ msgstr "Pakigita de %s\n" + +#~ msgid "(C)" +#~ msgstr "©" + +#~ msgid "" +#~ "\n" +#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +#~ "html>.\n" +#~ "This is free software: you are free to change and redistribute it.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "Permeso GPLv3+: GNU GPL versio 3 aŭ posta <http://gnu.org/licenses/gpl." +#~ "html>.\n" +#~ "Tio ĉi estas libera programaro: vi estas libera por ŝanĝi kaj redisdoni " +#~ "ĝin.\n" +#~ "Ekzistas NENIU GARANTIO, laŭ plej amplekse permesate de la leĝoj.\n" +#~ "\n" + +#~ msgid "Written by %s.\n" +#~ msgstr "Verkita de %s.\n" + +#~ msgid "Written by %s and %s.\n" +#~ msgstr "Verkita de %s kaj %s.\n" + +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "Verkita de %s, %s, kaj %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Verkita de %s, %s, %s,\n" +#~ "kaj %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Verkita de %s, %s, %s,\n" +#~ "%s, kaj %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, and %s.\n" +#~ msgstr "" +#~ "Verkita de %s, %s, %s,\n" +#~ "%s, %s, kaj %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, and %s.\n" +#~ msgstr "" +#~ "Verkita de %s, %s, %s,\n" +#~ "%s, %s, %s, kaj %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Verkita de %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "kaj %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Verkita de %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, kaj %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, and others.\n" +#~ msgstr "" +#~ "Verkita de %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, kaj aliaj.\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to: %s\n" +#~ msgstr "" +#~ "\n" +#~ "Raportu program-misojn al: %s\n" + +#~ msgid "Report %s bugs to: %s\n" +#~ msgstr "Raportu %s misojn al: %s\n" + +#~ msgid "%s home page: <%s>\n" +#~ msgstr "%s hejm-paĝo: <%s>\n" + +#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +#~ msgstr "%s hejm-paĝo: <http://www.gnu.org/software/%s/>\n" + +#~ msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +#~ msgstr "" +#~ "Ĝenerala helpo por uzi programaron GNU: <http://www.gnu.org/gethelp/>\n" + +#~ msgid "_open_osfhandle failed" +#~ msgstr "_open_osfhandle fiaskis" + +#~ msgid "cannot restore fd %d: dup2 failed" +#~ msgstr "ne eblas restarigi fd %d: dup2 fiaskis" + +#~ msgid "%s subprocess" +#~ msgstr "subprocezo %s" + +#~ msgid "%s subprocess got fatal signal %d" +#~ msgstr "subprocezo %s ricevis neripareblan signalon %d" + +#~ msgid "stdin" +#~ msgstr "ĉefenigujo" + +#~ msgid "stdout" +#~ msgstr "ĉefeligujo" + +#~ msgid "stderr" +#~ msgstr "ĉeferarujo" + +#~ msgid "unknown stream" +#~ msgstr "nekonata fluaĵo" + +#~ msgid "failed to reopen %s with mode %s" +#~ msgstr "ni fiaskis remalfermi %s kun reĝimo %s" + +#~ msgid "string comparison failed" +#~ msgstr "ĉena komparo fiaskis" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "Agordu LC_ALL='C' por ĉirkauiri la problemon." + +#~ msgid "The strings compared were %s and %s." +#~ msgstr "La komparitaj ĉenoj estis %s kaj %s." + +#~ msgid "cannot perform formatted output" +#~ msgstr "ne eblas efektivigi formatitan eligon" + +#~ msgid "invalid %s%s argument `%s'" +#~ msgstr "malvalida %s%s-argumento '%s'" + +#~ msgid "invalid suffix in %s%s argument `%s'" +#~ msgstr "malvalida sufikso en %s%s-argumento '%s'" + +#~ msgid "%s%s argument `%s' too large" +#~ msgstr "%s%s-argumento '%s' tro larĝas" diff --git a/gnulib/po/es.po b/gnulib/po/es.po new file mode 100644 index 0000000..53241d4 --- /dev/null +++ b/gnulib/po/es.po @@ -0,0 +1,851 @@ +# Mensajes en español para gnulib 3.0.0.6062.a6b16. +# Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. +# This file is distributed under the same license as the gnulib package. +# Cristian Othón Martínez Vera <cfuga@cfuga.mx>, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011. +# +# Los mensajes iniciales de esta traducción provienen de la traducción +# de mailutils. +# +# Un agradecimiento especial a Santiago Vila por sus atinados comentarios +# sobre esta traducción. +# +msgid "" +msgstr "" +"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2011-08-24 11:23-0500\n" +"Last-Translator: Cristian Othón Martínez Vera <cfuga@cfuga.mx>\n" +"Language-Team: Spanish <es@li.org>\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: el valor %s es menor o igual a %s" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: El parámetro ARGP_HELP_FMT requiere de un valor" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: El parámetro ARGP_HELP_FMT debe ser positivo" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Parámetro de ARGP_HELP_FMT desconocido" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Basura en ARGP_HELP_FMT: %s" + +#: gnulib/lib/argp-help.c:1247 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Los argumentos obligatorios u opcionales para las opciones largas también " +"son obligatorios u opcionales para cualquier opción corta correspondiente." + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "Modo de empleo:" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr " o:" + +#: gnulib/lib/argp-help.c:1656 +msgid " [OPTION...]" +msgstr " [OPCIÓN...]" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Pruebe `%s --help' ó `%s --usage' para más información.\n" + +#: gnulib/lib/argp-help.c:1711 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Reporte bichos a %s.\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "Error desconocido de sistema" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "da esta lista de ayuda" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "da un mensaje corto de modo de empleo" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "NOMBRE" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "establece el nombre del programa" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "SEGUNDOS" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "espera por SECS segundos (3600 por defecto)" + +#: gnulib/lib/argp-parse.c:142 +msgid "print program version" +msgstr "muestra la versión del programa" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(ERROR DEL PROGRAMA) ¿¡Sin versión conocida!?" + +#: gnulib/lib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Demasiados argumentos\n" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(ERROR DEL PROGRAMA) ¿¡La opción debería reconocerse!?" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: la opción '%s' es ambigua; posibilidades:" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: la opción '--%s' no admite un argumento\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: la opción '%c%s' no admite un argumento\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: la opción '--%s' requiere de un argumento\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: no se reconoce la opción '--%s'\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: no se reconoce la opción '%c%s'\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: opción inválida -- '%c'\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: la opción requiere de un argumento -- '%c'\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: la opción '-W %s' es ambigua\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: la opción '-W %s' no admite un argumento\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: la opción '-W %s' requiere de un argumento\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "argumento %s inválido para %s" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "argumento %s ambiguo para %s" + +#~ msgid "Valid arguments are:" +#~ msgstr "Los argumentos válidos son:" + +#~ msgid "program error" +#~ msgstr "error del programa" + +#~ msgid "stack overflow" +#~ msgstr "desbordamiento de la pila" + +#~ msgid "cannot find a temporary directory, try setting $TMPDIR" +#~ msgstr "" +#~ "no se puede encontrar un directorio temporal, pruebe definir $TMPDIR" + +#~ msgid "cannot create a temporary directory using template \"%s\"" +#~ msgstr "no se puede crear un directorio temporal usando la plantilla \"%s\"" + +#~ msgid "cannot remove temporary file %s" +#~ msgstr "no se puede borrar el fichero temporal %s" + +#~ msgid "cannot remove temporary directory %s" +#~ msgstr "no se puede borrar el directorio temporal %s" + +#~ msgid "error closing file" +#~ msgstr "error al cerrar el fichero" + +#~ msgid "write error" +#~ msgstr "error de escritura" + +#~ msgid "preserving permissions for %s" +#~ msgstr "se conservan los permisos de %s" + +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "error al abrir \"%s\" para lectura" + +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "no se puede abrir el fichero de respaldo \"%s\" para escritura" + +#~ msgid "error reading \"%s\"" +#~ msgstr "error al leer \"%s\"" + +#~ msgid "error writing \"%s\"" +#~ msgstr "error al escribir en \"%s\"" + +#~ msgid "error after reading \"%s\"" +#~ msgstr "error después de leer \"%s\"" + +#~ msgid "fdopen() failed" +#~ msgstr "falló fdopen()" + +#~ msgid "C# compiler not found, try installing pnet" +#~ msgstr "No se encontró un compilador de C#, pruebe instalando pnet" + +#~ msgid "C# virtual machine not found, try installing pnet" +#~ msgstr "No se encontró una máquina virtual de C#, pruebe instalando pnet" + +#~ msgid "%s subprocess failed" +#~ msgstr "%s: falló el subproceso" + +#~ msgid "regular empty file" +#~ msgstr "fichero regular vacío" + +#~ msgid "regular file" +#~ msgstr "fichero regular" + +#~ msgid "directory" +#~ msgstr "directorio" + +#~ msgid "block special file" +#~ msgstr "fichero especial de bloques" + +#~ msgid "character special file" +#~ msgstr "fichero especial de caracteres" + +#~ msgid "fifo" +#~ msgstr "`fifo'" + +#~ msgid "symbolic link" +#~ msgstr "enlace simbólico" + +#~ msgid "socket" +#~ msgstr "`socket'" + +#~ msgid "message queue" +#~ msgstr "cola de mensajes" + +#~ msgid "semaphore" +#~ msgstr "semáforo" + +#~ msgid "shared memory object" +#~ msgstr "objeto de memoria compartida" + +#~ msgid "typed memory object" +#~ msgstr "objeto de memoria con tipo" + +#~ msgid "weird file" +#~ msgstr "fichero extraño" + +#~ msgid "Address family for hostname not supported" +#~ msgstr "No se admiten las familias de direcciones para hostname" + +#~ msgid "Temporary failure in name resolution" +#~ msgstr "Fallo temporal en la resolución del nombre" + +#~ msgid "Bad value for ai_flags" +#~ msgstr "Valor erróneo para ai_flags" + +#~ msgid "Non-recoverable failure in name resolution" +#~ msgstr "Falla irrecuperable en la resolución del nombre" + +#~ msgid "ai_family not supported" +#~ msgstr "no se admite ai_family" + +#~ msgid "Memory allocation failure" +#~ msgstr "Falló la llamada al sistema `malloc'" + +#~ msgid "No address associated with hostname" +#~ msgstr "No existe una dirección asociada con el nombre de anfitrión" + +#~ msgid "Name or service not known" +#~ msgstr "Nombre o servicio desconocido" + +#~ msgid "Servname not supported for ai_socktype" +#~ msgstr "No se admite servname para ai_socktype" + +#~ msgid "ai_socktype not supported" +#~ msgstr "no se admite ai_socktype" + +#~ msgid "System error" +#~ msgstr "Error del sistema" + +#~ msgid "Argument buffer too small" +#~ msgstr "Almacenamiento temporal de argumentos demasiado pequeño" + +#~ msgid "Processing request in progress" +#~ msgstr "Petición de procesamiento en progreso" + +#~ msgid "Request canceled" +#~ msgstr "Se canceló la petición" + +#~ msgid "Request not canceled" +#~ msgstr "No se canceló la petición" + +#~ msgid "All requests done" +#~ msgstr "Se completaron todas las peticiones" + +#~ msgid "Interrupted by a signal" +#~ msgstr "Interrupción por una señal" + +#~ msgid "Parameter string not correctly encoded" +#~ msgstr "La cadena de parámetro no está codificada correctamente" + +#~ msgid "Unknown error" +#~ msgstr "Error desconocido" + +#~ msgid "invalid source_version argument to compile_java_class" +#~ msgstr "argumento source_version inválido para compile_java_class" + +#~ msgid "invalid target_version argument to compile_java_class" +#~ msgstr "argumento target_version inválido para compile_java_class" + +#~ msgid "failed to create \"%s\"" +#~ msgstr "no se puede crear \"%s\"" + +#~ msgid "error while writing \"%s\" file" +#~ msgstr "error al escribir el fichero \"%s\"" + +#~ msgid "Java compiler not found, try installing gcj or set $JAVAC" +#~ msgstr "" +#~ "No se encontró un compilador de Java, pruebe instalando gcj o definiendo " +#~ "$JAVAC" + +#~ msgid "Java virtual machine not found, try installing gij or set $JAVA" +#~ msgstr "" +#~ "No se encontró una máquina virtual de Java, pruebe instalando gij o " +#~ "definiendo $JAVA" + +#~ msgid "%s subprocess I/O error" +#~ msgstr "%s: error de E/S del subproceso" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "no se pueden cambiar los permisos de %s" + +#~ msgid "cannot create directory %s" +#~ msgstr "no se puede crear el directorio %s" + +#~ msgid "memory exhausted" +#~ msgstr "memoria agotada" + +#~ msgid "unable to record current working directory" +#~ msgstr "no se puede registrar el directorio de trabajo actual" + +#~ msgid "failed to return to initial working directory" +#~ msgstr "no se puede volver al directorio de trabajo inicial" + +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "Falló al abrir /dev/zero para lectura" + +#~ msgid "creation of reading thread failed" +#~ msgstr "falló la creación del hilo de lectura" + +#~ msgid "cannot set up nonblocking I/O to %s subprocess" +#~ msgstr "no se puede establecer E/S sin bloqueo para el subproceso %s" + +#~ msgid "communication with %s subprocess failed" +#~ msgstr "falló la comunicación con el subproceso %s" + +#~ msgid "write to %s subprocess failed" +#~ msgstr "falló la escritura al subproceso %s" + +#~ msgid "read from %s subprocess failed" +#~ msgstr "falló la lectura del subproceso %s" + +#~ msgid "subprocess %s terminated with exit code %d" +#~ msgstr "el subproceso %s terminó con el código de salida %d" + +#~ msgid "creation of threads failed" +#~ msgstr "falló la creación de hilos" + +#~ msgid "%s subprocess terminated with exit code %d" +#~ msgstr "subproceso %s terminado con el código de salida %d" + +#~ msgid "Franc,ois Pinard" +#~ msgstr "François Pinard" + +# Vamos a probar con el símbolo de cita tradicional en español, +# a ver qué tal queda la cosa. +#~ msgid "`" +#~ msgstr "«" + +#~ msgid "'" +#~ msgstr "»" + +#~ msgid "Success" +#~ msgstr "Éxito" + +#~ msgid "No match" +#~ msgstr "Sin coincidencia" + +#~ msgid "Invalid regular expression" +#~ msgstr "Expresión regular inválida" + +#~ msgid "Invalid collation character" +#~ msgstr "Carácter de ordenamiento inválido" + +#~ msgid "Invalid character class name" +#~ msgstr "Nombre de clase de carácter inválido" + +#~ msgid "Trailing backslash" +#~ msgstr "Barra invertida sobrante" + +#~ msgid "Invalid back reference" +#~ msgstr "Referencia hacia atrás inválida" + +#~ msgid "Unmatched [ or [^" +#~ msgstr "[ o [^ sin pareja" + +#~ msgid "Unmatched ( or \\(" +#~ msgstr "( o \\( sin pareja" + +#~ msgid "Unmatched \\{" +#~ msgstr "\\{ sin pareja" + +#~ msgid "Invalid content of \\{\\}" +#~ msgstr "Contenido inválido de \\{\\}" + +#~ msgid "Invalid range end" +#~ msgstr "Fin de rango inválido" + +#~ msgid "Memory exhausted" +#~ msgstr "Memoria agotada" + +#~ msgid "Invalid preceding regular expression" +#~ msgstr "Expresión regular precedente inválida" + +#~ msgid "Premature end of regular expression" +#~ msgstr "Final prematuro de la expresión regular" + +#~ msgid "Regular expression too big" +#~ msgstr "Expresión regular demasiado grande" + +#~ msgid "Unmatched ) or \\)" +#~ msgstr ") o \\) sin pareja" + +#~ msgid "No previous regular expression" +#~ msgstr "No hay una expresión regular previa" + +# Esto es para responder "sí" cuando nos pregunte. +#~ msgid "^[yY]" +#~ msgstr "^[sS]" + +# Y esto es para responder "no" cuando nos pregunte. +#~ msgid "^[nN]" +#~ msgstr "^[nN]" + +#~ msgid "setting permissions for %s" +#~ msgstr "se cambian los permisos de %s" + +#~ msgid "Hangup" +#~ msgstr "Colgar" + +#~ msgid "Interrupt" +#~ msgstr "Interrumpir" + +#~ msgid "Quit" +#~ msgstr "Salir" + +#~ msgid "Illegal instruction" +#~ msgstr "Instrucción ilegal" + +#~ msgid "Trace/breakpoint trap" +#~ msgstr "Captura de rastreo/punto de quiebre" + +#~ msgid "Aborted" +#~ msgstr "Abortar" + +#~ msgid "Floating point exception" +#~ msgstr "Excepción de coma flotante" + +#~ msgid "Killed" +#~ msgstr "Matar" + +#~ msgid "Bus error" +#~ msgstr "Error de bus" + +#~ msgid "Segmentation fault" +#~ msgstr "Falta de segmentación" + +#~ msgid "Broken pipe" +#~ msgstr "Tubería rota" + +#~ msgid "Alarm clock" +#~ msgstr "Reloj de alarma" + +#~ msgid "Terminated" +#~ msgstr "Terminar" + +#~ msgid "Urgent I/O condition" +#~ msgstr "Condición de E/S urgente" + +#~ msgid "Stopped (signal)" +#~ msgstr "Detener (señal)" + +#~ msgid "Stopped" +#~ msgstr "Detener" + +#~ msgid "Continued" +#~ msgstr "Continuar" + +#~ msgid "Child exited" +#~ msgstr "Salió el hijo" + +#~ msgid "Stopped (tty input)" +#~ msgstr "Detener (entrada de tty)" + +#~ msgid "Stopped (tty output)" +#~ msgstr "Detener (salida de tty)" + +#~ msgid "I/O possible" +#~ msgstr "Posible E/S" + +#~ msgid "CPU time limit exceeded" +#~ msgstr "Excede el límite de tiempo de CPU" + +#~ msgid "File size limit exceeded" +#~ msgstr "Excede el límite de tamaño de fichero" + +#~ msgid "Virtual timer expired" +#~ msgstr "Expira el temporizador virtual" + +#~ msgid "Profiling timer expired" +#~ msgstr "Expira el temporizador de análisis de perfil" + +#~ msgid "Window changed" +#~ msgstr "Cambio de ventana" + +#~ msgid "User defined signal 1" +#~ msgstr "Señal 1 definida por el usuario" + +#~ msgid "User defined signal 2" +#~ msgstr "Señal 2 definida por el usuario" + +#~ msgid "EMT trap" +#~ msgstr "Captura EMT" + +#~ msgid "Bad system call" +#~ msgstr "Llamada al sistema errónea" + +#~ msgid "Stack fault" +#~ msgstr "Falta en la pila" + +#~ msgid "Information request" +#~ msgstr "Petición de información" + +#~ msgid "Power failure" +#~ msgstr "Falla de energía" + +#~ msgid "Resource lost" +#~ msgstr "Recurso perdido" + +#~ msgid "error writing to a closed pipe or socket" +#~ msgstr "error al escribir a una tubería o socket cerrados" + +#~ msgid "cannot create pipe" +#~ msgstr "no se puede una tubería" + +#~ msgid "Real-time signal %d" +#~ msgstr "Señal de tiempo real %d" + +#~ msgid "Unknown signal %d" +#~ msgstr "Señal %d desconocida" + +#~ msgid "iconv function not usable" +#~ msgstr "la función iconv no es utilizable" + +#~ msgid "iconv function not available" +#~ msgstr "la función iconv no está disponible" + +#~ msgid "character out of range" +#~ msgstr "carácter fuera de rango" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "no se puede convertir U+%04X al conjunto de caracteres local" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "no se puede convertir U+%04X al conjunto de caracteres local: %s" + +# Me niego a considerar "inválido" como palabra "políticamente incorrecta". +# Si algún "impedido físico" lee este mensaje y se molesta por ello, entonces +# es que además de impedido físico es tonto, pues todo el mundo sabe que, +# *en el contexto informático*, inválido e ilegal significan +# "no permitido por la causa que sea". +# Luego, que unas veces sea inválido y otras ilegal, son matices que el +# original tiene y creo necesario respetar en la traducción. +# +# [ Tomás Bautista sugiere "inexistente", y también para grupo ] +# +# FIXME: +# Eso sí, un día tendré que preguntar a los de GNU en qué se diferencia +# "invalid" de "not allowed" de "not recognized" y todo eso... sv +# +#~ msgid "invalid user" +#~ msgstr "usuario inválido" + +#~ msgid "invalid group" +#~ msgstr "grupo inválido" + +# Me niego a considerar "inválido" como palabra "políticamente incorrecta". +# Si algún "impedido físico" lee este mensaje y se molesta por ello, entonces +# es que además de impedido físico es tonto, pues todo el mundo sabe que, +# *en el contexto informático*, inválido e ilegal significan +# "no permitido por la causa que sea". +# Luego, que unas veces sea inválido y otras ilegal, son matices que el +# original tiene y creo necesario respetar en la traducción. +# +# [ Tomás Bautista sugiere "inexistente", y también para grupo ] +# +# FIXME: +# Eso sí, un día tendré que preguntar a los de GNU en qué se diferencia +# "invalid" de "not allowed" de "not recognized" y todo eso... sv +# +#~ msgid "invalid spec" +#~ msgstr "especificación inválida" + +#~ msgid "unable to display error message" +#~ msgstr "no se puede mostrar el mensaje de error" + +#~ msgid "Packaged by %s (%s)\n" +#~ msgstr "Empaquetado por %s (%s)\n" + +#~ msgid "Packaged by %s\n" +#~ msgstr "Empaquetado por %s\n" + +#~ msgid "(C)" +#~ msgstr "(C)" + +#~ msgid "" +#~ "\n" +#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +#~ "html>.\n" +#~ "This is free software: you are free to change and redistribute it.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "Licencia GPLv3+: GPL de GNU versión 3 o posterior\n" +#~ "<http://gnu.org/licenses/gpl.html>.\n" +#~ "Esto es software libre: tiene la libertad de cambiarlo y redistribuirlo.\n" +#~ "No tiene GARANTÍA, en la extensión permitida por la ley.\n" +#~ "\n" + +#~ msgid "Written by %s.\n" +#~ msgstr "Escrito por %s.\n" + +#~ msgid "Written by %s and %s.\n" +#~ msgstr "Escrito por %s y %s.\n" + +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "Escrito por %s, %s, y %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Escrito por %s, %s, %s,\n" +#~ "y %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Escrito por %s, %s, %s,\n" +#~ "%s, y %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, and %s.\n" +#~ msgstr "" +#~ "Escrito por %s, %s, %s,\n" +#~ "%s, %s, y %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, and %s.\n" +#~ msgstr "" +#~ "Escrito por %s, %s, %s,\n" +#~ "%s, %s, %s, y %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Escrito por %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "y %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Escrito por %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, y %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, and others.\n" +#~ msgstr "" +#~ "Escrito por %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, y otros.\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to: %s\n" +#~ msgstr "" +#~ "\n" +#~ "Reporte bichos a: %s.\n" +#~ "Reporte errores de traducción a: es@li.org\n" + +#~ msgid "Report %s bugs to: %s\n" +#~ msgstr "Reporte bichos de %s a: %s\n" + +#~ msgid "%s home page: <%s>\n" +#~ msgstr "Página web de %s: <%s>\n" + +#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +#~ msgstr "Página web de %s: <http://www.gnu.org/software/%s/>\n" + +#~ msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +#~ msgstr "" +#~ "Ayuda general para usar software de GNU: <http://www.gnu.org/gethelp/>\n" + +#~ msgid "_open_osfhandle failed" +#~ msgstr "falló _open_osfhandle" + +#~ msgid "cannot restore fd %d: dup2 failed" +#~ msgstr "no se puede restaurar el df %d: falló dup2" + +#~ msgid "%s subprocess" +#~ msgstr "subproceso %s" + +#~ msgid "%s subprocess got fatal signal %d" +#~ msgstr "el subproceso %s recibió la señal fatal %d" + +#~ msgid "stdin" +#~ msgstr "entrada estándard" + +#~ msgid "stdout" +#~ msgstr "salida estándard" + +#~ msgid "stderr" +#~ msgstr "salida de error estándard" + +#~ msgid "unknown stream" +#~ msgstr "flujo desconocido" + +#~ msgid "failed to reopen %s with mode %s" +#~ msgstr "falló al reabrir %s con modo %s" + +#~ msgid "string comparison failed" +#~ msgstr "la comparación de cadenas falló" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "" +#~ "Establezca LC_ALL='C' para solucionar este problema de forma temporal." + +#~ msgid "The strings compared were %s and %s." +#~ msgstr "Las cadenas comparadas eran %s y %s." + +#~ msgid "cannot perform formatted output" +#~ msgstr "no se puede mostrar la salida con formato" + +#~ msgid "invalid %s%s argument `%s'" +#~ msgstr "argumento `$3%s' inválido para $1%s$2%s" + +#~ msgid "invalid suffix in %s%s argument `%s'" +#~ msgstr "sufijo inválido en el argumento `$3%s' para $1%s$2%s" + +#~ msgid "%s%s argument `%s' too large" +#~ msgstr "el argumento `$3%s' es demasiado grande para $1%s$2%s" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: opción ilegal -- %c\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "" +#~ "\n" +#~ "Reporte bichos a <%s>.\n" + +#~ msgid "block size" +#~ msgstr "tamaño del bloque" + +#~ msgid "%s exists but is not a directory" +#~ msgstr "%s existe pero no es un directorio" + +#~ msgid "cannot change owner and/or group of %s" +#~ msgstr "no se puede cambiar el propietario y/o el grupo de %s" + +#~ msgid "cannot chdir to directory %s" +#~ msgstr "no se puede cambiar al directorio %s" + +#~ msgid "cannot get the login group of a numeric UID" +#~ msgstr "no se puede obtener el grupo de login de un UID numérico" + +#~ msgid "" +#~ "\n" +#~ "This is free software. You may redistribute copies of it under the terms " +#~ "of\n" +#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "Este programa es software libre; se pueden redistribuir copias del " +#~ "mismo \n" +#~ "bajo los términos de la Licencia Pública General de GNU\n" +#~ "<http://www.gnu.org/licenses/gpl.html>.\n" +#~ "NO HAY GARANTÍA, a la extensión permitida por la ley.\n" +#~ "\n" diff --git a/gnulib/po/et.po b/gnulib/po/et.po new file mode 100644 index 0000000..8bc9985 --- /dev/null +++ b/gnulib/po/et.po @@ -0,0 +1,599 @@ +# This file is distributed under the same license as the gnulib package. +# Estonian translations for gnulib +# Copyright (C) 2000 Free Software Foundation, Inc. +# Toomas Soome <Toomas.Soome@microlink.ee>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: gnulib 2.0.0.3462.e9796\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2011-05-19 15:10+0300\n" +"Last-Translator: Toomas Soome <Toomas.Soome@microlink.ee>\n" +"Language-Team: Estonian <linux-ee@lists.eenet.ee>\n" +"Language: et\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-15\n" +"Content-Transfer-Encoding: 8-bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: %s vrtus on viksem vi vrdne kui %s" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: ARGP_HELP_FMT parameeter nuab vrtust" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: ARGP_HELP_FMT parameeter peab olema positiivne" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Tundmatu ARGP_HELP_FMT parameeter" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Prgi ARGP_HELP_FMT sees: %s" + +#: gnulib/lib/argp-help.c:1247 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Kohustuslikud argumendid pikkadele vtmetele on kohustuslikud ka lhikestele." + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "Kasutamine:" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr " vi: " + +#: gnulib/lib/argp-help.c:1656 +msgid " [OPTION...]" +msgstr " [VTI]..." + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Lisainfo saamiseks proovige `%s --help' vi `%s --usage'.\n" + +#: gnulib/lib/argp-help.c:1711 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Vigadest teatage palun aadressil %s.\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "Tundmatu ssteemne viga" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "anna see abiinfo" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "anna kasutamise lhikirjeldus" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "NIMI" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "sea programmi nimi" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "SEK" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "oota SEK sekundit (vaikimisi 3600)" + +#: gnulib/lib/argp-parse.c:142 +msgid "print program version" +msgstr "vljasta programmi versioon" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(PROGRAMMI VIGA) Versioon ei ole teada!?" + +#: gnulib/lib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Liiga palju argumente\n" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(PROGRAMMI VIGA) Vti pidanuks olema teada!?" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: vti '%s' on segane\n" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: vti '--%s' ei luba kasutada argumenti\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: vti '%c%s' ei luba kasutada argumenti\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: vti '%s' nuab argumenti\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: tundmatu vti '--%s'\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: tundmatu vti '%c%s'\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: vigane vti -- '%c'\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: vti nuab argumenti -- '%c'\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: vti '-W %s' on segane\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: vti '-W %s' ei luba kasutada argumenti\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: vti '%s' nuab argumenti\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "vigane argument %s vtmel `%s'" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "segane argument %s vtmele `%s'" + +#~ msgid "Valid arguments are:" +#~ msgstr "Lubatud argumendid on:" + +#~ msgid "program error" +#~ msgstr "programmi viga" + +#~ msgid "stack overflow" +#~ msgstr "pinu letitumine" + +#~ msgid "cannot find a temporary directory, try setting $TMPDIR" +#~ msgstr "ei leia ajutist kataloogi, proovige seada $TMPDIR" + +#~ msgid "cannot create a temporary directory using template \"%s\"" +#~ msgstr "vormiga \"%s\" ei saa ajutist kataloogi luua" + +#~ msgid "cannot remove temporary file %s" +#~ msgstr "ajutist faili %s ei nnestu kustutada" + +#~ msgid "cannot remove temporary directory %s" +#~ msgstr "ajutist kataloogi %s ei nnestu kustutada" + +#~ msgid "error closing file" +#~ msgstr "viga faili sulgemisel" + +#~ msgid "write error" +#~ msgstr "viga kirjutamisel" + +#~ msgid "preserving permissions for %s" +#~ msgstr "silitan %s iguseid" + +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "viga \"%s\" lugemiseks avamisel" + +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "Varukoopia faili \"%s\" ei nnestu kirjutamiseks avada" + +#~ msgid "error reading \"%s\"" +#~ msgstr "viga \"%s\" lugemisel" + +#~ msgid "error writing \"%s\"" +#~ msgstr "viga \"%s\" kirjutamisel" + +#~ msgid "error after reading \"%s\"" +#~ msgstr "viga peale \"%s\" lugemist" + +#~ msgid "fdopen() failed" +#~ msgstr "fdopen() ebannestus" + +#~ msgid "C# compiler not found, try installing pnet" +#~ msgstr "C# kompilaatorit pole, proovige paigaldada pnet" + +#~ msgid "C# virtual machine not found, try installing pnet" +#~ msgstr "C# virtuaalmasinat pole, proovige paigaldada pnet" + +#~ msgid "%s subprocess failed" +#~ msgstr "%s: alamprotsess sai vea" + +#~ msgid "regular empty file" +#~ msgstr "tavaline thi fail" + +#~ msgid "regular file" +#~ msgstr "tavaline fail" + +#~ msgid "directory" +#~ msgstr "Kataloog" + +#~ msgid "block special file" +#~ msgstr "blokkseadme fail" + +#~ msgid "character special file" +#~ msgstr "smbolseadme fail" + +#~ msgid "fifo" +#~ msgstr "fifo" + +#~ msgid "symbolic link" +#~ msgstr "nimeviide" + +#~ msgid "socket" +#~ msgstr "sokkel" + +#~ msgid "message queue" +#~ msgstr "teadete jrjekord" + +#~ msgid "semaphore" +#~ msgstr "semafor" + +#~ msgid "shared memory object" +#~ msgstr "jagatud mlu objekt" + +#~ msgid "typed memory object" +#~ msgstr "tbitud mlu objekt" + +#~ msgid "weird file" +#~ msgstr "veider fail" + +#~ msgid "Address family for hostname not supported" +#~ msgstr "Aadressiperekonda vi hostinime ei toetata" + +#~ msgid "Temporary failure in name resolution" +#~ msgstr "Ajutine trge nime lahendamisel" + +#~ msgid "Bad value for ai_flags" +#~ msgstr "Vigane ai_flags vrtus" + +#~ msgid "Non-recoverable failure in name resolution" +#~ msgstr "nime lahendamisl tekkis taastumatu trge" + +#~ msgid "ai_family not supported" +#~ msgstr "ai_family ei toetata" + +#~ msgid "Memory allocation failure" +#~ msgstr "Trge mlu haaramisel" + +#~ msgid "No address associated with hostname" +#~ msgstr "Hosti nimega ei ole aadresse seostatud" + +#~ msgid "Name or service not known" +#~ msgstr "Nimi vi teenus on tundmatu" + +#~ msgid "Servname not supported for ai_socktype" +#~ msgstr "ai_socktype ei toeta teenuse nime" + +#~ msgid "ai_socktype not supported" +#~ msgstr "ai_socktype ei toetata" + +#~ msgid "System error" +#~ msgstr "Ssteemne viga" + +#~ msgid "Argument buffer too small" +#~ msgstr "Argumentide puhver on liiga vike" + +#~ msgid "Processing request in progress" +#~ msgstr "Pringu ttlemine kib" + +#~ msgid "Request canceled" +#~ msgstr "Pring katkestati" + +#~ msgid "Request not canceled" +#~ msgstr "Pringut ei katkestatud" + +#~ msgid "All requests done" +#~ msgstr "Kik pringud tidetud" + +#~ msgid "Interrupted by a signal" +#~ msgstr "Katkestatud signaaliga" + +#~ msgid "Parameter string not correctly encoded" +#~ msgstr "Parameetersne ei ole korrektselt kodeeritud" + +#~ msgid "Unknown error" +#~ msgstr "Tundmatu viga" + +#~ msgid "invalid source_version argument to compile_java_class" +#~ msgstr "funktsiooni compile_java_class argument source_version on vigane" + +#~ msgid "invalid target_version argument to compile_java_class" +#~ msgstr "funktsiooni compile_java_class argument target_version on vigane" + +#~ msgid "failed to create \"%s\"" +#~ msgstr "\"%s\" ei nnestu luua" + +#~ msgid "error while writing \"%s\" file" +#~ msgstr "viga faili \"%s\" kirjutamisel" + +#~ msgid "Java compiler not found, try installing gcj or set $JAVAC" +#~ msgstr "Java kompilaatorit pole, proovige paigaldada gcj vi seada $JAVAC" + +#~ msgid "Java virtual machine not found, try installing gij or set $JAVA" +#~ msgstr "Java virtuaalmasinat pole, proovige paigaldada gcj vi seada $JAVAC" + +#~ msgid "%s subprocess I/O error" +#~ msgstr "%s: alamprotsess sai S/V vea" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "ei nnestu muuta %s igusi" + +#~ msgid "cannot create directory %s" +#~ msgstr "kataloogi `%s' ei nnestu luua" + +#~ msgid "memory exhausted" +#~ msgstr "mlu on otsas" + +#~ msgid "unable to record current working directory" +#~ msgstr "ei nnestu registreerida jooksvat tkataloogi" + +#~ msgid "failed to return to initial working directory" +#~ msgstr "esialgsesse tkataloogi ei nnestu tagasi minna" + +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "Faili /dev/zero saa lugemiseks avada" + +#~ msgid "creation of reading thread failed" +#~ msgstr "lugemise lime loomine ebannestus" + +#~ msgid "communication with %s subprocess failed" +#~ msgstr "hendus %s alamprotsessiga ebannestus" + +#~ msgid "write to %s subprocess failed" +#~ msgstr "kirjutamine %s alamprotsessi sai vea" + +#~ msgid "read from %s subprocess failed" +#~ msgstr "lugemine %s alamprotsessist sai vea" + +#~ msgid "creation of threads failed" +#~ msgstr "limede loomine ebannestus" + +#~ msgid "cannot create pipe" +#~ msgstr "ei nnestu luua toru" + +#~ msgid "`" +#~ msgstr "`" + +#~ msgid "'" +#~ msgstr "'" + +#~ msgid "Invalid regular expression" +#~ msgstr "Vigane regulaaravaldis" + +#~ msgid "Invalid collation character" +#~ msgstr "Vigane vrdlussmbol" + +#~ msgid "Invalid character class name" +#~ msgstr "Vigane smbolite klassi nimi" + +#~ msgid "Invalid back reference" +#~ msgstr "Vigane tagasiviide" + +#~ msgid "Invalid range end" +#~ msgstr "Vigane vahemiku lpp" + +#~ msgid "Memory exhausted" +#~ msgstr "Mlu on otsas" + +#~ msgid "Invalid preceding regular expression" +#~ msgstr "Vigane eelnev regulaaravaldis" + +#~ msgid "Premature end of regular expression" +#~ msgstr "Enneaegne regulaaravaldise lpp" + +#~ msgid "Regular expression too big" +#~ msgstr "Regulaaravaldis on liiga pikk" + +#~ msgid "No previous regular expression" +#~ msgstr "Eelmist regulaaravaldist pole" + +#~ msgid "^[yY]" +#~ msgstr "^[jJ]" + +#~ msgid "^[nN]" +#~ msgstr "^[eE]" + +#~ msgid "setting permissions for %s" +#~ msgstr "ei nnestu seada %s igusi" + +#~ msgid "Bus error" +#~ msgstr "Siini viga" + +#~ msgid "Power failure" +#~ msgstr "Toite viga" + +#~ msgid "iconv function not usable" +#~ msgstr "iconv funktsioon ei ole kasutatav" + +#~ msgid "iconv function not available" +#~ msgstr "iconv funktsioon puudub" + +#~ msgid "character out of range" +#~ msgstr "smbol on piirkonnast vljas" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "U+%04X ei saa lokaalsesse kooditabelisse teisendada" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "U+%04X ei saa lokaalsesse kooditabelisse teisendada: %s" + +#~ msgid "invalid user" +#~ msgstr "vigane kasutaja" + +#~ msgid "invalid group" +#~ msgstr "vigane grupp" + +#~ msgid "invalid spec" +#~ msgstr "vigane spetsifikatsioon" + +#~ msgid "(C)" +#~ msgstr "" + +#~ msgid "Written by %s.\n" +#~ msgstr "Kirjutanud %s.\n" + +#~ msgid "Written by %s and %s.\n" +#~ msgstr "Kirjutanud %s ja %s.\n" + +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "Kirjutanud %s, %s ja %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Kirjutanud %s, %s, %s\n" +#~ "ja %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Kirjutanud %s, %s, %s,\n" +#~ "%s ja %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, and %s.\n" +#~ msgstr "" +#~ "Kirjutanud %s, %s, %s,\n" +#~ "%s, %s ja %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, and %s.\n" +#~ msgstr "" +#~ "Kirjutanud %s, %s, %s,\n" +#~ "%s, %s, %s ja %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Kirjutanud %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "ja %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Kirjutanud %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s ja %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, and others.\n" +#~ msgstr "" +#~ "Kirjutanud %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s ja teised.\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to: %s\n" +#~ msgstr "" +#~ "\n" +#~ "Vigadest teatage palun aadressil: %s.\n" + +#~ msgid "Report %s bugs to: %s\n" +#~ msgstr "%s vigadest teatage palun aadressil: %s\n" + +#~ msgid "%s home page: <%s>\n" +#~ msgstr "%s koduleht: <%s>\n" + +#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +#~ msgstr "%s koduleht: <http://www.gnu.org/software/%s/>\n" + +#~ msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +#~ msgstr "" +#~ "ldine abiinfo GNU tarkvara kasutamisest: <http://www.gnu.org/gethelp/>\n" + +#~ msgid "_open_osfhandle failed" +#~ msgstr "_open_osfhandle ebannestus" + +#~ msgid "cannot restore fd %d: dup2 failed" +#~ msgstr "failipidet %d ei nnestu taastada: dup2 ebannestus" + +#~ msgid "%s subprocess" +#~ msgstr "%s alamprotsess" + +#~ msgid "%s subprocess got fatal signal %d" +#~ msgstr "%s alamprotsess sai fataalse signaali %d" + +#~ msgid "stdin" +#~ msgstr "standardsisend" + +#~ msgid "stdout" +#~ msgstr "standardvljund" + +#~ msgid "stderr" +#~ msgstr "standardvead" + +#~ msgid "unknown stream" +#~ msgstr "undmatu voog" + +#~ msgid "failed to reopen %s with mode %s" +#~ msgstr "reopen %s moodiga %s ebannestus" + +#~ msgid "string comparison failed" +#~ msgstr "snede vrdlus ebannestus" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "Probleemi lahendamiseks seadke LC_ALL=C." + +#~ msgid "The strings compared were %s and %s." +#~ msgstr "Vrreldi snesid %s ja %s." + +#~ msgid "cannot perform formatted output" +#~ msgstr "ei nnestu luua vormindatud vljundit" + +#~ msgid "invalid %s%s argument `%s'" +#~ msgstr "vigane %s%s argument `%s'" + +#~ msgid "invalid suffix in %s%s argument `%s'" +#~ msgstr "vigane sufiks %s%s argument `%s'" + +#~ msgid "%s%s argument `%s' too large" +#~ msgstr "%s%s argument `%s' on liiga suur" diff --git a/gnulib/po/eu.po b/gnulib/po/eu.po new file mode 100644 index 0000000..62f4431 --- /dev/null +++ b/gnulib/po/eu.po @@ -0,0 +1,455 @@ +# translation of coreutils-5.2.1.po to Euskara +# Basque translation of 5.2.1. +# Copyright (C) 2004 Free Software Foundation, Inc. +# This file is distributed under the same license as the Coreutils-5.2.1 package. +# Mikel Olasagasti <hey_neken@mundurat.net>, 2004. +# +msgid "" +msgstr "" +"Project-Id-Version: coreutils-5.2.1\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2005-01-04 20:27+0100\n" +"Last-Translator: Mikel Olasagasti <hey_neken@mundurat.net>\n" +"Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n" +"Language: eu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "" + +#: gnulib/lib/argp-help.c:1247 +#, fuzzy +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Beharrezkoak diren argumentuak aukera luzeetan, beharrezkoak dira aukera " +"txikietan ere.\n" + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr "" + +#: gnulib/lib/argp-help.c:1656 +#, fuzzy +msgid " [OPTION...]" +msgstr "Erabilera: %s [AUKERA]...\n" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Saiatu `%s --help' erabiltzen informazio gehiagorako.\n" + +#: gnulib/lib/argp-help.c:1711 +#, fuzzy, c-format +msgid "Report bugs to %s.\n" +msgstr "" +"\n" +"Programa-erroreen berri emateko idatzi hona: <%s>.\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "Sistema-errore ezezaguna" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "IZENA" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "" + +#: gnulib/lib/argp-parse.c:142 +#, fuzzy +msgid "print program version" +msgstr "irakurketa errorea" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "" + +#: gnulib/lib/argp-parse.c:612 +#, fuzzy, c-format +msgid "%s: Too many arguments\n" +msgstr "e" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: '%s' aukera anbiguoa da\n" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: '--%s' aukerak ez du argumenturik onartzen\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: '%c%s' aukerak ez du argumenturik onartzen\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: '%s' aukerak argumentu bat behar du\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: '--%s' aukera ezezaguna\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: '%c%s' aukera ezezaguna\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: -- %c aukera baliogabea\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: aukerak --%c argumentu bat behar du\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: '-W %s' aukera anbiguoa da\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: '-W.%s' aukerak ez du argumenturik onartzen\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: '%s' aukerak argumentu bat behar du\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "%s baliogabeko argumentua da %s-(r)entzat" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "%s argumentu anbiguoa da %s-(r)entzat" + +#~ msgid "Valid arguments are:" +#~ msgstr "Baliozko argumentuak hauek dira:" + +#~ msgid "write error" +#~ msgstr "idazketa errorea" + +#, fuzzy +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "errepikatu arte" + +#, fuzzy +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "errepikatu arte" + +#, fuzzy +#~ msgid "error reading \"%s\"" +#~ msgstr "errorea %s irakurtzen" + +#, fuzzy +#~ msgid "error writing \"%s\"" +#~ msgstr "errorea %s idazten" + +#, fuzzy +#~ msgid "error after reading \"%s\"" +#~ msgstr "errorea %s irakurtzen" + +#, fuzzy +#~ msgid "fdopen() failed" +#~ msgstr "irekitzeak huts egin du" + +#, fuzzy +#~ msgid "%s subprocess failed" +#~ msgstr "baliogabea" + +#~ msgid "regular empty file" +#~ msgstr "fitxategi erregular hutsa" + +#~ msgid "regular file" +#~ msgstr "Espresio erregularra" + +#~ msgid "directory" +#~ msgstr "direktorioa" + +#, fuzzy +#~ msgid "block special file" +#~ msgstr "bloke tamainua" + +#, fuzzy +#~ msgid "character special file" +#~ msgstr "offset karakterea zero da" + +#~ msgid "fifo" +#~ msgstr "fifo" + +#~ msgid "symbolic link" +#~ msgstr "esteka sinbolikoa" + +#~ msgid "socket" +#~ msgstr "socket-a" + +#~ msgid "message queue" +#~ msgstr "Bidali ilara" + +#~ msgid "semaphore" +#~ msgstr "semaforoa" + +#~ msgid "shared memory object" +#~ msgstr "memoria partekatuaren objektua" + +#, fuzzy +#~ msgid "typed memory object" +#~ msgstr "memoria partekatuaren objektua" + +#~ msgid "weird file" +#~ msgstr "fitxategi arraroa" + +#, fuzzy +#~ msgid "Address family for hostname not supported" +#~ msgstr "fifo fitxategiek ez dute euskarririk" + +#, fuzzy +#~ msgid "ai_family not supported" +#~ msgstr "fifo fitxategiek ez dute euskarririk" + +#, fuzzy +#~ msgid "ai_socktype not supported" +#~ msgstr "fifo fitxategiek ez dute euskarririk" + +#, fuzzy +#~ msgid "System error" +#~ msgstr "idazketa errorea" + +#, fuzzy +#~ msgid "Unknown error" +#~ msgstr "Sistema-errore ezezaguna" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: -- %c aukera ilegala\n" + +#~ msgid "block size" +#~ msgstr "bloke tamainua" + +#~ msgid "%s exists but is not a directory" +#~ msgstr "%s badago baina ez da direktorio bat" + +#~ msgid "cannot change owner and/or group of %s" +#~ msgstr "ezin da %s-(r)en jabetza eta/edo taldea aldatu" + +#~ msgid "cannot create directory %s" +#~ msgstr "ezin da %s direktorioa sortu" + +#, fuzzy +#~ msgid "cannot chdir to directory %s" +#~ msgstr "ezin da %s direktoriora aldatu" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "ezin da %s-(r)en baimenak aldatu" + +#~ msgid "memory exhausted" +#~ msgstr "memoria agortuta" + +#, fuzzy +#~ msgid "unable to record current working directory" +#~ msgstr "Inprimatu Fitxategi-izena - e e" + +#, fuzzy +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "baimenak errepikatu arte" + +#, fuzzy +#~ msgid "cannot create pipe" +#~ msgstr "ezin da %s esteka sortu" + +#~ msgid "`" +#~ msgstr "`" + +#~ msgid "'" +#~ msgstr "'" + +#, fuzzy +#~ msgid "Invalid regular expression" +#~ msgstr "baliogabea" + +#, fuzzy +#~ msgid "Invalid character class name" +#~ msgstr "baliogabea" + +#, fuzzy +#~ msgid "Memory exhausted" +#~ msgstr "memoria agortuta" + +#, fuzzy +#~ msgid "Invalid preceding regular expression" +#~ msgstr "baliogabea" + +#, fuzzy +#~ msgid "Premature end of regular expression" +#~ msgstr "in bilatu" + +#, fuzzy +#~ msgid "Regular expression too big" +#~ msgstr "baliogabea" + +#, fuzzy +#~ msgid "No previous regular expression" +#~ msgstr "in bilatu" + +#~ msgid "^[yY]" +#~ msgstr "^[bB]" + +#~ msgid "^[nN]" +#~ msgstr "^[eE]" + +#~ msgid "character out of range" +#~ msgstr "karakterea barrutitik kanpora" + +#~ msgid "invalid user" +#~ msgstr "baliogabeko erabiltzailea" + +#~ msgid "invalid group" +#~ msgstr "baliogabeko taldea" + +#~ msgid "cannot get the login group of a numeric UID" +#~ msgstr "ezin da UID zenbaki baten saio taldea lortu" + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "This is free software. You may redistribute copies of it under the terms " +#~ "of\n" +#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "programa da eta edo - Orokorra Publikoa Lizentzia bider Libre Softwarea " +#~ "edo e e" + +#~ msgid "Written by %s.\n" +#~ msgstr "%s-k idatzia.\n" + +#~ msgid "Written by %s and %s.\n" +#~ msgstr "%s-k eta %s-k idatzia.\n" + +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "%s, %s eta %s-k idatzia.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "%s, %s, %s,\n" +#~ "eta %s-k idatzia.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "%s, %s, %s,\n" +#~ "%s eta %s-k idatzia.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, and %s.\n" +#~ msgstr "" +#~ "%s, %s, %s,\n" +#~ "%s, %s eta %s-k idatzia.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, and %s.\n" +#~ msgstr "" +#~ "%s, %s, %s,\n" +#~ "%s, %s, %s, eta %s-k idatzia.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "%s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "eta %s-k idatzia.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "%s, %s, %s,\n" +#~ "%s, %s, %s, %s,%s, eta %s-k idatzia.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, and others.\n" +#~ msgstr "" +#~ "%s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s,eta beste batzuk idatzia.\n" + +#~ msgid "string comparison failed" +#~ msgstr "kate konparaketak huts egin du" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "Ezarri LC_ALL='C' arazo hau une batez konpontzeko" + +#~ msgid "The strings compared were %s and %s." +#~ msgstr "Alderatutako bi kateak %s eta %s izan dira." diff --git a/gnulib/po/fi.po b/gnulib/po/fi.po new file mode 100644 index 0000000..48ed9c2 --- /dev/null +++ b/gnulib/po/fi.po @@ -0,0 +1,781 @@ +# Finnish messages for gnulib. +# Copyright © 2002, 2003, 2004, 2009, 2010 Free Software Foundation, Inc. +# This file is distributed under the same license as the gnulib package. +# Lauri Nurmi <lanurmi@iki.fi>, 2003, 2004. +# Matti Koskimies <matti@apulanta.fi>, 2002. +# Jorma Karvonen <karvonen.jorma@gmail.com>, 2009-2011. +# +msgid "" +msgstr "" +"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2011-12-10 19:05+0200\n" +"Last-Translator: Jorma Karvonen <karvonen.jorma@gmail.com>\n" +"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n" +"Language: fi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural= ( n!=1) ;\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: %s arvo on pienempi tai yhtäsuuri kuin %s" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: ARGP_HELP_FMT parametri vaatii arvon" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: ARGP_HELP_FMT parametrin on oltava positiivinen" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Tuntematon ARGP_HELP_FMT-parametri" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Roskaa kohteessa ARGP_HELP_FMT: %s" + +#: gnulib/lib/argp-help.c:1247 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Pitkien valitsimien pakolliset tai valinnaiset argumentit ovat pakollisia " +"tai valinnaisia myös lyhyille valitsimille." + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "Käyttö:" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr " tai: " + +#: gnulib/lib/argp-help.c:1656 +msgid " [OPTION...]" +msgstr " [VALITSIN...]" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Lisätietoja saa komennolla ”%s --help” tai ”%s --usage”.\n" + +#: gnulib/lib/argp-help.c:1711 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Lähetä raportit ohjelmistovioista (englanniksi) osoitteeseen %s.\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "Tuntematon järjestelmävirhe" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "anna tämä opasteluettelo" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "anna tämä lyhyt käyttösanoma" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "NIMI" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "aseta ohjelman nimi" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "SEKUNTIA" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "odota SEKUNTIA sekuntia (oletus 3600)" + +#: gnulib/lib/argp-parse.c:142 +msgid "print program version" +msgstr "tulosta ohjelman versio" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(OHJELMAVIRHE) Versiota ei tiedetä!?" + +#: gnulib/lib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Liian monta argumenttia\n" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(OHJELMAVIRHE) Valitsimen pitäisi olla tunnistettava!?" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: valitsin ’%s’ ei ole yksiselitteinen; mahdollisuudet:" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: valitsin ’--%s’ ei salli argumenttia\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: valitsin ’%c%s’ ei salli argumenttia\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: valitsin ’--%s’ vaatii argumentin\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: tunnistamaton valitsin ’--%s’\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: tunnistamaton valitsin ’%c%s’\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: epäkelpo valitsin -- ’%c’\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: valitsin vaatii argumentin -- ’%c’\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: valitsin ’-W %s’ ei ole yksiselitteinen\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: valitsin ’-W %s’ ei salli argumenttia\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: valitsin ’-W %s’ vaatii argumentin\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "virheellinen argumentti %s kohteelle %s" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "moniselitteinen argumentti %s kohteelle %s" + +#~ msgid "Valid arguments are:" +#~ msgstr "Kelvolliset argumentit:" + +#~ msgid "program error" +#~ msgstr "ohjelmavirhe" + +#~ msgid "stack overflow" +#~ msgstr "pinon ylivuoto" + +#~ msgid "cannot find a temporary directory, try setting $TMPDIR" +#~ msgstr "" +#~ "ei voi löytää tilapäistä hakemistoa, yritä asettaa $TMPDIR-" +#~ "ympäristömuuttuja" + +#~ msgid "cannot create a temporary directory using template \"%s\"" +#~ msgstr "ei voida luoda tilapäistä hakemistoa käyttäen mallinnetta ”%s”" + +#~ msgid "cannot remove temporary file %s" +#~ msgstr "ei voida poistaa tilapäistä tiedostoa %s" + +#~ msgid "cannot remove temporary directory %s" +#~ msgstr "ei voida poistaa tilapäistä hakemistoa %s" + +#~ msgid "error closing file" +#~ msgstr "virhe suljettaessa tiedostoa" + +#~ msgid "write error" +#~ msgstr "kirjoitusvirhe" + +#~ msgid "preserving permissions for %s" +#~ msgstr "säilytetään oikeudet kohteelle %s" + +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "virhe avattaessa tiedostoa ”%s” lukemista varten" + +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "ei voida avata varmuuskopiotiedostoa ”%s” kirjoittamista varten" + +#~ msgid "error reading \"%s\"" +#~ msgstr "virhe luettaessa tiedostoa ”%s”" + +#~ msgid "error writing \"%s\"" +#~ msgstr "virhe kirjoitettaessa tiedostoa ”%s”" + +#~ msgid "error after reading \"%s\"" +#~ msgstr "virhe luettaessa tiedostoa ”%s”" + +#~ msgid "fdopen() failed" +#~ msgstr "fdopen()-kutsu epäonnistui" + +#~ msgid "C# compiler not found, try installing pnet" +#~ msgstr "C#-kääntäjää ei löytynyt, yritä asentaa pnet" + +#~ msgid "C# virtual machine not found, try installing pnet" +#~ msgstr "C#-virtuaalikonetta ei löytynyt, yritä asentaa pnet" + +#~ msgid "%s subprocess failed" +#~ msgstr "%s-aliprosessi epäonnistui" + +#~ msgid "regular empty file" +#~ msgstr "tavallinen tyhjä tiedosto" + +#~ msgid "regular file" +#~ msgstr "tavallinen tiedosto" + +#~ msgid "directory" +#~ msgstr "hakemisto" + +#~ msgid "block special file" +#~ msgstr "lohkoerikoistiedosto" + +#~ msgid "character special file" +#~ msgstr "merkkierikoistiedosto" + +#~ msgid "fifo" +#~ msgstr "putkitiedosto" + +#~ msgid "symbolic link" +#~ msgstr "symbolinen linkki" + +#~ msgid "socket" +#~ msgstr "pistoke" + +#~ msgid "message queue" +#~ msgstr "viestijono" + +#~ msgid "semaphore" +#~ msgstr "semafori" + +#~ msgid "shared memory object" +#~ msgstr "jaettu muistiobjekti" + +#~ msgid "typed memory object" +#~ msgstr "tyypitetty muistiobjekti" + +#~ msgid "weird file" +#~ msgstr "outo tiedosto" + +#~ msgid "Address family for hostname not supported" +#~ msgstr "Osoiteperhe tietokonenimelle ei ole tuettu" + +#~ msgid "Temporary failure in name resolution" +#~ msgstr "Tilapäinen virhe nimiratkaisussa" + +#~ msgid "Bad value for ai_flags" +#~ msgstr "Väärä arvo kohteelle ai_flags" + +#~ msgid "Non-recoverable failure in name resolution" +#~ msgstr "Korjaamaton virhe nimiratkaisussa" + +#~ msgid "ai_family not supported" +#~ msgstr "ai_family ei ole tuettu" + +#~ msgid "Memory allocation failure" +#~ msgstr "Muistinvarausvirhe" + +#~ msgid "No address associated with hostname" +#~ msgstr "Tietokonenimeen ei ole liitetty osoitetta" + +#~ msgid "Name or service not known" +#~ msgstr "Nimeä tai palvelua ei tunneta" + +#~ msgid "Servname not supported for ai_socktype" +#~ msgstr "Servname ei ole tuettu kohteelle ai_socktype" + +#~ msgid "ai_socktype not supported" +#~ msgstr "ai_socktype ei ole tuettu" + +#~ msgid "System error" +#~ msgstr "Järjestelmävirhe" + +#~ msgid "Argument buffer too small" +#~ msgstr "Argumenttipuskuri on liian suuri" + +#~ msgid "Processing request in progress" +#~ msgstr "Prosessointipyyntö käsittelyssä" + +#~ msgid "Request canceled" +#~ msgstr "Pyyntö peruttu" + +#~ msgid "Request not canceled" +#~ msgstr "Pyyntöä ei ole peruttu" + +#~ msgid "All requests done" +#~ msgstr "Kaikki pyynnöt suoritettu" + +#~ msgid "Interrupted by a signal" +#~ msgstr "Signaalin keskeyttämä" + +#~ msgid "Parameter string not correctly encoded" +#~ msgstr "Parametrimerkkijono ei ole oikein koodattu" + +#~ msgid "Unknown error" +#~ msgstr "Tuntematon virhe" + +#~ msgid "invalid source_version argument to compile_java_class" +#~ msgstr "virheellinen source_version-argumentti kohteelle compile_java_class" + +#~ msgid "invalid target_version argument to compile_java_class" +#~ msgstr "virheellinen target_version-argumentti kohteelle compile_java_class" + +#~ msgid "failed to create \"%s\"" +#~ msgstr "kohteen ”%s” luominen epäonnistui" + +#~ msgid "error while writing \"%s\" file" +#~ msgstr "virhe kirjoitettaessa tiedostoa ”%s”" + +#~ msgid "Java compiler not found, try installing gcj or set $JAVAC" +#~ msgstr "" +#~ "Java-kääntäjää ei löytynyt, yritä asentaa gcj tai aseta $JAVAC-" +#~ "ympäristömuuttuja" + +#~ msgid "Java virtual machine not found, try installing gij or set $JAVA" +#~ msgstr "" +#~ "Java-virtuaalikonetta ei löytynyt, yritä asentaa gij tai aseta $JAVA-" +#~ "ympäristömuuttuja" + +#~ msgid "%s subprocess I/O error" +#~ msgstr "%s-aliprosessisiirräntävirhe" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "kohteen %s oikeuksien muuttaminen ei onnistu" + +#~ msgid "cannot create directory %s" +#~ msgstr "hakemiston %s luominen ei onnistu" + +#~ msgid "memory exhausted" +#~ msgstr "muisti loppui" + +#~ msgid "unable to record current working directory" +#~ msgstr "ei kyetä tallentaman nykyistä työhakemistoa" + +#~ msgid "failed to return to initial working directory" +#~ msgstr "alkuperäiseen työhakemistoon palaaminen epäonnistui" + +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "Kohteen /dev/zero avaaminen lukemista varten epäonnistui" + +#~ msgid "creation of reading thread failed" +#~ msgstr "lukemissäikeen luominen epäonnistui" + +# nonblocking I/O on synonyymi termille asynchronous I/O +#~ msgid "cannot set up nonblocking I/O to %s subprocess" +#~ msgstr "ei voi asettaa tahdistamatonta siirräntää aliprosessille %s" + +#~ msgid "communication with %s subprocess failed" +#~ msgstr "viestintä aliprosessin %s kanssa epäonnistui" + +#~ msgid "write to %s subprocess failed" +#~ msgstr "kirjoittaminen aliprosessiin %s epäonnistui" + +#~ msgid "read from %s subprocess failed" +#~ msgstr "lukeminen aliprosessista %s epäonnistui" + +#~ msgid "subprocess %s terminated with exit code %d" +#~ msgstr "aliprosessi %s päättyi poistumiskoodilla %d" + +#~ msgid "creation of threads failed" +#~ msgstr "säikeiden luominen epäonnistui" + +#~ msgid "%s subprocess terminated with exit code %d" +#~ msgstr "%s-aliprosessi päättyi poistumiskoodilla %d" + +#~ msgid "Franc,ois Pinard" +#~ msgstr "François Pinard" + +#~ msgid "`" +#~ msgstr "”" + +#~ msgid "'" +#~ msgstr "”" + +#~ msgid "Success" +#~ msgstr "Onnistui" + +#~ msgid "No match" +#~ msgstr "Ei osumaa" + +#~ msgid "Invalid regular expression" +#~ msgstr "Virheellinen säännöllinen lauseke" + +#~ msgid "Invalid collation character" +#~ msgstr "virheellinen collation-merkkiluokka" + +#~ msgid "Invalid character class name" +#~ msgstr "Virheellinen merkkiluokkanimi" + +#~ msgid "Trailing backslash" +#~ msgstr "Jälkikenoviiva" + +#~ msgid "Invalid back reference" +#~ msgstr "Virheellinen paluuviite" + +#~ msgid "Unmatched [ or [^" +#~ msgstr "Pariton [ tai [^" + +#~ msgid "Unmatched ( or \\(" +#~ msgstr "pariton ( tai \\(" + +#~ msgid "Unmatched \\{" +#~ msgstr "Pariton \\{" + +#~ msgid "Invalid content of \\{\\}" +#~ msgstr "Kohteen \\{\\} virheellinen sisältö" + +#~ msgid "Invalid range end" +#~ msgstr "Virheellinen lukualueen loppu" + +#~ msgid "Memory exhausted" +#~ msgstr "Muisti loppui" + +#~ msgid "Invalid preceding regular expression" +#~ msgstr "Virheellinen edeltävä säännöllinen lauseke" + +#~ msgid "Premature end of regular expression" +#~ msgstr "Ennenaikainen säännöllisen lausekkeen loppu" + +#~ msgid "Regular expression too big" +#~ msgstr "Säännöllinen lauseke on liian iso" + +#~ msgid "Unmatched ) or \\)" +#~ msgstr "Pariton ) tai \\)" + +#~ msgid "No previous regular expression" +#~ msgstr "Ei edellistä säännöllistä lauseketta" + +# Kaikkihan muistavat kääntää nämä ja vastaavat juuri näin. Ei pelkkä kK. +#~ msgid "^[yY]" +#~ msgstr "^[kKyY]" + +#~ msgid "^[nN]" +#~ msgstr "^[eEnN]" + +#~ msgid "setting permissions for %s" +#~ msgstr "asetetaan oikeudet kohteelle %s" + +#~ msgid "Hangup" +#~ msgstr "Yhteyden katkaisu" + +#~ msgid "Interrupt" +#~ msgstr "Keskeytys" + +#~ msgid "Quit" +#~ msgstr "Poistu" + +#~ msgid "Illegal instruction" +#~ msgstr "Virheellinen käsky" + +#~ msgid "Trace/breakpoint trap" +#~ msgstr "Jäljitys/keskeytyspistekeskeytys" + +#~ msgid "Aborted" +#~ msgstr "Keskeytetty" + +#~ msgid "Floating point exception" +#~ msgstr "Liukulukupoikkeus" + +#~ msgid "Killed" +#~ msgstr "Sammutettu" + +#~ msgid "Bus error" +#~ msgstr "Väylävirhe" + +#~ msgid "Segmentation fault" +#~ msgstr "Osiinjakamisvirhe" + +#~ msgid "Broken pipe" +#~ msgstr "Rikkoutunut putki" + +#~ msgid "Alarm clock" +#~ msgstr "Hälytyskello" + +#~ msgid "Terminated" +#~ msgstr "Päättynyt" + +#~ msgid "Urgent I/O condition" +#~ msgstr "Kiireellinen siirräntätila" + +#~ msgid "Stopped (signal)" +#~ msgstr "Pysäytetty (signaali)" + +#~ msgid "Stopped" +#~ msgstr "Pysäytetty" + +#~ msgid "Continued" +#~ msgstr "Jatkettu" + +#~ msgid "Child exited" +#~ msgstr "Lapsiprosessi poistunut" + +#~ msgid "Stopped (tty input)" +#~ msgstr "Pysäytetty (tty-syöte)" + +#~ msgid "Stopped (tty output)" +#~ msgstr "Pysäytetty (tty-tuloste)" + +#~ msgid "I/O possible" +#~ msgstr "Siirräntä mahdollinen" + +#~ msgid "CPU time limit exceeded" +#~ msgstr "Suoritinaikaraja ylitetty" + +#~ msgid "File size limit exceeded" +#~ msgstr "Tiedostonkokoraja ylitetty" + +#~ msgid "Virtual timer expired" +#~ msgstr "Virtuaaliajastin päättynyt" + +#~ msgid "Profiling timer expired" +#~ msgstr "Profilointiajastin päättynyt" + +#~ msgid "Window changed" +#~ msgstr "Ikkuna vaihtunut" + +#~ msgid "User defined signal 1" +#~ msgstr "Käyttäjän määrittelemä signaali 1" + +#~ msgid "User defined signal 2" +#~ msgstr "Käyttäjän määrittelemä signaali 2" + +#~ msgid "EMT trap" +#~ msgstr "EMT-keskeytys" + +#~ msgid "Bad system call" +#~ msgstr "Väärä järjestelmäkutsu" + +#~ msgid "Stack fault" +#~ msgstr "Pinovirhe" + +#~ msgid "Information request" +#~ msgstr "Tietopyyntö" + +#~ msgid "Power failure" +#~ msgstr "Teholähdevika" + +#~ msgid "Resource lost" +#~ msgstr "Resurssi kadonnut" + +#~ msgid "error writing to a closed pipe or socket" +#~ msgstr "virhe kirjoitettaessa suljettuun putkeen tai pistokkeeseen" + +#~ msgid "cannot create pipe" +#~ msgstr "ei voida luoda putkea" + +#~ msgid "Real-time signal %d" +#~ msgstr "Tosiaikasignaali %d" + +#~ msgid "Unknown signal %d" +#~ msgstr "Tuntematon signaali %d" + +#~ msgid "iconv function not usable" +#~ msgstr "iconv-funktio ei ole käyttökelpoinen" + +#~ msgid "iconv function not available" +#~ msgstr "iconv-funktio ei ole saatavilla" + +#~ msgid "character out of range" +#~ msgstr "merkki sallitun välin ulkopuolella" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "merkin U+%04X muunnos paikalliseen merkistöön ei onnistu" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "merkin U+%04X muunnos paikalliseen merkistöön ei onnistu: %s" + +#~ msgid "invalid user" +#~ msgstr "virheellinen käyttäjä" + +#~ msgid "invalid group" +#~ msgstr "virheellinen ryhmä" + +#~ msgid "invalid spec" +#~ msgstr "virheellinen määrittely" + +#~ msgid "unable to display error message" +#~ msgstr "ei kyetä näyttämään virheilmoitusta" + +#~ msgid "Packaged by %s (%s)\n" +#~ msgstr "Pakkaaja: %s (%s)\n" + +#~ msgid "Packaged by %s\n" +#~ msgstr "Pakkaaja: %s\n" + +#~ msgid "(C)" +#~ msgstr "©" + +#~ msgid "" +#~ "\n" +#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +#~ "html>.\n" +#~ "This is free software: you are free to change and redistribute it.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "Lisenssi GPLv3+: GNU GPL versio 3 tai myöhäisempi <http://gnu.org/" +#~ "licenses/gpl.html>.\n" +#~ "Tämä on vapaa ohjelmisto: voit vapaasti muuttaa sitä tai jakaa sitä " +#~ "edelleen.\n" +#~ "Ohjelmalle EI OLE TAKUUTA siinä laajuudessa mitä laki sen sallii.\n" +#~ "\n" + +#~ msgid "Written by %s.\n" +#~ msgstr "Kirjoittanut %s.\n" + +#~ msgid "Written by %s and %s.\n" +#~ msgstr "Kirjoittaneet %s ja %s.\n" + +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "Kirjoittaneet %s, %s ja %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Kirjoittaneet %s, %s,\n" +#~ "%s ja %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Kirjoittaneet %s, %s,\n" +#~ "%s, %s ja %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, and %s.\n" +#~ msgstr "" +#~ "Kirjoittaneet %s, %s,\n" +#~ "%s, %s, %s ja %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, and %s.\n" +#~ msgstr "" +#~ "Kirjoittaneet %s, %s,\n" +#~ "%s, %s, %s,\n" +#~ "%s ja %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Kirjoittaneet %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s ja %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Kirjoittaneet %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s ja %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, and others.\n" +#~ msgstr "" +#~ "Kirjoittaneet %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, %s ja muut.\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to: %s\n" +#~ msgstr "" +#~ "\n" +#~ "Lähetä ilmoitukset ohjelmistovioista (englanniksi) osoitteeseen %s\n" +#~ "Lähetä ilmoitukset käännösvirheistä osoitteeseen <translation-team-" +#~ "fi@lists.sourceforge.net>\n" + +#~ msgid "Report %s bugs to: %s\n" +#~ msgstr "" +#~ "Lähetä %s ilmoitukset ohjelmistovioista (englanniksi) osoitteeseen %s\n" + +#~ msgid "%s home page: <%s>\n" +#~ msgstr "%s kotisivu: <%s>\n" + +#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +#~ msgstr "%s kotisivu: <http://www.gnu.org/software/%s/>\n" + +#~ msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +#~ msgstr "" +#~ "Yleinen opaste GNU-ohjelmiston käyttämiseen: <http://www.gnu.org/gethelp/" +#~ ">\n" + +#~ msgid "_open_osfhandle failed" +#~ msgstr "_open_osfhandle epäonnistui" + +#~ msgid "cannot restore fd %d: dup2 failed" +#~ msgstr "ei voi palauttaa fd %d: dup2 epäonnistui" + +#~ msgid "%s subprocess" +#~ msgstr "%s-aliprosessi" + +#~ msgid "%s subprocess got fatal signal %d" +#~ msgstr "%s-aliprosessi sai sammuttavan signaalin %d" + +#~ msgid "stdin" +#~ msgstr "vakiosyöte" + +#~ msgid "stdout" +#~ msgstr "vakiotuloste" + +#~ msgid "stderr" +#~ msgstr "vakiovirhe" + +#~ msgid "unknown stream" +#~ msgstr "tuntematon merkkivirta" + +#~ msgid "failed to reopen %s with mode %s" +#~ msgstr "kohteen %s avaaminen uudelleen tilassa %s epäonnistui" + +#~ msgid "string comparison failed" +#~ msgstr "merkkijonovertailu epäonnistui" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "Aseta LC_ALL='C' ongelman kiertämiseksi." + +#~ msgid "The strings compared were %s and %s." +#~ msgstr "Vertaillut merkkijonot olivat %s ja %s." + +#~ msgid "cannot perform formatted output" +#~ msgstr "muotoiltua tulostetta ei voitu suorittaa" + +#~ msgid "invalid %s%s argument `%s'" +#~ msgstr "virheellinen %s%s-argumentti ”%s”" + +#~ msgid "invalid suffix in %s%s argument `%s'" +#~ msgstr "virheellinen jälkiliite kohteen %s%s argumentissa ”%s”" + +#~ msgid "%s%s argument `%s' too large" +#~ msgstr "%s%s argumentti ”%s” on liian iso" diff --git a/gnulib/po/fr.po b/gnulib/po/fr.po new file mode 100644 index 0000000..ac6b61b --- /dev/null +++ b/gnulib/po/fr.po @@ -0,0 +1,821 @@ +# Messages français pour GNU concernant gnulib. +# Copyright © 1996-, 2008, 2011 Free Software Foundation, Inc. +# This file is distributed under the same license as the gnulib package. +# +# Michel Robitaille <robitail@IRO.UMontreal.CA>, 1996-. +# Nicolas Provost <nprovost@quadriv.com>, 2008. +# David Prévot <david@tilapin.org>, 2011. +msgid "" +msgstr "" +"Project-Id-Version: gnulib-3.0.0.6062.a6b16\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2011-12-07 20:41-0400\n" +"Last-Translator: David Prévot <david@tilapin.org>\n" +"Language-Team: French <traduc@traduc.org>\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Lokalize 1.2\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT : la valeur %s est inférieure ou égale à %s" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s : le paramètre ARGP_HELP_FMT nécessite une valeur" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s : le paramètre ARGP_HELP_FMT doit être positif" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s : paramètre ARGP_HELP_FMT inconnu" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Problème dans ARGP_HELP_FMT : %s" + +#: gnulib/lib/argp-help.c:1247 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Les arguments obligatoires pour la forme longue des options le sont aussi " +"pour les formes courtes associées." + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "Utilisation :" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr " ou : " + +#: gnulib/lib/argp-help.c:1656 +msgid " [OPTION...]" +msgstr " [OPTION...]" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "" +"Essayez « %s --help » ou « %s --usage » pour obtenir plus de " +"renseignements.\n" + +#: gnulib/lib/argp-help.c:1711 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Signalez toute anomalie à %s.\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "Erreur système inconnue" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "affiche cette aide" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "donne un court message d'utilisation" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "NOM" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "définit le nom du programme" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "SECS" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "suspension pendant SECS secondes (par défaut 3600)" + +#: gnulib/lib/argp-parse.c:142 +msgid "print program version" +msgstr "affiche la version du programme" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(Erreur du programme) pas de version connue !" + +#: gnulib/lib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s : trop d'arguments\n" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(Erreur du programme) l'option aurait dû être reconnue !" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s : l'option « %s » est ambiguë, possibilités :" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s : l'option « --%s » ne prend pas d'argument\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s : l'option « %c%s » ne prend pas d'argument\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s : l'option « --%s » nécessite un argument\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s : option « --%s » non reconnue\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s : option « %c%s » non reconnue\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s : option non valable -- « %c »\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s : l'option nécessite un argument -- « %c »\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s : l'option « -W %s » est ambiguë\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s : l'option « -W %s » ne prend pas d'argument\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s : l'option « -W %s » nécessite un argument\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "argument %s non valable pour %s" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "argument %s ambigu pour %s" + +#~ msgid "Valid arguments are:" +#~ msgstr "Les arguments valables sont :" + +#~ msgid "program error" +#~ msgstr "erreur du programme" + +#~ msgid "stack overflow" +#~ msgstr "dépassement de pile" + +#~ msgid "cannot find a temporary directory, try setting $TMPDIR" +#~ msgstr "" +#~ "impossible de trouver un répertoire temporaire, essayez de définir $TMPDIR" + +#~ msgid "cannot create a temporary directory using template \"%s\"" +#~ msgstr "" +#~ "impossible de créer un répertoire temporaire en utilisant le modèle " +#~ "« %s »." + +#~ msgid "cannot remove temporary file %s" +#~ msgstr "impossible de supprimer le ficher temporaire %s" + +#~ msgid "cannot remove temporary directory %s" +#~ msgstr "impossible de supprimer le répertoire temporaire %s" + +#~ msgid "error closing file" +#~ msgstr "erreur de fermeture de fichier" + +#~ msgid "write error" +#~ msgstr "erreur d'écriture" + +#~ msgid "preserving permissions for %s" +#~ msgstr "conservation des permissions de %s" + +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "erreur à l'ouverture de « %s » en lecture" + +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "impossible d'ouvrir le fichier de sauvegarde « %s » en écriture" + +#~ msgid "error reading \"%s\"" +#~ msgstr "erreur de lecture de « %s »" + +#~ msgid "error writing \"%s\"" +#~ msgstr "erreur d'écriture de « %s »" + +#~ msgid "error after reading \"%s\"" +#~ msgstr "erreur après la lecture de « %s »" + +#~ msgid "fdopen() failed" +#~ msgstr "échec de fdopen()" + +#~ msgid "C# compiler not found, try installing pnet" +#~ msgstr "compilateur C# non trouvé, essayez d'installer pnet" + +#~ msgid "C# virtual machine not found, try installing pnet" +#~ msgstr "machine virtuelle C# non trouvée, essayez d'installer pnet" + +#~ msgid "%s subprocess failed" +#~ msgstr "échec de sous-processus %s" + +#~ msgid "regular empty file" +#~ msgstr "fichier régulier vide" + +#~ msgid "regular file" +#~ msgstr "fichier régulier" + +#~ msgid "directory" +#~ msgstr "répertoire" + +#~ msgid "block special file" +#~ msgstr "fichier spécial de blocs" + +#~ msgid "character special file" +#~ msgstr "fichier spécial de caractères" + +#~ msgid "fifo" +#~ msgstr "PEPS (FIFO)" + +#~ msgid "symbolic link" +#~ msgstr "lien symbolique" + +#~ msgid "socket" +#~ msgstr "socket" + +#~ msgid "message queue" +#~ msgstr "file de messages" + +#~ msgid "semaphore" +#~ msgstr "sémaphore" + +#~ msgid "shared memory object" +#~ msgstr "objet de mémoire partagée" + +#~ msgid "typed memory object" +#~ msgstr "objet mémoire typé" + +#~ msgid "weird file" +#~ msgstr "fichier bizarre" + +#~ msgid "Address family for hostname not supported" +#~ msgstr "Famille d'adresses du nom d'hôte non pris en charge" + +#~ msgid "Temporary failure in name resolution" +#~ msgstr "Échec temporaire lors de la résolution de noms" + +#~ msgid "Bad value for ai_flags" +#~ msgstr "Mauvaise valeur pour ai_flags" + +#~ msgid "Non-recoverable failure in name resolution" +#~ msgstr "Échec définitif lors de la résolution de noms" + +#~ msgid "ai_family not supported" +#~ msgstr "ai_family non pris en charge" + +#~ msgid "Memory allocation failure" +#~ msgstr "Échec d'allocation mémoire" + +#~ msgid "No address associated with hostname" +#~ msgstr "Aucune adresse associée au nom d'hôte" + +#~ msgid "Name or service not known" +#~ msgstr "Nom ou service inconnu" + +#~ msgid "Servname not supported for ai_socktype" +#~ msgstr "Nom de serveur non pris en charge pour ai_socktype" + +#~ msgid "ai_socktype not supported" +#~ msgstr "ai_socktype non pris en charge" + +#~ msgid "System error" +#~ msgstr "Erreur système" + +#~ msgid "Argument buffer too small" +#~ msgstr "Mémoire tampon d'argument trop petite" + +#~ msgid "Processing request in progress" +#~ msgstr "Traitement de la requête en cours" + +#~ msgid "Request canceled" +#~ msgstr "Requête annulée" + +#~ msgid "Request not canceled" +#~ msgstr "Requête non annulée" + +#~ msgid "All requests done" +#~ msgstr "Requêtes toutes traitées" + +#~ msgid "Interrupted by a signal" +#~ msgstr "Interruption par un signal" + +#~ msgid "Parameter string not correctly encoded" +#~ msgstr "Chaîne de paramètre mal encodé" + +#~ msgid "Unknown error" +#~ msgstr "Erreur inconnue" + +#~ msgid "invalid source_version argument to compile_java_class" +#~ msgstr "argument source_version non valable pour compile_java_class" + +#~ msgid "invalid target_version argument to compile_java_class" +#~ msgstr "argument target_version non valable pour compile_java_class" + +#~ msgid "failed to create \"%s\"" +#~ msgstr "échec de création de « %s »" + +#~ msgid "error while writing \"%s\" file" +#~ msgstr "erreur lors de l'écriture du fichier « %s »" + +#~ msgid "Java compiler not found, try installing gcj or set $JAVAC" +#~ msgstr "" +#~ "compilateur Java non trouvé, essayez d'installer gcj ou de définir $JAVAC" + +#~ msgid "Java virtual machine not found, try installing gij or set $JAVA" +#~ msgstr "" +#~ "machine virtuelle Java non trouvée, essayez d'installer gij ou de définir " +#~ "$JAVAC" + +#~ msgid "%s subprocess I/O error" +#~ msgstr "erreur d'entrée sortie du sous-processus %s" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "impossible de modifier les permissions de %s" + +#~ msgid "cannot create directory %s" +#~ msgstr "impossible de créer le répertoire %s" + +#~ msgid "memory exhausted" +#~ msgstr "mémoire épuisée" + +#~ msgid "unable to record current working directory" +#~ msgstr "impossible de mémoriser le répertoire de travail courant" + +#~ msgid "failed to return to initial working directory" +#~ msgstr "échec de retour au répertoire initial de travail" + +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "Échec d'ouverture de /dev/zero en lecture" + +#~ msgid "creation of reading thread failed" +#~ msgstr "échec de création du processus de lecture" + +#~ msgid "cannot set up nonblocking I/O to %s subprocess" +#~ msgstr "" +#~ "impossible de configurer l'entrée sortie non bloquante au sous-processus " +#~ "%s" + +#~ msgid "communication with %s subprocess failed" +#~ msgstr "échec de communication avec le sous-processus %s" + +#~ msgid "write to %s subprocess failed" +#~ msgstr "échec d'écriture vers le sous-processus %s" + +#~ msgid "read from %s subprocess failed" +#~ msgstr "échec de lecture depuis le sous-processus %s" + +#~ msgid "subprocess %s terminated with exit code %d" +#~ msgstr "le sous-processus %s s'est terminé avec le code de retour %d" + +#~ msgid "creation of threads failed" +#~ msgstr "échec de création de processus" + +#~ msgid "%s subprocess terminated with exit code %d" +#~ msgstr "le sous-processus de %s s'est terminé avec le code de retour %d" + +#~ msgid "Franc,ois Pinard" +#~ msgstr "François Pinard" + +#~ msgid "`" +#~ msgstr "« " + +#~ msgid "'" +#~ msgstr " »" + +#~ msgid "Success" +#~ msgstr "Succès" + +#~ msgid "No match" +#~ msgstr "Pas de correspondance" + +#~ msgid "Invalid regular expression" +#~ msgstr "Expression rationnelle non valable" + +#~ msgid "Invalid collation character" +#~ msgstr "Caractère d'assemblage non valable" + +#~ msgid "Invalid character class name" +#~ msgstr "Nom de classe de caractères non valable" + +#~ msgid "Trailing backslash" +#~ msgstr "Barre oblique inverse en fin de ligne" + +#~ msgid "Invalid back reference" +#~ msgstr "Référence antérieure non valable" + +#~ msgid "Unmatched [ or [^" +#~ msgstr "[ ou [^ non appairé" + +#~ msgid "Unmatched ( or \\(" +#~ msgstr "( ou \\( non appairée" + +#~ msgid "Unmatched \\{" +#~ msgstr "\\{ non appairée" + +#~ msgid "Invalid content of \\{\\}" +#~ msgstr "Le contenu de \\{\\} n'est pas valable" + +#~ msgid "Invalid range end" +#~ msgstr "Borne finale de l'intervalle non valable" + +#~ msgid "Memory exhausted" +#~ msgstr "Mémoire épuisée" + +#~ msgid "Invalid preceding regular expression" +#~ msgstr "Expression rationnelle précédente non valable" + +#~ msgid "Premature end of regular expression" +#~ msgstr "Fin prématurée d'expression rationnelle" + +#~ msgid "Regular expression too big" +#~ msgstr "Expression rationnelle trop grande" + +#~ msgid "Unmatched ) or \\)" +#~ msgstr ") ou \\) non appairée" + +#~ msgid "No previous regular expression" +#~ msgstr "Pas d'expression rationnelle précédente" + +#~ msgid "^[yY]" +#~ msgstr "^[oOyY].*" + +#~ msgid "^[nN]" +#~ msgstr "^[nN].*" + +#~ msgid "setting permissions for %s" +#~ msgstr "impossible de définir les permissions de %s" + +#~ msgid "Hangup" +#~ msgstr "Raccrocher" + +#~ msgid "Interrupt" +#~ msgstr "Interrompre" + +#~ msgid "Quit" +#~ msgstr "Quitter" + +#~ msgid "Illegal instruction" +#~ msgstr "Instruction illégale" + +#~ msgid "Trace/breakpoint trap" +#~ msgstr "Piège de trace ou point de d'arrêt " + +#~ msgid "Aborted" +#~ msgstr "Abandonné" + +#~ msgid "Floating point exception" +#~ msgstr "Exception de virgule flottante" + +#~ msgid "Killed" +#~ msgstr "Tué" + +#~ msgid "Bus error" +#~ msgstr "Erreur de bus" + +#~ msgid "Segmentation fault" +#~ msgstr "Erreur de segmentation" + +#~ msgid "Broken pipe" +#~ msgstr "Tube rompu" + +#~ msgid "Alarm clock" +#~ msgstr "Réveil" + +#~ msgid "Terminated" +#~ msgstr "Terminé" + +#~ msgid "Urgent I/O condition" +#~ msgstr "Condition d'entrée sortie urgente" + +#~ msgid "Stopped (signal)" +#~ msgstr "Arrêté (signal)" + +#~ msgid "Stopped" +#~ msgstr "Arrêté" + +#~ msgid "Continued" +#~ msgstr "Continué" + +#~ msgid "Child exited" +#~ msgstr "Fin du processus fils" + +#~ msgid "Stopped (tty input)" +#~ msgstr "Arrêté (entrée de tty)" + +#~ msgid "Stopped (tty output)" +#~ msgstr "Arrêté (sortie de tty)" + +#~ msgid "I/O possible" +#~ msgstr "Entrée sortie possible" + +#~ msgid "CPU time limit exceeded" +#~ msgstr "Temps limite de processeur dépassé" + +#~ msgid "File size limit exceeded" +#~ msgstr "Taille limite de fichier dépassée" + +#~ msgid "Virtual timer expired" +#~ msgstr "Temporisation virtuelle dépassée" + +#~ msgid "Profiling timer expired" +#~ msgstr "Temporisation de profilage dépassée" + +#~ msgid "Window changed" +#~ msgstr "Fenêtre modifiée" + +#~ msgid "User defined signal 1" +#~ msgstr "Signal 1 défini par utilisateur" + +#~ msgid "User defined signal 2" +#~ msgstr "Signal 2 défini par utilisateur" + +#~ msgid "EMT trap" +#~ msgstr "Piège EMT" + +#~ msgid "Bad system call" +#~ msgstr "Mauvais appel système" + +#~ msgid "Stack fault" +#~ msgstr "Défaut de pile" + +#~ msgid "Information request" +#~ msgstr "Demande de renseignements" + +#~ msgid "Power failure" +#~ msgstr "Échec d'alimentation" + +#~ msgid "Resource lost" +#~ msgstr "Ressource perdue" + +#~ msgid "error writing to a closed pipe or socket" +#~ msgstr "Erreur d'écriture vers un tube ou un socket fermé" + +#~ msgid "cannot create pipe" +#~ msgstr "impossible de créer un tube (« pipe »)" + +#~ msgid "Real-time signal %d" +#~ msgstr "Signal %d en temps réel" + +#~ msgid "Unknown signal %d" +#~ msgstr "Signal %d inconnu" + +#~ msgid "iconv function not usable" +#~ msgstr "fonction iconv non utilisable" + +#~ msgid "iconv function not available" +#~ msgstr "fonction iconv non disponible" + +#~ msgid "character out of range" +#~ msgstr "caractère hors limites" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "impossible de convertir U+%04X dans le jeu de caractères local" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "impossible de convertir U+%04X dans le jeu de caractères local : %s" + +#~ msgid "invalid user" +#~ msgstr "utilisateur non valable" + +#~ msgid "invalid group" +#~ msgstr "groupe non valable" + +#~ msgid "invalid spec" +#~ msgstr "spécification non valable" + +#~ msgid "unable to display error message" +#~ msgstr "impossible d'afficher le message d'erreur" + +#~ msgid "Packaged by %s (%s)\n" +#~ msgstr "Empaqueté par %s (%s)\n" + +#~ msgid "Packaged by %s\n" +#~ msgstr "Empaqueté par %s\n" + +#~ msgid "(C)" +#~ msgstr "©" + +#~ msgid "" +#~ "\n" +#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +#~ "html>.\n" +#~ "This is free software: you are free to change and redistribute it.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "Licence GPLv3+ : GNU GPL version 3 ou ultérieure <http://gnu.org/licenses/" +#~ "gpl.html>\n" +#~ "Logiciel libre : vous êtes libre de le modifier ou de le redistribuer.\n" +#~ "Il n'y a AUCUNE GARANTIE, dans les limites permises par la loi.\n" +#~ "\n" + +#~ msgid "Written by %s.\n" +#~ msgstr "Écrit par %s.\n" + +#~ msgid "Written by %s and %s.\n" +#~ msgstr "Écrit par %s et %s.\n" + +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "Écrit par %s, %s et %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Écrit par %s, %s, %s,\n" +#~ "et %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Écrit par %s, %s, %s,\n" +#~ "%s et %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, and %s.\n" +#~ msgstr "" +#~ "Écrit par %s, %s, %s,\n" +#~ "%s, %s, et %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, and %s.\n" +#~ msgstr "" +#~ "Écrit par %s, %s, %s,\n" +#~ "%s, %s, %s, et %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Écrit par %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "et %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Écrit par %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s et %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, and others.\n" +#~ msgstr "" +#~ "Écrit par %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s et d'autres.\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to: %s\n" +#~ msgstr "" +#~ "\n" +#~ "Signalez toute anomalie à : %s\n" + +#~ msgid "Report %s bugs to: %s\n" +#~ msgstr "Signalez les anomalies de %s à : %s\n" + +#~ msgid "%s home page: <%s>\n" +#~ msgstr "page d'accueil de %s : <%s>\n" + +#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +#~ msgstr "page d'accueil de %s : <http://www.gnu.org/software/%s/>\n" + +#~ msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +#~ msgstr "" +#~ "Aide globale sur les logiciels GNU : <http://www.gnu.org/help/gethelp>\n" + +#~ msgid "_open_osfhandle failed" +#~ msgstr "échec de _open_osfhandle" + +#~ msgid "cannot restore fd %d: dup2 failed" +#~ msgstr "" +#~ "impossible de restaurer le descripteur de fichier (fd) %d : échec de dup2" + +#~ msgid "%s subprocess" +#~ msgstr "sous-processus %s" + +#~ msgid "%s subprocess got fatal signal %d" +#~ msgstr "le sous-processus %s a reçu un signal fatal %d" + +#~ msgid "stdin" +#~ msgstr "entrée standard (stdin)" + +#~ msgid "stdout" +#~ msgstr "sortie standard (stdout)" + +#~ msgid "stderr" +#~ msgstr "sortie d'erreur (stderr)" + +#~ msgid "unknown stream" +#~ msgstr "flux inconnu" + +#~ msgid "failed to reopen %s with mode %s" +#~ msgstr "impossible de rouvrir %s en mode %s" + +#~ msgid "string comparison failed" +#~ msgstr "échec de comparaison de chaîne" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "Définir LC_ALL='C' pour contourner le problème." + +#~ msgid "The strings compared were %s and %s." +#~ msgstr "Les chaînes comparées étaient %s et %s." + +#~ msgid "cannot perform formatted output" +#~ msgstr "impossible mettre en forme la sortie formatée" + +#~ msgid "invalid %s%s argument `%s'" +#~ msgstr "argument %s%s non valable « %s »" + +#~ msgid "invalid suffix in %s%s argument `%s'" +#~ msgstr "suffixe non valable dans l'argument %s%s « %s »" + +#~ msgid "%s%s argument `%s' too large" +#~ msgstr "argument %s%s « %s » trop grand" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s : option illégale -- %c\n" + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "Rapportez toute anomalie à %s.\n" + +#~ msgid "block size" +#~ msgstr "taille de bloc" + +#~ msgid "%s exists but is not a directory" +#~ msgstr "%s existe mais n'est pas un répertoire" + +#~ msgid "cannot change owner and/or group of %s" +#~ msgstr "ne peut modifier le propriétraire et/ou le groupe de %s" + +#~ msgid "cannot chdir to directory %s" +#~ msgstr "ne peut aller vers le répertoire %s" + +#~ msgid "cannot get the login group of a numeric UID" +#~ msgstr "" +#~ "ne peut obtenir le groupe d'établissement de session à partir du UID " +#~ "numérique" + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "This is free software. You may redistribute copies of it under the terms " +#~ "of\n" +#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "Ce programme est un logiciel libre; vous pouvez le redistribuer ou le\n" +#~ "modifier selon les termes de la License Publique Générale de GNU, " +#~ "publiée\n" +#~ "par la Free Software Foundation (soit la version 2 ou soit, à votre\n" +#~ "discrétion, toute version ultérieure).\n" +#~ "\n" diff --git a/gnulib/po/ga.po b/gnulib/po/ga.po new file mode 100644 index 0000000..91534e0 --- /dev/null +++ b/gnulib/po/ga.po @@ -0,0 +1,642 @@ +# Irish translations for gnulib. +# Copyright (C) 2003 Free Software Foundation, Inc. +# This file is distributed under the same license as the gnulib package. +# Kevin Patrick Scannell <scannell@SLU.EDU>, 2005, 2007. +# +msgid "" +msgstr "" +"Project-Id-Version: gnulib 1.1\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2007-07-20 12:24-0600\n" +"Last-Translator: Kevin Scannell <kscanne@gmail.com>\n" +"Language-Team: Irish <gaeilge-gnulinux@lists.sourceforge.net>\n" +"Language: ga\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : (n>2 && n<7) ? 2 :" +"(n>6 && n<11) ? 3 : 4;\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: luach %s nos l n n cothrom le %s" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: luach de dhth ar pharaimadar ARGP_HELP_FMT" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: luach deimhneach de dhth ar pharaimadar ARGP_HELP_FMT" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Paraimadar anaithnid ARGP_HELP_FMT" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Truflais i ARGP_HELP_FMT: %s" + +#: gnulib/lib/argp-help.c:1247 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Is riachtanach/roghnach le rogha ghearr aon argint at riachtanach/roghnach " +"leis an rogha fhada." + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "sid:" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr " n: " + +#: gnulib/lib/argp-help.c:1656 +msgid " [OPTION...]" +msgstr " [ROGHA...]" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "" +"Bain triail as `%s --help' n `%s --usage' chun tuilleadh eolais a fhil.\n" + +#: gnulib/lib/argp-help.c:1711 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Seol tuairisc fabhtanna chuig %s.\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "Earrid chrais anaithnid" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "taispein an chabhair seo" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "tabhair teachtaireacht bheag side" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "AINM" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "socraigh ainm an chlir" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "SOIC" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "dan moill SOIC soicind (ramhshocr: 3600)" + +#: gnulib/lib/argp-parse.c:142 +msgid "print program version" +msgstr "taispein leagan an chlir" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(EARRID CHLIR) Leagan anaithnid!?" + +#: gnulib/lib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: An iomarca argint\n" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(EARRID CHLIR) Ba chir an rogha a aithint!?" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: T an rogha `%s' dbhroch\n" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: n cheadatear argint i ndiaidh na rogha `--%s'\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: n cheadatear argint i ndiaidh na rogha `%c%s'\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: t argint de dhth i ndiaidh na rogha `%s'\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: rogha anaithnid `--%s'\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: rogha anaithnid `%c%s'\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: rogha neamhbhail -- %c\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: t argint de dhth i ndiaidh na rogha -- %c\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: T an rogha `-W %s' dbhroch\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: n cheadatear argint i ndiaidh na rogha `-W %s'\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: t argint de dhth i ndiaidh na rogha `%s'\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "argint neamhbhail %s chun %s" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "argint dhbhroch %s chun %s" + +#~ msgid "Valid arguments are:" +#~ msgstr "Na hargint bail:" + +#~ msgid "program error" +#~ msgstr "earrid chlir" + +#~ msgid "stack overflow" +#~ msgstr "cruach thar maoil" + +#, fuzzy +#~ msgid "cannot create a temporary directory using template \"%s\"" +#~ msgstr "n fidir comhadlann %s a chruth" + +#, fuzzy +#~ msgid "cannot remove temporary file %s" +#~ msgstr "n fidir comhadlann %s a chruth" + +#, fuzzy +#~ msgid "cannot remove temporary directory %s" +#~ msgstr "n fidir comhadlann %s a chruth" + +#, fuzzy +#~ msgid "error closing file" +#~ msgstr "earrid agus comhad \"%s\" scrobh" + +#~ msgid "write error" +#~ msgstr "earrid sa scrobh" + +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "earrid agus \"%s\" oscailt chun a lamh" + +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "n fidir comhad cltaca \"%s\" a oscailt chun scrobh ann" + +#~ msgid "error reading \"%s\"" +#~ msgstr "earrid agus \"%s\" lamh" + +#~ msgid "error writing \"%s\"" +#~ msgstr "earrid agus \"%s\" scrobh" + +#~ msgid "error after reading \"%s\"" +#~ msgstr "earrid tar is \"%s\" lamh" + +#~ msgid "fdopen() failed" +#~ msgstr "theip ar fdopen()" + +#~ msgid "C# compiler not found, try installing pnet" +#~ msgstr "Tiomsaitheoir C# gan aimsi, bain triail as pnet" + +#~ msgid "C# virtual machine not found, try installing pnet" +#~ msgstr "Meaisn foril C# gan aimsi, bain triail as pnet" + +#~ msgid "%s subprocess failed" +#~ msgstr "theip ar fhophriseas %s" + +#~ msgid "regular empty file" +#~ msgstr "gnthchomhad folamh" + +#~ msgid "regular file" +#~ msgstr "gnthchomhad" + +#~ msgid "directory" +#~ msgstr "comhadlann" + +#~ msgid "block special file" +#~ msgstr "comhad speisialta den chinel `bloc'" + +#~ msgid "character special file" +#~ msgstr "comhad speisialta den chinel `carachtar'" + +# `TITA' ?! -KPS +#~ msgid "fifo" +#~ msgstr "fifo" + +#~ msgid "symbolic link" +#~ msgstr "nasc siombalach" + +#~ msgid "socket" +#~ msgstr "soicad" + +#~ msgid "message queue" +#~ msgstr "ci teachtaireachta" + +#~ msgid "semaphore" +#~ msgstr "samafr" + +# FARF --KPS +#~ msgid "shared memory object" +#~ msgstr "comhad comhchuimhne" + +#~ msgid "typed memory object" +#~ msgstr "comhad cuimhne le cinel" + +#~ msgid "weird file" +#~ msgstr "comhad aisteach" + +#~ msgid "Address family for hostname not supported" +#~ msgstr "Aicme sheolta d'stainm gan tacaocht" + +#~ msgid "Temporary failure in name resolution" +#~ msgstr "Teip shealadach ar riteach na n-ainmneacha" + +#~ msgid "Bad value for ai_flags" +#~ msgstr "Luach neamhbhail do 'ai_flags'" + +#~ msgid "Non-recoverable failure in name resolution" +#~ msgstr "Teip dhocheartaithe ar riteach na n-ainmneacha" + +#~ msgid "ai_family not supported" +#~ msgstr "n thacatear le 'ai_family'" + +#~ msgid "Memory allocation failure" +#~ msgstr "Theip ar dhil chuimhne" + +#~ msgid "No address associated with hostname" +#~ msgstr "Nl seoladh ar bith ceangailte leis an stainm" + +#~ msgid "Name or service not known" +#~ msgstr "Ainm n seirbhs anaithnid" + +#~ msgid "Servname not supported for ai_socktype" +#~ msgstr "N thacatear le hainm freastalaithe do 'ai_socktype'" + +#~ msgid "ai_socktype not supported" +#~ msgstr "n thacatear le 'ai_socktype'" + +#~ msgid "System error" +#~ msgstr "Earrid chrais" + +#~ msgid "Argument buffer too small" +#~ msgstr "T an argint mhaolin rbheag" + +#~ msgid "Processing request in progress" +#~ msgstr "Iarratas prisela ar sil" + +#~ msgid "Request canceled" +#~ msgstr "Cealaodh an t-iarratas" + +#~ msgid "Request not canceled" +#~ msgstr "Nor cealaodh an t-iarratas" + +#~ msgid "All requests done" +#~ msgstr "Cuireadh gach iarratas i gcrch" + +#~ msgid "Interrupted by a signal" +#~ msgstr "Idirbhriste ag comhartha" + +#~ msgid "Parameter string not correctly encoded" +#~ msgstr "Nl an teaghrn paraimadair ionchdaithe i gceart" + +#~ msgid "Unknown error" +#~ msgstr "Earrid anaithnid" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: rogha neamhcheadaithe -- %c\n" + +#, fuzzy +#~ msgid "%s subprocess I/O error" +#~ msgstr "fophriseas %s" + +#~ msgid "invalid source_version argument to compile_java_class" +#~ msgstr "argint neamhbhail \"source_version\" ar compile_java_class" + +#~ msgid "invalid target_version argument to compile_java_class" +#~ msgstr "argint neamhbhail \"target_version\" ar compile_java_class" + +#~ msgid "failed to create \"%s\"" +#~ msgstr "theip ar chruth \"%s\"" + +#~ msgid "error while writing \"%s\" file" +#~ msgstr "earrid agus comhad \"%s\" scrobh" + +#~ msgid "Java compiler not found, try installing gcj or set $JAVAC" +#~ msgstr "" +#~ "Tiomsaitheoir Java gan aimsi, bain triail as gcj, n socraigh $JAVAC" + +#~ msgid "Java virtual machine not found, try installing gij or set $JAVA" +#~ msgstr "" +#~ "Meaisn foril Java gan aimsi, bain triail as gij, n socraigh $JAVA" + +#~ msgid "cannot create pipe" +#~ msgstr "n fidir popa a chruth" + +#~ msgid "unable to record current working directory" +#~ msgstr "n fidir an chomhadlann oibre a thaifead" + +#~ msgid "failed to return to initial working directory" +#~ msgstr "nl aon fhil ar an chad chomhadlann oibre" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "n fidir na ceadanna de %s a athr" + +#~ msgid "cannot create directory %s" +#~ msgstr "n fidir comhadlann %s a chruth" + +#~ msgid "memory exhausted" +#~ msgstr "cuimhne dithe" + +#~ msgid "Success" +#~ msgstr "D'irigh leis" + +#~ msgid "No match" +#~ msgstr "Gan mheaitseil" + +#~ msgid "Invalid regular expression" +#~ msgstr "Slonn ionadaochta neamhbhail" + +#~ msgid "Invalid collation character" +#~ msgstr "Carachtar neamhbhail comhordaithe" + +#~ msgid "Invalid character class name" +#~ msgstr "Ainm neamhbhail ar aicme charachtar" + +#~ msgid "Trailing backslash" +#~ msgstr "Clslais chun deiridh" + +#~ msgid "Invalid back reference" +#~ msgstr "Cltagairt neamhbhail" + +#~ msgid "Unmatched [ or [^" +#~ msgstr "[ n [^ corr" + +#~ msgid "Unmatched ( or \\(" +#~ msgstr "( n \\( corr" + +#~ msgid "Unmatched \\{" +#~ msgstr "\\{ corr" + +#~ msgid "Invalid content of \\{\\}" +#~ msgstr "bhar neamhbhail idir \\{ agus \\}" + +#~ msgid "Invalid range end" +#~ msgstr "Deireadh raoin neamhbhail" + +#~ msgid "Memory exhausted" +#~ msgstr "Cuimhne dithe" + +#~ msgid "Invalid preceding regular expression" +#~ msgstr "Is neamhbhail an slonn ionadaochta roimhe seo" + +#~ msgid "Premature end of regular expression" +#~ msgstr "Deireadh le slonn ionadaochta gan choinne" + +#~ msgid "Regular expression too big" +#~ msgstr "Slonn ionadaochta rmhr" + +#~ msgid "Unmatched ) or \\)" +#~ msgstr ") n \\) corr" + +#~ msgid "No previous regular expression" +#~ msgstr "Nl aon slonn ionadaochta roimhe seo" + +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "Theip ar oscailt /dev/zero chun a lamh" + +#~ msgid "`" +#~ msgstr "`" + +#~ msgid "'" +#~ msgstr "'" + +# #-#-#-#-# findutils-4.1.7.ga.po (findutils 4.1.7) #-#-#-#-# +# allow yes, but also 'i' as in 'is sea' or 's' for 'sea' -- KPS +# neither of these letters is near the 'N' on standard keyboard... +# #-#-#-#-# sh-utils-2.0.15.ga.po (sh-utils 2.0.15) #-#-#-#-# +# #-#-#-#-# findutils-4.1.7.ga.po (findutils 4.1.7) #-#-#-#-# +# allow yes, but also 'i' as in 'is sea' or 's' for 'sea' -- KPS +# neither of these letters is near the 'N' on standard keyboard... +# #-#-#-#-# textutils-2.1.ga.po (textutils 2.1) #-#-#-#-# +# #-#-#-#-# findutils-4.1.7.ga.po (findutils 4.1.7) #-#-#-#-# +# allow yes, but also 'i' as in 'is sea' or 's' for 'sea' -- KPS +# neither of these letters is near the 'N' on standard keyboard... +#~ msgid "^[yY]" +#~ msgstr "^[yYiIsS]" + +# #-#-#-#-# findutils-4.1.7.ga.po (findutils 4.1.7) #-#-#-#-# +# fortunately, 'n' for 'no' or 'n hea' - KPS +# #-#-#-#-# sh-utils-2.0.15.ga.po (sh-utils 2.0.15) #-#-#-#-# +# #-#-#-#-# findutils-4.1.7.ga.po (findutils 4.1.7) #-#-#-#-# +# fortunately, 'n' for 'no' or 'n hea' - KPS +# #-#-#-#-# textutils-2.1.ga.po (textutils 2.1) #-#-#-#-# +# #-#-#-#-# findutils-4.1.7.ga.po (findutils 4.1.7) #-#-#-#-# +# fortunately, 'n' for 'no' or 'n hea' - KPS +#~ msgid "^[nN]" +#~ msgstr "^[nN]" + +#~ msgid "iconv function not usable" +#~ msgstr "n fidir an fheidhm iconv a sid" + +#~ msgid "iconv function not available" +#~ msgstr "nl an fheidhm iconv ar fil" + +#~ msgid "character out of range" +#~ msgstr "carachtar as raon" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "n fidir U+%04X a thiont chuig an fhoireann carachtar lognta" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "n fidir U+%04X a thiont chuig an fhoireann carachtar lognta: %s" + +#~ msgid "invalid user" +#~ msgstr "sideoir neamhbhail" + +#~ msgid "invalid group" +#~ msgstr "grpa neamhbhail" + +#~ msgid "invalid spec" +#~ msgstr "sonr neamhbhail" + +#, fuzzy +#~ msgid "preserving permissions for %s" +#~ msgstr "n fidir na ceadanna de %s a athr" + +#~ msgid "string comparison failed" +#~ msgstr "theip ar chomparid idir teaghrin" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "Cuir LC_ALL='C' ionas gur fidir an fhadhb seo a sheachaint." + +#~ msgid "The strings compared were %s and %s." +#~ msgstr "Rinneadh comparid idir na teaghrin %s agus %s." + +#~ msgid "(C)" +#~ msgstr "" + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +#~ "html>.\n" +#~ "This is free software: you are free to change and redistribute it.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "Ceadnas GPLv3+: GNU GPL leagan 3 n nos nua <http://gnu.org/licenses/" +#~ "gpl.html>\n" +#~ "Is saorbhogearra seo: ceadatear duit a athr agus a athdhileadh.\n" +#~ "Nl barnta AR BITH ann, an oiread at ceadaithe de rir dl.\n" +#~ "\n" + +#~ msgid "Written by %s.\n" +#~ msgstr "Le %s.\n" + +#~ msgid "Written by %s and %s.\n" +#~ msgstr "Le %s agus %s.\n" + +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "Le %s, %s, agus %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Le %s, %s, %s,\n" +#~ "agus %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Le %s, %s, %s,\n" +#~ "%s, agus %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, and %s.\n" +#~ msgstr "" +#~ "Le %s, %s, %s,\n" +#~ "%s, %s, agus %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, and %s.\n" +#~ msgstr "" +#~ "Le %s, %s, %s,\n" +#~ "%s, %s, %s, agus %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Le %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "agus %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Le %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, agus %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, and others.\n" +#~ msgstr "" +#~ "Le %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, agus daoine eile nach iad.\n" + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "Seol tuairisc fabhtanna chuig %s.\n" + +#, fuzzy +#~ msgid "invalid %s%s argument `%s'" +#~ msgstr "argint neamhbhail %s chun %s" + +#, fuzzy +#~ msgid "invalid suffix in %s%s argument `%s'" +#~ msgstr "argint neamhbhail %s chun %s" + +#, fuzzy +#~ msgid "setting permissions for %s" +#~ msgstr "n fidir na ceadanna de %s a athr" + +#~ msgid "%s subprocess" +#~ msgstr "fophriseas %s" + +#~ msgid "%s subprocess got fatal signal %d" +#~ msgstr "fuair fophriseas %s comhartha marfach %d" + +#~ msgid "block size" +#~ msgstr "mid bloc" + +#~ msgid "%s exists but is not a directory" +#~ msgstr "T %s ann cheana, ach n comhadlann " + +#~ msgid "cannot change owner and/or group of %s" +#~ msgstr "n fidir an t-inir agus/n an grpa de %s a athr" + +#~ msgid "cannot chdir to directory %s" +#~ msgstr "n fidir chdir a dhanamh go dt an chomhadlann %s" + +#~ msgid "cannot get the login group of a numeric UID" +#~ msgstr "nl aon fhil ar an ghrpa don UID uimhriil seo" + +#~ msgid "" +#~ "\n" +#~ "This is free software. You may redistribute copies of it under the terms " +#~ "of\n" +#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "Is saorbhogearra seo. Is fidir leat cipeanna a scaipeadh de rir na\n" +#~ "gcoinnollacha den GNU General Public License\n" +#~ "<http://www.gnu.org/licenses/gpl.html>.\n" +#~ "Nl barnta AR BITH ann, an oiread at ceadaithe de rir dl.\n" +#~ "\n" diff --git a/gnulib/po/gl.po b/gnulib/po/gl.po new file mode 100644 index 0000000..7650ee1 --- /dev/null +++ b/gnulib/po/gl.po @@ -0,0 +1,660 @@ +# Galician translation of gnulib. +# This file is distributed under the same license as the gnulib package. +# Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. +# Copyright (C) 2012 Leandro Regueiro. +# +# Jacobo Tarrio <jtarrio@trasno.net>, 2000, 2001, 2002. +# Leandro Regueiro <leandro.regueiro@gmail.com>, 2012. +# +# Proxecto Trasno - Adaptación do software libre á lingua galega: Se desexas +# colaborar connosco, podes atopar máis información en http://www.trasno.net +# +msgid "" +msgstr "" +"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2012-11-11 13:26+0200\n" +"Last-Translator: Leandro Regueiro <leandro.regueiro@gmail.com>\n" +"Language-Team: Galician <proxecto@trasno.net>\n" +"Language: gl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "" + +#: gnulib/lib/argp-help.c:1247 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Os argumentos obrigatorios ou opcionais das opcións longas son tamén " +"obrigatorios ou opcionais para calquera opción curta que se corresponda." + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "Uso:" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr " ou: " + +#: gnulib/lib/argp-help.c:1656 +msgid " [OPTION...]" +msgstr " [OPCIÓN...]" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Execute «%s --help» ou «%s --usage» para obter máis información.\n" + +#: gnulib/lib/argp-help.c:1711 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Envíe os informes de fallo a %s.\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "Erro do sistema descoñecido" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "devolve esta lista de axuda" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "devolve unha mensaxe curta sobre o uso" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "NOME" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "define o nome do programa" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "SECS" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "" + +#: gnulib/lib/argp-parse.c:142 +msgid "print program version" +msgstr "mostra a versión do programa" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "" + +#: gnulib/lib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Demasiados argumentos\n" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: a opción «%s» é ambigua; as posibilidades son:" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: a opción «--%s» non permite ningún argumento\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: a opción «%c%s» non permite ningún argumento\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: a opción «--%s» require un argumento\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: opción «--%s» non recoñecida\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: opción «%c%s» non recoñecida\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: opción incorrecta -- «%c»\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: a opción require un argumento -- «%c»\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: a opción «-W %s» é ambigua\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: a opción «-W %s» non permite ningún argumento\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: a opción «-W %s» require un argumento\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "argumento incorrecto %s para %s" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "argumento %s ambiguo para %s" + +#~ msgid "Valid arguments are:" +#~ msgstr "Os argumentos válidos son:" + +#~ msgid "program error" +#~ msgstr "erro do programa" + +#~ msgid "stack overflow" +#~ msgstr "desbordamento da pila" + +#~ msgid "cannot create a temporary directory using template \"%s\"" +#~ msgstr "non é posíbel crear un directorio temporal empregando o patrón «%s»" + +#~ msgid "cannot remove temporary file %s" +#~ msgstr "non é posíbel retirar o ficheiro temporal %s" + +#~ msgid "cannot remove temporary directory %s" +#~ msgstr "non é posíbel retirar o directorio temporal %s" + +#~ msgid "error closing file" +#~ msgstr "produciuse un erro ao pechar o ficheiro" + +#~ msgid "write error" +#~ msgstr "erro de escritura" + +#~ msgid "preserving permissions for %s" +#~ msgstr "conservando os permisos para %s" + +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "produciuse un erro ao abrir «%s» para lectura" + +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "" +#~ "non é posíbel abrir o ficheiro de copia de seguridade «%s» para escribir" + +#~ msgid "error reading \"%s\"" +#~ msgstr "produciuse un erro ao ler «%s»" + +#~ msgid "error writing \"%s\"" +#~ msgstr "produciuse un erro ao escribir «%s»" + +#~ msgid "error after reading \"%s\"" +#~ msgstr "produciuse un erro despois de ler «%s»" + +#~ msgid "fdopen() failed" +#~ msgstr "fdopen() fallou" + +#~ msgid "regular empty file" +#~ msgstr "ficheiro normal baleiro" + +#~ msgid "regular file" +#~ msgstr "ficheiro normal" + +#~ msgid "directory" +#~ msgstr "directorio" + +#~ msgid "block special file" +#~ msgstr "ficheiro especial de bloque" + +#~ msgid "character special file" +#~ msgstr "ficheiro especial de carácter" + +#~ msgid "fifo" +#~ msgstr "fifo" + +#~ msgid "symbolic link" +#~ msgstr "ligazón simbólica" + +#~ msgid "message queue" +#~ msgstr "cola de mensaxes" + +#~ msgid "semaphore" +#~ msgstr "semáforo" + +#~ msgid "shared memory object" +#~ msgstr "obxecto de memoria compartida" + +#~ msgid "weird file" +#~ msgstr "ficheiro estraño" + +#~ msgid "ai_family not supported" +#~ msgstr "ai_family non admitido" + +#~ msgid "Name or service not known" +#~ msgstr "Nome ou servizo descoñecido" + +#~ msgid "ai_socktype not supported" +#~ msgstr "ai_socktype non admitido" + +#~ msgid "System error" +#~ msgstr "Erro do sistema" + +#~ msgid "Request canceled" +#~ msgstr "Solicitude cancelada" + +#~ msgid "Request not canceled" +#~ msgstr "Solicitude non cancelada" + +#~ msgid "Unknown error" +#~ msgstr "Erro descoñecido" + +#~ msgid "failed to create \"%s\"" +#~ msgstr "produciuse un erro ao crear «%s»" + +#~ msgid "error while writing \"%s\" file" +#~ msgstr "produciuse un erro ao escribir o ficheiro «%s»" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "non foi posíbel cambiar os permisos de %s" + +#~ msgid "cannot create directory %s" +#~ msgstr "non foi posíbel crear o directorio %s" + +#~ msgid "memory exhausted" +#~ msgstr "memoria esgotada" + +#~ msgid "unable to record current working directory" +#~ msgstr "non foi posíbel gravar o directorio de traballo actual" + +#~ msgid "failed to return to initial working directory" +#~ msgstr "non foi posíbel volver ao directorio de traballo inicial" + +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "Produciuse un erro ao abrir /dev/zero para ler" + +#~ msgid "Franc,ois Pinard" +#~ msgstr "François Pinard" + +#~ msgid "`" +#~ msgstr "«" + +#~ msgid "'" +#~ msgstr "»" + +#~ msgid "Success" +#~ msgstr "Éxito" + +#~ msgid "No match" +#~ msgstr "Sen coincidencias" + +#~ msgid "Invalid regular expression" +#~ msgstr "Expresión regular non válida" + +#~ msgid "Invalid collation character" +#~ msgstr "Carácter de ordenación incorrecto" + +#~ msgid "Invalid character class name" +#~ msgstr "Nome da clase de caracteres incorrecto" + +#~ msgid "Trailing backslash" +#~ msgstr "Barra invertida ao final" + +#~ msgid "Unmatched [ or [^" +#~ msgstr "[ ou [^ sen parella" + +#~ msgid "Unmatched ( or \\(" +#~ msgstr "( ou \\( sen parella" + +#~ msgid "Unmatched \\{" +#~ msgstr "\\{ sen parella" + +#~ msgid "Invalid content of \\{\\}" +#~ msgstr "Contido de \\{\\} non válido" + +#~ msgid "Invalid range end" +#~ msgstr "Fin de intervalo non válido" + +#~ msgid "Memory exhausted" +#~ msgstr "Memoria esgotada" + +#~ msgid "Invalid preceding regular expression" +#~ msgstr "Expresión regular precedente non válida" + +#~ msgid "Premature end of regular expression" +#~ msgstr "Fin prematura da expresión regular" + +#~ msgid "Regular expression too big" +#~ msgstr "Expresión regular grande de máis" + +#~ msgid "Unmatched ) or \\)" +#~ msgstr ") ou \\) sen parella" + +#~ msgid "No previous regular expression" +#~ msgstr "Non hai ningunha expresión regular anterior" + +#~ msgid "^[yY]" +#~ msgstr "^[sSyY]" + +#~ msgid "^[nN]" +#~ msgstr "^[nN]" + +#~ msgid "setting permissions for %s" +#~ msgstr "definindo os permisos para %s" + +#~ msgid "Quit" +#~ msgstr "Saír" + +#~ msgid "Illegal instruction" +#~ msgstr "Instrución inaceptábel" + +#~ msgid "Aborted" +#~ msgstr "Interrompido" + +#~ msgid "Floating point exception" +#~ msgstr "Excepción de coma flotante" + +#~ msgid "Killed" +#~ msgstr "Matado" + +#~ msgid "Bus error" +#~ msgstr "Erro de bus" + +#~ msgid "Broken pipe" +#~ msgstr "Canalización danada" + +#~ msgid "Alarm clock" +#~ msgstr "Reloxo de alarma" + +#~ msgid "Terminated" +#~ msgstr "Terminado" + +#~ msgid "Stopped" +#~ msgstr "Detido" + +#~ msgid "Continued" +#~ msgstr "Continuado" + +#~ msgid "Child exited" +#~ msgstr "O proceso fillo saíu" + +#~ msgid "Stopped (tty input)" +#~ msgstr "Detido (entrada pola terminal)" + +#~ msgid "Stopped (tty output)" +#~ msgstr "Detido (saída pola terminal)" + +#~ msgid "I/O possible" +#~ msgstr "A E/S é posíbel" + +#~ msgid "CPU time limit exceeded" +#~ msgstr "Excedeuse o límite de tempo de CPU" + +#~ msgid "File size limit exceeded" +#~ msgstr "Excedeuse o límite de tamaño do ficheiro" + +#~ msgid "Virtual timer expired" +#~ msgstr "Temporizador virtual esgotado" + +#~ msgid "User defined signal 1" +#~ msgstr "Sinal 1 definido polo usuario" + +#~ msgid "User defined signal 2" +#~ msgstr "Sinal 2 definido polo usuario" + +#~ msgid "Bad system call" +#~ msgstr "Chamada ao sistema errónea" + +#~ msgid "Stack fault" +#~ msgstr "Fallo de pila" + +#~ msgid "Information request" +#~ msgstr "Solicitude de información" + +#~ msgid "Power failure" +#~ msgstr "Fallo de subministración eléctrica" + +#~ msgid "Resource lost" +#~ msgstr "Recurso perdido" + +#~ msgid "cannot create pipe" +#~ msgstr "non é posíbel crear a canalización" + +#~ msgid "Unknown signal %d" +#~ msgstr "Sinal %d descoñecido" + +#~ msgid "iconv function not usable" +#~ msgstr "a función iconv non é utilizábel" + +#~ msgid "iconv function not available" +#~ msgstr "a función iconv non está dispoñíbel" + +#~ msgid "character out of range" +#~ msgstr "carácter fóra de intervalo" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "non é posíbel converter U+%04X ao xogo de caracteres local" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "non é posíbel converter U+%04X ao xogo de caracteres local: %s" + +#~ msgid "invalid user" +#~ msgstr "usuario incorrecto" + +#~ msgid "invalid group" +#~ msgstr "grupo incorrecto" + +#~ msgid "unable to display error message" +#~ msgstr "non é posíbel mostrar a mensaxe de erro" + +#~ msgid "Packaged by %s (%s)\n" +#~ msgstr "Empaquetado por %s (%s)\n" + +#~ msgid "Packaged by %s\n" +#~ msgstr "Empaquetado por %s\n" + +#~ msgid "(C)" +#~ msgstr "©" + +#~ msgid "" +#~ "\n" +#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +#~ "html>.\n" +#~ "This is free software: you are free to change and redistribute it.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "Licenza GPL3v+: GNU GPL versión3 ou posterior <http://gnu.org/licenses/" +#~ "gpl.html>\n" +#~ "Isto é software libre: pode modificalo e redistribuílo.\n" +#~ "Non hai NINGUNHA GARANTÍA, ata onde o permita a lei.\n" +#~ "\n" + +#~ msgid "Written by %s.\n" +#~ msgstr "Escrito por %s.\n" + +#~ msgid "Written by %s and %s.\n" +#~ msgstr "Escrito por %s e %s.\n" + +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "Escrito por %s, %s e %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Escrito por %s, %s, %s,\n" +#~ "e %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Escrito por %s, %s, %s,\n" +#~ "%s, e %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, and %s.\n" +#~ msgstr "" +#~ "Escrito por %s, %s, %s,\n" +#~ "%s, %s, e %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, and %s.\n" +#~ msgstr "" +#~ "Escrito por %s, %s, %s,\n" +#~ "%s, %s, %s, e %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Escrito por %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "e %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Escrito por %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, e %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, and others.\n" +#~ msgstr "" +#~ "Escrito por %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, e outros.\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to: %s\n" +#~ msgstr "" +#~ "\n" +#~ "Envíe os informes de fallo a: %s\n" + +#~ msgid "Report %s bugs to: %s\n" +#~ msgstr "Envíe os informes de fallo en %s a %s.\n" + +#~ msgid "%s home page: <%s>\n" +#~ msgstr "Páxina web de %s: <%s>\n" + +#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +#~ msgstr "Páxina web de %s: <http://www.gnu.org/software/%s/>\n" + +#~ msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +#~ msgstr "Axuda xeral ao usar software GNU: <http://www.gnu.org/gethelp/>\n" + +#~ msgid "_open_osfhandle failed" +#~ msgstr "_open_osfhandle fallou" + +#~ msgid "cannot restore fd %d: dup2 failed" +#~ msgstr "non foi posíbel restaurar o fd %d: dup2 fallou" + +#~ msgid "stdin" +#~ msgstr "stdin" + +#~ msgid "stdout" +#~ msgstr "stdout" + +#~ msgid "stderr" +#~ msgstr "stderr" + +#~ msgid "unknown stream" +#~ msgstr "fluxo descoñecido" + +#~ msgid "failed to reopen %s with mode %s" +#~ msgstr "produciuse un erro ao volver abrir %s en modo %s" + +#~ msgid "string comparison failed" +#~ msgstr "produciuse un erro ao comparar as cadeas" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "Defina LC_ALL='C' para paliar o problema." + +#~ msgid "The strings compared were %s and %s." +#~ msgstr "As cadeas que se compararon foron %s e %s." + +#~ msgid "invalid %s%s argument `%s'" +#~ msgstr "o argumento «%s» de %s%s é incorrecto" + +#~ msgid "invalid suffix in %s%s argument `%s'" +#~ msgstr "sufixo incorrecto %s%s no argumento «%s»" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: opción incorrecta -- %c\n" + +#~ msgid "block size" +#~ msgstr "tamaño de bloque" + +#~ msgid "%s exists but is not a directory" +#~ msgstr "%s existe pero non é un directorio" + +#~ msgid "cannot change owner and/or group of %s" +#~ msgstr "non se pode cambia-lo propietario e/ou grupo de %s" + +#~ msgid "cannot chdir to directory %s" +#~ msgstr "non se pode cambiar ao directorio %s" + +#~ msgid "cannot get the login group of a numeric UID" +#~ msgstr "non se pode obte-lo grupo de login dun UID numérico" + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "This is free software. You may redistribute copies of it under the terms " +#~ "of\n" +#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "Este programa é software libre; pode redistribuílo e/ou modificalo baixo\n" +#~ "os termos da Licencia Pública Xeral de GNU tal como a publicou a Free\n" +#~ "Software Foundation; xa ben a versión 2 ou (á súa elección) calquera\n" +#~ "versión posterior.\n" +#~ "\n" diff --git a/gnulib/po/hu.po b/gnulib/po/hu.po new file mode 100644 index 0000000..9bb6b87 --- /dev/null +++ b/gnulib/po/hu.po @@ -0,0 +1,709 @@ +# Hungarian translation of gnulib. +# Copyright (C) 2002, 2003, 2004, 2010 Free Software Foundation, Inc. +# This file is distributed under the same license as the gnulib package. +# +# Emese Kovacs <emese@instantweb.hu>, 2004. +# Gabor Kelemen <kelemeng@gnome.hu>, 2010. +msgid "" +msgstr "" +"Project-Id-Version: gnulib 2.0.0.3462.e9796\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2010-02-23 19:52+0100\n" +"Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n" +"Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: KBabel 1.11.4\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: %s értéke nem nagyobb, mint %s" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: Az ARGP_HELP_FMT paraméter értéket igényel" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: Az ARGP_HELP_FMT paraméternek pozitívnak kell lennie" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Ismeretlen ARGP_HELP_FMT paraméter" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Szemét az ARGP_HELP_FMT-ben: %s" + +#: gnulib/lib/argp-help.c:1247 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Ha egy hosszú kapcsolóhoz kötelező vagy opcionális argumentumot megadni, " +"akkor ez a megfelelő rövid kapcsolónál is kötelező vagy opcionális." + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "Használat:" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr " vagy: " + +#: gnulib/lib/argp-help.c:1656 +msgid " [OPTION...]" +msgstr " [KAPCSOLÓ…]" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "" +"További információkért lásd a(z) „%s --help” vagy „%s --usage” kimenetét.\n" + +#: gnulib/lib/argp-help.c:1711 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "A hibák itt jelenthetők: %s.\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "Ismeretlen rendszerhiba" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "ezen súgószöveg megjelenítése" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "rövid használati utasítás megjelenítése" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "NÉV" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "a program nevének beállítása" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "MÁSODPERC" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "szünet MP másodpercre (alapértelmezetten 3600)" + +#: gnulib/lib/argp-parse.c:142 +msgid "print program version" +msgstr "a programverzió kiírása" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(PROGRAMHIBA) A verzió nem ismert!" + +#: gnulib/lib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Túl sok argumentum\n" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(PROGRAMHIBA) A kapcsolót ismerni kellene?" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: a(z) „%s” kapcsoló nem egyértelmű\n" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: a(z) „--%s” kapcsoló nem enged meg argumentumot\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: a(z) „%c%s” kapcsoló nem enged meg argumentumot\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: a(z) „%s” kapcsolóhoz argumentum szükséges\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: a(z) „--%s” kapcsoló ismeretlen\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: a(z) „%c%s” kapcsoló ismeretlen\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: érvénytelen kapcsoló -- „%c”\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: a kapcsoló egy argumentumot igényel -- „%c”\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: a „-W %s” kapcsoló nem egyértelmű\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: a „-W %s” kapcsoló nem enged meg argumentumot\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: a(z) „%s” kapcsolóhoz argumentum szükséges\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "a(z) „%s” argumentum érvénytelen a következőhöz: %s" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "a(z) „%s” argumentum nem egyértelmű ehhez: „%s”" + +#~ msgid "Valid arguments are:" +#~ msgstr "Az érvényes argumentumok a következők:" + +#~ msgid "program error" +#~ msgstr "olvasási hiba" + +#~ msgid "stack overflow" +#~ msgstr "veremtúlcsordulás" + +#~ msgid "cannot find a temporary directory, try setting $TMPDIR" +#~ msgstr "" +#~ "nem található átmeneti könyvtár, próbálja beállítani a $TMPDIR változót" + +#~ msgid "cannot create a temporary directory using template \"%s\"" +#~ msgstr "" +#~ "nem lehet létrehozni átmeneti könyvtárat a(z) „%s” sablon használatával" + +#~ msgid "cannot remove temporary file %s" +#~ msgstr "nem lehet eltávolítani a(z) %s átmeneti fájlt" + +#~ msgid "cannot remove temporary directory %s" +#~ msgstr "nem lehet eltávolítani a(z) %s átmeneti könyvtárat" + +#~ msgid "error closing file" +#~ msgstr "hiba a fájl lezárásakor" + +#~ msgid "write error" +#~ msgstr "írási hiba" + +#~ msgid "preserving permissions for %s" +#~ msgstr "%s jogosultságainak megőrzése" + +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "hiba \"%s\" megnyitásakor olvasásra" + +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "%s mentési fájl megnyitása írásra sikertelen" + +#~ msgid "error reading \"%s\"" +#~ msgstr "hiba \"%s\" olvasásakor" + +#~ msgid "error writing \"%s\"" +#~ msgstr "hiba \"%s\" írásakor" + +#~ msgid "error after reading \"%s\"" +#~ msgstr "hiba \"%s\" olvasása után" + +#~ msgid "fdopen() failed" +#~ msgstr "az fdopen() sikertelen" + +#~ msgid "C# compiler not found, try installing pnet" +#~ msgstr "a C# fordító nem található, próbálja telepíteni a pnetet" + +#~ msgid "C# virtual machine not found, try installing pnet" +#~ msgstr "a C# virtuális gép nem található, próbálja telepíteni a pnetet" + +#~ msgid "%s subprocess failed" +#~ msgstr "%s alfolyamat sikertelen" + +#~ msgid "regular empty file" +#~ msgstr "szabályos üres fájl" + +#~ msgid "regular file" +#~ msgstr "szabályos fájl" + +#~ msgid "directory" +#~ msgstr "könyvtár" + +#~ msgid "block special file" +#~ msgstr "speciális blokkfájl" + +#~ msgid "character special file" +#~ msgstr "speciális karakterfájl" + +#~ msgid "fifo" +#~ msgstr "fifo" + +#~ msgid "symbolic link" +#~ msgstr "szimbolikus link" + +#~ msgid "socket" +#~ msgstr "foglalat" + +#~ msgid "message queue" +#~ msgstr "üzenetsor" + +#~ msgid "semaphore" +#~ msgstr "szemafor" + +#~ msgid "shared memory object" +#~ msgstr "megosztott memóriaobjektum" + +#~ msgid "typed memory object" +#~ msgstr "típusos memóriaobjektum" + +#~ msgid "weird file" +#~ msgstr "szokatlan fájl" + +#~ msgid "Address family for hostname not supported" +#~ msgstr "A gépnév címcsaládja nem támogatott" + +#~ msgid "Temporary failure in name resolution" +#~ msgstr "Átmeneti névfeloldási hiba" + +#~ msgid "Bad value for ai_flags" +#~ msgstr "Az ai_flags értéke hibás" + +#~ msgid "Non-recoverable failure in name resolution" +#~ msgstr "Helyrehozhatatlan névfeloldási hiba" + +#~ msgid "ai_family not supported" +#~ msgstr "Az ai_family nem támogatott" + +#~ msgid "Memory allocation failure" +#~ msgstr "Memóriafoglalási hiba" + +#~ msgid "No address associated with hostname" +#~ msgstr "A gépnévhez nem tartozik cím" + +#~ msgid "Name or service not known" +#~ msgstr "A név vagy szolgáltatás ismeretlen" + +#~ msgid "Servname not supported for ai_socktype" +#~ msgstr "A kiszolgálónév nem támogatott az ai_socktype-hoz" + +#~ msgid "ai_socktype not supported" +#~ msgstr "Az ai_socktype nem támogatott" + +#~ msgid "System error" +#~ msgstr "Rendszerhiba" + +#~ msgid "Argument buffer too small" +#~ msgstr "A paraméterpuffer túl kicsi" + +#~ msgid "Processing request in progress" +#~ msgstr "Kérés feldolgozása folyamatban" + +#~ msgid "Request canceled" +#~ msgstr "Kérés megszakítva" + +#~ msgid "Request not canceled" +#~ msgstr "Kérés nincs megszakítva" + +#~ msgid "All requests done" +#~ msgstr "Minden kérés kész" + +#~ msgid "Interrupted by a signal" +#~ msgstr "Szignál által megszakítva" + +#~ msgid "Parameter string not correctly encoded" +#~ msgstr "A paraméter-karakterlánc nem megfelelő kódolású" + +#~ msgid "Unknown error" +#~ msgstr "Ismeretlen hiba" + +#~ msgid "error while writing \"%s\" file" +#~ msgstr "hiba \"%s\" fájl írásakor" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "nem lehet %s jogosultságait megváltoztatni" + +#~ msgid "cannot create directory %s" +#~ msgstr "nem lehet létrehozni a(z) %s könyvtárat" + +#~ msgid "memory exhausted" +#~ msgstr "elfogyott a memória" + +#~ msgid "unable to record current working directory" +#~ msgstr "az aktuális munkakönyvtár feljegyzése meghiúsult" + +#~ msgid "failed to return to initial working directory" +#~ msgstr "a visszatérés meghiúsult a kiinduló munkakönyvtárba" + +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "/dev/zero megnyitása olvasásra sikertelen" + +#~ msgid "cannot create pipe" +#~ msgstr "nem hozható létre adatcsatorna" + +#~ msgid "`" +#~ msgstr "„" + +#~ msgid "'" +#~ msgstr "”" + +#~ msgid "Success" +#~ msgstr "Sikerült" + +#~ msgid "No match" +#~ msgstr "Nincs találat" + +#~ msgid "Invalid regular expression" +#~ msgstr "Érvénytelen szabályos kifejezés" + +#~ msgid "Invalid collation character" +#~ msgstr "Érvénytelen leválogatási karakter" + +#~ msgid "Invalid character class name" +#~ msgstr "Érvénytelen karakterosztálynév" + +#~ msgid "Trailing backslash" +#~ msgstr "Záró visszaper" + +#~ msgid "Invalid back reference" +#~ msgstr "Érvénytelen visszahivatkozás" + +#~ msgid "Unmatched [ or [^" +#~ msgstr "Pár nélküli [ vagy [^" + +#~ msgid "Unmatched ( or \\(" +#~ msgstr "Pár nélküli ( vagy \\(" + +#~ msgid "Unmatched \\{" +#~ msgstr "Pár nélküli \\{" + +#~ msgid "Invalid content of \\{\\}" +#~ msgstr "A \\{\\} tartalma érvénytelen" + +#~ msgid "Invalid range end" +#~ msgstr "Érvénytelen tartományvég" + +#~ msgid "Memory exhausted" +#~ msgstr "Elfogyott a memória" + +#~ msgid "Invalid preceding regular expression" +#~ msgstr "Érvénytelen megelőző szabályos kifejezés" + +#~ msgid "Premature end of regular expression" +#~ msgstr "A szabályos kifejezés túl korán véget ért" + +#~ msgid "Regular expression too big" +#~ msgstr "A szabályos kifejezés túl nagy" + +#~ msgid "Unmatched ) or \\)" +#~ msgstr "Pár nélküli ) vagy \\)" + +#~ msgid "No previous regular expression" +#~ msgstr "Nincs megelőző szabályos kifejezés" + +#~ msgid "^[yY]" +#~ msgstr "^[iIyY]" + +#~ msgid "^[nN]" +#~ msgstr "^[nN]" + +#~ msgid "setting permissions for %s" +#~ msgstr "%s jogosultságainak beállítása" + +#~ msgid "Hangup" +#~ msgstr "Felfüggesztés" + +#~ msgid "Interrupt" +#~ msgstr "Megszakítás" + +#~ msgid "Quit" +#~ msgstr "Kilépés" + +#~ msgid "Illegal instruction" +#~ msgstr "Illegális utasítás" + +#~ msgid "Trace/breakpoint trap" +#~ msgstr "Nyomkövetési/töréspont csapda" + +#~ msgid "Aborted" +#~ msgstr "Megszakítva" + +#~ msgid "Floating point exception" +#~ msgstr "Lebegőpontos kivétel" + +#~ msgid "Killed" +#~ msgstr "Kilőve" + +#~ msgid "Bus error" +#~ msgstr "Buszhiba" + +#~ msgid "Segmentation fault" +#~ msgstr "Szegmentálási hiba" + +#~ msgid "Broken pipe" +#~ msgstr "Megszakadt csővezeték" + +#~ msgid "Alarm clock" +#~ msgstr "Ébresztőóra" + +#~ msgid "Terminated" +#~ msgstr "Befejeződött" + +#~ msgid "Urgent I/O condition" +#~ msgstr "Sürgős I/O feltétel" + +#~ msgid "Stopped (signal)" +#~ msgstr "Leállítva (szignál)" + +#~ msgid "Stopped" +#~ msgstr "Leállítva" + +#~ msgid "Continued" +#~ msgstr "Folytatva" + +#~ msgid "Child exited" +#~ msgstr "Gyerekfolyamat kilépett" + +#~ msgid "Stopped (tty input)" +#~ msgstr "Leállítva (tty bemenet)" + +#~ msgid "Stopped (tty output)" +#~ msgstr "Leállítva (tty kimenet)" + +#~ msgid "I/O possible" +#~ msgstr "I/O lehetséges" + +#~ msgid "CPU time limit exceeded" +#~ msgstr "CPU-időkorlát túllépve" + +#~ msgid "File size limit exceeded" +#~ msgstr "Fájlméret korlátja túllépve" + +#~ msgid "Virtual timer expired" +#~ msgstr "Virtuális időzítés lejárt" + +#~ msgid "Profiling timer expired" +#~ msgstr "A profilozási időzítő lejárt" + +#~ msgid "Window changed" +#~ msgstr "Ablakméret változott" + +#~ msgid "User defined signal 1" +#~ msgstr "Felhasználói szignál 1" + +#~ msgid "User defined signal 2" +#~ msgstr "Felhasználói szignál 2" + +#~ msgid "EMT trap" +#~ msgstr "EMT csapda" + +#~ msgid "Bad system call" +#~ msgstr "Hibás rendszerhívás" + +#~ msgid "Stack fault" +#~ msgstr "Veremhiba" + +#~ msgid "Information request" +#~ msgstr "Információkérés" + +#~ msgid "Power failure" +#~ msgstr "Tápfeszültség-kimaradás" + +#~ msgid "Resource lost" +#~ msgstr "Erőforrás elveszítve" + +#~ msgid "Real-time signal %d" +#~ msgstr "Valós idejű szignál %d" + +#~ msgid "Unknown signal %d" +#~ msgstr "Ismeretlen szignál %d" + +#~ msgid "iconv function not usable" +#~ msgstr "az iconv függvény nem használható" + +#~ msgid "iconv function not available" +#~ msgstr "az iconv függvény nem elérhető" + +#~ msgid "character out of range" +#~ msgstr "tartományon kívüli karakter" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "nem lehet helyi karakterkészletbe átalakítani a következőt: U+%04X" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "az U+%04X nem konvertálható a helyi karakterkészletbe: %s" + +#~ msgid "invalid user" +#~ msgstr "érvénytelen felhasználó" + +#~ msgid "invalid group" +#~ msgstr "érvénytelen csoport" + +#~ msgid "invalid spec" +#~ msgstr "érvénytelen specifikáció" + +#~ msgid "unable to display error message" +#~ msgstr "nem jeleníthető meg hibaüzenet" + +#~ msgid "Packaged by %s (%s)\n" +#~ msgstr "Csomagolta: %s (%s)\n" + +#~ msgid "Packaged by %s\n" +#~ msgstr "Csomagolta: %s\n" + +#~ msgid "(C)" +#~ msgstr "©" + +#~ msgid "" +#~ "\n" +#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +#~ "html>.\n" +#~ "This is free software: you are free to change and redistribute it.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "A licenc GPLv3+: a GNU GPL 3. vagy újabb változata <http://gnu.org/" +#~ "licenses/gpl.html>\n" +#~ "Ez egy szabad szoftver, terjesztheti és/vagy módosíthatja.\n" +#~ "NINCS GARANCIA, a törvény által engedélyezett mértékig.\n" +#~ "\n" + +#~ msgid "Written by %s.\n" +#~ msgstr "Írta: %s.\n" + +#~ msgid "Written by %s and %s.\n" +#~ msgstr "Írta: %s és %s.\n" + +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "Írta: %s, %s és %s\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Írta: %s, %s, %s\n" +#~ "és %s\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Írta: %s, %s, %s,\n" +#~ "%s és %s\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, and %s.\n" +#~ msgstr "" +#~ "Írta: %s, %s, %s,\n" +#~ "%s, %s és %s\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, and %s.\n" +#~ msgstr "" +#~ "Írta: %s, %s, %s,\n" +#~ "%s, %s, %s és %s\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Írta: %s, %s, %s,\n" +#~ "%s, %s, %s, %s\n" +#~ "és %s\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Írta: %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s és %s\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, and others.\n" +#~ msgstr "" +#~ "Írta: %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s és mások\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to: %s\n" +#~ msgstr "" +#~ "\n" +#~ "A hibák a(z) %s címen jelenthetők.\n" + +#~ msgid "Report %s bugs to: %s\n" +#~ msgstr "A(z) %s hibái a(z) %s címen jelenthetők.\n" + +#~ msgid "%s home page: <%s>\n" +#~ msgstr "A(z) %s honlapja: <%s>\n" + +#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +#~ msgstr "A(z) %s honlapja: <http://www.gnu.org/software/%s/>.\n" + +#~ msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +#~ msgstr "" +#~ "Általános segítség a GNU szoftverek használatához: <http://www.gnu.org/" +#~ "gethelp/>.\n" + +#~ msgid "stdin" +#~ msgstr "szabványos bemenet" + +#~ msgid "stdout" +#~ msgstr "szabványos kimenet" + +#~ msgid "stderr" +#~ msgstr "szabványos hibakimenet" + +#~ msgid "unknown stream" +#~ msgstr "ismeretlen adatfolyam" + +#~ msgid "failed to reopen %s with mode %s" +#~ msgstr "%s újranyitása %s móddal meghiúsult" + +#~ msgid "string comparison failed" +#~ msgstr "karakterlánc-összehasonlítás sikertelen" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "" +#~ "Állítsa be az LC_ALL='C' környezeti változót a probléma megkerüléséhez." + +#~ msgid "The strings compared were %s and %s." +#~ msgstr "Az összehasonlított karakterláncok: %s és %s." + +#~ msgid "invalid %s%s argument `%s'" +#~ msgstr "érvénytelen %s%s argumentum: „%s”" + +#~ msgid "invalid suffix in %s%s argument `%s'" +#~ msgstr "érvénytelen utótag a(z) %s%s argumentumban: „%s”" + +#~ msgid "%s%s argument `%s' too large" +#~ msgstr "%s%s: a(z) „%s” argumentum túl nagy" diff --git a/gnulib/po/it.po b/gnulib/po/it.po new file mode 100644 index 0000000..f9c4410 --- /dev/null +++ b/gnulib/po/it.po @@ -0,0 +1,835 @@ +# Italian translation of gnulib +# Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc. +# This file is distributed under the same license as the gnulib package. +# Marco d'Itri <md@linux.it>, 1998, 1999. +# Giovanni Bortolozzo <borto@dei.unipd.it>, 1998. +# Milo Casagrande <milo@casagrande.name>, 2008, 2009, 2010, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: gnulib-3.0.0.6062.a6b16\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2011-08-22 21:58+0200\n" +"Last-Translator: Milo Casagrande <milo@casagrande.name>\n" +"Language-Team: Italian <tp@lists.linux.it>\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: il valore %s è minore o uguale a %s" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: il parametro ARGP_HELP_FMT richiede un valore" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: il parametro ARGP_HELP_FMT deve essere positivo" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: parametro ARGP_HELP_FMT sconosciuto" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Spazzatura in ARGP_HELP_FMT: %s" + +#: gnulib/lib/argp-help.c:1247 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Gli argomenti obbligatori o facoltativi per le opzioni estese lo sono anche " +"per le corrispondenti opzioni brevi." + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "Uso:" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr " o: " + +#: gnulib/lib/argp-help.c:1656 +msgid " [OPTION...]" +msgstr " [OPZIONE...]" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Usare \"%s --help\" o \"%s --usage\" per ulteriori informazioni.\n" + +#: gnulib/lib/argp-help.c:1711 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Segnalare i bug a %s.\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "Errore di sistema sconosciuto" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "Mostra questo aiuto" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "Mostra un breve messaggio sull'uso" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "NOME" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "Imposta il nome del programma" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "SEC" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "Resta in attesa per SEC secondi (predefinito 3600)" + +#: gnulib/lib/argp-parse.c:142 +msgid "print program version" +msgstr "Stampa la versione del programma" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(ERRORE DEL PROGRAMMA) Nessuna versione conosciuta." + +#: gnulib/lib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: troppi argomenti\n" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(ERRORE DEL PROGRAMMA) L'opzione dovrebbe essere stata riconosciuta." + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: l'opzione \"%s\" è ambigua. Possibilità:" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: l'opzione \"--%s\" non accetta un argomento\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: l'opzione \"%c%s\" non accetta un argomento\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: l'opzione \"--%s\" richiede un argomento\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: opzione \"--%s\" non riconosciuta\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: opzione \"%c%s\" non riconosciuta\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: opzione non valida -- %c\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: l'opzione richiede un argomento -- %c\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: l'opzione \"-W %s\" è ambigua\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: l'opzione \"-W %s\" non accetta un argomento\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: l'opzione \"-W %s\" richiede un argomento\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "argomento %s non valido per %s" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "argomento %s ambiguo per %s" + +#~ msgid "Valid arguments are:" +#~ msgstr "Sono argomenti validi:" + +#~ msgid "program error" +#~ msgstr "errore del programma" + +#~ msgid "stack overflow" +#~ msgstr "overflow dello stack" + +#~ msgid "cannot find a temporary directory, try setting $TMPDIR" +#~ msgstr "" +#~ "impossibile trovare una directory temporanea, provare a impostare $TMPDIR" + +#~ msgid "cannot create a temporary directory using template \"%s\"" +#~ msgstr "" +#~ "impossibile creare una directory temporanea usando il modello \"%s\"" + +#~ msgid "cannot remove temporary file %s" +#~ msgstr "impossibile rimuovere il file temporaneo %s" + +#~ msgid "cannot remove temporary directory %s" +#~ msgstr "impossibile rimuovere la directory temporanea %s" + +#~ msgid "error closing file" +#~ msgstr "errore nel chiudere il file" + +#~ msgid "write error" +#~ msgstr "errore di scrittura" + +#~ msgid "preserving permissions for %s" +#~ msgstr "preservazione dei permessi per %s" + +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "errore nell'aprire \"%s\" in lettura" + +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "impossibile aprire il file di backup \"%s\" in scrittura" + +#~ msgid "error reading \"%s\"" +#~ msgstr "errore nel leggere \"%s\"" + +#~ msgid "error writing \"%s\"" +#~ msgstr "errore nello scrivere \"%s\"" + +#~ msgid "error after reading \"%s\"" +#~ msgstr "errore dopo la lettura di \"%s\"" + +#~ msgid "fdopen() failed" +#~ msgstr "fdopen() non riuscita" + +#~ msgid "C# compiler not found, try installing pnet" +#~ msgstr "compilatore C# non trovato, provare a installare pnet" + +#~ msgid "C# virtual machine not found, try installing pnet" +#~ msgstr "macchina virtuale C# non trovata, provare a installare pnet" + +#~ msgid "%s subprocess failed" +#~ msgstr "%s: sottoprocesso non riuscito" + +#~ msgid "regular empty file" +#~ msgstr "file normale vuoto" + +#~ msgid "regular file" +#~ msgstr "file normale" + +#~ msgid "directory" +#~ msgstr "directory" + +#~ msgid "block special file" +#~ msgstr "file speciale a blocchi" + +#~ msgid "character special file" +#~ msgstr "file speciale a caratteri" + +#~ msgid "fifo" +#~ msgstr "fifo" + +#~ msgid "symbolic link" +#~ msgstr "collegamento simbolico" + +#~ msgid "socket" +#~ msgstr "socket" + +#~ msgid "message queue" +#~ msgstr "coda di messaggi" + +#~ msgid "semaphore" +#~ msgstr "semaforo" + +#~ msgid "shared memory object" +#~ msgstr "oggetto di memoria condivisa" + +# (ndt) sono accettati: +# - suggerimenti +# - collegamenti dove si spieghi cosa sia un 'typed memory object' +# Ma dove si spieghi VERAMENTE e CONCRETAMENTE cos'è. +#~ msgid "typed memory object" +#~ msgstr "oggetto di memoria con nome" + +#~ msgid "weird file" +#~ msgstr "file strano" + +#~ msgid "Address family for hostname not supported" +#~ msgstr "Famiglia di indirizzi per il nome host non supportata" + +#~ msgid "Temporary failure in name resolution" +#~ msgstr "Errore temporaneo nella risoluzione del nome" + +#~ msgid "Bad value for ai_flags" +#~ msgstr "Valore per ai_flags errato" + +#~ msgid "Non-recoverable failure in name resolution" +#~ msgstr "Errore irreversibile nella risoluzione del nome" + +#~ msgid "ai_family not supported" +#~ msgstr "ai_family non supportato" + +#~ msgid "Memory allocation failure" +#~ msgstr "Allocazione memoria non riuscita" + +#~ msgid "No address associated with hostname" +#~ msgstr "Nessun indirizzo associato col nome host" + +#~ msgid "Name or service not known" +#~ msgstr "Nome o servizio sconosciuto" + +# (ndt) +# +# define EAI_SERVICE -8 /* SERVICE not supported for `ai_socktype'. */ +#~ msgid "Servname not supported for ai_socktype" +#~ msgstr "Nome servizio non supportato per ai_socktype" + +#~ msgid "ai_socktype not supported" +#~ msgstr "ai_socktype non supportato" + +#~ msgid "System error" +#~ msgstr "Errore di sistema" + +#~ msgid "Argument buffer too small" +#~ msgstr "Buffer argomento troppo piccolo" + +#~ msgid "Processing request in progress" +#~ msgstr "Elaborazione richiesta in corso" + +#~ msgid "Request canceled" +#~ msgstr "Richiesta annullata" + +#~ msgid "Request not canceled" +#~ msgstr "Richiesta non annullata" + +#~ msgid "All requests done" +#~ msgstr "Tutte le richieste completate" + +#~ msgid "Interrupted by a signal" +#~ msgstr "Interrotto da un segnale" + +#~ msgid "Parameter string not correctly encoded" +#~ msgstr "Stringa del parametro non codificata correttamente" + +#~ msgid "Unknown error" +#~ msgstr "Errore sconosciuto" + +#~ msgid "invalid source_version argument to compile_java_class" +#~ msgstr "argomento source_version in compile_java_class non valido" + +#~ msgid "invalid target_version argument to compile_java_class" +#~ msgstr "argomento target_version in compile_java_class non valido" + +#~ msgid "failed to create \"%s\"" +#~ msgstr "creazione di \"%s\" non riuscita" + +#~ msgid "error while writing \"%s\" file" +#~ msgstr "errore durante la scrittura del file \"%s\"" + +#~ msgid "Java compiler not found, try installing gcj or set $JAVAC" +#~ msgstr "" +#~ "compilatore Java non trovato, provare a installare gcj o impostare $JAVAC" + +#~ msgid "Java virtual machine not found, try installing gij or set $JAVA" +#~ msgstr "" +#~ "macchina virtuale Java non trovato, provare a installare gij o impostare " +#~ "$JAVA" + +#~ msgid "%s subprocess I/O error" +#~ msgstr "errore di I/O nel sottoprocesso %s" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "impossibile cambiare i permessi di %s" + +#~ msgid "cannot create directory %s" +#~ msgstr "impossibile creare la directory %s" + +#~ msgid "memory exhausted" +#~ msgstr "memoria esaurita" + +#~ msgid "unable to record current working directory" +#~ msgstr "impossibile registrare la directory di lavoro corrente" + +#~ msgid "failed to return to initial working directory" +#~ msgstr "ritorno alla directory di lavoro iniziale non riuscito" + +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "Apertura di /dev/zero in lettura non riuscita" + +#~ msgid "creation of reading thread failed" +#~ msgstr "creazione del thread di lettura non riuscita" + +#~ msgid "cannot set up nonblocking I/O to %s subprocess" +#~ msgstr "impossibile impostare I/O non bloccante sul sottoprocesso di %s" + +#~ msgid "communication with %s subprocess failed" +#~ msgstr "comunicazione col sottoprocesso di %s non riuscita" + +#~ msgid "write to %s subprocess failed" +#~ msgstr "scrittura sul sottoprocesso di %s non riuscita" + +#~ msgid "read from %s subprocess failed" +#~ msgstr "lettura dal sottoprocesso di %s non riuscita" + +#~ msgid "subprocess %s terminated with exit code %d" +#~ msgstr "sottoprocesso %s terminato con codice d'uscita %d" + +#~ msgid "creation of threads failed" +#~ msgstr "creazione dei thread non riuscita" + +#~ msgid "%s subprocess terminated with exit code %d" +#~ msgstr "sottoprocesso di %s terminato con codice d'uscita %d" + +#~ msgid "Franc,ois Pinard" +#~ msgstr "Francois Pinard" + +#~ msgid "`" +#~ msgstr "\"" + +#~ msgid "'" +#~ msgstr "\"" + +#~ msgid "Success" +#~ msgstr "Successo" + +#~ msgid "No match" +#~ msgstr "Nessuna corrispondenza" + +#~ msgid "Invalid regular expression" +#~ msgstr "Espressione regolare non valida" + +# (ndt) http://en.wikipedia.org/wiki/Collation +#~ msgid "Invalid collation character" +#~ msgstr "Carattere di collazione non valido" + +#~ msgid "Invalid character class name" +#~ msgstr "Nome classe del carattere non valida" + +#~ msgid "Trailing backslash" +#~ msgstr "Backslash finale" + +#~ msgid "Invalid back reference" +#~ msgstr "Riferimento all'indietro non valido" + +#~ msgid "Unmatched [ or [^" +#~ msgstr "[ o [^ senza corrispondenza" + +#~ msgid "Unmatched ( or \\(" +#~ msgstr "( o \\( senza corrispondenza" + +#~ msgid "Unmatched \\{" +#~ msgstr "\\{ senza corrispondenza" + +#~ msgid "Invalid content of \\{\\}" +#~ msgstr "Contenuto di \\{\\} non valido" + +#~ msgid "Invalid range end" +#~ msgstr "Fine dell'intervallo non valida" + +#~ msgid "Memory exhausted" +#~ msgstr "Memoria esaurita" + +#~ msgid "Invalid preceding regular expression" +#~ msgstr "Espressione regolare precedente non valida" + +#~ msgid "Premature end of regular expression" +#~ msgstr "Fine prematura dell'espressione regolare" + +#~ msgid "Regular expression too big" +#~ msgstr "Espressione regolare troppo grande" + +#~ msgid "Unmatched ) or \\)" +#~ msgstr ") o \\) senza corrispondenza" + +#~ msgid "No previous regular expression" +#~ msgstr "Nessuna espressione regolare precedente" + +#~ msgid "^[yY]" +#~ msgstr "^[sSyY]" + +#~ msgid "^[nN]" +#~ msgstr "^[nN]" + +#~ msgid "setting permissions for %s" +#~ msgstr "impostazione dei permessi per %s" + +# (ndt) ho preferito mettere tra parentesi il vero nome della costante del segnale, sono cose abbastanza tecniche e forse con un riferimento reale più comprensibili +# +# http://en.wikipedia.org/wiki/SIGHUP +#~ msgid "Hangup" +#~ msgstr "Chiusura" + +# http://en.wikipedia.org/wiki/SIGINT_(POSIX) +#~ msgid "Interrupt" +#~ msgstr "Interruzione" + +# http://en.wikipedia.org/wiki/SIGQUIT +#~ msgid "Quit" +#~ msgstr "Uscita (con core dump)" + +# http://en.wikipedia.org/wiki/SIGILL +#~ msgid "Illegal instruction" +#~ msgstr "Istruzione non consentita" + +# http://en.wikipedia.org/wiki/Trap_(computing) +# http://en.wikipedia.org/wiki/SIGTRAP +#~ msgid "Trace/breakpoint trap" +#~ msgstr "Rilevato trace/breakpoint" + +# http://en.wikipedia.org/wiki/SIGABRT +#~ msgid "Aborted" +#~ msgstr "Annullato" + +# http://en.wikipedia.org/wiki/SIGFPE +#~ msgid "Floating point exception" +#~ msgstr "Eccezione in virgola mobile" + +#~ msgid "Killed" +#~ msgstr "Ucciso" + +# http://en.wikipedia.org/wiki/Bus_error +# http://en.wikipedia.org/wiki/SIGBUS +#~ msgid "Bus error" +#~ msgstr "Errore di bus" + +# http://en.wikipedia.org/wiki/Segmentation_fault +# http://en.wikipedia.org/wiki/SIGSEGV +#~ msgid "Segmentation fault" +#~ msgstr "Errore di segmentazione" + +# http://en.wikipedia.org/wiki/SIGPIPE +#~ msgid "Broken pipe" +#~ msgstr "Pipe interrotta" + +# (ndt) non so se convenga lasciarlo invariato... ma forse anche le altre... +# http://en.wikipedia.org/wiki/SIGALRM +#~ msgid "Alarm clock" +#~ msgstr "Sveglia" + +# http://en.wikipedia.org/wiki/SIGTERM +#~ msgid "Terminated" +#~ msgstr "Terminato" + +# http://en.wikipedia.org/wiki/SIGURG +#~ msgid "Urgent I/O condition" +#~ msgstr "Condizione di I/O urgente" + +# http://en.wikipedia.org/wiki/SIGSTOP +#~ msgid "Stopped (signal)" +#~ msgstr "Fermato" + +# http://en.wikipedia.org/wiki/SIGTSTP +#~ msgid "Stopped" +#~ msgstr "Fermato (da terminale)" + +# http://en.wikipedia.org/wiki/SIGCONT +#~ msgid "Continued" +#~ msgstr "Continuato" + +# http://en.wikipedia.org/wiki/SIGCHLD +#~ msgid "Child exited" +#~ msgstr "Processo figlio uscito" + +# http://en.wikipedia.org/wiki/SIGTTIN +#~ msgid "Stopped (tty input)" +#~ msgstr "Fermato per input tty" + +# http://en.wikipedia.org/wiki/SIGTTOU +#~ msgid "Stopped (tty output)" +#~ msgstr "Fermato per output tty" + +# (ndt) questa pare non sia posix, wikipedia riporta la stessa di SIGABRT +#~ msgid "I/O possible" +#~ msgstr "I/O consentito" + +# http://en.wikipedia.org/wiki/SIGXCPU +#~ msgid "CPU time limit exceeded" +#~ msgstr "Superato il limite di tempo CPU" + +# http://en.wikipedia.org/wiki/SIGXFSZ +#~ msgid "File size limit exceeded" +#~ msgstr "Superato il limite di dimensione file" + +# http://en.wikipedia.org/wiki/SIGVTALRM +#~ msgid "Virtual timer expired" +#~ msgstr "Timer virtuale terminato" + +# http://en.wikipedia.org/wiki/SIGPROF +#~ msgid "Profiling timer expired" +#~ msgstr "Timer di profiling terminato" + +# http://en.wikipedia.org/wiki/SIGWINCH +#~ msgid "Window changed" +#~ msgstr "Finestra modificata" + +# http://en.wikipedia.org/wiki/SIGUSR1 +#~ msgid "User defined signal 1" +#~ msgstr "Segnale 1 definito dall'utente" + +#~ msgid "User defined signal 2" +#~ msgstr "Segnale 2 definito dall'utente" + +# http://en.wikipedia.org/wiki/SIGEMT +#~ msgid "EMT trap" +#~ msgstr "Rilevato EMT" + +# http://en.wikipedia.org/wiki/SIGSYS +#~ msgid "Bad system call" +#~ msgstr "Chiamata di sistema errata" + +# http://en.wikipedia.org/wiki/SIGSTKFLT +#~ msgid "Stack fault" +#~ msgstr "Errore sullo stack" + +# http://en.wikipedia.org/wiki/SIGINFO +#~ msgid "Information request" +#~ msgstr "Richiesta informazioni" + +# http://en.wikipedia.org/wiki/SIGPWR +#~ msgid "Power failure" +#~ msgstr "Mancanza alimentazione elettrica" + +# http://en.wikipedia.org/wiki/SIGLOST +#~ msgid "Resource lost" +#~ msgstr "Risorsa persa" + +#~ msgid "error writing to a closed pipe or socket" +#~ msgstr "errore nello scrivere su una pipe o un socket chiusi" + +#~ msgid "cannot create pipe" +#~ msgstr "impossibile creare la pipe" + +#~ msgid "Real-time signal %d" +#~ msgstr "Segnale real-time %d" + +#~ msgid "Unknown signal %d" +#~ msgstr "Segnale %d sconosciuto" + +#~ msgid "iconv function not usable" +#~ msgstr "funzione iconv non utilizzabile" + +#~ msgid "iconv function not available" +#~ msgstr "funzione iconv non disponibile" + +#~ msgid "character out of range" +#~ msgstr "carattere fuori dall'intervallo" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "impossibile convertire U+%04X nel set di caratteri locale" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "impossibile convertire U+%04X nel set di caratteri locale: %s" + +#~ msgid "invalid user" +#~ msgstr "utente non valido" + +#~ msgid "invalid group" +#~ msgstr "gruppo non valido" + +# (ndt) evinta da un commento al codice: +# +# /* Set U and G to nonzero length strings corresponding to user and +# group specifiers or to NULL. If U is not NULL, it is a newly +# allocated string. */ +# +#~ msgid "invalid spec" +#~ msgstr "specificatore non valido" + +#~ msgid "unable to display error message" +#~ msgstr "impossibile visualizzare il messaggio di errore" + +#~ msgid "Packaged by %s (%s)\n" +#~ msgstr "Pacchetto creato da %s (%s)\n" + +#~ msgid "Packaged by %s\n" +#~ msgstr "Pacchetto creato da %s\n" + +#~ msgid "(C)" +#~ msgstr "©" + +#~ msgid "" +#~ "\n" +#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +#~ "html>.\n" +#~ "This is free software: you are free to change and redistribute it.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "Licenza GPLv3+: GNU GPL versione 3 o successiva <http://gnu.org/licenses/" +#~ "gpl.html>.\n" +#~ "Questo programma è software libero: siete liberi di modificarlo e " +#~ "ridistribuirlo.\n" +#~ "Non c'è ALCUNA GARANZIA, per quanto consentito dalle vigenti normative.\n" +#~ "\n" + +#~ msgid "Written by %s.\n" +#~ msgstr "Scritto da %s.\n" + +#~ msgid "Written by %s and %s.\n" +#~ msgstr "Scritto da %s e %s.\n" + +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "Scritto da %s, %s e %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Scritto da %s, %s, %s\n" +#~ "e %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Scritto da %s, %s, %s,\n" +#~ "%s e %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, and %s.\n" +#~ msgstr "" +#~ "Scritto da %s, %s, %s,\n" +#~ "%s, %s e %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, and %s.\n" +#~ msgstr "" +#~ "Scritto da %s, %s, %s,\n" +#~ "%s, %s, %s e %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Scritto da %s, %s, %s,\n" +#~ "%s, %s, %s, %s\n" +#~ "e %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Scritto da %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s e %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, and others.\n" +#~ msgstr "" +#~ "Scritto da %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s e altri.\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to: %s\n" +#~ msgstr "" +#~ "\n" +#~ "Segnalare i bug a: %s\n" +#~ "Segnalare i bug di traduzione a: <tp@lists.linux.it>\n" + +#~ msgid "Report %s bugs to: %s\n" +#~ msgstr "Segnalare i bug di %s a: %s.\n" + +#~ msgid "%s home page: <%s>\n" +#~ msgstr "Sito web di %s: <%s>\n" + +#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +#~ msgstr "Sito web di %s: <http://www.gnu.org/software/%s/>\n" + +#~ msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +#~ msgstr "" +#~ "Aiuto per l'utilizzo di software GNU: <http://www.gnu.org/gethelp/>\n" + +#~ msgid "_open_osfhandle failed" +#~ msgstr "_open_osfhandle non riuscita" + +#~ msgid "cannot restore fd %d: dup2 failed" +#~ msgstr "impossibile ripristinare fd %d: dup2 non riuscita" + +#~ msgid "%s subprocess" +#~ msgstr "sottoprocesso %s" + +#~ msgid "%s subprocess got fatal signal %d" +#~ msgstr "il sottoprocesso %s ha ricevuto un segnale %d fatale" + +#~ msgid "stdin" +#~ msgstr "stdin" + +#~ msgid "stdout" +#~ msgstr "stdout" + +#~ msgid "stderr" +#~ msgstr "stderr" + +#~ msgid "unknown stream" +#~ msgstr "stream sconosciuto" + +#~ msgid "failed to reopen %s with mode %s" +#~ msgstr "riapertura di %s in modalità %s non riuscita" + +#~ msgid "string comparison failed" +#~ msgstr "confronto delle stringhe non riuscito" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "Impostare LC_ALL='C' per aggirare il problema." + +#~ msgid "The strings compared were %s and %s." +#~ msgstr "Le stringhe confrontate erano %s e %s." + +#~ msgid "cannot perform formatted output" +#~ msgstr "impossibile mostrare l'output formattato" + +# (ndt) +# quello che viene sostituito pare sia: +# * il primo, hypens (con valore '--') +# * il secondo, option +# * il terzo, arg +# quindi qualche cosa del genere: +# invalid --option argument 'arg' +# +# (altre idee sono benvenute!) +#~ msgid "invalid %s%s argument `%s'" +#~ msgstr "l'argomento \"%3$s\" di %1$s%2$s non è valido" + +#~ msgid "invalid suffix in %s%s argument `%s'" +#~ msgstr "il suffisso nell'argomento \"%3$s\" di %1$s%2$s non è valido" + +#~ msgid "%s%s argument `%s' too large" +#~ msgstr "l'argomento \"%3$s\" di %1$s%2$s è troppo grande" diff --git a/gnulib/po/ja.po b/gnulib/po/ja.po new file mode 100644 index 0000000..ac1f94c --- /dev/null +++ b/gnulib/po/ja.po @@ -0,0 +1,811 @@ +# Japanese gnulib messages +# Copyright (C) 2000, 2010 Free Software Foundation, Inc. +# This file is distributed under the same license as the gnulib package. +# Masahito Yamaga <yamaga@ipc.chiba-u.ac.jp>, 2002. +# GOTO Masanori <gotom@debian.or.jp>, 2006. +# derived from the version by Yasuyuki Furukawa <yasu@on.cs.keio.ac.jp> 1998. +# Jun Nishii <jun@flatout.org> 1999. +# Daisuke Yamashita <yamad@mb.infoweb.ne.jp> 1999. +# Yasuaki Taniguchi <yasuakit@gmail.com>, 2010, 2011. +msgid "" +msgstr "" +"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2011-09-02 18:39+0900\n" +"Last-Translator: Yasuaki Taniguchi <yasuakit@gmail.com>\n" +"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: %s の値は %s の値以下です" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: ARGP_HELP_FMT パラメータには値が必要です" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: ARGP_HELP_FMT パラメータは正の値でなければいけません" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: 不明な ARGP_HELP_FMT パラメータ" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "ARGP_HELP_FMT 中にごみがあります: %s" + +#: gnulib/lib/argp-help.c:1247 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"長い形式のオプションで必須または任意の引数は、それに対応する短い形式のオプ" +"ションでも同様に必須または任意です。" + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "使用法:" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr "または: " + +#: gnulib/lib/argp-help.c:1656 +msgid " [OPTION...]" +msgstr " [OPTION...]" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "詳細は `%s --help' または `%s --usage' を実行して下さい。\n" + +#: gnulib/lib/argp-help.c:1711 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "" +"バグを発見したら <%s> に報告して下さい。\n" +"翻訳に関するバグは<translation-team-ja@lists.sourceforge.net>に報告してくださ" +"い。\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "不明なシステムエラー" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "このヘルプを表示する" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "短い使用方法を表示する" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "名前" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "プログラム名を設定する" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "SECS" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "SECS 秒でハング (デフォルト 3600)" + +#: gnulib/lib/argp-parse.c:142 +msgid "print program version" +msgstr "プログラムのバージョンを表示する" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(プログラムエラー) 不明なバージョン!?" + +#: gnulib/lib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: 引数が多すぎます\n" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(プログラムエラー) オプションは認識されているべきです!?" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: オプション '%s' は曖昧です:次のものが可能です:" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: オプション '--%s' は引数を取ることができません\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: オプション '%c%s' は引数を取ることができません\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: オプション '--%s' は引数が必要です\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: オプション '--%s' を認識できません\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: オプション '%c%s' を認識できません\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: 無効なオプション -- '%c'\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: オプションには引数が必要です -- '%c'\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: オプション '-W %s' は曖昧です\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: オプション '-W %s' は引数を取ることができません\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: オプション '-W %s' は引数が必要です\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "%2$s に対する引数 %1$s が間違っています" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "%2$s に対する引数 %1$s が曖昧です" + +#~ msgid "Valid arguments are:" +#~ msgstr "有効な引数:" + +#~ msgid "program error" +#~ msgstr "プログラムエラー" + +#~ msgid "stack overflow" +#~ msgstr "スタックオーバーフロー" + +#~ msgid "cannot find a temporary directory, try setting $TMPDIR" +#~ msgstr "一時ディレクトリを作成できません。 $TMPDIR を設定してみてください" + +#~ msgid "cannot create a temporary directory using template \"%s\"" +#~ msgstr "テンプレート \"%s\" を使用した一時ディレクトリを作成できません" + +#~ msgid "cannot remove temporary file %s" +#~ msgstr "一時ファイル %s を削除できません" + +#~ msgid "cannot remove temporary directory %s" +#~ msgstr "一時ディレクトリ %s を削除できません" + +#~ msgid "error closing file" +#~ msgstr "ファイルクローズエラー" + +#~ msgid "write error" +#~ msgstr "書き込みエラー" + +#~ msgid "preserving permissions for %s" +#~ msgstr "%s のパーミッションを保存しています" + +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "\"%s\"を読込むため開いている際にエラーが発生しました" + +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "書込み用バックアップファイル\"%s\"を開くことができません" + +#~ msgid "error reading \"%s\"" +#~ msgstr "\"%s\"の読込み中にエラーが発生しました" + +#~ msgid "error writing \"%s\"" +#~ msgstr "\"%s\"の書込み中にエラーが発生しました" + +#~ msgid "error after reading \"%s\"" +#~ msgstr "\"%s\"の読込み後にエラーが発生しました" + +#~ msgid "fdopen() failed" +#~ msgstr "fdopen()に失敗しました" + +#~ msgid "C# compiler not found, try installing pnet" +#~ msgstr "C# コンパイラが見つりません。pnet をインストールしてみてください" + +#~ msgid "C# virtual machine not found, try installing pnet" +#~ msgstr "C# 仮想マシンが見つかりません。pnet をインストールしてみてください" + +#~ msgid "%s subprocess failed" +#~ msgstr "%s サブプロセスが失敗しました" + +#~ msgid "regular empty file" +#~ msgstr "通常の空ファイル" + +#~ msgid "regular file" +#~ msgstr "通常ファイル" + +#~ msgid "directory" +#~ msgstr "ディレクトリ" + +#~ msgid "block special file" +#~ msgstr "ブロックスペシャルファイル" + +#~ msgid "character special file" +#~ msgstr "キャラクタスペシャルファイル" + +#~ msgid "fifo" +#~ msgstr "fifo" + +#~ msgid "symbolic link" +#~ msgstr "シンボリックリンク" + +#~ msgid "socket" +#~ msgstr "ソケット" + +#~ msgid "message queue" +#~ msgstr "メッセージキュー" + +#~ msgid "semaphore" +#~ msgstr "セマフォ" + +#~ msgid "shared memory object" +#~ msgstr "共有メモリオブジェクト" + +#~ msgid "typed memory object" +#~ msgstr "型付メモリオブジェクト" + +#~ msgid "weird file" +#~ msgstr "不明なファイル" + +#~ msgid "Address family for hostname not supported" +#~ msgstr "ホスト名に対する Address family がサポートされていません" + +#~ msgid "Temporary failure in name resolution" +#~ msgstr "名前解決に一時的に失敗しました" + +#~ msgid "Bad value for ai_flags" +#~ msgstr "ai_flags に対する誤った値です" + +#~ msgid "Non-recoverable failure in name resolution" +#~ msgstr "名前解決でリカバリできない失敗が発生しました" + +#~ msgid "ai_family not supported" +#~ msgstr "ai_family はサポートされていません" + +#~ msgid "Memory allocation failure" +#~ msgstr "メモリ配置に失敗しました" + +#~ msgid "No address associated with hostname" +#~ msgstr "ホスト名にアドレスが割り当てられていません" + +#~ msgid "Name or service not known" +#~ msgstr "名前またはサービスが不明です" + +#~ msgid "Servname not supported for ai_socktype" +#~ msgstr "ai_socktype に対して Servname がサポートされていません" + +#~ msgid "ai_socktype not supported" +#~ msgstr "ai_socktype はサポートされていません" + +#~ msgid "System error" +#~ msgstr "システムエラー" + +#~ msgid "Argument buffer too small" +#~ msgstr "引数バッファが小さすぎます" + +#~ msgid "Processing request in progress" +#~ msgstr "要求された処理は実行中です" + +#~ msgid "Request canceled" +#~ msgstr "要求がキャンセルされました" + +#~ msgid "Request not canceled" +#~ msgstr "要求がキャンセルされませんでした" + +#~ msgid "All requests done" +#~ msgstr "すべての要求が完了しました" + +#~ msgid "Interrupted by a signal" +#~ msgstr "シグナル割り込みが発生しました" + +#~ msgid "Parameter string not correctly encoded" +#~ msgstr "パラメーター文字列が正しくエンコードされていません" + +#~ msgid "Unknown error" +#~ msgstr "不明なエラー" + +#~ msgid "invalid source_version argument to compile_java_class" +#~ msgstr "compile_java_class への source_version 引数が無効です" + +#~ msgid "invalid target_version argument to compile_java_class" +#~ msgstr "compile_java_class への target_version 引数が無効です" + +#~ msgid "failed to create \"%s\"" +#~ msgstr "\"%s\" の作成に失敗しました" + +#~ msgid "error while writing \"%s\" file" +#~ msgstr "\"%s\" ファイルの書き込み中にエラーが発生しました" + +#~ msgid "Java compiler not found, try installing gcj or set $JAVAC" +#~ msgstr "" +#~ "Java コンパイラが見つかりません。 gcj をインストールするか、または $JAVAC " +#~ "を設定してみてください" + +#~ msgid "Java virtual machine not found, try installing gij or set $JAVA" +#~ msgstr "" +#~ "Java 仮想マシンが見つかりません。 gij をインストールするか、または $JAVA " +#~ "を設定してみてください" + +#~ msgid "%s subprocess I/O error" +#~ msgstr "%s サブプロセス I/O エラー" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "%s のパーミッションを変更できません" + +#~ msgid "cannot create directory %s" +#~ msgstr "ディレクトリ %s を作成できません" + +#~ msgid "memory exhausted" +#~ msgstr "メモリを使い果たしました" + +#~ msgid "unable to record current working directory" +#~ msgstr "現在の作業ディレクトリを記録することができません" + +#~ msgid "failed to return to initial working directory" +#~ msgstr "初期作業ディレクトリに戻るのに失敗しました" + +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "/dev/zeroを読込み用に開けません" + +#~ msgid "creation of reading thread failed" +#~ msgstr "読み込みスレッドの作成に失敗しました" + +#~ msgid "cannot set up nonblocking I/O to %s subprocess" +#~ msgstr "%s 子プロセスへ非ブロック I/O を設定できません" + +#~ msgid "communication with %s subprocess failed" +#~ msgstr "%s 子プロセスとの通信に失敗しました" + +#~ msgid "write to %s subprocess failed" +#~ msgstr "%s 子プロセスへの書き込みに失敗しました" + +#~ msgid "read from %s subprocess failed" +#~ msgstr "%s 子プロセスからの読み込みに失敗しました" + +#~ msgid "subprocess %s terminated with exit code %d" +#~ msgstr "子プロセス %s が終了コード %d で終了しました" + +#~ msgid "creation of threads failed" +#~ msgstr "スレッドの作成に失敗しました" + +#~ msgid "%s subprocess terminated with exit code %d" +#~ msgstr "%s 子プロセスが終了コード %d で終了しました" + +#~ msgid "Franc,ois Pinard" +#~ msgstr "Franc,ois Pinard" + +#~ msgid "`" +#~ msgstr "`" + +#~ msgid "'" +#~ msgstr "'" + +#~ msgid "Success" +#~ msgstr "成功です" + +#~ msgid "No match" +#~ msgstr "一致しません" + +#~ msgid "Invalid regular expression" +#~ msgstr "無効な正規表現です" + +#~ msgid "Invalid collation character" +#~ msgstr "無効な照合文字です" + +#~ msgid "Invalid character class name" +#~ msgstr "無効な文字クラス名です" + +#~ msgid "Trailing backslash" +#~ msgstr "終端のバックスラッシュ" + +#~ msgid "Invalid back reference" +#~ msgstr "無効な前方参照です" + +#~ msgid "Unmatched [ or [^" +#~ msgstr "[ または [^ が不一致です" + +#~ msgid "Unmatched ( or \\(" +#~ msgstr "( または \\( が不一致です" + +#~ msgid "Unmatched \\{" +#~ msgstr "\\{ が不一致です" + +#~ msgid "Invalid content of \\{\\}" +#~ msgstr "\\{\\} の中身が無効です" + +#~ msgid "Invalid range end" +#~ msgstr "無効な範囲終了です" + +#~ msgid "Memory exhausted" +#~ msgstr "メモリを使い果たしました" + +#~ msgid "Invalid preceding regular expression" +#~ msgstr "無効な前方正規表現です" + +#~ msgid "Premature end of regular expression" +#~ msgstr "正規表現が途中で終了しました" + +#~ msgid "Regular expression too big" +#~ msgstr "正規表現が大きすぎます" + +#~ msgid "Unmatched ) or \\)" +#~ msgstr ") または \\) が不一致です" + +#~ msgid "No previous regular expression" +#~ msgstr "以前に正規表現がありません" + +#~ msgid "^[yY]" +#~ msgstr "^[yY]" + +#~ msgid "^[nN]" +#~ msgstr "^[nN]" + +#~ msgid "setting permissions for %s" +#~ msgstr "%s のパーミッションを設定します" + +#~ msgid "Hangup" +#~ msgstr "Hangup" + +#~ msgid "Interrupt" +#~ msgstr "割り込み" + +#~ msgid "Quit" +#~ msgstr "終了" + +#~ msgid "Illegal instruction" +#~ msgstr "Illegal instruction" + +#~ msgid "Trace/breakpoint trap" +#~ msgstr "Trace/breakpoint trap" + +#~ msgid "Aborted" +#~ msgstr "中止" + +#~ msgid "Floating point exception" +#~ msgstr "浮動小数点例外" + +#~ msgid "Killed" +#~ msgstr "強制終了" + +#~ msgid "Bus error" +#~ msgstr "バスエラー" + +#~ msgid "Segmentation fault" +#~ msgstr "Segmentation fault" + +#~ msgid "Broken pipe" +#~ msgstr "Broken pipe" + +#~ msgid "Alarm clock" +#~ msgstr "Alarm clock" + +#~ msgid "Terminated" +#~ msgstr "Terminated" + +#~ msgid "Urgent I/O condition" +#~ msgstr "緊急 I/O 状態" + +#~ msgid "Stopped (signal)" +#~ msgstr "停止 (シグナル)" + +#~ msgid "Stopped" +#~ msgstr "停止" + +#~ msgid "Continued" +#~ msgstr "継続" + +#~ msgid "Child exited" +#~ msgstr "子プロセス終了" + +#~ msgid "Stopped (tty input)" +#~ msgstr "停止 (tty 入力)" + +#~ msgid "Stopped (tty output)" +#~ msgstr "停止 (tty 出力)" + +#~ msgid "I/O possible" +#~ msgstr "I/O 可能" + +#~ msgid "CPU time limit exceeded" +#~ msgstr "CPU時間制限を超過しました" + +#~ msgid "File size limit exceeded" +#~ msgstr "ファイルサイズ制限を超過しました" + +#~ msgid "Virtual timer expired" +#~ msgstr "仮想タイマーが終了しました" + +#~ msgid "Profiling timer expired" +#~ msgstr "プロファイリングタイマーが終了しました" + +#~ msgid "Window changed" +#~ msgstr "Window が変更されました" + +#~ msgid "User defined signal 1" +#~ msgstr "ユーザー定義シグナル1" + +#~ msgid "User defined signal 2" +#~ msgstr "ユーザー定義シグナル2" + +#~ msgid "EMT trap" +#~ msgstr "EMT トラップ" + +#~ msgid "Bad system call" +#~ msgstr "間違ったシステムコール" + +#~ msgid "Stack fault" +#~ msgstr "スタックエラー" + +#~ msgid "Information request" +#~ msgstr "情報要求" + +#~ msgid "Power failure" +#~ msgstr "電源エラー" + +#~ msgid "Resource lost" +#~ msgstr "リソースが無くなりました" + +#~ msgid "error writing to a closed pipe or socket" +#~ msgstr "閉じたパイプまたはソケットへの書き込みでエラーが発生しました" + +#~ msgid "cannot create pipe" +#~ msgstr "パイプを作成できません" + +#~ msgid "Real-time signal %d" +#~ msgstr "リアルタイムシグナル %d" + +#~ msgid "Unknown signal %d" +#~ msgstr "不明なシグナル %d" + +#~ msgid "iconv function not usable" +#~ msgstr "iconv 関数が使えません" + +#~ msgid "iconv function not available" +#~ msgstr "iconv 関数が有効ではありません" + +#~ msgid "character out of range" +#~ msgstr "範囲外の文字" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "U+%04X をローカル文字セットに変換できません" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "U+%04X をローカル文字セットに変換できません: %s " + +#~ msgid "invalid user" +#~ msgstr "無効なユーザ" + +#~ msgid "invalid group" +#~ msgstr "無効なグループ" + +#~ msgid "invalid spec" +#~ msgstr "無効な指定" + +#~ msgid "unable to display error message" +#~ msgstr "エラーメッセージを表示できません" + +#~ msgid "Packaged by %s (%s)\n" +#~ msgstr "パッケージ作成者: %s (%s)\n" + +#~ msgid "Packaged by %s\n" +#~ msgstr "パッケージ作成者: %s\n" + +#~ msgid "(C)" +#~ msgstr "(C)" + +#~ msgid "" +#~ "\n" +#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +#~ "html>.\n" +#~ "This is free software: you are free to change and redistribute it.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "ライセンス GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/" +#~ "gpl.html>.\n" +#~ "This is free software: you are free to change and redistribute it.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" + +#~ msgid "Written by %s.\n" +#~ msgstr "作者 %s。\n" + +#~ msgid "Written by %s and %s.\n" +#~ msgstr "作者 %s および %s。\n" + +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "作者 %s、 %s、および %s。\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "作者 %s、 %s、 %s、\n" +#~ "および %s。\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "作者 %s、 %s、 %s、\n" +#~ "%s、および %s。\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, and %s.\n" +#~ msgstr "" +#~ "作者 %s、 %s、 %s、\n" +#~ "%s、 %s、および %s。\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, and %s.\n" +#~ msgstr "" +#~ "作者 %s、 %s、 %s、\n" +#~ "%s、 %s、 %s、および %s。\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "作者 %s、 %s、 %s、\n" +#~ "%s、 %s、 %s、 %s、\n" +#~ "および %s。\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "作者 %s、 %s、 %s、\n" +#~ "%s、 %s、 %s、 %s、\n" +#~ "%s、および %s。\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, and others.\n" +#~ msgstr "" +#~ "作者 %s、 %s、 %s、\n" +#~ "%s、 %s、 %s、 %s、\n" +#~ "%s、 %s、 および他の方々。\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to: %s\n" +#~ msgstr "" +#~ "\n" +#~ "バグを発見したら <%s> に報告して下さい。\n" +#~ "翻訳に関するバグは<translation-team-ja@lists.sourceforge.net>に報告してく" +#~ "ださい。\n" + +#~ msgid "Report %s bugs to: %s\n" +#~ msgstr "%s のバグは <%s> に報告してください。\n" + +#~ msgid "%s home page: <%s>\n" +#~ msgstr "%s のホームページ: <%s>\n" + +#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +#~ msgstr "%s のホームページ: <http://www.gnu.org/software/%s/>\n" + +#~ msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +#~ msgstr "" +#~ "GNU ソフトウェアを使用する際の一般的なヘルプ: <http://www.gnu.org/gethelp/" +#~ ">\n" + +#~ msgid "_open_osfhandle failed" +#~ msgstr "_open_osfhandle に失敗しました" + +#~ msgid "cannot restore fd %d: dup2 failed" +#~ msgstr "ファイル記述子 (fd) %d をリストアできません: dup2 に失敗しました" + +#~ msgid "%s subprocess" +#~ msgstr "%s 子プロセス" + +#~ msgid "%s subprocess got fatal signal %d" +#~ msgstr "%s 子プロセスが致命的なシグナル %d を受信しました" + +#~ msgid "stdin" +#~ msgstr "標準入力" + +#~ msgid "stdout" +#~ msgstr "標準出力" + +#~ msgid "stderr" +#~ msgstr "標準エラー出力" + +#~ msgid "unknown stream" +#~ msgstr "不明なストリーム" + +#~ msgid "failed to reopen %s with mode %s" +#~ msgstr "%s をモード %s で再度開くことに失敗しました" + +#~ msgid "string comparison failed" +#~ msgstr "文字列の比較に失敗しました" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "問題を回避するために LC_ALL='C' を指定してください." + +#~ msgid "The strings compared were %s and %s." +#~ msgstr "比較した文字列は %s と %s です." + +#~ msgid "cannot perform formatted output" +#~ msgstr "書式設定を行った出力を実行することができません" + +#~ msgid "invalid %s%s argument `%s'" +#~ msgstr "引数 `%3$s' に対して %1$s%2$s が無効です" + +#~ msgid "invalid suffix in %s%s argument `%s'" +#~ msgstr "引数 `%3$s' に対して無効な接尾辞 %1$s%2$s です" + +#~ msgid "%s%s argument `%s' too large" +#~ msgstr "引数 `%3$s' に対する %1$s%2$s が大きすぎます" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: 不正なオプション -- %c\n" + +#~ msgid "block size" +#~ msgstr "ブロックサイズ" + +#~ msgid "%s exists but is not a directory" +#~ msgstr "%s は存在しますがディレクトリではありません" + +#~ msgid "cannot change owner and/or group of %s" +#~ msgstr "%s のオーナーとグループを変更できません" + +#~ msgid "cannot chdir to directory %s" +#~ msgstr "ディレクトリ %s に移動できません" + +#~ msgid "cannot get the login group of a numeric UID" +#~ msgstr "数字のUIDのログイングループを取得できません" + +#~ msgid "" +#~ "\n" +#~ "This is free software. You may redistribute copies of it under the terms " +#~ "of\n" +#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "本プログラムはフリーソフトウェアです. GNU一般公有使用許諾\n" +#~ "<http://www.gnu.org/licenses/gpl.html> で定められた条項の下で本プログラ\n" +#~ "ムのコピーを再配布できます. 適切な法が認る限りにおいて全くの無保証です.\n" +#~ "\n" diff --git a/gnulib/po/ko.po b/gnulib/po/ko.po new file mode 100644 index 0000000..c06ba01 --- /dev/null +++ b/gnulib/po/ko.po @@ -0,0 +1,430 @@ +# Korean messages for GNU textutils +# Copyright (C) 1996, 2001, 2002 Free Software Foundation, Inc. +# Bang Jun-Young <bangjy@nownuri.nowcom.co.kr>, 1996-1997. +# Changwoo Ryu <cwryu@debian.org>, 2001-2002. +# +msgid "" +msgstr "" +"Project-Id-Version: GNU textutils 2.0.22\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2002-07-22 20:02+0900\n" +"Last-Translator: Changwoo Ryu <cwryu@debian.org>\n" +"Language-Team: Korean <translation-team-ko@lists.sourceforge.net>\n" +"Language: ko\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=EUC-KR\n" +"Content-Transfer-Encoding: 8bit\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "" + +#: gnulib/lib/argp-help.c:1247 +#, fuzzy +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr " ɼǿ ʿ μ ª ɼǿ ʿմϴ.\n" + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr "" + +#: gnulib/lib/argp-help.c:1656 +#, fuzzy +msgid " [OPTION...]" +msgstr ": %s [<ɼ>] [<>]...\n" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr " `%s --help' Ͻʽÿ.\n" + +#: gnulib/lib/argp-help.c:1711 +#, fuzzy, c-format +msgid "Report bugs to %s.\n" +msgstr "" +"\n" +"<%s>() ˷ ֽʽÿ.\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr " ý " + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "" + +#: gnulib/lib/argp-parse.c:142 +#, fuzzy +msgid "print program version" +msgstr "α " + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "" + +#: gnulib/lib/argp-parse.c:612 +#, fuzzy, c-format +msgid "%s: Too many arguments\n" +msgstr "μ ʹ " + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: `%s'() ȣ ɼԴϴ\n" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: `--%s' ɼ μ ʽϴ\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: `%c%s' ɼ μ ʽϴ\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: `%s' ɼ μ ʿմϴ\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: ν ɼ `--%s'\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: ν ɼ `%c%s'\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: ɼ -- %c\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: ɼ μ ʿմϴ -- %c\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: `-W %s'() ȣ ɼԴϴ\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: `-W %s' ɼ μ ʽϴ\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: `%s' ɼ μ ʿմϴ\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "%2$s %1$s" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "%2$s ָ %1$s" + +#~ msgid "Valid arguments are:" +#~ msgstr "ùٸ ڴ:" + +#~ msgid "program error" +#~ msgstr "α " + +#~ msgid "stack overflow" +#~ msgstr " ÷ο" + +#~ msgid "write error" +#~ msgstr " " + +#, fuzzy +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "`%s' `%s' ̵ ϴ" + +#, fuzzy +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "`%s' `%s' ̵ ϴ" + +#, fuzzy +#~ msgid "error reading \"%s\"" +#~ msgstr "%s() д " + +#, fuzzy +#~ msgid "error writing \"%s\"" +#~ msgstr "%s " + +#, fuzzy +#~ msgid "error after reading \"%s\"" +#~ msgstr "%s() д " + +#, fuzzy +#~ msgid "fdopen() failed" +#~ msgstr " " + +#, fuzzy +#~ msgid "%s subprocess failed" +#~ msgstr "%s: " + +#~ msgid "regular empty file" +#~ msgstr "Ϲ " + +#~ msgid "regular file" +#~ msgstr "Ϲ " + +#~ msgid "directory" +#~ msgstr "丮" + +#~ msgid "block special file" +#~ msgstr " Ư " + +#~ msgid "character special file" +#~ msgstr " Ư " + +#~ msgid "fifo" +#~ msgstr "FIFO" + +#~ msgid "symbolic link" +#~ msgstr "ɺ ũ" + +#~ msgid "socket" +#~ msgstr "" + +#~ msgid "message queue" +#~ msgstr " ť" + +#~ msgid "semaphore" +#~ msgstr "" + +#~ msgid "shared memory object" +#~ msgstr " Ʈ" + +#, fuzzy +#~ msgid "typed memory object" +#~ msgstr " Ʈ" + +#~ msgid "weird file" +#~ msgstr " " + +#, fuzzy +#~ msgid "Address family for hostname not supported" +#~ msgstr "fifo ʽϴ" + +#, fuzzy +#~ msgid "ai_family not supported" +#~ msgstr "fifo ʽϴ" + +#, fuzzy +#~ msgid "ai_socktype not supported" +#~ msgstr "fifo ʽϴ" + +#, fuzzy +#~ msgid "System error" +#~ msgstr " " + +#, fuzzy +#~ msgid "Unknown error" +#~ msgstr " ý " + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: ߸ ɼ -- %c\n" + +#~ msgid "block size" +#~ msgstr " ũ" + +#~ msgid "%s exists but is not a directory" +#~ msgstr "%s() 丮 ƴմϴ" + +#~ msgid "cannot change owner and/or group of %s" +#~ msgstr "%s /Ȥ ٲ ϴ" + +#~ msgid "cannot create directory %s" +#~ msgstr "%s 丮 ϴ" + +#~ msgid "cannot chdir to directory %s" +#~ msgstr "%s 丮 chdir ϴ" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "%s 㰡 ٲ ϴ" + +#~ msgid "memory exhausted" +#~ msgstr " ٴڳ" + +#, fuzzy +#~ msgid "unable to record current working directory" +#~ msgstr "%s 丮 ϴ" + +#, fuzzy +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "%s 㰡 ٲ ϴ" + +#, fuzzy +#~ msgid "cannot create pipe" +#~ msgstr "%s 丮 ϴ" + +#~ msgid "`" +#~ msgstr "`" + +#~ msgid "'" +#~ msgstr "'" + +#, fuzzy +#~ msgid "Invalid regular expression" +#~ msgstr "%s: Խ: %s" + +#, fuzzy +#~ msgid "Invalid character class name" +#~ msgstr " Ŭ `%s'" + +#, fuzzy +#~ msgid "Memory exhausted" +#~ msgstr " ٴڳ" + +#, fuzzy +#~ msgid "Invalid preceding regular expression" +#~ msgstr "%s: Խ: %s" + +#, fuzzy +#~ msgid "Premature end of regular expression" +#~ msgstr "Խ Ž " + +#, fuzzy +#~ msgid "Regular expression too big" +#~ msgstr "%s: Խ: %s" + +#, fuzzy +#~ msgid "No previous regular expression" +#~ msgstr "Խ Ž " + +#~ msgid "^[yY]" +#~ msgstr "^[yY]" + +#~ msgid "^[nN]" +#~ msgstr "^[nN]" + +#~ msgid "iconv function not usable" +#~ msgstr "iconv Լ ϴ" + +# not usable not available ̴? +#~ msgid "iconv function not available" +#~ msgstr "iconv Լ ϴ" + +#~ msgid "character out of range" +#~ msgstr " " + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "U+%04X() Į ڼ ȯ ϴ" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "U+%04X() Į ڼ ȯ ϴ: %s" + +#~ msgid "invalid user" +#~ msgstr "߸ " + +#~ msgid "invalid group" +#~ msgstr "߸ " + +#~ msgid "cannot get the login group of a numeric UID" +#~ msgstr "UID α ˾ ϴ" + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "This is free software. You may redistribute copies of it under the terms " +#~ "of\n" +#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ " α ƮԴϴ. Ʈ Ǿ絵ڴ \n" +#~ "Ʈ ǥ GNU General Public License 2 (Ǵ \n" +#~ " Ƿ ؼ), α ϰų \n" +#~ " ֽϴ.\n" +#~ "\n" + +#~ msgid "Written by %s.\n" +#~ msgstr "%s() ϴ.\n" + +#, fuzzy +#~ msgid "Written by %s and %s.\n" +#~ msgstr "%s() ϴ.\n" + +#, fuzzy +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "%s() ϴ.\n" + +#, fuzzy +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "%s() ϴ.\n" + +#, fuzzy +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "%s() ϴ.\n" + +#~ msgid "string comparison failed" +#~ msgstr "ڿ ߽ϴ" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr " LC_ALL='C'Ͻʽÿ." + +#~ msgid "The strings compared were %s and %s." +#~ msgstr " ڿ %s() %sԴϴ." diff --git a/gnulib/po/ms.po b/gnulib/po/ms.po new file mode 100644 index 0000000..c60ec71 --- /dev/null +++ b/gnulib/po/ms.po @@ -0,0 +1,409 @@ +# Terjemahan coreutils untuk Bahasa Melayu. +# Copyright (C) 2001 Free Software Foundation, Inc. +# Hasbullah Bin Pit <sebol@ikhlas.com>, 2003. +# +msgid "" +msgstr "" +"Project-Id-Version: coreutils 5.0.90\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2003-08-10 16:00+0800\n" +"Last-Translator: Hasbullah Bin Pit <sebol@ikhlas.com>\n" +"Language-Team: Malay <translation-team-ms@lists.sourceforge.net>\n" +"Language: ms\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "" + +#: gnulib/lib/argp-help.c:1247 +#, fuzzy +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Hujah mandatori kepada opsyen panjang andalah mandatori bagi opsyen pendek " +"juga.\n" + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr "" + +#: gnulib/lib/argp-help.c:1656 +#, fuzzy +msgid " [OPTION...]" +msgstr "Pengunaan: %s [OPSYEN]...\n" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Cuba `%s --help' untuk maklumat lanjut .\n" + +#: gnulib/lib/argp-help.c:1711 +#, fuzzy, c-format +msgid "Report bugs to %s.\n" +msgstr "" +"\n" +"Lapor pepijat ke <%s>.\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "Ralat sistem yang tidak diketahui" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "NAMA" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "" + +#: gnulib/lib/argp-parse.c:142 +#, fuzzy +msgid "print program version" +msgstr "ralat membaca" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "" + +#: gnulib/lib/argp-parse.c:612 +#, fuzzy, c-format +msgid "%s: Too many arguments\n" +msgstr "terlalu banyak hujah" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: opsyen `%s' adalah ambiguous\n" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: opsyen `--%s' tidak mengizinkan hujah\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: opsyen `%c%s' tidak mengizinkan hujah\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: opsyen `%s' memerlukan hujah\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: opensyen tidak dikenali `--%s'\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: opensyen tidak dikenali `%c%s'\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: opsyen tidak sah -- %c\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: opsyen memerlukan hujah -- %c\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: opsyen `-W %s' adalah ambiguous\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: opsyen `-W %s' tidak mengizinkan hujan\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: opsyen `%s' memerlukan hujah\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "hujah tidak sah %s bagi %s" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "hujah ambiguous %s bagi %s" + +#~ msgid "Valid arguments are:" +#~ msgstr "Hujah sah adalah:" + +#~ msgid "write error" +#~ msgstr "ralat menulis" + +#, fuzzy +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "tak dapat buka %s untuk dibaca" + +#, fuzzy +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "tak dapat buka %s untuk dibaca" + +#, fuzzy +#~ msgid "error reading \"%s\"" +#~ msgstr "membaca %s" + +#, fuzzy +#~ msgid "error writing \"%s\"" +#~ msgstr "menulis %s" + +#, fuzzy +#~ msgid "error after reading \"%s\"" +#~ msgstr "membaca %s" + +#, fuzzy +#~ msgid "fdopen() failed" +#~ msgstr "pembukaan gagal" + +#, fuzzy +#~ msgid "%s subprocess failed" +#~ msgstr "fail istimewa blok" + +#~ msgid "regular empty file" +#~ msgstr "fail kosong biasa" + +#~ msgid "regular file" +#~ msgstr "fail biasa" + +#~ msgid "directory" +#~ msgstr "direktori" + +#~ msgid "block special file" +#~ msgstr "fail istimewa blok" + +#~ msgid "character special file" +#~ msgstr "fail istimewa aksara" + +#~ msgid "fifo" +#~ msgstr "fifo" + +#~ msgid "symbolic link" +#~ msgstr "pautan simbolik" + +#~ msgid "socket" +#~ msgstr "soket" + +#~ msgid "message queue" +#~ msgstr "giliran mesej" + +#~ msgid "shared memory object" +#~ msgstr "objek memori terkongsi" + +#, fuzzy +#~ msgid "typed memory object" +#~ msgstr "objek memori terkongsi" + +#~ msgid "weird file" +#~ msgstr "fail pelik" + +#, fuzzy +#~ msgid "Address family for hostname not supported" +#~ msgstr "fail fifo tidak disokong" + +#, fuzzy +#~ msgid "ai_family not supported" +#~ msgstr "fail fifo tidak disokong" + +#, fuzzy +#~ msgid "ai_socktype not supported" +#~ msgstr "fail fifo tidak disokong" + +#, fuzzy +#~ msgid "System error" +#~ msgstr "ralat menulis" + +#, fuzzy +#~ msgid "Unknown error" +#~ msgstr "Ralat sistem yang tidak diketahui" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: opsyen tidak dibenarkan -- %c\n" + +#~ msgid "block size" +#~ msgstr "saiz blok" + +#~ msgid "%s exists but is not a directory" +#~ msgstr "%s wujud tapi ianya bukan direktori" + +#~ msgid "cannot change owner and/or group of %s" +#~ msgstr "tak dapat menukar hakmilik dan/atau kumpulan %s" + +#~ msgid "cannot create directory %s" +#~ msgstr "tak dapat mencipta direktori %s" + +#~ msgid "cannot chdir to directory %s" +#~ msgstr "tak dapat chdir ke direktori %s" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "tak dapat menukar keizinan %s" + +#~ msgid "memory exhausted" +#~ msgstr "memori keletihan" + +#, fuzzy +#~ msgid "unable to record current working directory" +#~ msgstr "gagal untuk kembali ke direktori kerja pemulaan" + +#~ msgid "failed to return to initial working directory" +#~ msgstr "gagal untuk kembali ke direktori kerja pemulaan" + +#, fuzzy +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "gagal mengekalkan keizinan bagi %s" + +#, fuzzy +#~ msgid "cannot create pipe" +#~ msgstr "tak boleh mencipta pautan %s" + +#~ msgid "`" +#~ msgstr "`" + +#~ msgid "'" +#~ msgstr "`" + +#, fuzzy +#~ msgid "Invalid regular expression" +#~ msgstr "%s: ungkapan biasa (regexp) tidak sah: %s" + +#, fuzzy +#~ msgid "Invalid character class name" +#~ msgstr "aksara tidak sah pada %s pada rentetan mod %s" + +#, fuzzy +#~ msgid "Memory exhausted" +#~ msgstr "memori keletihan" + +#, fuzzy +#~ msgid "Invalid preceding regular expression" +#~ msgstr "%s: ungkapan biasa (regexp) tidak sah: %s" + +#, fuzzy +#~ msgid "Premature end of regular expression" +#~ msgstr "ralat pada carian ungkapan biasa (regexp)" + +#, fuzzy +#~ msgid "Regular expression too big" +#~ msgstr "%s: ungkapan biasa (regexp) tidak sah: %s" + +#, fuzzy +#~ msgid "No previous regular expression" +#~ msgstr "ralat pada carian ungkapan biasa (regexp)" + +#~ msgid "^[yY]" +#~ msgstr "^[yY]" + +#~ msgid "^[nN]" +#~ msgstr "^[tT]" + +#~ msgid "iconv function not usable" +#~ msgstr "fungsi iconv tak boleh digunakan" + +#~ msgid "iconv function not available" +#~ msgstr "fungsi iconv tidak ada" + +#~ msgid "character out of range" +#~ msgstr "aksara di luar julat" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "tak dapat menukar U+%04X ke set aksara lokal" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "tak dapat menukar U+%04X ke set aksara lokal: %s" + +#~ msgid "invalid user" +#~ msgstr "pengguna tidak sah" + +#~ msgid "invalid group" +#~ msgstr "kumpulan tidak sah" + +#~ msgid "cannot get the login group of a numeric UID" +#~ msgstr "tak boleh mendapatkan kumpulan logmasuk untuk UID numerik" + +#~ msgid "Written by %s.\n" +#~ msgstr "Ditulis oleh %s.\n" + +#, fuzzy +#~ msgid "Written by %s and %s.\n" +#~ msgstr "Ditulis oleh %s.\n" + +#, fuzzy +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "Ditulis oleh %s.\n" + +#, fuzzy +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "Ditulis oleh %s.\n" + +#, fuzzy +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "Ditulis oleh %s.\n" + +#~ msgid "string comparison failed" +#~ msgstr "perbandingan rentetan gagal" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "Tetapkan LC_ALL='C' untuk mengatasi masalah." + +#~ msgid "The strings compared were %s and %s." +#~ msgstr "Rentetan dibandingkan adalah %s dan %s." diff --git a/gnulib/po/nb.po b/gnulib/po/nb.po new file mode 100644 index 0000000..75f4347 --- /dev/null +++ b/gnulib/po/nb.po @@ -0,0 +1,409 @@ +# Norwegian messages for GNU textutils (bokml dialect) +# Copyright (C) 1996 Free Software Foundation, Inc. +# Eivind Tagseth <eivindt@multinet.no>, 1996, 1997, 1999. +# +msgid "" +msgstr "" +"Project-Id-Version: GNU textutils 2.0.20\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2002-01-27 21:35+0100\n" +"Last-Translator: Eivind Tagseth <eivindt@multinet.no>\n" +"Language-Team: Norwegian <i18n-nb@lister.ping.uio.no>\n" +"Language: nb\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "" + +#: gnulib/lib/argp-help.c:1247 +#, fuzzy +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Obligatoriske argmenter til lange flagg er obligatoriske ogs for korte.\n" + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr "" + +#: gnulib/lib/argp-help.c:1656 +#, fuzzy +msgid " [OPTION...]" +msgstr "Bruk: %s [FLAGG] [FIL]...\n" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Prv med %s --help for mer informasjon.\n" + +#: gnulib/lib/argp-help.c:1711 +#, fuzzy, c-format +msgid "Report bugs to %s.\n" +msgstr "" +"\n" +"Rapportr feil til <bug-textutils@gnu.org>." + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "Ukjent systemfeil" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "" + +#: gnulib/lib/argp-parse.c:142 +#, fuzzy +msgid "print program version" +msgstr "lesefeil" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "" + +#: gnulib/lib/argp-parse.c:612 +#, fuzzy, c-format +msgid "%s: Too many arguments\n" +msgstr "for mange argumenter" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: flagget %s er flertydig\n" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: flagget --%s trenger et argument\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: flagget %c%s trenger et argument\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: flagget %s trenger et argument\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: ukjent flagg --%s\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: ukjent flagg %c%s\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: ukjent flagg -- %c\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: flagget trenger et argument -- %c\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: flagget -W %s er flertydig\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: flagget -W %s tillater ikke et argument\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: flagget %s trenger et argument\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "ugyldig argument %s for %s" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "flertydig argument %s for %s" + +#~ msgid "Valid arguments are:" +#~ msgstr "Gyldige argument er:" + +#, fuzzy +#~ msgid "program error" +#~ msgstr "lesefeil" + +#~ msgid "write error" +#~ msgstr "feil ved skriving" + +#, fuzzy +#~ msgid "error reading \"%s\"" +#~ msgstr "feil ved lesing av %s" + +#, fuzzy +#~ msgid "error writing \"%s\"" +#~ msgstr "feil ved skriving til %s" + +#, fuzzy +#~ msgid "error after reading \"%s\"" +#~ msgstr "feil ved lesing av %s" + +#, fuzzy +#~ msgid "fdopen() failed" +#~ msgstr "pning av fil feilet" + +#, fuzzy +#~ msgid "%s subprocess failed" +#~ msgstr "%s: ugyldig mnster" + +#, fuzzy +#~ msgid "regular empty file" +#~ msgstr "feil ved lesing" + +#, fuzzy +#~ msgid "regular file" +#~ msgstr "feil ved lesing" + +#, fuzzy +#~ msgid "directory" +#~ msgstr "%s eksisterer men er ikke en katalog" + +#, fuzzy +#~ msgid "block special file" +#~ msgstr "blokkstrrelse" + +#, fuzzy +#~ msgid "character special file" +#~ msgstr "tegn-posisjon er null" + +#, fuzzy +#~ msgid "symbolic link" +#~ msgstr "kan ikke utfre ioctl p %s" + +#, fuzzy +#~ msgid "weird file" +#~ msgstr "feil ved lesing" + +#, fuzzy +#~ msgid "ai_family not supported" +#~ msgstr "blokkstrrelse" + +#, fuzzy +#~ msgid "ai_socktype not supported" +#~ msgstr "blokkstrrelse" + +#, fuzzy +#~ msgid "System error" +#~ msgstr "feil ved skriving" + +#, fuzzy +#~ msgid "Unknown error" +#~ msgstr "Ukjent systemfeil" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: ukjent flagg -- %c\n" + +#~ msgid "block size" +#~ msgstr "blokkstrrelse" + +#~ msgid "%s exists but is not a directory" +#~ msgstr "%s eksisterer men er ikke en katalog" + +#~ msgid "cannot change owner and/or group of %s" +#~ msgstr "kan ikke endre eier og/eller gruppe for %s" + +#~ msgid "cannot create directory %s" +#~ msgstr "kan ikke opprette katalog %s" + +#, fuzzy +#~ msgid "cannot chdir to directory %s" +#~ msgstr "kan ikke skifte til katalog, %s" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "kan ikke endre rettigheter til %s" + +#~ msgid "memory exhausted" +#~ msgstr "virtuelt minne oppbrukt" + +#, fuzzy +#~ msgid "unable to record current working directory" +#~ msgstr "kan ikke opprette katalog %s" + +#, fuzzy +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "kan ikke endre rettigheter til %s" + +#, fuzzy +#~ msgid "cannot create pipe" +#~ msgstr "kan ikke opprette katalog %s" + +#~ msgid "`" +#~ msgstr "" + +#~ msgid "'" +#~ msgstr "" + +#, fuzzy +#~ msgid "Invalid regular expression" +#~ msgstr "%s: ugyldig regulrt uttrykk: %s" + +#, fuzzy +#~ msgid "Invalid character class name" +#~ msgstr "ugyldig tegn-klasse %s" + +#, fuzzy +#~ msgid "Memory exhausted" +#~ msgstr "virtuelt minne oppbrukt" + +#, fuzzy +#~ msgid "Invalid preceding regular expression" +#~ msgstr "%s: ugyldig regulrt uttrykk: %s" + +#, fuzzy +#~ msgid "Premature end of regular expression" +#~ msgstr "feil i sk med regulrt uttrykk" + +#, fuzzy +#~ msgid "Regular expression too big" +#~ msgstr "%s: ugyldig regulrt uttrykk: %s" + +#, fuzzy +#~ msgid "No previous regular expression" +#~ msgstr "feil i sk med regulrt uttrykk" + +#, fuzzy +#~ msgid "^[yY]" +#~ msgstr "^[jJ]" + +#~ msgid "^[nN]" +#~ msgstr "^[nN]" + +#, fuzzy +#~ msgid "iconv function not usable" +#~ msgstr "kan ikke skrive ut U+%04X: iconv-funksjonen er ikke brukbar" + +#, fuzzy +#~ msgid "iconv function not available" +#~ msgstr "kan ikke skrive ut U+%04X: iconv-funksjon er ikke tilgjengelig" + +#, fuzzy +#~ msgid "character out of range" +#~ msgstr "U+%04X: tegn utenfor tillatte verdier" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "kan ikke konvertere U+%04X til lokalt tegnsett" + +#, fuzzy +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "kan ikke konvertere U+%04X til lokalt tegnsett" + +#~ msgid "invalid user" +#~ msgstr "ugyldig bruker" + +#~ msgid "invalid group" +#~ msgstr "ugyldig gruppe" + +#~ msgid "cannot get the login group of a numeric UID" +#~ msgstr "kan ikke finne login-gruppen til en numerisk bruker-ID" + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "This is free software. You may redistribute copies of it under the terms " +#~ "of\n" +#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "Dette programmet er fri programvare. Du kan redistribueret det og/eller\n" +#~ "modifisere det under betingelsene gitt av GNU General Public License som\n" +#~ "distribuert av Free Software Foundation; enten versjon 2, eller (om du " +#~ "vil)\n" +#~ "en hvilken som helst senere versjon.\n" + +#~ msgid "Written by %s.\n" +#~ msgstr "Skrevet av %s.\n" + +#, fuzzy +#~ msgid "Written by %s and %s.\n" +#~ msgstr "Skrevet av %s.\n" + +#, fuzzy +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "Skrevet av %s.\n" + +#, fuzzy +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "Skrevet av %s.\n" + +#, fuzzy +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "Skrevet av %s.\n" + +#~ msgid "string comparison failed" +#~ msgstr "strengsammenligning feilet" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "Sett LC_ALL='C' for omg problemet." + +#~ msgid "The strings compared were %s and %s." +#~ msgstr "Strengene som ble sammenlignet var %s og %s." diff --git a/gnulib/po/nl.po b/gnulib/po/nl.po new file mode 100644 index 0000000..d717e15 --- /dev/null +++ b/gnulib/po/nl.po @@ -0,0 +1,782 @@ +# Dutch translations for gnulib. +# Copyright (C) 2011 Free Software Foundation, Inc. +# This file is distributed under the same license as the gnulib package. +# +# Erick Branderhorst <branderh@debian.org>, 1996. +# Ivo Timmermans <ivo@o2w.nl>, 2000. +# Freek de Kruijf <f.de.kruijf@hetnet.nl>, 2004, 2005. +# Erwin Poeze <erwin.poeze@gmail.com>, 2009, 2010. +# Benno Schulenberg <benno@vertaalt.nl>, 2007, 2008, 2010, 2011. +msgid "" +msgstr "" +"Project-Id-Version: gnulib-3.0.0.6062.a6b16\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2011-08-22 20:37+0200\n" +"Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n" +"Language-Team: Dutch <vertaling@vrijschrift.org>\n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: waarde voor '%s' is kleiner of gelijk aan %s" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: Parameter in ARGP_HELP_FMT vereist een waarde" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: Parameter in ARGP_HELP_FMT moet positief zijn" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Onbekende parameter in ARGP_HELP_FMT" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Rommel in ARGP_HELP_FMT: %s" + +#: gnulib/lib/argp-help.c:1247 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Een argument dat verplicht of optioneel is voor een lange optie, is dat\n" +"ook voor de overeenkomstige korte optie." + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "Gebruik: " + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr " of: " + +#: gnulib/lib/argp-help.c:1656 +msgid " [OPTION...]" +msgstr " [OPTIE...]" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Typ '%s --help' of '%s --usage' voor meer informatie.\n" + +#: gnulib/lib/argp-help.c:1711 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "" +"Rapporteer gebreken in het programma aan %s;\n" +"meld fouten in de vertaling aan <vertaling@vrijschrift.org>.\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "Onbekende systeemfout" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "deze hulptekst tonen" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "een korte gebruikssamenvatting tonen" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "NAAM" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "de programmanaam instellen" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "SECONDEN" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "dit aantal seconden pauzeren (standaard 3600)" + +#: gnulib/lib/argp-parse.c:142 +msgid "print program version" +msgstr "programmaversie tonen" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "**Interne programmafout**: geen versie bekend!?" + +#: gnulib/lib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Te veel argumenten\n" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "**Interne programmafout**: optie had herkend moeten worden!?" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: optie '%s' is niet eenduidig; mogelijkheden zijn:" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: optie '--%s' staat geen argument toe\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: optie '%c%s' staat geen argument toe\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: optie '--%s' vereist een argument\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: onbekende optie '--%s'\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: onbekende optie '%c%s'\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: ongeldige optie -- '%c'\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: optie vereist een argument -- '%c'\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: optie '-W %s' is niet eenduidig\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: optie '-W %s' staat geen argument toe\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: optie '-W %s' vereist een argument\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "ongeldig argument %s van %s" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "argument %s van %s is niet eenduidig" + +#~ msgid "Valid arguments are:" +#~ msgstr "Geldige argumenten zijn:" + +#~ msgid "program error" +#~ msgstr "programmafout" + +#~ msgid "stack overflow" +#~ msgstr "stack-overloop" + +#~ msgid "cannot find a temporary directory, try setting $TMPDIR" +#~ msgstr "kan geen tijdelijke map vinden; zet $TMPDIR" + +#~ msgid "cannot create a temporary directory using template \"%s\"" +#~ msgstr "kan met sjabloon '%s' geen tijdelijke map aanmaken" + +#~ msgid "cannot remove temporary file %s" +#~ msgstr "kan tijdelijk bestand '%s' niet verwijderen" + +#~ msgid "cannot remove temporary directory %s" +#~ msgstr "kan tijdelijke map '%s' niet verwijderen" + +#~ msgid "error closing file" +#~ msgstr "fout bij sluiten van bestand" + +#~ msgid "write error" +#~ msgstr "schrijffout" + +#~ msgid "preserving permissions for %s" +#~ msgstr "toegangsrechten van '%s' worden behouden" + +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "fout bij openen van '%s' voor lezen" + +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "kan reservebestand '%s' niet openen voor schrijven" + +#~ msgid "error reading \"%s\"" +#~ msgstr "fout bij lezen van '%s'" + +#~ msgid "error writing \"%s\"" +#~ msgstr "fout bij schrijven van '%s'" + +#~ msgid "error after reading \"%s\"" +#~ msgstr "fout na lezen van '%s'" + +#~ msgid "fdopen() failed" +#~ msgstr "fdopen() is mislukt" + +#~ msgid "C# compiler not found, try installing pnet" +#~ msgstr "C#-compiler is niet gevonden; installeer 'pnet'" + +#~ msgid "C# virtual machine not found, try installing pnet" +#~ msgstr "virtuele C#-machine is niet gevonden; installeer 'pnet'" + +#~ msgid "%s subprocess failed" +#~ msgstr "subproces %s is mislukt" + +#~ msgid "regular empty file" +#~ msgstr "leeg normaal bestand" + +#~ msgid "regular file" +#~ msgstr "normaal bestand" + +#~ msgid "directory" +#~ msgstr "map" + +#~ msgid "block special file" +#~ msgstr "blok-apparaat" + +#~ msgid "character special file" +#~ msgstr "byte-apparaat" + +#~ msgid "fifo" +#~ msgstr "fifo" + +#~ msgid "symbolic link" +#~ msgstr "symbolische koppeling" + +#~ msgid "socket" +#~ msgstr "socket" + +#~ msgid "message queue" +#~ msgstr "berichtenwachtrij" + +#~ msgid "semaphore" +#~ msgstr "semafoor" + +#~ msgid "shared memory object" +#~ msgstr "gedeeld geheugenobject" + +#~ msgid "typed memory object" +#~ msgstr "zelfstandig geheugenobject" + +#~ msgid "weird file" +#~ msgstr "merkwaardig bestand" + +#~ msgid "Address family for hostname not supported" +#~ msgstr "Adresfamilie voor hostnaam wordt niet ondersteund" + +#~ msgid "Temporary failure in name resolution" +#~ msgstr "Tijdelijk probleem in naamsherleiding" + +#~ msgid "Bad value for ai_flags" +#~ msgstr "Ongeldige waarde voor 'ai_flags'" + +#~ msgid "Non-recoverable failure in name resolution" +#~ msgstr "Onherstelbaar probleem in naamsherleiding" + +#~ msgid "ai_family not supported" +#~ msgstr "'ai_family' wordt niet ondersteund" + +#~ msgid "Memory allocation failure" +#~ msgstr "Onvoldoende geheugen beschikbaar" + +#~ msgid "No address associated with hostname" +#~ msgstr "Aan hostnaam is geen adres verbonden" + +#~ msgid "Name or service not known" +#~ msgstr "Naam of dienst is niet bekend" + +#~ msgid "Servname not supported for ai_socktype" +#~ msgstr "Servicenaam wordt niet ondersteund voor 'ai_socktype'" + +#~ msgid "ai_socktype not supported" +#~ msgstr "'ai_socktype' wordt niet ondersteund" + +#~ msgid "System error" +#~ msgstr "Systeemfout" + +#~ msgid "Argument buffer too small" +#~ msgstr "Argumentenbuffer is te klein" + +#~ msgid "Processing request in progress" +#~ msgstr "Bezig met verwerken van verzoek" + +#~ msgid "Request canceled" +#~ msgstr "Verzoek is geannuleerd" + +#~ msgid "Request not canceled" +#~ msgstr "Verzoek is niet geannuleerd" + +#~ msgid "All requests done" +#~ msgstr "Alle verzoeken zijn gedaan" + +#~ msgid "Interrupted by a signal" +#~ msgstr "Onderbroken door een signaal" + +#~ msgid "Parameter string not correctly encoded" +#~ msgstr "Parametertekst is niet juist gecodeerd" + +#~ msgid "Unknown error" +#~ msgstr "Onbekende fout" + +#~ msgid "invalid source_version argument to compile_java_class" +#~ msgstr "ongeldige waarde voor 'source_version' in compile_java_class()" + +#~ msgid "invalid target_version argument to compile_java_class" +#~ msgstr "ongeldige waarde voor 'target_version' in compile_java_class()" + +#~ msgid "failed to create \"%s\"" +#~ msgstr "aanmaken van '%s' is mislukt" + +#~ msgid "error while writing \"%s\" file" +#~ msgstr "fout bij schrijven van bestand '%s'" + +#~ msgid "Java compiler not found, try installing gcj or set $JAVAC" +#~ msgstr "Java-compiler is niet gevonden; installeer 'gcj' of zet $JAVAC" + +#~ msgid "Java virtual machine not found, try installing gij or set $JAVA" +#~ msgstr "" +#~ "Virtuele Java-machine is niet gevonden; installeer 'gcj' of zet $JAVA" + +#~ msgid "%s subprocess I/O error" +#~ msgstr "In-/uitvoerfout in subproces %s" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "kan de toegangsrechten van %s niet veranderen" + +#~ msgid "cannot create directory %s" +#~ msgstr "kan map %s niet aanmaken" + +#~ msgid "memory exhausted" +#~ msgstr "onvoldoende geheugen beschikbaar" + +#~ msgid "unable to record current working directory" +#~ msgstr "kan de huidige werkmap niet vastleggen" + +#~ msgid "failed to return to initial working directory" +#~ msgstr "kan niet terugkeren naar de oorspronkelijke werkmap" + +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "Openen van /dev/zero voor lezen is mislukt" + +#~ msgid "creation of reading thread failed" +#~ msgstr "Het aanmaken van een lees-thread is mislukt" + +#~ msgid "cannot set up nonblocking I/O to %s subprocess" +#~ msgstr "kan geen niet-blokkerende in-/uitvoer instellen naar subproces %s" + +#~ msgid "communication with %s subprocess failed" +#~ msgstr "communicatie met subproces %s is mislukt" + +#~ msgid "write to %s subprocess failed" +#~ msgstr "schrijven naar subproces %s is mislukt" + +#~ msgid "read from %s subprocess failed" +#~ msgstr "lezen uit subproces %s is mislukt" + +#~ msgid "subprocess %s terminated with exit code %d" +#~ msgstr "subproces %s is geëindigd met afsluitwaarde %d" + +#~ msgid "creation of threads failed" +#~ msgstr "aanmaken van threads is mislukt" + +#~ msgid "%s subprocess terminated with exit code %d" +#~ msgstr "subproces %s is geëindigd met afsluitwaarde %d" + +#~ msgid "Franc,ois Pinard" +#~ msgstr "François Pinard" + +#~ msgid "`" +#~ msgstr "‘" + +#~ msgid "'" +#~ msgstr "’" + +#~ msgid "Success" +#~ msgstr "Gelukt" + +#~ msgid "No match" +#~ msgstr "Geen overeenkomsten" + +#~ msgid "Invalid regular expression" +#~ msgstr "Ongeldige reguliere expressie" + +#~ msgid "Invalid collation character" +#~ msgstr "Ongeldig samengesteld teken" + +#~ msgid "Invalid character class name" +#~ msgstr "Ongeldige tekenklassenaam" + +#~ msgid "Trailing backslash" +#~ msgstr "Backslash aan het eind" + +#~ msgid "Invalid back reference" +#~ msgstr "Ongeldige terugverwijzing" + +#~ msgid "Unmatched [ or [^" +#~ msgstr "Ongepaarde [ of [^" + +#~ msgid "Unmatched ( or \\(" +#~ msgstr "Ongepaarde ( of \\(" + +#~ msgid "Unmatched \\{" +#~ msgstr "Ongepaarde \\{" + +#~ msgid "Invalid content of \\{\\}" +#~ msgstr "Ongeldige inhoud van \\{\\}" + +#~ msgid "Invalid range end" +#~ msgstr "Ongeldig bereikeinde" + +#~ msgid "Memory exhausted" +#~ msgstr "Onvoldoende geheugen beschikbaar" + +#~ msgid "Invalid preceding regular expression" +#~ msgstr "Ongeldige voorafgaande reguliere expressie" + +#~ msgid "Premature end of regular expression" +#~ msgstr "Voortijdig einde van reguliere expressie" + +#~ msgid "Regular expression too big" +#~ msgstr "Reguliere expressie is te groot" + +#~ msgid "Unmatched ) or \\)" +#~ msgstr "Ongepaarde ) of \\)" + +#~ msgid "No previous regular expression" +#~ msgstr "Geen eerdere reguliere expressie" + +#~ msgid "^[yY]" +#~ msgstr "^[jJyY]" + +#~ msgid "^[nN]" +#~ msgstr "^[nN]" + +#~ msgid "setting permissions for %s" +#~ msgstr "toegangsrechten van %s worden ingesteld" + +# Vroeger ging dit over het afsluiten van een modemverbinding, +# tegenwoordig over het afsluiten van een pseudoterminal. +#~ msgid "Hangup" +#~ msgstr "Opgehangen" + +#~ msgid "Interrupt" +#~ msgstr "Onderbroken" + +# Verleden tijd, "Afgesloten", net als de andere actiesignaalnamen. +#~ msgid "Quit" +#~ msgstr "Afgesloten" + +#~ msgid "Illegal instruction" +#~ msgstr "Ongeldige instructie" + +#~ msgid "Trace/breakpoint trap" +#~ msgstr "Traceer/breekpunt-instructie" + +#~ msgid "Aborted" +#~ msgstr "Afgebroken" + +#~ msgid "Floating point exception" +#~ msgstr "Drijvendekomma-berekeningsfout" + +#~ msgid "Killed" +#~ msgstr "Geëlimineerd" + +#~ msgid "Bus error" +#~ msgstr "Busfout" + +#~ msgid "Segmentation fault" +#~ msgstr "Segmentatiefout" + +#~ msgid "Broken pipe" +#~ msgstr "Gebroken pijp" + +#~ msgid "Alarm clock" +#~ msgstr "Wekker" + +#~ msgid "Terminated" +#~ msgstr "Beëindigd" + +#~ msgid "Urgent I/O condition" +#~ msgstr "Urgente in-/uitvoertoestand" + +#~ msgid "Stopped (signal)" +#~ msgstr "Gepauzeerd (signaal)" + +#~ msgid "Stopped" +#~ msgstr "Gepauzeerd" + +#~ msgid "Continued" +#~ msgstr "Doorgegaan" + +#~ msgid "Child exited" +#~ msgstr "Dochter is afgesloten" + +#~ msgid "Stopped (tty input)" +#~ msgstr "Gepauzeerd (terminalinvoer)" + +#~ msgid "Stopped (tty output)" +#~ msgstr "Gepauzeerd (terminaluitvoer)" + +#~ msgid "I/O possible" +#~ msgstr "In-/uitvoer is mogelijk" + +#~ msgid "CPU time limit exceeded" +#~ msgstr "Limiet op processortijd is overschreden" + +#~ msgid "File size limit exceeded" +#~ msgstr "Limiet op bestandsgrootte is overschreden" + +#~ msgid "Virtual timer expired" +#~ msgstr "Virtuele tijdopnemer is verlopen" + +#~ msgid "Profiling timer expired" +#~ msgstr "Tijdopnemer voor analyse is verlopen" + +#~ msgid "Window changed" +#~ msgstr "Venster is veranderd" + +#~ msgid "User defined signal 1" +#~ msgstr "Gebruikergedefinieerd signaal 1" + +#~ msgid "User defined signal 2" +#~ msgstr "Gebruikergedefinieerd signaal 2" + +#~ msgid "EMT trap" +#~ msgstr "EMT-instructie" + +#~ msgid "Bad system call" +#~ msgstr "Onjuiste systeemaanroep" + +#~ msgid "Stack fault" +#~ msgstr "Stack-fout" + +#~ msgid "Information request" +#~ msgstr "Verzoek om informatie" + +#~ msgid "Power failure" +#~ msgstr "Stroomstoring" + +#~ msgid "Resource lost" +#~ msgstr "Hulpbron verloren" + +#~ msgid "error writing to a closed pipe or socket" +#~ msgstr "fouten bij het schrijven naar een afgesloten 'pipe' of 'socket'" + +#~ msgid "cannot create pipe" +#~ msgstr "kan geen pijp aanmaken" + +#~ msgid "Real-time signal %d" +#~ msgstr "Realtime-signaal %d" + +#~ msgid "Unknown signal %d" +#~ msgstr "Onbekend signaal %d" + +#~ msgid "iconv function not usable" +#~ msgstr "de functie iconv() is onbruikbaar" + +#~ msgid "iconv function not available" +#~ msgstr "de functie iconv() is niet beschikbaar" + +#~ msgid "character out of range" +#~ msgstr "teken ligt buiten het toegestane bereik" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "kan U+%04X niet converteren naar de lokale tekenset" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "kan U+%04X niet converteren naar de lokale tekenset: %s" + +#~ msgid "invalid user" +#~ msgstr "ongeldige gebruiker" + +#~ msgid "invalid group" +#~ msgstr "ongeldige groep" + +#~ msgid "invalid spec" +#~ msgstr "ongeldige aanduiding" + +#~ msgid "unable to display error message" +#~ msgstr "kan foutmelding niet tonen" + +#~ msgid "Packaged by %s (%s)\n" +#~ msgstr "In pakketvorm gebracht door %s (%s)\n" + +#~ msgid "Packaged by %s\n" +#~ msgstr "In pakketvorm gebracht door %s\n" + +#~ msgid "(C)" +#~ msgstr "©" + +#~ msgid "" +#~ "\n" +#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +#~ "html>.\n" +#~ "This is free software: you are free to change and redistribute it.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "Dit is vrije software: u mag het vrijelijk wijzigen en verder " +#~ "verspreiden.\n" +#~ "De precieze licentie is GPL-3+: GNU General Public License versie 3 of " +#~ "later.\n" +#~ "Zie http://gnu.org/licenses/gpl.html voor de volledige (Engelse) tekst.\n" +#~ "Deze software kent GEEN GARANTIE, voor zover de wet dit toestaat.\n" +#~ "\n" + +#~ msgid "Written by %s.\n" +#~ msgstr "Geschreven door %s.\n" + +#~ msgid "Written by %s and %s.\n" +#~ msgstr "Geschreven door %s en %s.\n" + +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "Geschreven door %s, %s en %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Geschreven door %s, %s, %s\n" +#~ "en %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Geschreven door %s, %s, %s,\n" +#~ "%s en %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, and %s.\n" +#~ msgstr "" +#~ "Geschreven door %s, %s, %s,\n" +#~ "%s, %s en %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, and %s.\n" +#~ msgstr "" +#~ "Geschreven door %s, %s, %s,\n" +#~ "%s, %s, %s en %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Geschreven door %s, %s, %s,\n" +#~ "%s, %s, %s, %s\n" +#~ "en %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Geschreven door %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s en %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, and others.\n" +#~ msgstr "" +#~ "Geschreven door %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s en anderen.\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to: %s\n" +#~ msgstr "" +#~ "\n" +#~ "Rapporteer gebreken in het programma aan <%s>;\n" +#~ "meld fouten in de vertaling aan <vertaling@vrijschrift.org>.\n" + +#~ msgid "Report %s bugs to: %s\n" +#~ msgstr "" +#~ "Rapporteer gebreken in het programma '%s' aan <%s>;\n" +#~ "meld fouten in de vertaling aan <vertaling@vrijschrift.org>.\n" + +#~ msgid "%s home page: <%s>\n" +#~ msgstr "Webpagina van %s: <%s>\n" + +#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +#~ msgstr "Webpagina van %s: <http://www.gnu.org/software/%s/>\n" + +#~ msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +#~ msgstr "" +#~ "Algemene hulp bij gebruik van GNU-software: <http://www.gnu.org/gethelp/" +#~ ">\n" + +#~ msgid "_open_osfhandle failed" +#~ msgstr "_open_osfhandle() is mislukt" + +#~ msgid "cannot restore fd %d: dup2 failed" +#~ msgstr "kan bestandsdescriptor %d niet herstellen: dup2() is mislukt" + +#~ msgid "%s subprocess" +#~ msgstr "subproces %s" + +#~ msgid "%s subprocess got fatal signal %d" +#~ msgstr "subproces %s ontving het fatale signaal %d" + +#~ msgid "stdin" +#~ msgstr "standaardinvoer" + +#~ msgid "stdout" +#~ msgstr "standaarduitvoer" + +#~ msgid "stderr" +#~ msgstr "standaardfoutuitvoer" + +#~ msgid "unknown stream" +#~ msgstr "onbekende gegevensstroom" + +#~ msgid "failed to reopen %s with mode %s" +#~ msgstr "opnieuw openen van '%s' met modus %s is mislukt" + +#~ msgid "string comparison failed" +#~ msgstr "vergelijking van tekenreeksen is mislukt" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "Zet LC_ALL='C' om het probleem te omzeilen." + +#~ msgid "The strings compared were %s and %s." +#~ msgstr "De te vergelijken tekenreeksen waren %s en %s." + +#~ msgid "cannot perform formatted output" +#~ msgstr "kan geen opgemaakte uitvoer aanmaken" + +#~ msgid "invalid %s%s argument `%s'" +#~ msgstr "ongeldig argument '%3$s' van %1$s%2$s" + +#~ msgid "invalid suffix in %s%s argument `%s'" +#~ msgstr "ongeldig achtervoegsel in argument '%3$s' van %1$s%2$s" + +#~ msgid "%s%s argument `%s' too large" +#~ msgstr "argument '%3$s' van %1$s%2$s is te groot" diff --git a/gnulib/po/pl.po b/gnulib/po/pl.po new file mode 100644 index 0000000..9e19922 --- /dev/null +++ b/gnulib/po/pl.po @@ -0,0 +1,780 @@ +# Polish messages for gnulib +# Copyright (C) 2005, 2007, 2009, 2010, 2011 Free Software Foundation, Inc. +# This file is distributed under the same license as the gnulib package. +# +# Jakub Bogusz <qboosh@pld-linux.org>, 2007-2011. +# based on translation for GNU Mailutils by: +# Sergey Poznyakoff <gray@gnu.org>, 2003,2004,2005. +# corrections: Wojciech Polak <polak@gnu.org>, 2003 +# +msgid "" +msgstr "" +"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2011-08-22 12:41+0200\n" +"Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n" +"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2;\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: wartość %s jest mniejsza lub równa %s" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: Parametr ARGP_HELP_FMT wymaga podania wartości" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: Parametr ARGP_HELP_FMT musi być dodatni" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Nieznany parametr ARGP_HELP_FMT" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Błędne dane w ARGP_HELP_FMT: %s" + +#: gnulib/lib/argp-help.c:1247 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Argumenty obowiązkowe lub opcjonalne dla długich opcji są również " +"obowiązkowe lub opcjonalne dla odpowiednich krótkich opcji." + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "Składnia:" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr " lub: " + +#: gnulib/lib/argp-help.c:1656 +msgid " [OPTION...]" +msgstr " [OPCJA...]" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "" +"Polecenie `%s --help' lub `%s --usage' pozwoli uzyskać więcej informacji.\n" + +#: gnulib/lib/argp-help.c:1711 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Prosimy zgłaszać błędy na adres %s.\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "Nieznany błąd systemowy" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "wyświetlenie tego tekstu pomocy" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "wyświetlenie krótkiej informacji o składni polecenia" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "NAZWA" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "określenie nazwy programu" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "SEK" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "zatrzymanie na SEK sekund (domyślnie 3600)" + +#: gnulib/lib/argp-parse.c:142 +msgid "print program version" +msgstr "wyświetlenie wersji programu" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(BŁĄD PROGRAMU) Nieznana wersja!?" + +#: gnulib/lib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Za dużo argumentów\n" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(BŁĄD PROGRAMU) Opcja powinna zostać rozpoznana!?" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: opcja '%s' jest niejednoznaczna; możliwości:" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: opcja '--%s' nie może mieć argumentów\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: opcja '%c%s' nie może mieć argumentów\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: opcja '--%s' musi mieć argument\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: nieznana opcja '--%s'\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: nieznana opcja '%c%s'\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: błędna opcja -- '%c'\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: opcja musi mieć argument -- '%c'\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: opcja '-W %s' jest niejednoznaczna\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: opcja '-W %s' nie może mieć argumentów\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: opcja '-W %s' musi mieć argument\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "błędny argument %s opcji %s" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "niejednoznaczny argument %s opcji %s" + +#~ msgid "Valid arguments are:" +#~ msgstr "Prawidłowe argumenty to:" + +#~ msgid "program error" +#~ msgstr "błąd programu" + +#~ msgid "stack overflow" +#~ msgstr "przepełnienie stosu" + +#~ msgid "cannot find a temporary directory, try setting $TMPDIR" +#~ msgstr "" +#~ "nie można odnaleźć katalogu tymczasowego, można spróbować ustawić $TMPDIR" + +#~ msgid "cannot create a temporary directory using template \"%s\"" +#~ msgstr "nie można utworzyć katalogu typczasowego z użyciem szablonu \"%s\"" + +#~ msgid "cannot remove temporary file %s" +#~ msgstr "nie można usunąć pliku tymczasowego %s" + +#~ msgid "cannot remove temporary directory %s" +#~ msgstr "nie można usunąć katalogu tymczasowego %s" + +#~ msgid "error closing file" +#~ msgstr "błąd podczas zamykania pliku" + +#~ msgid "write error" +#~ msgstr "błąd zapisu" + +#~ msgid "preserving permissions for %s" +#~ msgstr "zachowywanie uprawnień do %s" + +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "błąd podczas otwierania \"%s\" do odczytu" + +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "nie można otworzyć pliku zapasowego \"%s\" do zapisu" + +#~ msgid "error reading \"%s\"" +#~ msgstr "błąd odczytu \"%s\"" + +#~ msgid "error writing \"%s\"" +#~ msgstr "błąd zapisu \"%s\"" + +#~ msgid "error after reading \"%s\"" +#~ msgstr "błąd po odczycie \"%s\"" + +#~ msgid "fdopen() failed" +#~ msgstr "fdopen() nie powiodło się" + +#~ msgid "C# compiler not found, try installing pnet" +#~ msgstr "Nie znaleziono kompilatora C#, proszę spróbować zainstalować pnet" + +#~ msgid "C# virtual machine not found, try installing pnet" +#~ msgstr "" +#~ "Nie znaleziono maszyny wirtualnej C#, proszę spróbować zainstalować pnet" + +#~ msgid "%s subprocess failed" +#~ msgstr "podproces %s zawiódł" + +#~ msgid "regular empty file" +#~ msgstr "pusty zwykły plik" + +#~ msgid "regular file" +#~ msgstr "zwykły plik" + +#~ msgid "directory" +#~ msgstr "katalog" + +#~ msgid "block special file" +#~ msgstr "blokowy plik specjalny" + +#~ msgid "character special file" +#~ msgstr "znakowy plik specjalny" + +#~ msgid "fifo" +#~ msgstr "potok" + +#~ msgid "symbolic link" +#~ msgstr "dowiązanie symboliczne" + +#~ msgid "socket" +#~ msgstr "gniazdo" + +#~ msgid "message queue" +#~ msgstr "kolejka komunikatów" + +#~ msgid "semaphore" +#~ msgstr "semafor" + +#~ msgid "shared memory object" +#~ msgstr "obiekt w pamięci współdzielonej" + +#~ msgid "typed memory object" +#~ msgstr "obiekt z typem w pamięci" + +#~ msgid "weird file" +#~ msgstr "dziwny plik" + +#~ msgid "Address family for hostname not supported" +#~ msgstr "Rodzina adresów dla podanej nazwy hosta nie jest obsługiwana" + +#~ msgid "Temporary failure in name resolution" +#~ msgstr "Tymczasowy błąd rozwiązywania nazw" + +#~ msgid "Bad value for ai_flags" +#~ msgstr "Błędna wartość ai_flags" + +#~ msgid "Non-recoverable failure in name resolution" +#~ msgstr "Nienaprawialny błąd w rozwiązywaniu nazw" + +#~ msgid "ai_family not supported" +#~ msgstr "ai_family zawiera nie obsługiwaną rodzinę protokołów" + +#~ msgid "Memory allocation failure" +#~ msgstr "Błąd przydzielania pamięci" + +#~ msgid "No address associated with hostname" +#~ msgstr "Brak adresu związanego z nazwą hosta" + +#~ msgid "Name or service not known" +#~ msgstr "Nieznana nazwa lub usługa" + +#~ msgid "Servname not supported for ai_socktype" +#~ msgstr "Usługa nie obsługiwana dla danego ai_socktype" + +#~ msgid "ai_socktype not supported" +#~ msgstr "ai_socktype zawiera nie obsługiwany typ gniazda" + +#~ msgid "System error" +#~ msgstr "Błąd systemowy" + +#~ msgid "Argument buffer too small" +#~ msgstr "Bufor argumentu zbyt mały" + +#~ msgid "Processing request in progress" +#~ msgstr "Przetwarzanie żądania jest w toku" + +#~ msgid "Request canceled" +#~ msgstr "Żądanie anulowane" + +#~ msgid "Request not canceled" +#~ msgstr "Żądanie nie anulowane" + +#~ msgid "All requests done" +#~ msgstr "Wszystkie żądania wykonane" + +#~ msgid "Interrupted by a signal" +#~ msgstr "Przerwane przez sygnał" + +#~ msgid "Parameter string not correctly encoded" +#~ msgstr "Łańcuch parametru niepoprawnie zakodowany" + +#~ msgid "Unknown error" +#~ msgstr "Nieznany błąd" + +#~ msgid "invalid source_version argument to compile_java_class" +#~ msgstr "błędny argument source_version dla compile_java_class" + +#~ msgid "invalid target_version argument to compile_java_class" +#~ msgstr "błędny argument target_version dla compile_java_class" + +#~ msgid "failed to create \"%s\"" +#~ msgstr "nie udało się utworzyć \"%s\"" + +#~ msgid "error while writing \"%s\" file" +#~ msgstr "błąd podczas zapisu pliku \"%s\"" + +#~ msgid "Java compiler not found, try installing gcj or set $JAVAC" +#~ msgstr "" +#~ "Nie znaleziono kompilatora Javy, proszę spróbować zainstalować gcj lub " +#~ "ustawić $JAVAC" + +#~ msgid "Java virtual machine not found, try installing gij or set $JAVA" +#~ msgstr "" +#~ "Nie znaleziono maszyny wirtualnej Javy, proszę spróbować zainstalować gij " +#~ "lub ustawić $JAVA" + +#~ msgid "%s subprocess I/O error" +#~ msgstr "błąd we/wy podprocesu %s" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "nie można zmienić uprawnień do %s" + +#~ msgid "cannot create directory %s" +#~ msgstr "nie można utworzyć katalogu %s" + +#~ msgid "memory exhausted" +#~ msgstr "pamięć wyczerpana" + +#~ msgid "unable to record current working directory" +#~ msgstr "nie udało się zapisać bieżącego katalogu roboczego" + +#~ msgid "failed to return to initial working directory" +#~ msgstr "nie udało się wrócić do początkowego katalogu roboczego" + +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "Nie udało się otworzyć /dev/zero do odczytu" + +#~ msgid "creation of reading thread failed" +#~ msgstr "tworzenie wątku czytającego nie powiodło sie" + +#~ msgid "cannot set up nonblocking I/O to %s subprocess" +#~ msgstr "nie można ustawić nieblokującego we/wy dla podprocesu %s" + +#~ msgid "communication with %s subprocess failed" +#~ msgstr "komunikacja z podprocesem %s nie powiodła się" + +#~ msgid "write to %s subprocess failed" +#~ msgstr "zapis do podprocesu %s nie powiódł się" + +#~ msgid "read from %s subprocess failed" +#~ msgstr "odczyt z podprocesu %s nie powiódł się" + +#~ msgid "subprocess %s terminated with exit code %d" +#~ msgstr "podproces %s zakończył się z kodem wyjścia %d" + +#~ msgid "creation of threads failed" +#~ msgstr "tworzenie wątków nie powiodło się" + +#~ msgid "%s subprocess terminated with exit code %d" +#~ msgstr "podproces %s zakończył się kodem wyjścia %d" + +#~ msgid "Franc,ois Pinard" +#~ msgstr "François Pinard" + +#~ msgid "`" +#~ msgstr "`" + +#~ msgid "'" +#~ msgstr "'" + +#~ msgid "Success" +#~ msgstr "Sukces" + +#~ msgid "No match" +#~ msgstr "Nic nie pasuje" + +#~ msgid "Invalid regular expression" +#~ msgstr "Błędne wyrażenie regularne" + +#~ msgid "Invalid collation character" +#~ msgstr "Błędny znak sortowany" + +#~ msgid "Invalid character class name" +#~ msgstr "Błędna nazwa klasy znaków" + +#~ msgid "Trailing backslash" +#~ msgstr "Kończący znak `\\'" + +#~ msgid "Invalid back reference" +#~ msgstr "Błędne odniesienie wstecz" + +#~ msgid "Unmatched [ or [^" +#~ msgstr "Niesparowane [ lub [^" + +#~ msgid "Unmatched ( or \\(" +#~ msgstr "Niesparowane ( lub \\(" + +#~ msgid "Unmatched \\{" +#~ msgstr "Niesparowane \\{" + +#~ msgid "Invalid content of \\{\\}" +#~ msgstr "Błędna zawartość \\{\\}" + +#~ msgid "Invalid range end" +#~ msgstr "Błędny koniec zakresu" + +#~ msgid "Memory exhausted" +#~ msgstr "Pamięć wyczerpana" + +#~ msgid "Invalid preceding regular expression" +#~ msgstr "Błędne poprzedzające wyrażenie regularne" + +#~ msgid "Premature end of regular expression" +#~ msgstr "Przedwczesny koniec wyrażenia regularnego" + +#~ msgid "Regular expression too big" +#~ msgstr "Wyrażenie regularne zbyt duże" + +#~ msgid "Unmatched ) or \\)" +#~ msgstr "Niesparowane ) lub \\)" + +#~ msgid "No previous regular expression" +#~ msgstr "Brak poprzedniego wyrażenia regularnego" + +#~ msgid "^[yY]" +#~ msgstr "^[yYtT]" + +#~ msgid "^[nN]" +#~ msgstr "^[nN]" + +#~ msgid "setting permissions for %s" +#~ msgstr "ustawianie uprawnień %s" + +#~ msgid "Hangup" +#~ msgstr "Rozłączenie" + +#~ msgid "Interrupt" +#~ msgstr "Przerwanie" + +#~ msgid "Quit" +#~ msgstr "Wyjście" + +#~ msgid "Illegal instruction" +#~ msgstr "Niedozwolona instrukcja" + +#~ msgid "Trace/breakpoint trap" +#~ msgstr "Pułapka debuggera/breakpoint" + +#~ msgid "Aborted" +#~ msgstr "Przerwano" + +#~ msgid "Floating point exception" +#~ msgstr "Błąd w obliczeniach zmiennoprzecinkowych" + +#~ msgid "Killed" +#~ msgstr "Unicestwiono" + +#~ msgid "Bus error" +#~ msgstr "Błąd szyny" + +#~ msgid "Segmentation fault" +#~ msgstr "Naruszenie ochrony pamięci" + +#~ msgid "Broken pipe" +#~ msgstr "Przerwany potok" + +#~ msgid "Alarm clock" +#~ msgstr "Budzik" + +#~ msgid "Terminated" +#~ msgstr "Zakończono" + +#~ msgid "Urgent I/O condition" +#~ msgstr "Nagły stan we/wy" + +#~ msgid "Stopped (signal)" +#~ msgstr "Zatrzymano (sygnał)" + +#~ msgid "Stopped" +#~ msgstr "Zatrzymano" + +#~ msgid "Continued" +#~ msgstr "Kontynuacja" + +#~ msgid "Child exited" +#~ msgstr "Zakończenie procesu potomnego" + +#~ msgid "Stopped (tty input)" +#~ msgstr "Zatrzymano (wejście z tty)" + +#~ msgid "Stopped (tty output)" +#~ msgstr "Zatrzymano (wyjście na tty)" + +#~ msgid "I/O possible" +#~ msgstr "Możliwa operacja we/wy" + +#~ msgid "CPU time limit exceeded" +#~ msgstr "Przekroczony limit czasu procesora" + +#~ msgid "File size limit exceeded" +#~ msgstr "Przekroczony limit rozmiaru pliku" + +#~ msgid "Virtual timer expired" +#~ msgstr "Upłynął czas stopera wirtualnego" + +#~ msgid "Profiling timer expired" +#~ msgstr "Upłynął czas stopera profilującego" + +#~ msgid "Window changed" +#~ msgstr "Okno zmienione" + +#~ msgid "User defined signal 1" +#~ msgstr "Sygnał użytkownika 1" + +#~ msgid "User defined signal 2" +#~ msgstr "Sygnał użytkownika 2" + +#~ msgid "EMT trap" +#~ msgstr "Pułapka EMT" + +#~ msgid "Bad system call" +#~ msgstr "Błędne wywołanie systemowe" + +#~ msgid "Stack fault" +#~ msgstr "Błąd stosu" + +#~ msgid "Information request" +#~ msgstr "Żądanie informacji" + +#~ msgid "Power failure" +#~ msgstr "Awaria zasilania" + +#~ msgid "Resource lost" +#~ msgstr "Utrata zasobów" + +#~ msgid "error writing to a closed pipe or socket" +#~ msgstr "błąd zapisu do zamkniętego potoku lub gniazda" + +#~ msgid "cannot create pipe" +#~ msgstr "nie można utworzyć potoku" + +#~ msgid "Real-time signal %d" +#~ msgstr "Sygnał czasu rzeczywistego %d" + +#~ msgid "Unknown signal %d" +#~ msgstr "Nieznany sygnał %d" + +#~ msgid "iconv function not usable" +#~ msgstr "nie można użyć funkcji iconv" + +#~ msgid "iconv function not available" +#~ msgstr "funkcja iconv nie jest dostępna" + +#~ msgid "character out of range" +#~ msgstr "znak spoza zakresu" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "nie można przekształcić U+%04X do lokalnego zestawu znaków" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "nie można przekształcić U+%04X do lokalnego zestawu znaków: %s" + +#~ msgid "invalid user" +#~ msgstr "błędny użytkownik" + +#~ msgid "invalid group" +#~ msgstr "błędna grupa" + +#~ msgid "invalid spec" +#~ msgstr "błędna specyfikacja" + +#~ msgid "unable to display error message" +#~ msgstr "nie można wyświetlić komunikatu błędu" + +#~ msgid "Packaged by %s (%s)\n" +#~ msgstr "Pakietujący: %s (%s)\n" + +#~ msgid "Packaged by %s\n" +#~ msgstr "Pakietujący: %s\n" + +#~ msgid "(C)" +#~ msgstr "(C)" + +#~ msgid "" +#~ "\n" +#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +#~ "html>.\n" +#~ "This is free software: you are free to change and redistribute it.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "Licencja GPLv3+: GNU GPL wersja 3 lub późniejsza:\n" +#~ "<http://gnu.org/licenses/gpl.html>\n" +#~ "To jest oprogramowanie wolnodostępne: można je modyfikować i " +#~ "rozpowszechniać.\n" +#~ "Nie ma ŻADNEJ GWARANCJI w zakresie dopuszczalnym przez prawo.\n" + +#~ msgid "Written by %s.\n" +#~ msgstr "Autor: %s.\n" + +#~ msgid "Written by %s and %s.\n" +#~ msgstr "Autorzy: %s i %s.\n" + +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "Autorzy: %s, %s i %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Autorzy: %s, %s, %s\n" +#~ "i %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Autorzy: %s, %s, %s,\n" +#~ "%s i %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, and %s.\n" +#~ msgstr "" +#~ "Autorzy: %s, %s, %s,\n" +#~ "%s, %s i %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, and %s.\n" +#~ msgstr "" +#~ "Autorzy: %s, %s, %s,\n" +#~ "%s, %s, %s i %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Autorzy: %s, %s, %s,\n" +#~ "%s, %s, %s, %s\n" +#~ "i %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Autorzy: %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s i %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, and others.\n" +#~ msgstr "" +#~ "Autorzy: %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s i inni.\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to: %s\n" +#~ msgstr "" +#~ "\n" +#~ "Prosimy zgłaszać błędy na adres <%s>.\n" +#~ "Błędy w tłumaczeniu prosimy zgłaszać na adres <translation-team-pl@lists." +#~ "sourceforge.net>.\n" + +#~ msgid "Report %s bugs to: %s\n" +#~ msgstr "Błędy pakietującego (%s) prosimy zgłaszać na adres <%s>.\n" + +#~ msgid "%s home page: <%s>\n" +#~ msgstr "Strona domowa pakietu %s: <%s>\n" + +#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +#~ msgstr "Strona domowa pakietu %s: <http://www.gnu.org/software/%s/>.\n" + +#~ msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +#~ msgstr "" +#~ "Ogólna pomoc przy używaniu oprogramowania GNU: <http://www.gnu.org/" +#~ "gethelp/>.\n" + +#~ msgid "_open_osfhandle failed" +#~ msgstr "_open_osfhandle nie powiodło się" + +#~ msgid "cannot restore fd %d: dup2 failed" +#~ msgstr "nie można odtworzyć fd %d: dup2 nie powiodło się" + +#~ msgid "%s subprocess" +#~ msgstr "podproces %s" + +#~ msgid "%s subprocess got fatal signal %d" +#~ msgstr "podproces %s dostał krytyczny sygnał %d" + +#~ msgid "stdin" +#~ msgstr "standardowego wejścia" + +#~ msgid "stdout" +#~ msgstr "standardowego wyjścia" + +#~ msgid "stderr" +#~ msgstr "standardowego wyjścia diagnostycznego" + +#~ msgid "unknown stream" +#~ msgstr "nieznanego strumienia" + +#~ msgid "failed to reopen %s with mode %s" +#~ msgstr "nie udało się ponownie otworzyć %s w trybie %s" + +#~ msgid "string comparison failed" +#~ msgstr "nie udało się porównanie łańcuchów znaków" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "Ustaw LC_ALL='C' żeby obejść problem" + +#~ msgid "The strings compared were %s and %s." +#~ msgstr "Porównywane łańcuchy znaków do %s i %s." + +#~ msgid "cannot perform formatted output" +#~ msgstr "nie można sformatować wyjścia" + +#~ msgid "invalid %s%s argument `%s'" +#~ msgstr "błędny argument %s%s opcji `%s'" + +#~ msgid "invalid suffix in %s%s argument `%s'" +#~ msgstr "błędny przyrostek argumentu %s%s opcji `%s'" + +#~ msgid "%s%s argument `%s' too large" +#~ msgstr "argument %s%s `%s' zbyt duży" diff --git a/gnulib/po/pt.po b/gnulib/po/pt.po new file mode 100644 index 0000000..5979426 --- /dev/null +++ b/gnulib/po/pt.po @@ -0,0 +1,352 @@ +# Portuguese translation of the "sh-utils" messages +# Copyright (C) 1996 Free Software Foundation, Inc. +# Antnio Joo Serras Rendas <arendas@mail.telepac.pt>, 1996 +# +msgid "" +msgstr "" +"Project-Id-Version: sh-utils 1.12i\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 1996-11-08 20:03+0100\n" +"Last-Translator: Antnio Joo Serras Rendas <arendas@mail.telepac.pt>\n" +"Language-Team: Portugus <pt@li.org>\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "" + +#: gnulib/lib/argp-help.c:1247 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr "" + +#: gnulib/lib/argp-help.c:1656 +#, fuzzy +msgid " [OPTION...]" +msgstr "Utilizao: %s [OPO]...\n" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Tente `%s --help' para mais informao.\n" + +#: gnulib/lib/argp-help.c:1711 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "" + +#: gnulib/lib/argp-help.c:1930 +#, fuzzy +msgid "Unknown system error" +msgstr "operador binrio desconhecido" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "" + +#: gnulib/lib/argp-parse.c:142 +#, fuzzy +msgid "print program version" +msgstr "erro de leitura" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "" + +#: gnulib/lib/argp-parse.c:612 +#, fuzzy, c-format +msgid "%s: Too many arguments\n" +msgstr "demasiados argumentos\n" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "demasiados argumentos\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "opo invlida `%s'" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "opo invlida `%s'" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "opo invlida `%s'" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "demasiados argumentos\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "demasiados argumentos\n" + +#, fuzzy +#~ msgid "invalid argument %s for %s" +#~ msgstr "argumento invlido `%s'" + +#, fuzzy +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "falta um argumento a `%s'" + +#, fuzzy +#~ msgid "Valid arguments are:" +#~ msgstr "argumento invlido `%s'" + +#, fuzzy +#~ msgid "program error" +#~ msgstr "erro de leitura" + +#~ msgid "write error" +#~ msgstr "erro na escrita" + +#, fuzzy +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "no consigo mover `%s' para `%s'" + +#, fuzzy +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "no consigo mover `%s' para `%s'" + +#, fuzzy +#~ msgid "error reading \"%s\"" +#~ msgstr "%s: apagar directoria `%s'? " + +#, fuzzy +#~ msgid "error writing \"%s\"" +#~ msgstr "%s: apagar directoria `%s'? " + +#, fuzzy +#~ msgid "error after reading \"%s\"" +#~ msgstr "%s: apagar directoria `%s'? " + +#, fuzzy +#~ msgid "fdopen() failed" +#~ msgstr "ficheiros especiais de tipo bloco no suportados" + +#, fuzzy +#~ msgid "%s subprocess failed" +#~ msgstr "opo invlida `%s'" + +#, fuzzy +#~ msgid "regular file" +#~ msgstr "`%s' no um ficheiro normal" + +#, fuzzy +#~ msgid "directory" +#~ msgstr "`%s' no uma directoria" + +#, fuzzy +#~ msgid "block special file" +#~ msgstr "ficheiros especiais de tipo bloco no suportados" + +#, fuzzy +#~ msgid "character special file" +#~ msgstr "ficheiros especiais de tipo caracter no suportados" + +#, fuzzy +#~ msgid "symbolic link" +#~ msgstr "no consigo ler ligao (link) simblica `%s'" + +#, fuzzy +#~ msgid "weird file" +#~ msgstr "`%s' no um ficheiro normal" + +#, fuzzy +#~ msgid "Address family for hostname not supported" +#~ msgstr "ficheiros \"fifo\" no suportados" + +#, fuzzy +#~ msgid "ai_family not supported" +#~ msgstr "ficheiros \"fifo\" no suportados" + +#, fuzzy +#~ msgid "ai_socktype not supported" +#~ msgstr "ficheiros \"fifo\" no suportados" + +#, fuzzy +#~ msgid "System error" +#~ msgstr "erro na escrita" + +#, fuzzy +#~ msgid "Unknown error" +#~ msgstr "operador binrio desconhecido" + +#, fuzzy +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "opo invlida `%s'" + +#, fuzzy +#~ msgid "block size" +#~ msgstr "tipo de ordenao" + +#, fuzzy +#~ msgid "%s exists but is not a directory" +#~ msgstr "`%s' no uma directoria" + +#, fuzzy +#~ msgid "cannot change owner and/or group of %s" +#~ msgstr "aviso: no consigo mudar para a directoria %s" + +#, fuzzy +#~ msgid "cannot create directory %s" +#~ msgstr "no consigo obter a directoria actual" + +#, fuzzy +#~ msgid "cannot chdir to directory %s" +#~ msgstr "aviso: no consigo mudar para a directoria %s" + +#, fuzzy +#~ msgid "cannot change permissions of %s" +#~ msgstr "aviso: no consigo mudar para a directoria %s" + +#, fuzzy +#~ msgid "memory exhausted" +#~ msgstr "memria virtual esgotada" + +#, fuzzy +#~ msgid "unable to record current working directory" +#~ msgstr "no consigo obter a directoria actual" + +#, fuzzy +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "aviso: no consigo mudar para a directoria %s" + +#, fuzzy +#~ msgid "cannot create pipe" +#~ msgstr "no consigo obter a directoria actual" + +#, fuzzy +#~ msgid "Invalid regular expression" +#~ msgstr "opo invlida `%s'" + +#, fuzzy +#~ msgid "Invalid character class name" +#~ msgstr "data invlida `%s'" + +#, fuzzy +#~ msgid "Memory exhausted" +#~ msgstr "memria virtual esgotada" + +#, fuzzy +#~ msgid "Invalid preceding regular expression" +#~ msgstr "opo invlida `%s'" + +#, fuzzy +#~ msgid "Premature end of regular expression" +#~ msgstr "opo invlida `%s'" + +#, fuzzy +#~ msgid "Regular expression too big" +#~ msgstr "opo invlida `%s'" + +#, fuzzy +#~ msgid "No previous regular expression" +#~ msgstr "opo invlida `%s'" + +#, fuzzy +#~ msgid "character out of range" +#~ msgstr "ficheiros especiais de tipo caracter no suportados" + +#, fuzzy +#~ msgid "invalid user" +#~ msgstr "\\%c: caracter de escape invlido" + +#, fuzzy +#~ msgid "invalid group" +#~ msgstr "opo invlida `%s'" + +#, fuzzy +#~ msgid "The strings compared were %s and %s." +#~ msgstr "no consigo %s `%s' para `%s'" diff --git a/gnulib/po/pt_BR.po b/gnulib/po/pt_BR.po new file mode 100644 index 0000000..21ee4bc --- /dev/null +++ b/gnulib/po/pt_BR.po @@ -0,0 +1,448 @@ +# Traduoes para o portugus do Brasil das mensagens do "textutils" +# Copyright (C) 1998 Free Software Foundation, Inc. +# Cyro Mendes De Moraes Neto <neto@conectiva.com.br>, 1998. +# Rodrigo Stulzer Lopes <rodrigo@conectiva.com.br>, 2001. +# Juan Carlos Castro y Castro <jcastro@vialink.com.br>, 2003. +# +msgid "" +msgstr "" +"Project-Id-Version: coreutils 5.0\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2003-06-27 19:20-0300\n" +"Last-Translator: Juan Carlos Castro y Castro <jcastro@vialink.com.br>\n" +"Language-Team: Brazilian Portuguese <ldp-br@bazar.conectiva.com.br>\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "" + +#: gnulib/lib/argp-help.c:1247 +#, fuzzy +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Argumentos obrigatrios para opes longas tambm o so para opes curtas\n" + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr "" + +# , c-format +#: gnulib/lib/argp-help.c:1656 +#, fuzzy +msgid " [OPTION...]" +msgstr "Uso: %s [OPO]...\n" + +# , c-format +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Tente `%s --help' para mais informao.\n" + +#: gnulib/lib/argp-help.c:1711 +#, fuzzy, c-format +msgid "Report bugs to %s.\n" +msgstr "" +"\n" +"Comunicar `bugs' para <%s>.\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "Erro de sistema desconhecido" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "NOME" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "" + +#: gnulib/lib/argp-parse.c:142 +#, fuzzy +msgid "print program version" +msgstr "erro de leitura" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "" + +#: gnulib/lib/argp-parse.c:612 +#, fuzzy, c-format +msgid "%s: Too many arguments\n" +msgstr "muitos argumentos\n" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: opo `%s' est ambgua\n" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: opo `--%s' no permite um argumento\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: opo `%c%s' no permite um argumento\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: opo `%s' requer um argumento\n" + +# , c-format +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: opo desconhecida `-%s'\n" + +# , c-format +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: opo desconhecida `%c%s'\n" + +# , c-format +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: opo invlida -- %c\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: opo requer um argumento --%c\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: opo `-W %s' est ambgua\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: opo `-W %s' no permite um argumento\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: opo `%s' requer um argumento\n" + +# , c-format +#~ msgid "invalid argument %s for %s" +#~ msgstr "argumento invlido %s para '%s'" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "argumento ambguo %s para `%s'" + +#~ msgid "Valid arguments are:" +#~ msgstr "Os argumentos vlidos so:" + +#~ msgid "write error" +#~ msgstr "erro de escrita" + +#, fuzzy +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "no foi possvel abrir %s para leitura" + +#, fuzzy +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "no foi possvel abrir %s para leitura" + +# , c-format +#, fuzzy +#~ msgid "error reading \"%s\"" +#~ msgstr "erro lendo %s" + +# , c-format +#, fuzzy +#~ msgid "error writing \"%s\"" +#~ msgstr "erro escrevendo %s" + +# , c-format +#, fuzzy +#~ msgid "error after reading \"%s\"" +#~ msgstr "erro lendo %s" + +#, fuzzy +#~ msgid "fdopen() failed" +#~ msgstr "erro abrindo arquivo" + +# , c-format +#, fuzzy +#~ msgid "%s subprocess failed" +#~ msgstr "%s: padro invlido" + +#~ msgid "regular empty file" +#~ msgstr "arquivo comum vazio" + +#~ msgid "regular file" +#~ msgstr "arquivo comum" + +#, fuzzy +#~ msgid "directory" +#~ msgstr "Diretrio: " + +#~ msgid "block special file" +#~ msgstr "arquivo especial de bloco" + +#~ msgid "character special file" +#~ msgstr "arquivo especial caracter" + +#~ msgid "fifo" +#~ msgstr "fifo" + +#~ msgid "symbolic link" +#~ msgstr "link simblico" + +#~ msgid "socket" +#~ msgstr "socket" + +#~ msgid "message queue" +#~ msgstr "fila de mensagens" + +#~ msgid "semaphore" +#~ msgstr "semforo" + +#~ msgid "shared memory object" +#~ msgstr "objeto de memria compartilhada" + +#, fuzzy +#~ msgid "typed memory object" +#~ msgstr "objeto de memria compartilhada" + +#~ msgid "weird file" +#~ msgstr "arquivo estranho" + +#, fuzzy +#~ msgid "Address family for hostname not supported" +#~ msgstr "arquivos \"fifo\" no suportados" + +#, fuzzy +#~ msgid "ai_family not supported" +#~ msgstr "arquivos \"fifo\" no suportados" + +#, fuzzy +#~ msgid "ai_socktype not supported" +#~ msgstr "arquivos \"fifo\" no suportados" + +#, fuzzy +#~ msgid "System error" +#~ msgstr "erro de escrita" + +#, fuzzy +#~ msgid "Unknown error" +#~ msgstr "Erro de sistema desconhecido" + +# , c-format +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: opo invlida -- %c\n" + +#~ msgid "block size" +#~ msgstr "tamanho do bloco" + +#~ msgid "%s exists but is not a directory" +#~ msgstr "%s existe, mas no um diretrio" + +#~ msgid "cannot change owner and/or group of %s" +#~ msgstr "no pode substituir dono e/ou grupo de %s" + +# , c-format +#~ msgid "cannot create directory %s" +#~ msgstr "no possvel criar o diretrio %s" + +# , c-format +#~ msgid "cannot chdir to directory %s" +#~ msgstr "impossvel mudar para diretrio %s" + +# , c-format +#~ msgid "cannot change permissions of %s" +#~ msgstr "no possvel mudar permisses de %s" + +#~ msgid "memory exhausted" +#~ msgstr "memria esgotada" + +# , c-format +#, fuzzy +#~ msgid "unable to record current working directory" +#~ msgstr "no possvel criar o diretrio %s" + +# , c-format +#, fuzzy +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "falha ao preservar permisses para %s" + +# , c-format +#, fuzzy +#~ msgid "cannot create pipe" +#~ msgstr "impossvel criar link %s" + +#~ msgid "`" +#~ msgstr "`" + +#~ msgid "'" +#~ msgstr "'" + +# , c-format +#, fuzzy +#~ msgid "Invalid regular expression" +#~ msgstr "%s: a expresso regular no vlida: %s" + +# , c-format +#, fuzzy +#~ msgid "Invalid character class name" +#~ msgstr "classe de caracteres invlida `%s'" + +#, fuzzy +#~ msgid "Memory exhausted" +#~ msgstr "memria esgotada" + +# , c-format +#, fuzzy +#~ msgid "Invalid preceding regular expression" +#~ msgstr "%s: a expresso regular no vlida: %s" + +#, fuzzy +#~ msgid "Premature end of regular expression" +#~ msgstr "erro na busca da expresso regular" + +# , c-format +#, fuzzy +#~ msgid "Regular expression too big" +#~ msgstr "%s: a expresso regular no vlida: %s" + +#, fuzzy +#~ msgid "No previous regular expression" +#~ msgstr "erro na busca da expresso regular" + +#~ msgid "^[yY]" +#~ msgstr "^[yY]" + +#~ msgid "^[nN]" +#~ msgstr "^[nN]" + +#~ msgid "iconv function not usable" +#~ msgstr "funo iconv no utilizvel" + +#~ msgid "iconv function not available" +#~ msgstr "funo iconv no disponvel" + +# , c-format +#~ msgid "character out of range" +#~ msgstr "caractere fora de faixa" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "impossvel converter U+%04X para o conjunto local de caracteres" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "impossvel converter U+%04X para o conjunto local de caracteres: %s" + +#~ msgid "invalid user" +#~ msgstr "usurio invlido" + +#~ msgid "invalid group" +#~ msgstr "grupo invlido" + +#~ msgid "cannot get the login group of a numeric UID" +#~ msgstr "nao foi possivel obter um grupo e login de um UID numerico " + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "This is free software. You may redistribute copies of it under the terms " +#~ "of\n" +#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "Este programa um software livre, voc pode redistribu-lo e/ou modific-" +#~ "lo\n" +#~ "sobre os termos da licena pblica geral GNU (GPL - General Public " +#~ "License)\n" +#~ "publicada pela Free Software Foundation, verso 2 ou posteriores.\n" +#~ "\n" + +#~ msgid "Written by %s.\n" +#~ msgstr "Escrito por %s.\n" + +#, fuzzy +#~ msgid "Written by %s and %s.\n" +#~ msgstr "Escrito por %s.\n" + +#, fuzzy +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "Escrito por %s.\n" + +#, fuzzy +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "Escrito por %s.\n" + +#, fuzzy +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "Escrito por %s.\n" + +#, fuzzy +#~ msgid "string comparison failed" +#~ msgstr "falha no stat" + +#, fuzzy +#~ msgid "The strings compared were %s and %s." +#~ msgstr "no foi possvel criar o link %s" diff --git a/gnulib/po/remove-potcdate.sin b/gnulib/po/remove-potcdate.sin new file mode 100644 index 0000000..2436c49 --- /dev/null +++ b/gnulib/po/remove-potcdate.sin @@ -0,0 +1,19 @@ +# Sed script that remove the POT-Creation-Date line in the header entry +# from a POT file. +# +# The distinction between the first and the following occurrences of the +# pattern is achieved by looking at the hold space. +/^"POT-Creation-Date: .*"$/{ +x +# Test if the hold space is empty. +s/P/P/ +ta +# Yes it was empty. First occurrence. Remove the line. +g +d +bb +:a +# The hold space was nonempty. Following occurrences. Do nothing. +x +:b +} diff --git a/gnulib/po/ro.po b/gnulib/po/ro.po new file mode 100644 index 0000000..70a7eab --- /dev/null +++ b/gnulib/po/ro.po @@ -0,0 +1,294 @@ +# Mesajele n limba romn pentru pachetul mailutils. +# Copyright (C) 2003 Free Software Foundation, Inc. +# Eugen Hoanca <eugenh@urban-grafx.ro>, 2003. +# +msgid "" +msgstr "" +"Project-Id-Version: mailutils 0.4\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2003-12-10 08:55+0200\n" +"Last-Translator: Eugen Hoanca <eugenh@urban-grafx.ro>\n" +"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-2\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: parametrul ARGP_HELP_FMT necesit o valoare" + +#: gnulib/lib/argp-help.c:226 +#, fuzzy, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: parametrul ARGP_HELP_FMT necesit o valoare" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Parametru ARGP_HELP_FMT necunoscut" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Gunoi(garbage) n ARGP_HELP_FMT: %s" + +#: gnulib/lib/argp-help.c:1247 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Argumentele obligatorii sau opionale pentru opiunile lungi sunt de " +"asemenea obligatorii sau opionale pentru toate opiunile scurte " +"corespunztoare." + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "Folosire:" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr " sau: " + +#: gnulib/lib/argp-help.c:1656 +msgid " [OPTION...]" +msgstr " [OPIUNE...]" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "ncercai `%s --help' sau `%s --usage' pentru mai multe informaii.\n" + +#: gnulib/lib/argp-help.c:1711 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Raportai bug-urile la %s.\n" + +#: gnulib/lib/argp-help.c:1930 +#, fuzzy +msgid "Unknown system error" +msgstr "tip de mesaj necunoscut" + +#: gnulib/lib/argp-parse.c:81 +#, fuzzy +msgid "give this help list" +msgstr "Afieaz aceast list de ajutor" + +#: gnulib/lib/argp-parse.c:82 +#, fuzzy +msgid "give a short usage message" +msgstr "Afieaz un mesaj de folosire scurt" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "NUME" + +#: gnulib/lib/argp-parse.c:83 +#, fuzzy +msgid "set the program name" +msgstr "Seteaz numele programului" + +#: gnulib/lib/argp-parse.c:84 +#, fuzzy +msgid "SECS" +msgstr "SECUNDE" + +#: gnulib/lib/argp-parse.c:85 +#, fuzzy +msgid "hang for SECS seconds (default 3600)" +msgstr "ntrerupe(hang) pentru SECS secunde (implicit 3600)" + +#: gnulib/lib/argp-parse.c:142 +#, fuzzy +msgid "print program version" +msgstr "Afieaz versiunea programului" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(EROARE DE PROGRAM) Nici o versiune cunoscut!?" + +#: gnulib/lib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Prea multe argumente\n" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(EROARE DE PROGRAM) Opiunea ar fi trebuit recunoscut!?" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: opiunea `%s' este ambigu\n" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: opiunea `--%s' nu permite argumente\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: opiunea `%c%s' nu permite argumente\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: opiunea `%s' necesit un argument\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: opiune necunoscut `--%s'\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: opiune necunoscut `%c%s'\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: opiune invalid -- %c\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: opiunea necesit un argument -- %c\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: opiune `-W %s' este ambigu\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: opiune `-W %s' nu permite argumente\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: opiunea `%s' necesit un argument\n" + +#, fuzzy +#~ msgid "invalid argument %s for %s" +#~ msgstr "nume etichet(tag) invalid `%s' pentru `%s'" + +#, fuzzy +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "lipsete argumentul pentru %s" + +#, fuzzy +#~ msgid "Valid arguments are:" +#~ msgstr "argumentele if valide sunt: s | r | t" + +#, fuzzy +#~ msgid "program error" +#~ msgstr "eroare de interval(range)" + +#, fuzzy +#~ msgid "stack overflow" +#~ msgstr "subrulare(underflow) a stivei(stack)" + +#, fuzzy +#~ msgid "write error" +#~ msgstr "eroare regex" + +#, fuzzy +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "nu se poate deschide fiierul de ieire(output) \"%s\": %s" + +#, fuzzy +#~ msgid "error reading \"%s\"" +#~ msgstr "eroare la cititrea din fiierul de intrare(input): %s" + +#, fuzzy +#~ msgid "error writing \"%s\"" +#~ msgstr "eroare n scrierea n mailbox: %s" + +#, fuzzy +#~ msgid "fdopen() failed" +#~ msgstr "fork euat" + +#, fuzzy +#~ msgid "message queue" +#~ msgstr "%d mesaj" + +#, fuzzy +#~ msgid "Memory allocation failure" +#~ msgstr "Operaiune euat" + +#, fuzzy +#~ msgid "System error" +#~ msgstr "eroare regex" + +#, fuzzy +#~ msgid "Unknown error" +#~ msgstr "Escape necunoscut %s" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: opiune ilegal -- %c\n" + +#, fuzzy +#~ msgid "cannot change owner and/or group of %s" +#~ msgstr "nu se poate trece n uid %lu: %m" + +#, fuzzy +#~ msgid "cannot create directory %s" +#~ msgstr "nu se poate crea iterator: %s" + +#, fuzzy +#~ msgid "cannot chdir to directory %s" +#~ msgstr "nu se poate crea iterator: %s" + +#, fuzzy +#~ msgid "cannot change permissions of %s" +#~ msgstr "Permisiuni greite la %s. Setai 0600." + +#, fuzzy +#~ msgid "memory exhausted" +#~ msgstr "Memorie plin" + +#, fuzzy +#~ msgid "cannot create pipe" +#~ msgstr "nu se poate crea mailerul \"%s\"" + +#~ msgid "Success" +#~ msgstr "Succes" + +#, fuzzy +#~ msgid "Invalid back reference" +#~ msgstr "Numr invalid" + +#, fuzzy +#~ msgid "Invalid range end" +#~ msgstr "Tip de dat invalid" + +#~ msgid "Memory exhausted" +#~ msgstr "Memorie plin" + +#, fuzzy +#~ msgid "No previous regular expression" +#~ msgstr "Nu exist fiier anterior" + +#, fuzzy +#~ msgid "invalid user" +#~ msgstr "Numr invalid" + +#, fuzzy +#~ msgid "invalid group" +#~ msgstr "Deschide grup" + +#, fuzzy +#~ msgid "string comparison failed" +#~ msgstr "Autentificare euat" diff --git a/gnulib/po/ru.po b/gnulib/po/ru.po new file mode 100644 index 0000000..12bdb6c --- /dev/null +++ b/gnulib/po/ru.po @@ -0,0 +1,772 @@ +# translation of gnulib-2.0.0.3462.e9796.ru.po to Russian +# Copyright (C) 2005, 2010 Free Software Foundation, Inc. +# This file is distributed under the same license as the gnulib package. +# +# Sergey Poznyakoff <gray@gnu.org>, 2003,2004,2005. +# Yuri Kozlov <yuray@komyakino.ru>, 2010, 2011. +msgid "" +msgstr "" +"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2011-08-22 21:05+0400\n" +"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n" +"Language-Team: Russian <gnu@mx.ru>\n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Lokalize 1.0\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: значение %s меньше или равно %s" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: параметр ARGP_HELP_FMT требует значения" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: значение параметра ARGP_HELP_FMT должно быть положительным" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: неизвестный параметр ARGP_HELP_FMT" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Мусор в ARGP_HELP_FMT: %s" + +#: gnulib/lib/argp-help.c:1247 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Обязательные или необязательные аргументы к длинным именам параметров " +"остаются таковыми и к соответствующим коротким параметрам." + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "Использование:" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr " или: " + +#: gnulib/lib/argp-help.c:1656 +msgid " [OPTION...]" +msgstr " [ПАРАМЕТР...]" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "" +"Попробуйте «%s --help» или «%s --usage» для получения более подробного " +"описания.\n" + +#: gnulib/lib/argp-help.c:1711 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Об ошибках сообщай по адресу %s.\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "Неизвестная системная ошибка" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "показать эту справку" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "показать короткую справку по использованию" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "ИМЯ" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "задать имя программы" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "СЕКУНД" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "остановиться на заданное число СЕКУНД (по умолчанию 3600)" + +#: gnulib/lib/argp-parse.c:142 +msgid "print program version" +msgstr "показать номер версии программы" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(ОШИБКА ПРОГРАММЫ) Версия неизвестна!?" + +#: gnulib/lib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: слишком много аргументов\n" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(ОШИБКА ПРОГРАММЫ) Параметр должен был быть распознан!?" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: двусмысленный параметр «%s»; возможные варианты:" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: для параметра «--%s» аргумент не разрешён\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: для параметра «%c%s» аргумент не разрешён\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: для параметра «--%s» требуется аргумент\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: нераспознанный параметр «--%s»\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: нераспознанный параметр «%c%s»\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: неправильный параметр -- «%c»\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: для параметра требуется аргумент -- «%c»\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: двусмысленный параметр «-W %s»\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: у параметра «-W %s» не может быть аргумента\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: для параметра «-W %s» требуется аргумент\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "неверный аргумент %s для %s" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "неоднозначный аргумент %s для %s" + +#~ msgid "Valid arguments are:" +#~ msgstr "Верные аргументы:" + +#~ msgid "program error" +#~ msgstr "программная ошибка" + +#~ msgid "stack overflow" +#~ msgstr "переполнение стека" + +#~ msgid "cannot find a temporary directory, try setting $TMPDIR" +#~ msgstr "не удалось найти временный каталог, попробуйте задать $TMPDIR" + +#~ msgid "cannot create a temporary directory using template \"%s\"" +#~ msgstr "не удалось создать временный каталог с помощью шаблона «%s»" + +#~ msgid "cannot remove temporary file %s" +#~ msgstr "не удалось удалить временный файл %s" + +#~ msgid "cannot remove temporary directory %s" +#~ msgstr "не удалось удалить временный каталог %s" + +#~ msgid "error closing file" +#~ msgstr "ошибка закрытия файла" + +#~ msgid "write error" +#~ msgstr "ошибка записи" + +#~ msgid "preserving permissions for %s" +#~ msgstr "сохраняются права доступа для %s" + +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "ошибка при открытии «%s» для чтения" + +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "не удалось открыть файл резервной копии «%s» для записи" + +#~ msgid "error reading \"%s\"" +#~ msgstr "ошибка чтения «%s»" + +#~ msgid "error writing \"%s\"" +#~ msgstr "ошибка записи «%s»" + +#~ msgid "error after reading \"%s\"" +#~ msgstr "ошибка после чтения «%s»" + +#~ msgid "fdopen() failed" +#~ msgstr "ошибка при выполнении fdopen()" + +#~ msgid "C# compiler not found, try installing pnet" +#~ msgstr "Не найден компилятор C#, попробуйте установить pnet" + +#~ msgid "C# virtual machine not found, try installing pnet" +#~ msgstr "Не найдена виртуальная машина C#, попробуйте установить pnet" + +#~ msgid "%s subprocess failed" +#~ msgstr "подпроцесс %s завершился с ошибкой" + +#~ msgid "regular empty file" +#~ msgstr "пустой обычный файл" + +#~ msgid "regular file" +#~ msgstr "обычный файл" + +#~ msgid "directory" +#~ msgstr "каталог" + +#~ msgid "block special file" +#~ msgstr "блочный специальный файл" + +#~ msgid "character special file" +#~ msgstr "символьный специальный файл" + +#~ msgid "fifo" +#~ msgstr "файл-очередь" + +#~ msgid "symbolic link" +#~ msgstr "символьная ссылка" + +#~ msgid "socket" +#~ msgstr "сокет" + +#~ msgid "message queue" +#~ msgstr "очередь сообщений" + +#~ msgid "semaphore" +#~ msgstr "семафор" + +#~ msgid "shared memory object" +#~ msgstr "объект общей памяти" + +#~ msgid "typed memory object" +#~ msgstr "объект типизированной памяти" + +#~ msgid "weird file" +#~ msgstr "странный файл" + +#~ msgid "Address family for hostname not supported" +#~ msgstr "Адресное семейство не поддерживается для имени узла" + +#~ msgid "Temporary failure in name resolution" +#~ msgstr "Временная ошибка при определении имени" + +#~ msgid "Bad value for ai_flags" +#~ msgstr "Неверное значение для ai_flags" + +#~ msgid "Non-recoverable failure in name resolution" +#~ msgstr "Невосстановимая ошибка при определении имени" + +#~ msgid "ai_family not supported" +#~ msgstr "ai_family не поддерживается" + +#~ msgid "Memory allocation failure" +#~ msgstr "Ошибка при выделении памяти" + +#~ msgid "No address associated with hostname" +#~ msgstr "С именем узла не связано ни одного адреса" + +#~ msgid "Name or service not known" +#~ msgstr "Неизвестное имя или служба" + +#~ msgid "Servname not supported for ai_socktype" +#~ msgstr "Servname не поддерживается для ai_socktype" + +#~ msgid "ai_socktype not supported" +#~ msgstr "ai_socktype не поддерживается" + +#~ msgid "System error" +#~ msgstr "Системная ошибка" + +#~ msgid "Argument buffer too small" +#~ msgstr "Слишком маленький буфер, указанный в аргументе" + +#~ msgid "Processing request in progress" +#~ msgstr "Выполняется обработка запроса" + +#~ msgid "Request canceled" +#~ msgstr "Запрос отменён" + +#~ msgid "Request not canceled" +#~ msgstr "Запрос не отменён" + +#~ msgid "All requests done" +#~ msgstr "Все запросы выполнены" + +#~ msgid "Interrupted by a signal" +#~ msgstr "Прервано по сигналу" + +#~ msgid "Parameter string not correctly encoded" +#~ msgstr "Строковый параметр неправильно закодирован" + +#~ msgid "Unknown error" +#~ msgstr "Неизвестная ошибка" + +#~ msgid "invalid source_version argument to compile_java_class" +#~ msgstr "неверный аргумент source_version для compile_java_class" + +#~ msgid "invalid target_version argument to compile_java_class" +#~ msgstr "неверный аргумент target_version для compile_java_class" + +#~ msgid "failed to create \"%s\"" +#~ msgstr "не удалось создать «%s»" + +#~ msgid "error while writing \"%s\" file" +#~ msgstr "ошибка записи в файл «%s»" + +#~ msgid "Java compiler not found, try installing gcj or set $JAVAC" +#~ msgstr "" +#~ "Не найден компилятор Java, попробуйте установить gcj или задать $JAVAC" + +#~ msgid "Java virtual machine not found, try installing gij or set $JAVA" +#~ msgstr "" +#~ "Не найдена виртуальная машина Java, попробуйте установить gcj или задать " +#~ "$JAVA" + +#~ msgid "%s subprocess I/O error" +#~ msgstr "ошибка вв/вывода подпроцесса %s" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "невозможно изменить права доступа %s" + +#~ msgid "cannot create directory %s" +#~ msgstr "невозможно создать каталог %s" + +#~ msgid "memory exhausted" +#~ msgstr "закончилась память" + +#~ msgid "unable to record current working directory" +#~ msgstr "не удалось запомнить текущий рабочий каталог" + +#~ msgid "failed to return to initial working directory" +#~ msgstr "не удалось вернуться в первоначальный рабочий каталог" + +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "Не удалось открыть /dev/zero на чтение" + +#~ msgid "creation of reading thread failed" +#~ msgstr "не удалось создать нить для чтения" + +#~ msgid "cannot set up nonblocking I/O to %s subprocess" +#~ msgstr "не удалось настроить неблокированный ввод-вывод в подпроцессе %s" + +#~ msgid "communication with %s subprocess failed" +#~ msgstr "не удалось связаться с подпроцессом %s" + +#~ msgid "write to %s subprocess failed" +#~ msgstr "не удалось записать в подпроцесс %s" + +#~ msgid "read from %s subprocess failed" +#~ msgstr "не удалось прочитать из подпроцесса %s" + +#~ msgid "subprocess %s terminated with exit code %d" +#~ msgstr "подпроцесс %s завершился с кодом выхода %d" + +#~ msgid "creation of threads failed" +#~ msgstr "не удалось создать нити" + +#~ msgid "%s subprocess terminated with exit code %d" +#~ msgstr "подпроцесс %s завершился с кодом выхода %d" + +#~ msgid "Franc,ois Pinard" +#~ msgstr "Френсис Пинард (Franc,ois Pinard)" + +#~ msgid "`" +#~ msgstr "«" + +#~ msgid "'" +#~ msgstr "»" + +#~ msgid "Success" +#~ msgstr "Успешно" + +#~ msgid "No match" +#~ msgstr "Нет совпадений" + +#~ msgid "Invalid regular expression" +#~ msgstr "Неверное регулярное выражение" + +#~ msgid "Invalid collation character" +#~ msgstr "Неверный символ сравнения" + +#~ msgid "Invalid character class name" +#~ msgstr "Неверное имя класса символов" + +#~ msgid "Trailing backslash" +#~ msgstr "Конечная обратная косая черта" + +#~ msgid "Invalid back reference" +#~ msgstr "Неверная обратная ссылка" + +#~ msgid "Unmatched [ or [^" +#~ msgstr "Непарная [ или [^" + +#~ msgid "Unmatched ( or \\(" +#~ msgstr "Непарная ( или \\(" + +#~ msgid "Unmatched \\{" +#~ msgstr "Непарная \\{" + +#~ msgid "Invalid content of \\{\\}" +#~ msgstr "Недопустимое содержимое в \\{\\}" + +#~ msgid "Invalid range end" +#~ msgstr "Неверный конец диапазона" + +#~ msgid "Memory exhausted" +#~ msgstr "Закончилась память" + +#~ msgid "Invalid preceding regular expression" +#~ msgstr "Недопустимое предшествующее регулярное выражение" + +#~ msgid "Premature end of regular expression" +#~ msgstr "Преждевременное завершение регулярного выражения" + +#~ msgid "Regular expression too big" +#~ msgstr "Слишком большое регулярное выражение" + +#~ msgid "Unmatched ) or \\)" +#~ msgstr "Непарная ) или \\)" + +#~ msgid "No previous regular expression" +#~ msgstr "Отсутствует предыдущее регулярное выражение" + +#~ msgid "^[yY]" +#~ msgstr "^[ДдYy]" + +#~ msgid "^[nN]" +#~ msgstr "^[НнNn]" + +#~ msgid "setting permissions for %s" +#~ msgstr "задание прав доступа для %s" + +#~ msgid "Hangup" +#~ msgstr "Обрыв терминальной линии" + +#~ msgid "Interrupt" +#~ msgstr "Прерывание" + +#~ msgid "Quit" +#~ msgstr "Аварийное прерывание" + +#~ msgid "Illegal instruction" +#~ msgstr "Недопустимая инструкция" + +#~ msgid "Trace/breakpoint trap" +#~ msgstr "Прерывание на контрольной точке" + +#~ msgid "Aborted" +#~ msgstr "Прервано" + +#~ msgid "Floating point exception" +#~ msgstr "Ошибка операции с плавающей точкой" + +#~ msgid "Killed" +#~ msgstr "Уничтожение" + +#~ msgid "Bus error" +#~ msgstr "Ошибка шины" + +#~ msgid "Segmentation fault" +#~ msgstr "Нарушение сегментирования" + +#~ msgid "Broken pipe" +#~ msgstr "Обрыв канала" + +#~ msgid "Alarm clock" +#~ msgstr "Сигнал по таймеру" + +#~ msgid "Terminated" +#~ msgstr "Завершение" + +#~ msgid "Urgent I/O condition" +#~ msgstr "Срочная операция ввода-вывода" + +#~ msgid "Stopped (signal)" +#~ msgstr "Останов (сигнал)" + +#~ msgid "Stopped" +#~ msgstr "Останов" + +#~ msgid "Continued" +#~ msgstr "Возобновление" + +#~ msgid "Child exited" +#~ msgstr "Потомок завершил работу" + +#~ msgid "Stopped (tty input)" +#~ msgstr "Останов (ввод с терминала)" + +#~ msgid "Stopped (tty output)" +#~ msgstr "Останов (вывод с терминала)" + +#~ msgid "I/O possible" +#~ msgstr "Возможен ввод-вывод" + +#~ msgid "CPU time limit exceeded" +#~ msgstr "Превышен предел по процессорному времени" + +#~ msgid "File size limit exceeded" +#~ msgstr "Превышен предел размера файла" + +#~ msgid "Virtual timer expired" +#~ msgstr "Виртуальное время истекло" + +#~ msgid "Profiling timer expired" +#~ msgstr "Время профилирования истекло" + +#~ msgid "Window changed" +#~ msgstr "Окно изменено" + +#~ msgid "User defined signal 1" +#~ msgstr "Определяемый пользователем сигнал 1" + +#~ msgid "User defined signal 2" +#~ msgstr "Определяемый пользователем сигнал 2" + +#~ msgid "EMT trap" +#~ msgstr "Ловушка EMT" + +#~ msgid "Bad system call" +#~ msgstr "Неправильный системный вызов" + +#~ msgid "Stack fault" +#~ msgstr "Ошибка работы со стеком" + +#~ msgid "Information request" +#~ msgstr "Запрос информации" + +#~ msgid "Power failure" +#~ msgstr "Отказ питания" + +#~ msgid "Resource lost" +#~ msgstr "Ресурс потерян" + +#~ msgid "error writing to a closed pipe or socket" +#~ msgstr "ошибка записи в закрытый канал или сокет" + +#~ msgid "cannot create pipe" +#~ msgstr "не удалось создать канал" + +#~ msgid "Real-time signal %d" +#~ msgstr "Сигнал реального времени %d" + +#~ msgid "Unknown signal %d" +#~ msgstr "Неизвестный сигнал %d" + +#~ msgid "iconv function not usable" +#~ msgstr "функция iconv неприменима" + +#~ msgid "iconv function not available" +#~ msgstr "функция iconv недоступна" + +#~ msgid "character out of range" +#~ msgstr "символ вне допустимого диапазона" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "невозможно преобразовать U+%04X в локальную кодировку" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "невозможно преобразовать U+%04X в локальную кодировку: %s" + +#~ msgid "invalid user" +#~ msgstr "неверный пользователь" + +#~ msgid "invalid group" +#~ msgstr "неверная группа" + +#~ msgid "invalid spec" +#~ msgstr "неверный spec" + +#~ msgid "unable to display error message" +#~ msgstr "невозможно показать сообщение об ошибке" + +#~ msgid "Packaged by %s (%s)\n" +#~ msgstr "Упакован %s (%s)\n" + +#~ msgid "Packaged by %s\n" +#~ msgstr "Упакован %s\n" + +#~ msgid "(C)" +#~ msgstr "©" + +#~ msgid "" +#~ "\n" +#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +#~ "html>.\n" +#~ "This is free software: you are free to change and redistribute it.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "Лицензия GPLv3+: GNU GPL версии 3 или новее <http://gnu.org/licenses/gpl." +#~ "html>.\n" +#~ "Это свободное ПО: вы можете продавать и распространять его.\n" +#~ "Нет НИКАКИХ ГАРАНТИЙ до степени, разрешённой законом.\n" +#~ "\n" + +#~ msgid "Written by %s.\n" +#~ msgstr "Автор программы: %s.\n" + +#~ msgid "Written by %s and %s.\n" +#~ msgstr "Авторы программы: %s и %s.\n" + +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "Авторы программы: %s, %s и %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Авторы программы: %s, %s, %s\n" +#~ "и %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Авторы программы: %s, %s, %s,\n" +#~ "%s и %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, and %s.\n" +#~ msgstr "" +#~ "Авторы программы: %s, %s, %s,\n" +#~ "%s, %s и %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, and %s.\n" +#~ msgstr "" +#~ "Авторы программы: %s, %s, %s,\n" +#~ "%s, %s, %s и %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Авторы программы: %s, %s, %s,\n" +#~ "%s, %s, %s, %s\n" +#~ "и %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Авторы программы: %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s и %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, and others.\n" +#~ msgstr "" +#~ "Авторы программы: %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s и другие.\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to: %s\n" +#~ msgstr "" +#~ "\n" +#~ "Об ошибках сообщайте по адресу: %s\n" + +#~ msgid "Report %s bugs to: %s\n" +#~ msgstr "Об ошибках в %s сообщайте по адресу: %s\n" + +#~ msgid "%s home page: <%s>\n" +#~ msgstr "Домашняя страница %s: <%s>\n" + +#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +#~ msgstr "Домашняя страница %s: <http://www.gnu.org/software/%s/>\n" + +#~ msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +#~ msgstr "Справка по работе с ПО GNU: <http://www.gnu.org/gethelp/>\n" + +#~ msgid "_open_osfhandle failed" +#~ msgstr "_open_osfhandle завершилась неудачно" + +#~ msgid "cannot restore fd %d: dup2 failed" +#~ msgstr "не удалось восстановить fd %d: dup2 завершилась неудачно" + +#~ msgid "%s subprocess" +#~ msgstr "подпроцесс %s" + +#~ msgid "%s subprocess got fatal signal %d" +#~ msgstr "подпроцесс %s получил сигнал завершения %d" + +#~ msgid "stdin" +#~ msgstr "stdin" + +#~ msgid "stdout" +#~ msgstr "stdout" + +#~ msgid "stderr" +#~ msgstr "stderr" + +#~ msgid "unknown stream" +#~ msgstr "неизвестный поток" + +#~ msgid "failed to reopen %s with mode %s" +#~ msgstr "не удалось повторно открыть %s в режиме %s" + +#~ msgid "string comparison failed" +#~ msgstr "сравнение строк завершилось неудачно" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "Чтобы обойти эту проблему, установите LC_ALL='C'." + +#~ msgid "The strings compared were %s and %s." +#~ msgstr "Сравнивались строки %s %s." + +#~ msgid "cannot perform formatted output" +#~ msgstr "невозможно выполнить форматированный вывод" + +#~ msgid "invalid %s%s argument `%s'" +#~ msgstr "неверный аргумент %s%s для «%s»" + +#~ msgid "invalid suffix in %s%s argument `%s'" +#~ msgstr "неверный суффикс %s%s в аргументе «%s»" + +#~ msgid "%s%s argument `%s' too large" +#~ msgstr "значение %s%s аргумента «%s» слишком велико" diff --git a/gnulib/po/rw.po b/gnulib/po/rw.po new file mode 100644 index 0000000..4635f89 --- /dev/null +++ b/gnulib/po/rw.po @@ -0,0 +1,548 @@ +# Kinyarwanda translations for mailutils package. +# Copyright (C) 2005 Free Software Foundation, Inc. +# This file is distributed under the same license as the mailutils package. +# Steve Murphy <murf@e-tools.com>, 2005. +# Steve performed initial rough translation from compendium built from translations provided by the following translators: +# Philibert Ndandali <ndandali@yahoo.fr>, 2005. +# Viateur MUGENZI <muvia1@yahoo.fr>, 2005. +# Noëlla Mupole <s24211045@tuks.co.za>, 2005. +# Carole Karema <karemacarole@hotmail.com>, 2005. +# JEAN BAPTISTE NGENDAHAYO <ngenda_denis@yahoo.co.uk>, 2005. +# Augustin KIBERWA <akiberwa@yahoo.co.uk>, 2005. +# Donatien NSENGIYUMVA <ndonatienuk@yahoo.co.uk>, 2005. +# Antoine Bigirimana <antoine@e-tools.com>, 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: mailutils 0.6\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2005-04-04 10:55-0700\n" +"Last-Translator: Steven Michael Murphy <murf@e-tools.com>\n" +"Language-Team: Kinyarwanda <translation-team-rw@lists.sourceforge.net>\n" +"Language: rw\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "" + +#: gnulib/lib/argp-help.c:220 +#, fuzzy, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "" +"%.*Project- Id- Version: basctl\n" +"POT- Creation- Date: 2003- 12- 07 17: 13+ 02\n" +"PO- Revision- Date: 2004- 11- 04 10: 13- 0700\n" +"Last- Translator: Language- Team:< en@ li. org> MIME- Version: 1. 0\n" +"Content- Type: text/ plain; charset= UTF- 8\n" +"Content- Transfer- Encoding: 8bit\n" +"X- Generator: KBabel 1. 0\n" +"." + +#: gnulib/lib/argp-help.c:226 +#, fuzzy, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "" +"%.*Project- Id- Version: basctl\n" +"POT- Creation- Date: 2003- 12- 07 17: 13+ 02\n" +"PO- Revision- Date: 2004- 11- 04 10: 13- 0700\n" +"Last- Translator: Language- Team:< en@ li. org> MIME- Version: 1. 0\n" +"Content- Type: text/ plain; charset= UTF- 8\n" +"Content- Transfer- Encoding: 8bit\n" +"X- Generator: KBabel 1. 0\n" +"." + +#: gnulib/lib/argp-help.c:235 +#, fuzzy, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "" +"%.*Project- Id- Version: basctl\n" +"POT- Creation- Date: 2003- 12- 07 17: 13+ 02\n" +"PO- Revision- Date: 2004- 11- 04 10: 13- 0700\n" +"Last- Translator: Language- Team:< en@ li. org> MIME- Version: 1. 0\n" +"Content- Type: text/ plain; charset= UTF- 8\n" +"Content- Transfer- Encoding: 8bit\n" +"X- Generator: KBabel 1. 0\n" +"." + +#: gnulib/lib/argp-help.c:247 +#, fuzzy, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "in" + +#: gnulib/lib/argp-help.c:1247 +#, fuzzy +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Cyangwa Bitari ngombwa ingingo Kuri Amahitamo Cyangwa Bitari ngombwa " +"kugirango Amahitamo" + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "Ikoresha:" + +#: gnulib/lib/argp-help.c:1644 +#, fuzzy +msgid " or: " +msgstr "Cyangwa" + +#: gnulib/lib/argp-help.c:1656 +msgid " [OPTION...]" +msgstr "" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Cyangwa kugirango Birenzeho Ibisobanuro" + +#: gnulib/lib/argp-help.c:1711 +#, fuzzy, c-format +msgid "Report bugs to %s.\n" +msgstr "Kuri" + +#: gnulib/lib/argp-help.c:1930 +#, fuzzy +msgid "Unknown system error" +msgstr "Sisitemu Ikosa" + +#: gnulib/lib/argp-parse.c:81 +#, fuzzy +msgid "give this help list" +msgstr "iyi Ifashayobora Urutonde" + +#: gnulib/lib/argp-parse.c:82 +#, fuzzy +msgid "give a short usage message" +msgstr "a Ikoresha: Ubutumwa" + +#: gnulib/lib/argp-parse.c:83 +#, fuzzy +msgid "NAME" +msgstr "Izina" + +#: gnulib/lib/argp-parse.c:83 +#, fuzzy +msgid "set the program name" +msgstr "i Porogaramu Izina:" + +# offmgr/source\offapp\dialog\optgdlg.src:OFA_TP_MISC.FT_HELPAGENT_TIME_UNIT.text +#: gnulib/lib/argp-parse.c:84 +#, fuzzy +msgid "SECS" +msgstr "amasogonda" + +#: gnulib/lib/argp-parse.c:85 +#, fuzzy +msgid "hang for SECS seconds (default 3600)" +msgstr "kugirango amasogonda Mburabuzi" + +#: gnulib/lib/argp-parse.c:142 +#, fuzzy +msgid "print program version" +msgstr "Porogaramu Verisiyo" + +#: gnulib/lib/argp-parse.c:159 +#, fuzzy +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(Verisiyo" + +#: gnulib/lib/argp-parse.c:612 +#, fuzzy, c-format +msgid "%s: Too many arguments\n" +msgstr "ingingo" + +#: gnulib/lib/argp-parse.c:755 +#, fuzzy +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(Verisiyo" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s:Ihitamo ni" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s:Ihitamo Kwemerera" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s:Ihitamo Kwemerera" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s:Ihitamo" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s:Ihitamo" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s:Ihitamo" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s:Sibyo Ihitamo" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s:Ihitamo" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s:Ihitamo ni" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s:Ihitamo Kwemerera" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s:Ihitamo" + +#, fuzzy +#~ msgid "invalid argument %s for %s" +#~ msgstr "Sibyo kugirango" + +#, fuzzy +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "kugirango" + +#, fuzzy +#~ msgid "Valid arguments are:" +#~ msgstr "ingingo" + +# 4952 +#, fuzzy +#~ msgid "program error" +#~ msgstr "Ikosa ryo mu Isoma" + +# svtools/source\misc\errtxt.src:RID_ERRHDL.ERRCODE_CLASS_WRITE.text +#, fuzzy +#~ msgid "write error" +#~ msgstr "Kwandika ikosa" + +#, fuzzy +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "Gufungura kugirango" + +#, fuzzy +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "Gufungura kugirango" + +#, fuzzy +#~ msgid "error reading \"%s\"" +#~ msgstr "Ikosa" + +#, fuzzy +#~ msgid "error writing \"%s\"" +#~ msgstr "Ikosa" + +#, fuzzy +#~ msgid "error after reading \"%s\"" +#~ msgstr "Ikosa" + +#, fuzzy +#~ msgid "fdopen() failed" +#~ msgstr "Gufungura Byanze" + +#, fuzzy +#~ msgid "%s subprocess failed" +#~ msgstr "%s:Byanze" + +#, fuzzy +#~ msgid "regular empty file" +#~ msgstr "Ibisanzwe ubusa IDOSIYE" + +#, fuzzy +#~ msgid "regular file" +#~ msgstr "Ibisanzwe IDOSIYE" + +# svtools/source\dialogs\filedlg2.src:STR_FILEDLG_DIR.text +#, fuzzy +#~ msgid "directory" +#~ msgstr "Ububiko" + +#, fuzzy +#~ msgid "block special file" +#~ msgstr "Funga Bidasanzwe IDOSIYE" + +#, fuzzy +#~ msgid "character special file" +#~ msgstr "Inyuguti Bidasanzwe IDOSIYE" + +#, fuzzy +#~ msgid "symbolic link" +#~ msgstr "Ihuza" + +#, fuzzy +#~ msgid "message queue" +#~ msgstr "Ubutumwa Umurongo" + +#, fuzzy +#~ msgid "shared memory object" +#~ msgstr "Ububiko Igikoresho" + +#, fuzzy +#~ msgid "typed memory object" +#~ msgstr "Ububiko Igikoresho" + +#, fuzzy +#~ msgid "weird file" +#~ msgstr "IDOSIYE" + +#, fuzzy +#~ msgid "Address family for hostname not supported" +#~ msgstr "Idosiye OYA" + +#, fuzzy +#~ msgid "ai_family not supported" +#~ msgstr "Idosiye OYA" + +#, fuzzy +#~ msgid "Memory allocation failure" +#~ msgstr "Byanze" + +#, fuzzy +#~ msgid "ai_socktype not supported" +#~ msgstr "Idosiye OYA" + +# svtools/source\misc\errtxt.src:RID_ERRHDL.ERRCODE_CLASS_WRITE.text +#, fuzzy +#~ msgid "System error" +#~ msgstr "Kwandika ikosa" + +#, fuzzy +#~ msgid "Request not canceled" +#~ msgstr "Ikintu OYA Byabonetse" + +#, fuzzy +#~ msgid "Unknown error" +#~ msgstr "Sisitemu Ikosa" + +#, fuzzy +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s:Ihitamo" + +#, fuzzy +#~ msgid "block size" +#~ msgstr "Funga Ingano" + +#, fuzzy +#~ msgid "%s exists but is not a directory" +#~ msgstr "%sni OYA a bushyinguro" + +#, fuzzy +#~ msgid "cannot change owner and/or group of %s" +#~ msgstr "Guhindura>> Na Cyangwa Itsinda Bya" + +#, fuzzy +#~ msgid "cannot create directory %s" +#~ msgstr "Kurema bushyinguro" + +#, fuzzy +#~ msgid "cannot chdir to directory %s" +#~ msgstr "Kuri bushyinguro" + +#, fuzzy +#~ msgid "cannot change permissions of %s" +#~ msgstr "Guhindura>> Uruhushya Bya" + +#, fuzzy +#~ msgid "memory exhausted" +#~ msgstr "Ububiko" + +#, fuzzy +#~ msgid "unable to record current working directory" +#~ msgstr "Kuri Icyabitswe KIGEZWEHO bushyinguro" + +#, fuzzy +#~ msgid "failed to return to initial working directory" +#~ msgstr "Byanze Kuri Garuka Kuri bushyinguro" + +#, fuzzy +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "%s:Byanze Kuri Gufungura kugirango" + +#, fuzzy +#~ msgid "cannot create pipe" +#~ msgstr "Kurema Ihuza" + +# basctl/source\basicide\basidesh.src:RID_IMGBTN_REMOVEWATCH.text +#, fuzzy +#~ msgid "`" +#~ msgstr "`" + +#~ msgid "'" +#~ msgstr "'" + +#~ msgid "Success" +#~ msgstr "Ibyatunganye" + +#, fuzzy +#~ msgid "Invalid regular expression" +#~ msgstr "%s:Sibyo Ibisanzwe imvugo" + +#, fuzzy +#~ msgid "Invalid character class name" +#~ msgstr "Sibyo Inyuguti ishuri" + +#, fuzzy +#~ msgid "Invalid back reference" +#~ msgstr "Umubare utari wo" + +#, fuzzy +#~ msgid "Invalid range end" +#~ msgstr "Ipaji Urutonde" + +#, fuzzy +#~ msgid "Memory exhausted" +#~ msgstr "Ububiko" + +#, fuzzy +#~ msgid "Invalid preceding regular expression" +#~ msgstr "%s:Sibyo Ibisanzwe imvugo" + +#, fuzzy +#~ msgid "Premature end of regular expression" +#~ msgstr "Ikosa in Ibisanzwe imvugo Gushaka" + +#, fuzzy +#~ msgid "Regular expression too big" +#~ msgstr "%s:Sibyo Ibisanzwe imvugo" + +#, fuzzy +#~ msgid "No previous regular expression" +#~ msgstr "Ikosa in Ibisanzwe imvugo Gushaka" + +#, fuzzy +#~ msgid "iconv function not usable" +#~ msgstr "Umumaro OYA" + +#, fuzzy +#~ msgid "iconv function not available" +#~ msgstr "Umumaro OYA Bihari" + +#, fuzzy +#~ msgid "character out of range" +#~ msgstr "Inyuguti Inyuma Bya Urutonde" + +#, fuzzy +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "GUHINDURA U Kuri Inyuguti Gushyiraho" + +#, fuzzy +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "GUHINDURA U Kuri Inyuguti Gushyiraho" + +#, fuzzy +#~ msgid "invalid user" +#~ msgstr "Sibyo Ukoresha:" + +#, fuzzy +#~ msgid "invalid group" +#~ msgstr "Sibyo Itsinda" + +#, fuzzy +#~ msgid "cannot get the login group of a numeric UID" +#~ msgstr "Kubona i Ifashayinjira Itsinda Bya a Bikurikije umubare" + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "This is free software. You may redistribute copies of it under the terms " +#~ "of\n" +#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "Porogaramu ni Kigenga Na Cyangwa i Bya i Nka Verisiyo 2. Cyangwa ku " +#~ "Ihitamo Verisiyo" + +#, fuzzy +#~ msgid "Written by %s.\n" +#~ msgstr "ku" + +#, fuzzy +#~ msgid "Written by %s and %s.\n" +#~ msgstr "ku Na" + +#, fuzzy +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "ku Na" + +#, fuzzy +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "ku Na" + +#, fuzzy +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "ku Na" + +#, fuzzy +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, and %s.\n" +#~ msgstr "ku Na" + +#, fuzzy +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, and %s.\n" +#~ msgstr "ku Na" + +#, fuzzy +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "ku Na" + +#, fuzzy +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "ku Na" + +#, fuzzy +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, and others.\n" +#~ msgstr "ku Na Ibindi" + +#, fuzzy +#~ msgid "string comparison failed" +#~ msgstr "Ikurikiranyanyuguti Byanze" + +#, fuzzy +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "Kuri Akazi i" + +#, fuzzy +#~ msgid "The strings compared were %s and %s." +#~ msgstr "Ikurikiranyanyuguti Na" diff --git a/gnulib/po/sk.po b/gnulib/po/sk.po new file mode 100644 index 0000000..21578fd --- /dev/null +++ b/gnulib/po/sk.po @@ -0,0 +1,435 @@ +# Slovak translations for GNU textutils +# Copyright (C) 1996 Free Software Foundation, Inc. +# Miroslav Vasko <vasko@debian.cz>, 1999 +# +msgid "" +msgstr "" +"Project-Id-Version: textutils 2.0.14\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2001-06-08 22:10 +02:00\n" +"Last-Translator: Stanislav Meduna <stano@trillian.eunet.sk>\n" +"Language-Team: Slovak <sk-i18n@rak.isternet.sk>\n" +"Language: sk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-2\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "" + +#: gnulib/lib/argp-help.c:1247 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr "" + +#: gnulib/lib/argp-help.c:1656 +#, fuzzy +msgid " [OPTION...]" +msgstr "Pouitie: %s [PREPNA] [SBOR]...\n" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Viac informci zskate prkazom `%s --help'.\n" + +#: gnulib/lib/argp-help.c:1711 +#, fuzzy, c-format +msgid "Report bugs to %s.\n" +msgstr "" +"\n" +" Chyby v programe oznamujte na adrese <bug-textutils@gnu.org> (iba\n" +"anglicky), pripomienky k prekladu zasielajte na adresu <sk@li.org> " +"(slovensky)." + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "Neznma systmov chyba" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "" + +#: gnulib/lib/argp-parse.c:142 +#, fuzzy +msgid "print program version" +msgstr "chyba pri tan" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "" + +#: gnulib/lib/argp-parse.c:612 +#, fuzzy, c-format +msgid "%s: Too many arguments\n" +msgstr "prli vea argumentov" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: voba `%s' nie je jednoznan\n" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: prepna `--%s' nepovouje argument\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: prepna `%c%s' nepovouje argument\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: prepna `%s' vyaduje argument\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: neznmy prepna `--%s'\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: neznmy prepna `%c%s'\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: chybn prepna -- %c\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: prepna vyaduje argument -- %c\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: prepna `-W %s' nie je jednoznan\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: prepna `-W %s' nepovouje argument\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: prepna `%s' vyaduje argument\n" + +#, fuzzy +#~ msgid "invalid argument %s for %s" +#~ msgstr "chybn argument %s pre `%s'" + +#, fuzzy +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "nejednoznan argument %s pre `%s'" + +#~ msgid "Valid arguments are:" +#~ msgstr "Platn argumenty s:" + +#, fuzzy +#~ msgid "program error" +#~ msgstr "chyba pri tan" + +#~ msgid "write error" +#~ msgstr "chyba pri zpise" + +#, fuzzy +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "nie je mon otvori %s pre tanie" + +#, fuzzy +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "nie je mon otvori %s pre tanie" + +#, fuzzy +#~ msgid "error reading \"%s\"" +#~ msgstr "chyba pri tan %s" + +#, fuzzy +#~ msgid "error writing \"%s\"" +#~ msgstr "chyba pri zpise %s" + +#, fuzzy +#~ msgid "error after reading \"%s\"" +#~ msgstr "chyba pri tan %s" + +#, fuzzy +#~ msgid "fdopen() failed" +#~ msgstr "zlyhalo otvorenie" + +#, fuzzy +#~ msgid "%s subprocess failed" +#~ msgstr "%s: chybn vzor" + +#, fuzzy +#~ msgid "regular empty file" +#~ msgstr "zlyhalo tanie" + +#, fuzzy +#~ msgid "regular file" +#~ msgstr "zlyhalo tanie" + +#, fuzzy +#~ msgid "directory" +#~ msgstr "Adresr: " + +#, fuzzy +#~ msgid "block special file" +#~ msgstr "vekos bloku" + +#, fuzzy +#~ msgid "character special file" +#~ msgstr "pozcia znaku je nula" + +#, fuzzy +#~ msgid "symbolic link" +#~ msgstr "ioctl na `%s' nie je mon vykona" + +#, fuzzy +#~ msgid "weird file" +#~ msgstr "zlyhalo tanie" + +#, fuzzy +#~ msgid "Address family for hostname not supported" +#~ msgstr "tento systm nepodporuje rry" + +#, fuzzy +#~ msgid "ai_family not supported" +#~ msgstr "tento systm nepodporuje rry" + +#, fuzzy +#~ msgid "ai_socktype not supported" +#~ msgstr "tento systm nepodporuje rry" + +#, fuzzy +#~ msgid "System error" +#~ msgstr "chyba pri zpise" + +#, fuzzy +#~ msgid "Unknown error" +#~ msgstr "Neznma systmov chyba" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: nepovolen prepna -- %c\n" + +#~ msgid "block size" +#~ msgstr "vekos bloku" + +#~ msgid "%s exists but is not a directory" +#~ msgstr "%s existuje, ale nie je adresrom" + +#~ msgid "cannot change owner and/or group of %s" +#~ msgstr "nie je mon zmeni pouvatea a/alebo skupinu %s" + +#~ msgid "cannot create directory %s" +#~ msgstr "nie je mon vytvori adresr %s" + +#, fuzzy +#~ msgid "cannot chdir to directory %s" +#~ msgstr "nie je mon vojs do adresra, %s" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "nie je mon zmeni prva %s" + +#~ msgid "memory exhausted" +#~ msgstr "vyerpan pam" + +#, fuzzy +#~ msgid "unable to record current working directory" +#~ msgstr "nie je mon vytvori adresr %s" + +#, fuzzy +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "nie je mon zmeni prva %s" + +#, fuzzy +#~ msgid "cannot create pipe" +#~ msgstr "nie je mon vytvori adresr %s" + +#~ msgid "`" +#~ msgstr "`" + +#~ msgid "'" +#~ msgstr "'" + +#, fuzzy +#~ msgid "Invalid regular expression" +#~ msgstr "%s: chybn regulrny vraz: %s" + +#, fuzzy +#~ msgid "Invalid character class name" +#~ msgstr "chybn trieda znaku `%s'" + +#, fuzzy +#~ msgid "Memory exhausted" +#~ msgstr "vyerpan pam" + +#, fuzzy +#~ msgid "Invalid preceding regular expression" +#~ msgstr "%s: chybn regulrny vraz: %s" + +#, fuzzy +#~ msgid "Premature end of regular expression" +#~ msgstr "chyba pri vyhadvan pomocou regulrneho vrazu" + +#, fuzzy +#~ msgid "Regular expression too big" +#~ msgstr "%s: chybn regulrny vraz: %s" + +#, fuzzy +#~ msgid "No previous regular expression" +#~ msgstr "chyba pri vyhadvan pomocou regulrneho vrazu" + +#~ msgid "^[yY]" +#~ msgstr "^[yYaA]" + +#~ msgid "^[nN]" +#~ msgstr "^[nN]" + +#, fuzzy +#~ msgid "iconv function not usable" +#~ msgstr "nie je mon vypsa U+%04X: funkcia iconv nie je pouiten" + +#, fuzzy +#~ msgid "iconv function not available" +#~ msgstr "nie je mon vypsa U+%04X: funkcia iconv nie je dostupn" + +#, fuzzy +#~ msgid "character out of range" +#~ msgstr "U+%04X: znak je mimo rozsah" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "nie je mon konvertova U+%04X do loklnej znakovej sady" + +#, fuzzy +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "nie je mon konvertova U+%04X do loklnej znakovej sady" + +#~ msgid "invalid user" +#~ msgstr "neplatn pouvate" + +#~ msgid "invalid group" +#~ msgstr "neplatn skupina" + +#~ msgid "cannot get the login group of a numeric UID" +#~ msgstr "nie je mon uri skupinu selnho UID" + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "This is free software. You may redistribute copies of it under the terms " +#~ "of\n" +#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ " Tento program je von programov vybavenie; mete ho ri a " +#~ "modifikova\n" +#~ "poda podmienok Veobecnej verejnej licencie GNU, vydvanej Free " +#~ "Software\n" +#~ "Foundation; a to bu verzie 2 tejto licencie alebo (poda vho " +#~ "uvenia),\n" +#~ "ktorejkovek neskorej verzie.\n" +#~ "\n" +#~ " Tento program je rozirovan v ndeji, e bude uiton, avak BEZ " +#~ "AKEJKOVEK\n" +#~ "ZRUKY; neposkytuj sa ani odvoden zruky PREDAJNOSTI alebo VHODNOSTI " +#~ "PRE\n" +#~ "NEJAK KONKRTNY EL. aie podrobnosti njdete vo Veobecnej verejnej\n" +#~ "licencii GNU.\n" +#~ "\n" +#~ " Kpia Veobecnej verejnej licencie GNU mala by dodan spolu s tmto\n" +#~ "programom; pokia sa tak nestalo, napte do Free Software Foundation, " +#~ "Inc.,\n" +#~ "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n" + +#~ msgid "Written by %s.\n" +#~ msgstr "Napsal %s.\n" + +#, fuzzy +#~ msgid "Written by %s and %s.\n" +#~ msgstr "Napsal %s.\n" + +#, fuzzy +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "Napsal %s.\n" + +#, fuzzy +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "Napsal %s.\n" + +#, fuzzy +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "Napsal %s.\n" + +#, fuzzy +#~ msgid "string comparison failed" +#~ msgstr "zlyhal stat" + +#, fuzzy +#~ msgid "The strings compared were %s and %s." +#~ msgstr "nie je mon vytvori odkaz %s" diff --git a/gnulib/po/sl.po b/gnulib/po/sl.po new file mode 100644 index 0000000..3a6a12e --- /dev/null +++ b/gnulib/po/sl.po @@ -0,0 +1,819 @@ +# -*- mode: po; coding: utf-8; -*- Slovenian message catalog for GNUlib. +# Copyright (C) 2005, 2007, 2009, 2012 Free Software Foundation, Inc. +# This file is distributed under the same license as the gnulib package. +# Primož Peterlin <primozz.peterlin@gmail.com>, 2005, 2007, 2009, 2012. +# $Id: gnulib-3.0.0.6062.a6b16.sl.po,v 1.5 2012/05/20 11:08:36 peterlin Exp $ +# +msgid "" +msgstr "" +"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2012-05-20 13:08+0200\n" +"Last-Translator: Primož Peterlin <primozz.peterlin@gmail.com>\n" +"Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n" +"Language: sl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n" +"%100==4 ? 3 : 0);\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: vrednost %s je manjša ali enaka %s" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: ARGP_HELP_FMT parameter zahteva vrednost" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: ARGP_HELP_FMT parameter mora biti pozitiven" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Neznan parameter ARGP_HELP_FMT" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Smetje v ARGP_HELP_FMT: %s" + +#: gnulib/lib/argp-help.c:1247 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Argumenti, navedeni kot obvezni ali neobvezni pri dolgi obliki izbire, so " +"obvezni ali neobvezni tudi pri vseh odgovarjajočih kratkih oblikah." + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "Uporaba:" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr " ali: " + +#: gnulib/lib/argp-help.c:1656 +msgid " [OPTION...]" +msgstr " [IZBIRA...]" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Poskusite »%s --help« ali »%s --usage« za izčrpnejša navodila.\n" + +#: gnulib/lib/argp-help.c:1711 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Poročila o napakah: %s\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "Neznana sistemska napaka" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "poda ta seznam pomoči" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "poda kratka navodila" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "IME" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "nastavi ime programa" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "SEK" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "zastane za SEK sekund (privzeto 3600)" + +#: gnulib/lib/argp-parse.c:142 +msgid "print program version" +msgstr "izpiše različico programa" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(PROGRAMSKA NAPAKA) Različice ni moč ugotoviti?!" + +#: gnulib/lib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Preveč argumentov\n" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(PROGRAMSKA NAPAKA) Izbire bi morali prepoznati?!" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: izbira »%s« je dvoumna; možnosti:" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: izbira »--%s« ne dovoljuje argumenta\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: izbira »%c%s« ne dovoljuje argumenta\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: izbira »--%s« zahteva argument\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: neprepoznana izbira »--%s«\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: neprepoznana izbira »%c%s«\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: neveljavna izbira -- '%c'\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: izbira zahteva argument -- '%c'\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: izbira »-W %s« je dvoumna\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: izbira »-W %s« ne dovoljuje argumenta\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: izbira »-W %s« zahteva argument\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "neveljavni argument %s za %s" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "dvoumni argument %s za %s" + +#~ msgid "Valid arguments are:" +#~ msgstr "Veljavni argumenti so:" + +#~ msgid "program error" +#~ msgstr "napaka v programu" + +#~ msgid "stack overflow" +#~ msgstr "prekoračitev sklada" + +#~ msgid "cannot find a temporary directory, try setting $TMPDIR" +#~ msgstr "začasnega imenika ni moč najti, poskusite nastaviti $TMPDIR" + +#~ msgid "cannot create a temporary directory using template \"%s\"" +#~ msgstr "začasnega imenika z uporabo šablone \"%s\" ni mogoče ustvariti" + +#~ msgid "cannot remove temporary file %s" +#~ msgstr "začasne datoteke v %s ni mogoče odstraniti" + +#~ msgid "cannot remove temporary directory %s" +#~ msgstr "začasnega imenika %s ni mogoče odstraniti" + +#~ msgid "error closing file" +#~ msgstr "napaka pri zapiranju datoteke" + +#~ msgid "write error" +#~ msgstr "napaka pri pisanju" + +#~ msgid "preserving permissions for %s" +#~ msgstr "ohranjena dovoljenja za %s" + +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "napaka pri odpiranju datoteke \"%s\" za branje" + +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "varnostne kopije \"%s\" ni mogoče odpreti za pisanje" + +#~ msgid "error reading \"%s\"" +#~ msgstr "napaka pri branju \"%s\"" + +#~ msgid "error writing \"%s\"" +#~ msgstr "napaka pri pisanju na \"%s\"" + +#~ msgid "error after reading \"%s\"" +#~ msgstr "napaka po branju \"%s\"" + +#~ msgid "fdopen() failed" +#~ msgstr "klic fdopen() ni uspel" + +#~ msgid "C# compiler not found, try installing pnet" +#~ msgstr "prevajalnika za C# ni najti, namestite pnet" + +#~ msgid "C# virtual machine not found, try installing pnet" +#~ msgstr "virtualnega stroja C# ni najti, namestite pnet" + +#~ msgid "%s subprocess failed" +#~ msgstr "podproces %s ni uspel" + +#~ msgid "regular empty file" +#~ msgstr "navadna prazna datoteka" + +#~ msgid "regular file" +#~ msgstr "navadna datoteka" + +#~ msgid "directory" +#~ msgstr "imenik" + +#~ msgid "block special file" +#~ msgstr "bločna enota" + +#~ msgid "character special file" +#~ msgstr "znakovna enota" + +#~ msgid "fifo" +#~ msgstr "FIFO" + +# ! INEXACT +#~ msgid "symbolic link" +#~ msgstr "simbolna povezava" + +#~ msgid "socket" +#~ msgstr "vtičnica" + +#~ msgid "message queue" +#~ msgstr "vrsta sporočil" + +#~ msgid "semaphore" +#~ msgstr "semafor" + +#~ msgid "shared memory object" +#~ msgstr "deljen pomnilniški predmet" + +#~ msgid "typed memory object" +#~ msgstr "tipiziran pomnilniški predmet" + +#~ msgid "weird file" +#~ msgstr "čudna datoteka" + +#~ msgid "Address family for hostname not supported" +#~ msgstr "Družina naslovov za ime gostitelja ni podprta" + +#~ msgid "Temporary failure in name resolution" +#~ msgstr "Razreševanje imena začasno ni uspelo" + +#~ msgid "Bad value for ai_flags" +#~ msgstr "Slaba vrednost ai_flags" + +#~ msgid "Non-recoverable failure in name resolution" +#~ msgstr "Nepopravljiv neuspeh pri razreševanju imena" + +#~ msgid "ai_family not supported" +#~ msgstr "ai_family ni podprt" + +#~ msgid "Memory allocation failure" +#~ msgstr "Dodelitev pomnilnika ni uspela" + +#~ msgid "No address associated with hostname" +#~ msgstr "Z imenom gostitelja ni povezan noben naslov" + +#~ msgid "Name or service not known" +#~ msgstr "Ime ali storitev ni poznana" + +#~ msgid "Servname not supported for ai_socktype" +#~ msgstr "Servname ni podprt za ai_socktype" + +#~ msgid "ai_socktype not supported" +#~ msgstr "ai_socktype ni podprt" + +#~ msgid "System error" +#~ msgstr "Sistemska napaka" + +#~ msgid "Argument buffer too small" +#~ msgstr "Medpomnilnik za argumente premajhen" + +#~ msgid "Processing request in progress" +#~ msgstr "Obdelava zahtevka v teku" + +#~ msgid "Request canceled" +#~ msgstr "Zahtevek preklican" + +#~ msgid "Request not canceled" +#~ msgstr "Zahtevek ni preklican" + +#~ msgid "All requests done" +#~ msgstr "Vsi zahtevki obdelani" + +#~ msgid "Interrupted by a signal" +#~ msgstr "Prekinjeno s signalom" + +#~ msgid "Parameter string not correctly encoded" +#~ msgstr "Parametrični niz nepravilno kodiran" + +#~ msgid "Unknown error" +#~ msgstr "Neznana napaka" + +#~ msgid "invalid source_version argument to compile_java_class" +#~ msgstr "neveljaven argument source_version za compile_java_class" + +#~ msgid "invalid target_version argument to compile_java_class" +#~ msgstr "neveljaven argument target_version za compile_java_class" + +#~ msgid "failed to create \"%s\"" +#~ msgstr "ni mogoče ustvariti \"%s\"" + +#~ msgid "error while writing \"%s\" file" +#~ msgstr "napaka pri pisanju na datoteko \"%s\"" + +#~ msgid "Java compiler not found, try installing gcj or set $JAVAC" +#~ msgstr "prevajalnika za Javo ni najti, nastavite $JAVAC ali namestite gcj" + +#~ msgid "Java virtual machine not found, try installing gij or set $JAVA" +#~ msgstr "" +#~ "virtualnega stroja za Javo ni najti, nastavite $JAVA ali namestite gij" + +#~ msgid "%s subprocess I/O error" +#~ msgstr "V/I napaka podprocesa %s" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "dovoljenj %s ni mogoče spremeniti" + +#~ msgid "cannot create directory %s" +#~ msgstr "imenika %s ni mogoče ustvariti" + +# ! INEXACT +#~ msgid "memory exhausted" +#~ msgstr "zmanjkalo pomnilnika" + +#~ msgid "unable to record current working directory" +#~ msgstr "ni mogoče zabeležiti trenutnega delovnega imenika" + +#~ msgid "failed to return to initial working directory" +#~ msgstr "vrnitev v začetni delovni imenik ni uspela" + +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "Datoteke /dev/null ni uspelo odpreti za branje" + +#~ msgid "creation of reading thread failed" +#~ msgstr "niti za pisanje ni bilo mogoče ustvariti" + +#~ msgid "cannot set up nonblocking I/O to %s subprocess" +#~ msgstr "neblokiranega V/I za podproces %s ni mogoče nastaviti" + +#~ msgid "communication with %s subprocess failed" +#~ msgstr "komunikacija s podprocesom %s ni uspela" + +#~ msgid "write to %s subprocess failed" +#~ msgstr "pisanje na podproces %s ni uspelo" + +#~ msgid "read from %s subprocess failed" +#~ msgstr "branje s podprocesa %s ni uspelo" + +#~ msgid "subprocess %s terminated with exit code %d" +#~ msgstr "podproces %s se je zaključil z izhodno kodo %d" + +#~ msgid "creation of threads failed" +#~ msgstr "ustvarjanje niti ni uspelo" + +#~ msgid "%s subprocess terminated with exit code %d" +#~ msgstr "%s podproces se je zaključil z izhodno kodo %d" + +#~ msgid "Franc,ois Pinard" +#~ msgstr "François Pinard" + +#~ msgid "`" +#~ msgstr "»" + +#~ msgid "'" +#~ msgstr "«" + +#~ msgid "Success" +#~ msgstr "Uspešno" + +#~ msgid "No match" +#~ msgstr "Brez zadetkov" + +#~ msgid "Invalid regular expression" +#~ msgstr "Neveljaven regularni izraz" + +#~ msgid "Invalid collation character" +#~ msgstr "Neveljaven razvrščevalni znak" + +#~ msgid "Invalid character class name" +#~ msgstr "Neveljavno ime razreda znakov" + +#~ msgid "Trailing backslash" +#~ msgstr "Zaključna obratna poševnica" + +#~ msgid "Invalid back reference" +#~ msgstr "Neveljaven povratni sklic" + +#~ msgid "Unmatched [ or [^" +#~ msgstr "Uklepaj [ ali [^ brez para" + +#~ msgid "Unmatched ( or \\(" +#~ msgstr "Uklepaj ( ali \\( brez para" + +#~ msgid "Unmatched \\{" +#~ msgstr "Uklepaj \\{ brez para" + +#~ msgid "Invalid content of \\{\\}" +#~ msgstr "Neveljavna vsebina \\{\\}" + +#~ msgid "Invalid range end" +#~ msgstr "Neveljaven konec razpona" + +# ! INEXACT +#~ msgid "Memory exhausted" +#~ msgstr "Pomnilnik izčrpan" + +#~ msgid "Invalid preceding regular expression" +#~ msgstr "Neveljaven predhodni regularni izraz" + +#~ msgid "Premature end of regular expression" +#~ msgstr "Predčasen zaključek regularnega izraza" + +#~ msgid "Regular expression too big" +#~ msgstr "Regularni izraz je preobsežen" + +#~ msgid "Unmatched ) or \\)" +#~ msgstr "Zaklepaj ) ali \\) brez para" + +#~ msgid "No previous regular expression" +#~ msgstr "Prejšnjega regularnega izraza ni" + +#~ msgid "^[yY]" +#~ msgstr "^[jJdD]" + +#~ msgid "^[nN]" +#~ msgstr "^[nN]" + +#~ msgid "setting permissions for %s" +#~ msgstr "nastavljena dovoljenja za %s" + +#~ msgid "Hangup" +#~ msgstr "Odklop" + +#~ msgid "Interrupt" +#~ msgstr "Prekinitev" + +#~ msgid "Quit" +#~ msgstr "Končanje" + +#~ msgid "Illegal instruction" +#~ msgstr "Nedovoljen ukaz" + +#~ msgid "Trace/breakpoint trap" +#~ msgstr "Past" + +#~ msgid "Aborted" +#~ msgstr "Prekinjen" + +#~ msgid "Floating point exception" +#~ msgstr "Prekoračitev plavajoče vejice" + +#~ msgid "Killed" +#~ msgstr "Pobit" + +#~ msgid "Bus error" +#~ msgstr "Napaka vodila" + +#~ msgid "Segmentation fault" +#~ msgstr "Napaka segmentacije" + +#~ msgid "Broken pipe" +#~ msgstr "Prekinjen cevovod" + +#~ msgid "Alarm clock" +#~ msgstr "Budilka" + +#~ msgid "Terminated" +#~ msgstr "Zaključen" + +#~ msgid "Urgent I/O condition" +#~ msgstr "Nujno V/I stanje" + +#~ msgid "Stopped (signal)" +#~ msgstr "Ustavljen (signal)" + +#~ msgid "Stopped" +#~ msgstr "Ustavljen" + +#~ msgid "Continued" +#~ msgstr "Nadaljevan" + +#~ msgid "Child exited" +#~ msgstr "Izhod nasledniškega procesa" + +#~ msgid "Stopped (tty input)" +#~ msgstr "Ustavljen (vhod TTY)" + +#~ msgid "Stopped (tty output)" +#~ msgstr "Ustavljen (izhod TTY)" + +#~ msgid "I/O possible" +#~ msgstr "Mogoč V/I" + +#~ msgid "CPU time limit exceeded" +#~ msgstr "Presežena omejitev procesorskega časa" + +#~ msgid "File size limit exceeded" +#~ msgstr "Presežena omejitev dolžine datoteke" + +#~ msgid "Virtual timer expired" +#~ msgstr "Iztek virtualne štoparice" + +#~ msgid "Profiling timer expired" +#~ msgstr "Iztek profilirne štoparice" + +#~ msgid "Window changed" +#~ msgstr "Zamenjano okno" + +#~ msgid "User defined signal 1" +#~ msgstr "Uporabniški signal 1" + +#~ msgid "User defined signal 2" +#~ msgstr "Uporabniški signal 2" + +#~ msgid "EMT trap" +#~ msgstr "Past EMT" + +#~ msgid "Bad system call" +#~ msgstr "Slab sistemski klic" + +#~ msgid "Stack fault" +#~ msgstr "Napaka sklada" + +#~ msgid "Information request" +#~ msgstr "Informacijski zahtevek" + +#~ msgid "Power failure" +#~ msgstr "Izpad toka" + +#~ msgid "Resource lost" +#~ msgstr "Vir izgubljen" + +#~ msgid "error writing to a closed pipe or socket" +#~ msgstr "napaka pri pisanju na zaprt cevovod ali vtič" + +#~ msgid "cannot create pipe" +#~ msgstr "ni mogoče ustvariti cevovoda" + +#~ msgid "Real-time signal %d" +#~ msgstr "Realnočasovni signal %d" + +#~ msgid "Unknown signal %d" +#~ msgstr "Neznani signal %d" + +#~ msgid "iconv function not usable" +#~ msgstr "funkcija iconv ne deluje" + +#~ msgid "iconv function not available" +#~ msgstr "funkcija iconv ni na voljo" + +#~ msgid "character out of range" +#~ msgstr "koda znaka izven obsega" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "znaka s kodo U+%04X ni mogoče pretvoriti v lokalni nabor znakov" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "znaka s kodo U+%04X ni moč pretvoriti v lokalni nabor znakov: %s" + +#~ msgid "invalid user" +#~ msgstr "neveljavno uporabniško ime" + +#~ msgid "invalid group" +#~ msgstr "neveljavno ime skupine" + +#~ msgid "invalid spec" +#~ msgstr "neveljavna specifikacija" + +#~ msgid "unable to display error message" +#~ msgstr "sporočila o napaki ni mogoče prikazati" + +#~ msgid "Packaged by %s (%s)\n" +#~ msgstr "Priprava paketa: %s (%s)\n" + +#~ msgid "Packaged by %s\n" +#~ msgstr "Priprava paketa: %s\n" + +#~ msgid "(C)" +#~ msgstr "©" + +#~ msgid "" +#~ "\n" +#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +#~ "html>.\n" +#~ "This is free software: you are free to change and redistribute it.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "GPLv3+: GNU GPL, 3. izdaja ali poznejša <http://www.gnu.org/licenses/gpl." +#~ "html>\n" +#~ "To je prosto programje; lahko ga redistribuirate in/ali spreminjate.\n" +#~ "Za izdelek ni NOBENEGA JAMSTVA, do z zakonom dovoljene meje.\n" +#~ "\n" + +#~ msgid "Written by %s.\n" +#~ msgstr "Avtor(ica): %s.\n" + +#~ msgid "Written by %s and %s.\n" +#~ msgstr "Avtorja: %s in %s.\n" + +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "Avtorji: %s, %s in %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Avtorji: %s, %s, %s\n" +#~ "in %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Avtorji: %s, %s, %s,\n" +#~ "%s in %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, and %s.\n" +#~ msgstr "" +#~ "Avtorji: %s, %s, %s,\n" +#~ "%s, %s in %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, and %s.\n" +#~ msgstr "" +#~ "Avtorji: %s, %s, %s,\n" +#~ "%s, %s, %s in %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Avtorji: %s, %s, %s,\n" +#~ "%s, %s, %s, %s\n" +#~ "in %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Avtorji: %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s in %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, and others.\n" +#~ msgstr "" +#~ "Avtorji: %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s in drugi.\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to: %s\n" +#~ msgstr "" +#~ "\n" +#~ "Poročila o napakah: %s\n" +#~ "Napake v prevodu sporočite na <translation-team-sl@lists.sourceforge." +#~ "net>.\n" + +#~ msgid "Report %s bugs to: %s\n" +#~ msgstr "" +#~ "Napake v programu %s sporočite na: %s\n" +#~ "Napake v prevodu sporočite na <translation-team-sl@lists.sourceforge." +#~ "net>.\n" + +#~ msgid "%s home page: <%s>\n" +#~ msgstr "Domača stran %s: <%s>\n" + +#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +#~ msgstr "Spletna stran %s: <http://www.gnu.org/software/%s/>.\n" + +#~ msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +#~ msgstr "" +#~ "Splošna pomoč za rabo programja GNU: <http://www.gnu.org/gethelp/>.\n" + +#~ msgid "_open_osfhandle failed" +#~ msgstr "klic _open_osfhandle ni uspel" + +#~ msgid "cannot restore fd %d: dup2 failed" +#~ msgstr "ni mogoče obnoviti fd %d: klic dup2 ni uspel" + +#~ msgid "%s subprocess" +#~ msgstr "podproces %s" + +#~ msgid "%s subprocess got fatal signal %d" +#~ msgstr "podproces %s je prejel terminalni signal %d" + +#~ msgid "stdin" +#~ msgstr "standardni vhod" + +#~ msgid "stdout" +#~ msgstr "standardni izhod" + +#~ msgid "stderr" +#~ msgstr "standardna izhod za napake" + +#~ msgid "unknown stream" +#~ msgstr "neznani tok" + +#~ msgid "failed to reopen %s with mode %s" +#~ msgstr "ponovno odpiranje %s v načinu %s ni uspelo" + +#~ msgid "string comparison failed" +#~ msgstr "primerjanje nizov ni uspelo" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "Nastavite LC_ALL='C', da bi odpravili težavo." + +#~ msgid "The strings compared were %s and %s." +#~ msgstr "Primerjana niza sta bila %s in %s." + +#~ msgid "cannot perform formatted output" +#~ msgstr "oblikovanega izpisa ni mogoče izvesti" + +#~ msgid "invalid %s%s argument `%s'" +#~ msgstr "neveljavni %s%s argument »%s«" + +#~ msgid "invalid suffix in %s%s argument `%s'" +#~ msgstr "neveljavna pripona pri %s%s argumentu »%s«" + +#~ msgid "%s%s argument `%s' too large" +#~ msgstr "%s%s: argument »%s« je prevelik" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: nedovoljena izbira -- %c\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "" +#~ "\n" +#~ "Napake v programu sporočite na %s.\n" +#~ "Napake v prevodu sporočite na <translation-team-sl@lists.sourceforge." +#~ "net>.\n" + +#~ msgid "block size" +#~ msgstr "velikost bloka" + +#~ msgid "%s exists but is not a directory" +#~ msgstr "%s obstaja, vendar ni imenik" + +# ! INEXACT +#~ msgid "cannot change owner and/or group of %s" +#~ msgstr "lastnika in/ali skupine %s ni mogoče spremeniti" + +#~ msgid "cannot chdir to directory %s" +#~ msgstr "dostop do imenika %s ni mogoč" + +#~ msgid "cannot get the login group of a numeric UID" +#~ msgstr "imena skupine, ki pripada številčnemu UID, ni mogoče ugotoviti" + +#~ msgid "" +#~ "\n" +#~ "This is free software. You may redistribute copies of it under the terms " +#~ "of\n" +#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "Ta program je prosta programska oprema; lahko ga redistribuirate in/ali\n" +#~ "spreminjate po pogojih, določenih v »GNU General Public License«, \n" +#~ "<http://www.gnu.org/licenses/gpl.html>. Za izdelek ni NOBENEGA JAMSTVA, " +#~ "do\n" +#~ "z zakonom dovoljene meje.\n" diff --git a/gnulib/po/sv.po b/gnulib/po/sv.po new file mode 100644 index 0000000..95212cf --- /dev/null +++ b/gnulib/po/sv.po @@ -0,0 +1,777 @@ +# Swedish messages for gnulib. +# Copyright © 1997, 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011 Free Software Foundation, Inc. +# This file is distributed under the same license as the gnulib package. +# Peter Antman <peter.antman@abc.se>, 1997. +# Thomas Olsson <cid95tho@lustudat.student.lu.se>, 1997. +# Daniel Resare <daniel@resare.com>, 1999, 2000. +# Göran Uddeborg <goeran@uddeborg.se>, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011. +# +# $Revision: 1.10 $ +# +msgid "" +msgstr "" +"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2011-08-22 19:16+0200\n" +"Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n" +"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: värdet på %s är mindre än eller lika med %s" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: ARGP_HELP_FMT parametern kräver ett värde" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: ARGP_HELP_FMT parametern måste vara positiv" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Okänd ARGP_HELP_FMT-parameter" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Skräp i ARGP_HELP_FMT: %s" + +#: gnulib/lib/argp-help.c:1247 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Obligatoriska eller valfria argument till långa flaggor är obligatoriska " +"eller valfria även för motsvarande korta flaggor." + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "Användning:" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr " eller: " + +#: gnulib/lib/argp-help.c:1656 +msgid " [OPTION...]" +msgstr " [FLAGGA...]" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Försök med ”%s --help” eller ”%s --usage” för mer information.\n" + +#: gnulib/lib/argp-help.c:1711 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "" +"Rapportera fel till %s.\n" +"Skicka synpunkter på översättningen till <tp-sv@listor.tp-sv.se>.\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "Okänt systemfel" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "ge denna hjälplista" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "ge ett kort användningsmeddelande" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "NAMN" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "ange programnamnet" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "S" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "häng i S sekunder (3600 som standard)" + +#: gnulib/lib/argp-parse.c:142 +msgid "print program version" +msgstr "skriv ut programversion" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(PROGRAMFEL) Ingen version känd!?" + +#: gnulib/lib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: För många argument\n" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(PROGRAMFEL) Flaggan borde ha känts igen!?" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: flaggan ”%s” är tvetydig: möjligheter:" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: flaggan ”--%s” tar inget argument\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: flaggan ”%c%s” tar inget argument\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: flaggan ”--%s” kräver ett argument\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: okänd flagga \"--%s\"\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: okänd flagga \"%c%s\"\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: ogiltig flagga -- \"%c\"\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: flaggan kräver ett argument -- \"%c\"\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: flaggan \"-W %s\" är tvetydig\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: flaggan \"-W %s\" tar inget argument\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: flaggan ”-W %s” kräver ett argument\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "felaktigt argument %s till %s" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "tvetydigt argument %s till %s" + +#~ msgid "Valid arguments are:" +#~ msgstr "Giltiga argument är:" + +#~ msgid "program error" +#~ msgstr "programfel" + +#~ msgid "stack overflow" +#~ msgstr "stackspill" + +#~ msgid "cannot find a temporary directory, try setting $TMPDIR" +#~ msgstr "kan inte hitta en temporärkatalog, försök sätta $TMPDIR" + +#~ msgid "cannot create a temporary directory using template \"%s\"" +#~ msgstr "kan inte skapa en temporärkatalog med användning av mallen ”%s”" + +#~ msgid "cannot remove temporary file %s" +#~ msgstr "kan inte ta bort temporärfil %s" + +#~ msgid "cannot remove temporary directory %s" +#~ msgstr "kan inte ta bort temporärkatalog %s" + +#~ msgid "error closing file" +#~ msgstr "fel när fil stängdes" + +#~ msgid "write error" +#~ msgstr "skrivfel" + +#~ msgid "preserving permissions for %s" +#~ msgstr "bevarar rättigheter på %s" + +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "fel när ”%s” öppnades för läsning" + +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "det går inte att öppna säkerthetskopiefil ”%s” för skrivning" + +#~ msgid "error reading \"%s\"" +#~ msgstr "fel vid läsning av ”%s”" + +#~ msgid "error writing \"%s\"" +#~ msgstr "fel vid skrivning av ”%s”" + +#~ msgid "error after reading \"%s\"" +#~ msgstr "fel efter läsning av ”%s”" + +#~ msgid "fdopen() failed" +#~ msgstr "fdopen() misslyckades" + +#~ msgid "C# compiler not found, try installing pnet" +#~ msgstr "C#-kompilator hittades inte, försök installera pnet" + +#~ msgid "C# virtual machine not found, try installing pnet" +#~ msgstr "virtuell C#-maskinen hittades inte, försök installera pnet" + +#~ msgid "%s subprocess failed" +#~ msgstr "%s-underprocess misslyckades" + +#~ msgid "regular empty file" +#~ msgstr "tom normal fil" + +#~ msgid "regular file" +#~ msgstr "normal fil" + +#~ msgid "directory" +#~ msgstr "katalog" + +#~ msgid "block special file" +#~ msgstr "blockspecialfil" + +#~ msgid "character special file" +#~ msgstr "teckenspecialfil" + +#~ msgid "fifo" +#~ msgstr "fifo" + +#~ msgid "symbolic link" +#~ msgstr "symbolisk länk" + +#~ msgid "socket" +#~ msgstr "uttag (socket)" + +#~ msgid "message queue" +#~ msgstr "meddelandekö" + +#~ msgid "semaphore" +#~ msgstr "semafor" + +#~ msgid "shared memory object" +#~ msgstr "objekt av delat minne" + +#~ msgid "typed memory object" +#~ msgstr "objekt av typat minne" + +#~ msgid "weird file" +#~ msgstr "konstig fil" + +#~ msgid "Address family for hostname not supported" +#~ msgstr "Adressfamiljen för värdnamnet stöds inte" + +#~ msgid "Temporary failure in name resolution" +#~ msgstr "Tillfälligt fel i namnuppslagning" + +#~ msgid "Bad value for ai_flags" +#~ msgstr "Felaktigt värde för ai_flags" + +#~ msgid "Non-recoverable failure in name resolution" +#~ msgstr "Oreparabelt fel i namnuppslagning" + +#~ msgid "ai_family not supported" +#~ msgstr "ai_family stöds inte" + +#~ msgid "Memory allocation failure" +#~ msgstr "Minnesallokeringsfel" + +#~ msgid "No address associated with hostname" +#~ msgstr "Ingen adress associerad med värdnamnet" + +#~ msgid "Name or service not known" +#~ msgstr "Namn eller tjänst inte känd" + +#~ msgid "Servname not supported for ai_socktype" +#~ msgstr "Servname stöds inte för ai_socktype" + +#~ msgid "ai_socktype not supported" +#~ msgstr "ai_socktype stöds inte" + +#~ msgid "System error" +#~ msgstr "Systemfel" + +#~ msgid "Argument buffer too small" +#~ msgstr "Argumentbufferten för liten" + +#~ msgid "Processing request in progress" +#~ msgstr "Bearbetar pågående begäran" + +#~ msgid "Request canceled" +#~ msgstr "Begäran annulerad" + +#~ msgid "Request not canceled" +#~ msgstr "Begäran inte annulerad" + +#~ msgid "All requests done" +#~ msgstr "Alla begäran utförda" + +#~ msgid "Interrupted by a signal" +#~ msgstr "Avbruten av en signal" + +#~ msgid "Parameter string not correctly encoded" +#~ msgstr "Parametersträng inte korrekt kodad" + +#~ msgid "Unknown error" +#~ msgstr "Okänt fel" + +#~ msgid "invalid source_version argument to compile_java_class" +#~ msgstr "ogiltigt source_version-argument till compile_java_class" + +#~ msgid "invalid target_version argument to compile_java_class" +#~ msgstr "ogiltigt target_version-argument till compile_java_class" + +#~ msgid "failed to create \"%s\"" +#~ msgstr "det gick inte att skapa \"%s\"" + +#~ msgid "error while writing \"%s\" file" +#~ msgstr "fel vid skrivning av filen ”%s”" + +#~ msgid "Java compiler not found, try installing gcj or set $JAVAC" +#~ msgstr "" +#~ "Javakompilator hittades inte, försök installera gcj eller sätta $JAVAC" + +#~ msgid "Java virtual machine not found, try installing gij or set $JAVA" +#~ msgstr "" +#~ "Virtuell Javamaskin hittades inte, försök installera gij eller sätta $JAVA" + +#~ msgid "%s subprocess I/O error" +#~ msgstr "%s-underprocess I/O-fel" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "kan inte ändra rättigheter på %s" + +#~ msgid "cannot create directory %s" +#~ msgstr "kan inte skapa katalogen %s" + +#~ msgid "memory exhausted" +#~ msgstr "minnet slut" + +#~ msgid "unable to record current working directory" +#~ msgstr "kan inte notera aktuell arbetskatalog" + +#~ msgid "failed to return to initial working directory" +#~ msgstr "kunde inte återvända till den ursprungliga arbetskatalogen" + +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "Misslyckades att öppna /dev/zero för läsning" + +#~ msgid "creation of reading thread failed" +#~ msgstr "att skapa lästråd misslyckades" + +#~ msgid "cannot set up nonblocking I/O to %s subprocess" +#~ msgstr "" +#~ "det gick inte att sätta upp icke blockerande I/O till %s-underprocess" + +#~ msgid "communication with %s subprocess failed" +#~ msgstr "kommunikation med %s-underprocess misslyckades" + +#~ msgid "write to %s subprocess failed" +#~ msgstr "skrivning till %s-underprocess misslyckades" + +#~ msgid "read from %s subprocess failed" +#~ msgstr "läsning från %s-underprocess misslyckades" + +#~ msgid "subprocess %s terminated with exit code %d" +#~ msgstr "underprocess %s avslutad med slutstatus %d" + +#~ msgid "creation of threads failed" +#~ msgstr "att skapa trådar misslyckades" + +#~ msgid "%s subprocess terminated with exit code %d" +#~ msgstr "%s-underprocess avslutad med slutstatus %d" + +#~ msgid "Franc,ois Pinard" +#~ msgstr "François Pinard" + +#~ msgid "`" +#~ msgstr "”" + +#~ msgid "'" +#~ msgstr "”" + +#~ msgid "Success" +#~ msgstr "Lyckades" + +#~ msgid "No match" +#~ msgstr "Ingen träff" + +#~ msgid "Invalid regular expression" +#~ msgstr "Felaktigt reguljärt uttryck" + +#~ msgid "Invalid collation character" +#~ msgstr "Ogiltigt sorteringstecken" + +#~ msgid "Invalid character class name" +#~ msgstr "Ogiltigt teckenklassnamn" + +#~ msgid "Trailing backslash" +#~ msgstr "Avslutande bakstreck" + +#~ msgid "Invalid back reference" +#~ msgstr "Ogiltig bakåtreferens" + +#~ msgid "Unmatched [ or [^" +#~ msgstr "Ensam [ eller [^" + +#~ msgid "Unmatched ( or \\(" +#~ msgstr "Ensam ( eller \\(" + +#~ msgid "Unmatched \\{" +#~ msgstr "Ensam \\\\{" + +#~ msgid "Invalid content of \\{\\}" +#~ msgstr "Ogiltigt innehåll i \\{\\}" + +#~ msgid "Invalid range end" +#~ msgstr "Ogiltigt intervallslut" + +#~ msgid "Memory exhausted" +#~ msgstr "Minnet slut" + +#~ msgid "Invalid preceding regular expression" +#~ msgstr "Felaktigt föregående reguljärt uttryck" + +#~ msgid "Premature end of regular expression" +#~ msgstr "Förtida slut av reguljärt uttryck" + +#~ msgid "Regular expression too big" +#~ msgstr "För stort reguljärt uttryck" + +#~ msgid "Unmatched ) or \\)" +#~ msgstr "Ensam ) eller \\)" + +#~ msgid "No previous regular expression" +#~ msgstr "Inget föregående reguljärt uttryck" + +#~ msgid "^[yY]" +#~ msgstr "^[yYjJ]" + +#~ msgid "^[nN]" +#~ msgstr "^[nN]" + +#~ msgid "setting permissions for %s" +#~ msgstr "ändrar rättigheter på %s" + +#~ msgid "Hangup" +#~ msgstr "Avringd" + +#~ msgid "Interrupt" +#~ msgstr "Avbruten" + +#~ msgid "Quit" +#~ msgstr "Lämnad" + +#~ msgid "Illegal instruction" +#~ msgstr "Otillåten instruktion" + +#~ msgid "Trace/breakpoint trap" +#~ msgstr "Spårnings-/brytpunktsfälla" + +#~ msgid "Aborted" +#~ msgstr "Avbruten (abort)" + +#~ msgid "Floating point exception" +#~ msgstr "Flyttalsundantag" + +#~ msgid "Killed" +#~ msgstr "Dödad" + +#~ msgid "Bus error" +#~ msgstr "Bussfel" + +#~ msgid "Segmentation fault" +#~ msgstr "Segmenteringsfel" + +#~ msgid "Broken pipe" +#~ msgstr "Brutet rör" + +#~ msgid "Alarm clock" +#~ msgstr "Alarmklocka" + +#~ msgid "Terminated" +#~ msgstr "Avslutad" + +#~ msgid "Urgent I/O condition" +#~ msgstr "Brådskande I/O-situation" + +#~ msgid "Stopped (signal)" +#~ msgstr "Stoppad (signal)" + +#~ msgid "Stopped" +#~ msgstr "Stoppad" + +#~ msgid "Continued" +#~ msgstr "Återupptagen" + +#~ msgid "Child exited" +#~ msgstr "Barn avslutade" + +#~ msgid "Stopped (tty input)" +#~ msgstr "Stoppad (terminalläsning)" + +#~ msgid "Stopped (tty output)" +#~ msgstr "Stoppad (terminalskrivning)" + +#~ msgid "I/O possible" +#~ msgstr "I/O möjligt" + +#~ msgid "CPU time limit exceeded" +#~ msgstr "Begränsning av CPU-tid överskriden" + +#~ msgid "File size limit exceeded" +#~ msgstr "Begränsning av filstorlek överskriden" + +#~ msgid "Virtual timer expired" +#~ msgstr "Alarmklocka - virtuell tid" + +#~ msgid "Profiling timer expired" +#~ msgstr "Profileringsklocka" + +#~ msgid "Window changed" +#~ msgstr "Ändrat fönster" + +#~ msgid "User defined signal 1" +#~ msgstr "Användarsignal 1" + +#~ msgid "User defined signal 2" +#~ msgstr "Användarsignal 2" + +#~ msgid "EMT trap" +#~ msgstr "Emulatorfälla" + +#~ msgid "Bad system call" +#~ msgstr "Felaktigt systemanrop" + +#~ msgid "Stack fault" +#~ msgstr "Stackfel" + +#~ msgid "Information request" +#~ msgstr "Informationsbegäran" + +#~ msgid "Power failure" +#~ msgstr "Strömavbrott" + +#~ msgid "Resource lost" +#~ msgstr "Förlorad resurs" + +#~ msgid "error writing to a closed pipe or socket" +#~ msgstr "fel vid skrivning till ett stängt rör eller uttag" + +#~ msgid "cannot create pipe" +#~ msgstr "kan inte skapa rör" + +#~ msgid "Real-time signal %d" +#~ msgstr "Realtidsignal %d" + +#~ msgid "Unknown signal %d" +#~ msgstr "Okänd signal %d" + +#~ msgid "iconv function not usable" +#~ msgstr "iconv-funktion inte användbar" + +#~ msgid "iconv function not available" +#~ msgstr "iconv-funktion inte tillgänglig" + +#~ msgid "character out of range" +#~ msgstr "tecken utanför intervall" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "kan inte konvertera U+%04X till lokal teckenuppsättning" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "kan inte konvertera U+%04X till lokal teckenuppsättning: %s" + +#~ msgid "invalid user" +#~ msgstr "ogiltig användare" + +#~ msgid "invalid group" +#~ msgstr "ogiltig grupp" + +#~ msgid "invalid spec" +#~ msgstr "ogiltig specifikation" + +#~ msgid "unable to display error message" +#~ msgstr "kan inte visa felmeddelande" + +#~ msgid "Packaged by %s (%s)\n" +#~ msgstr "Paketerat av %s (%s)\n" + +#~ msgid "Packaged by %s\n" +#~ msgstr "Paketerat av %s\n" + +#~ msgid "(C)" +#~ msgstr "©" + +#~ msgid "" +#~ "\n" +#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +#~ "html>.\n" +#~ "This is free software: you are free to change and redistribute it.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "Licens GPLv3+: GNU GPL version 3 eller senare <http://gnu.org/licenses/" +#~ "gpl.html>.\n" +#~ "Detta är fri programvara: du får lov att ändra och vidaredistribuera " +#~ "den.\n" +#~ "Det finns INGEN GARANTI, så långt lagen tillåter.\n" +#~ "\n" + +#~ msgid "Written by %s.\n" +#~ msgstr "Skrivet av %s.\n" + +#~ msgid "Written by %s and %s.\n" +#~ msgstr "Skrivet av %s och %s.\n" + +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "Skrivet av %s, %s och %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Skrivet av %s, %s, %s\n" +#~ "och %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Skrivet av %s, %s, %s,\n" +#~ "%s och %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, and %s.\n" +#~ msgstr "" +#~ "Skrivet av %s, %s, %s,\n" +#~ "%s, %s och %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, and %s.\n" +#~ msgstr "" +#~ "Skrivet av %s, %s, %s,\n" +#~ "%s, %s, %s och %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Skrivet av %s, %s, %s,\n" +#~ "%s, %s, %s, %s\n" +#~ "och %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Skrivet av %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s och %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, and others.\n" +#~ msgstr "" +#~ "Skrivet av %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s med flera.\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to: %s\n" +#~ msgstr "" +#~ "\n" +#~ "Rapportera fel till: %s\n" +#~ "Skicka synpunkter på översättningen till: tp-sv@listor.tp-sv.se\n" + +#~ msgid "Report %s bugs to: %s\n" +#~ msgstr "Rapportera %s-fel till: %s\n" + +#~ msgid "%s home page: <%s>\n" +#~ msgstr "%s hemsida: <%s>\n" + +#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +#~ msgstr "%s hemsida: <http://www.gnu.org/software/%s/>\n" + +#~ msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +#~ msgstr "" +#~ "Allmän hjälp med att använda GNU-program: <http://www.gnu.org/gethelp/>\n" + +#~ msgid "_open_osfhandle failed" +#~ msgstr "_open_osfhandle misslyckades" + +#~ msgid "cannot restore fd %d: dup2 failed" +#~ msgstr "kan inte återställa fb %d: dup2 misslyckades" + +#~ msgid "%s subprocess" +#~ msgstr "%s-underprocess" + +#~ msgid "%s subprocess got fatal signal %d" +#~ msgstr "%s-underprocess fick ödesdiger signal %d" + +#~ msgid "stdin" +#~ msgstr "standard in" + +#~ msgid "stdout" +#~ msgstr "standard ut" + +#~ msgid "stderr" +#~ msgstr "standard fel" + +#~ msgid "unknown stream" +#~ msgstr "okänd ström" + +#~ msgid "failed to reopen %s with mode %s" +#~ msgstr "det gick inte att öppna om %s i läget %s" + +#~ msgid "string comparison failed" +#~ msgstr "strängjämförelse misslyckades" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "Sätt LC_ALL='C' för att gå runt problemet." + +#~ msgid "The strings compared were %s and %s." +#~ msgstr "De jämförda strängarna var %s och %s." + +#~ msgid "cannot perform formatted output" +#~ msgstr "kan inte utföra formaterad utmatning" + +#~ msgid "invalid %s%s argument `%s'" +#~ msgstr "felaktigt %s%s-argument \"%s\"" + +#~ msgid "invalid suffix in %s%s argument `%s'" +#~ msgstr "felaktigt suffix i %s%s-argument \"%s\"" + +#~ msgid "%s%s argument `%s' too large" +#~ msgstr "%s%s argument \"%s\" är för stort" diff --git a/gnulib/po/tr.po b/gnulib/po/tr.po new file mode 100644 index 0000000..a6c96ed --- /dev/null +++ b/gnulib/po/tr.po @@ -0,0 +1,491 @@ +# translation of coreutils-5.3.0.tr.po to Turkish +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# Ali Devin Sezer <Ali_Sezer@brown.edu>, 2002. +# Nilgün Belma Bugüner <nilgun@superonline.com>, 2001, 2002. +# Onur Tolga ŞEHİTOĞLU <onur@lcsl.metu.edu.tr>, 1998. +# Deniz Akkus Kanca <deniz@arayan.com>, 2001,2003, 2004. +# +msgid "" +msgstr "" +"Project-Id-Version: coreutils 5.3.0\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2005-03-14 04:17+0200\n" +"Last-Translator: Deniz Akkus Kanca <deniz@arayan.com>\n" +"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: KBabel 1.9.1\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "" + +# +#: gnulib/lib/argp-help.c:1247 +#, fuzzy +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Uzun seçenekler için zorunlu olan argümanlar kısa seçenekler için de " +"zorunludur.\n" + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr "" + +#: gnulib/lib/argp-help.c:1656 +#, fuzzy +msgid " [OPTION...]" +msgstr "Kullanım: %s [SEÇENEK]...\n" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Daha fazla bilgi için `%s --help' yazın.\n" + +#: gnulib/lib/argp-help.c:1711 +#, fuzzy, c-format +msgid "Report bugs to %s.\n" +msgstr "" +"\n" +"Yazılım hatalarını <%s> adresine,\n" +"çeviri hatalarını <gnu-tr@belgeler.org> adresine bildirin.\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "Bilinmeyen sistem hatası" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "İSİM" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "" + +#: gnulib/lib/argp-parse.c:142 +#, fuzzy +msgid "print program version" +msgstr "okuma hatası" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "" + +#: gnulib/lib/argp-parse.c:612 +#, fuzzy, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: çok fazla sağlama satırı" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: `%s' seçeneği belirsiz\n" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: `--%s' seçeneği argümansız kullanılır\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: seçenek `%c%s' argümansız kullanılır\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: `%s' seçeneği bir argümanla kullanılır\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: `--%s' seçeneği bilinmiyor\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: `%c%s' seçeneği bilinmiyor\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: geçersiz seçenek -- %c\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: seçenek bir argümanla kullanılır -- %c\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: `-W %s' seçeneği belirsiz\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: `-W %s' seçeneği argümansız kullanılır\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: `%s' seçeneği bir argümanla kullanılır\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "%s argümanı `%s' için geçersiz" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "%s argümanı `%s' için belirsiz" + +#~ msgid "Valid arguments are:" +#~ msgstr "Geçerli argümanlar:" + +#~ msgid "write error" +#~ msgstr "yazma hatası" + +#, fuzzy +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "%s okumak için açılamadı" + +#, fuzzy +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "%s yazmak için açılamadı" + +#, fuzzy +#~ msgid "error reading \"%s\"" +#~ msgstr "%s'i okunurken hata" + +#, fuzzy +#~ msgid "error writing \"%s\"" +#~ msgstr "%s'e yazarken hata" + +#, fuzzy +#~ msgid "error after reading \"%s\"" +#~ msgstr "%s'i okunurken hata" + +#, fuzzy +#~ msgid "fdopen() failed" +#~ msgstr "açma işlemi başarısız" + +#, fuzzy +#~ msgid "%s subprocess failed" +#~ msgstr "%s: arama (seek) başarısız" + +# +#~ msgid "regular empty file" +#~ msgstr "normal boş dosya" + +# +#~ msgid "regular file" +#~ msgstr "normal dosya" + +#~ msgid "directory" +#~ msgstr "dizin" + +# +#~ msgid "block special file" +#~ msgstr "blok özel dosyası" + +# +#~ msgid "character special file" +#~ msgstr "karakter özel dosyası" + +# +#~ msgid "fifo" +#~ msgstr "fifo" + +#~ msgid "symbolic link" +#~ msgstr "sembolik bağ" + +#~ msgid "socket" +#~ msgstr "soket" + +#~ msgid "message queue" +#~ msgstr "ileti kuyruğu" + +#~ msgid "semaphore" +#~ msgstr "semafor" + +# +#~ msgid "shared memory object" +#~ msgstr "paylaşımlı bellek nesnesi" + +# +#~ msgid "typed memory object" +#~ msgstr "türlenmiş bellek nesnesi" + +# +#~ msgid "weird file" +#~ msgstr "garip dosya" + +#, fuzzy +#~ msgid "Address family for hostname not supported" +#~ msgstr "fifo dosyaları desteklenmiyor" + +#, fuzzy +#~ msgid "ai_family not supported" +#~ msgstr "fifo dosyaları desteklenmiyor" + +#, fuzzy +#~ msgid "ai_socktype not supported" +#~ msgstr "fifo dosyaları desteklenmiyor" + +#, fuzzy +#~ msgid "System error" +#~ msgstr "yazma hatası" + +#, fuzzy +#~ msgid "Unknown error" +#~ msgstr "Bilinmeyen sistem hatası" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: kuraldışı seçenek -- %c\n" + +#~ msgid "block size" +#~ msgstr "blok uzunluğu" + +#~ msgid "%s exists but is not a directory" +#~ msgstr "%s var ama bir dizin değil" + +#~ msgid "cannot change owner and/or group of %s" +#~ msgstr "%s'in sahibi ve/veya grubu değiştirilemiyor" + +#~ msgid "cannot create directory %s" +#~ msgstr "%s dizini oluşturulamıyor" + +#~ msgid "cannot chdir to directory %s" +#~ msgstr "%s dizinine geçilemedi" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "%s'in erişim izinleri değiştirilemiyor" + +#~ msgid "memory exhausted" +#~ msgstr "bellek tükendi" + +#, fuzzy +#~ msgid "unable to record current working directory" +#~ msgstr "openat: çalışılan dizini kaydedemedi" + +#~ msgid "failed to return to initial working directory" +#~ msgstr "başlangıç çalışma dizinine geri dönülemedi" + +#, fuzzy +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "%s: yazmak için açılamadı" + +#, fuzzy +#~ msgid "cannot create pipe" +#~ msgstr "%s bağı oluşturulamadı" + +#~ msgid "`" +#~ msgstr "`" + +#~ msgid "'" +#~ msgstr "'" + +#, fuzzy +#~ msgid "Invalid regular expression" +#~ msgstr "%s: geçersiz düzenli ifade(regular expression): %s" + +#, fuzzy +#~ msgid "Invalid character class name" +#~ msgstr "geçersiz karakter sınıfı `%s'" + +#, fuzzy +#~ msgid "Invalid range end" +#~ msgstr "Geçersiz sayfa aralığı `%s'" + +#, fuzzy +#~ msgid "Memory exhausted" +#~ msgstr "bellek tükendi" + +#, fuzzy +#~ msgid "Invalid preceding regular expression" +#~ msgstr "%s: geçersiz düzenli ifade(regular expression): %s" + +#, fuzzy +#~ msgid "Premature end of regular expression" +#~ msgstr "düzenli ifade (regular expression) aramasında hata oluştu" + +#, fuzzy +#~ msgid "Regular expression too big" +#~ msgstr "%s: geçersiz düzenli ifade(regular expression): %s" + +#, fuzzy +#~ msgid "No previous regular expression" +#~ msgstr "düzenli ifade (regular expression) aramasında hata oluştu" + +#~ msgid "^[yY]" +#~ msgstr "^[eE]" + +#~ msgid "^[nN]" +#~ msgstr "^[hH]" + +# +#~ msgid "iconv function not usable" +#~ msgstr "iconv işlevi kullanılabilir değil" + +#~ msgid "iconv function not available" +#~ msgstr "iconv işlevi yok" + +#~ msgid "character out of range" +#~ msgstr "karakter kapsamdışı" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "U+%04X yerel karakter kümesine dönüştürülemiyor" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "U+%04X yerel karakter kümesine dönüştürülemiyor: %s" + +#~ msgid "invalid user" +#~ msgstr "kullanıcı geçersiz" + +#~ msgid "invalid group" +#~ msgstr "grup geçersiz" + +#~ msgid "cannot get the login group of a numeric UID" +#~ msgstr "bir sayısal kullanıcı-kimliğin grubu alınamıyor" + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "This is free software. You may redistribute copies of it under the terms " +#~ "of\n" +#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "Bu, bir serbest yazılımdır; Free Software Foundation tarafından " +#~ "yayınlanan\n" +#~ "GNU Genel Kamu Lisansı, 2. sürüm (veya sizin seçiminize bağlı olarak) " +#~ "daha üst \n" +#~ "sürüm koşulları altında değişiklik yapabilir ve/veya yeniden " +#~ "dağıtabilirsiniz. \n" +#~ "\n" + +#~ msgid "Written by %s.\n" +#~ msgstr "%s tarafından yazıldı.\n" + +#~ msgid "Written by %s and %s.\n" +#~ msgstr "%s ve %s tarafından yazıldı.\n" + +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "%s, %s ve %s tarafından yazıldı.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "%s, %s, %s \n" +#~ "ve %s tarafından yazıldı.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "%s, %s, %s, %s \n" +#~ "ve %s tarafından yazıldı.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, and %s.\n" +#~ msgstr "" +#~ "%s, %s, %s, %s, \n" +#~ "%s ve %s tarafından yazıldı.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, and %s.\n" +#~ msgstr "" +#~ "%s, %s, %s, %s, \n" +#~ "%s, %s ve %s tarafından yazıldı.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "%s, %s, %s, \n" +#~ "%s, %s, %s, \n" +#~ "%s ve %s tarafından yazıldı.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "%s, %s, %s, \n" +#~ "%s, %s, %s, \n" +#~ "%s, %s ve %s tarafından yazıldı.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, and others.\n" +#~ msgstr "" +#~ "%s, %s, %s, \n" +#~ "%s, %s, %s, \n" +#~ "%s, %s, %s ve başkaları tarafından yazıldı.\n" + +# +#~ msgid "string comparison failed" +#~ msgstr "dizge karşılaştırması başarısız" + +# +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "Problemi devre dışı bırakmak için LC_ALL='C' tanımlayın." + +#~ msgid "The strings compared were %s and %s." +#~ msgstr "Karşılaştırılan dizgeler %s ve %s idi." diff --git a/gnulib/po/uk.po b/gnulib/po/uk.po new file mode 100644 index 0000000..d3e87e7 --- /dev/null +++ b/gnulib/po/uk.po @@ -0,0 +1,774 @@ +# Ukrainian messages for gnulib +# This file is distributed under the same license as the gnulib package. +# Copyright (C) 2010 Free Software Foundation, Inc. +# +# Sergey Poznyakoff <gray@gnu.org>, 2010. +# Yuri Chornoivan <yurchor@ukr.net>, 2011. +msgid "" +msgstr "" +"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2011-08-22 09:50+0300\n" +"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" +"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Lokalize 1.1\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: значення %s є менше ніж або дорівнює %s" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: параметр ARGP_HELP_FMT вимагає значення" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: параметр ARGP_HELP_FMT має бути додатнім" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Невідомий параметр ARGP_HELP_FMT" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Хибні дані в ARGP_HELP_FMT: %s" + +#: gnulib/lib/argp-help.c:1247 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Аргументи, обов'язкові для довгих ключів, є обов'язковими й для коротких." + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "Використання:" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr " чи: " + +#: gnulib/lib/argp-help.c:1656 +msgid " [OPTION...]" +msgstr " [ПАРАМЕТР...]" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "" +"Спробуйте `%s --help' або `%s --usage' для отримання докладнішого опису.\n" + +#: gnulib/lib/argp-help.c:1711 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Про помилки звітуйте на <%s>.\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "Невідома системна помилка" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "вивести цю довідку" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "вивести коротке повідомлення про використання" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "НАЗВА" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "встановити назву програми" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "СЕКУНДИ" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "зачекати вказану кількість секунд (типово 3600)" + +#: gnulib/lib/argp-parse.c:142 +msgid "print program version" +msgstr "вивести версію програми" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(ПОМИЛКА ПРОГРАМУВАННЯ) Невідома версія!?" + +#: gnulib/lib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: забагато аргументів\n" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(ПОМИЛКА ПРОГРАМУВАННЯ) Параметр мала бути розпізнана!?" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: параметр «%s» є неоднозначним, можливі варіанти:" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: параметр '--%s' не може мати аргументу\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: параметр '%c%s' не може мати аргументу\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: для використання параметра «--%s» слід вказати аргумент\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: невідомий параметр '--%s'\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: невідомий параметр '%c%s'\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: Некоректний параметр -- '%c'\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: параметр вимагає аргументу -- '%c'\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: параметр '-W %s' неоднозначний\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: параметр '-W %s' не може мати аргументу\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: для використання параметра «-W %s» слід вказати аргумент\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "некоректний аргумент %s для %s" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "неоднозначний аргумент %s для %s" + +#~ msgid "Valid arguments are:" +#~ msgstr "Дозволені аргументи такі:" + +#~ msgid "program error" +#~ msgstr "помилка програми" + +#~ msgid "stack overflow" +#~ msgstr "переповнення стосу" + +#~ msgid "cannot find a temporary directory, try setting $TMPDIR" +#~ msgstr "не вдається знайти тимчасовий каталог, спробуйте встановити $TMPDIR" + +#~ msgid "cannot create a temporary directory using template \"%s\"" +#~ msgstr "" +#~ "не вдається створити тимчасовий каталог використовуючи шаблон \"%s\"" + +#~ msgid "cannot remove temporary file %s" +#~ msgstr "не вдається усунути тимчасовий файл %s" + +#~ msgid "cannot remove temporary directory %s" +#~ msgstr "не вдається усунути тимчасовий каталог %s" + +#~ msgid "error closing file" +#~ msgstr "помилка закриття файлу" + +#~ msgid "write error" +#~ msgstr "помилка запису" + +#~ msgid "preserving permissions for %s" +#~ msgstr "збереження прав доступу до %s" + +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "помилка під час відкриття \"%s\" для читання" + +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "неможливо відкрити резервний файл \"%s\" для запису" + +#~ msgid "error reading \"%s\"" +#~ msgstr "помилка читання \"%s\"" + +#~ msgid "error writing \"%s\"" +#~ msgstr "помилка запису \"%s\"" + +#~ msgid "error after reading \"%s\"" +#~ msgstr "помилка після читання \"%s\"" + +#~ msgid "fdopen() failed" +#~ msgstr "помилка fdopen()" + +#~ msgid "C# compiler not found, try installing pnet" +#~ msgstr "не знайдено компілятора C#, спробуйте встановити pnet" + +#~ msgid "C# virtual machine not found, try installing pnet" +#~ msgstr "не знайдено віртуальної машини C#, спробуйте встановити pnet" + +#~ msgid "%s subprocess failed" +#~ msgstr "нащадок %s зазнав невдачі" + +#~ msgid "regular empty file" +#~ msgstr "звичайний порожній файл" + +#~ msgid "regular file" +#~ msgstr "звичайний файл" + +#~ msgid "directory" +#~ msgstr "каталог" + +#~ msgid "block special file" +#~ msgstr "спеціальний блоковий файл" + +#~ msgid "character special file" +#~ msgstr "спеціальний символьний файл" + +#~ msgid "fifo" +#~ msgstr "fifo" + +#~ msgid "symbolic link" +#~ msgstr "символьне посилання" + +#~ msgid "socket" +#~ msgstr "гніздо" + +#~ msgid "message queue" +#~ msgstr "черга повідомлень" + +#~ msgid "semaphore" +#~ msgstr "семафор" + +#~ msgid "shared memory object" +#~ msgstr "спільний об'єкт пам'яті" + +#~ msgid "typed memory object" +#~ msgstr "типізований об'єкт пам'яті" + +#~ msgid "weird file" +#~ msgstr "дивний файл" + +#~ msgid "Address family for hostname not supported" +#~ msgstr "Родина адрес для назви вузла не підтримується" + +#~ msgid "Temporary failure in name resolution" +#~ msgstr "Тимчасова помилка розв'язування назви вузла" + +#~ msgid "Bad value for ai_flags" +#~ msgstr "Недійсне значення ai_flags" + +#~ msgid "Non-recoverable failure in name resolution" +#~ msgstr "Невиправна помилка розв'язування назви вузла" + +#~ msgid "ai_family not supported" +#~ msgstr "ai_family не підтримується" + +#~ msgid "Memory allocation failure" +#~ msgstr "Помилка розподілу пам'яті" + +#~ msgid "No address associated with hostname" +#~ msgstr "З цією назвою вузла не пов’язано жодної адреси" + +#~ msgid "Name or service not known" +#~ msgstr "Невідоме ім'я або служба" + +#~ msgid "Servname not supported for ai_socktype" +#~ msgstr "Підтримки назв служб у ai_socktype не передбачено" + +#~ msgid "ai_socktype not supported" +#~ msgstr "ai_socktype не підтримується" + +#~ msgid "System error" +#~ msgstr "Системна помилка" + +#~ msgid "Argument buffer too small" +#~ msgstr "Замалий буфер для аргументів" + +#~ msgid "Processing request in progress" +#~ msgstr "Виконується обробка запиту" + +#~ msgid "Request canceled" +#~ msgstr "Запит скасовано" + +#~ msgid "Request not canceled" +#~ msgstr "Запит не скасовано" + +#~ msgid "All requests done" +#~ msgstr "Всі запити оброблено" + +#~ msgid "Interrupted by a signal" +#~ msgstr "Переривання сигналом" + +#~ msgid "Parameter string not correctly encoded" +#~ msgstr "Неправильно закодований рядок параметра" + +#~ msgid "Unknown error" +#~ msgstr "Невідома помилка" + +#~ msgid "invalid source_version argument to compile_java_class" +#~ msgstr "недійсне значення аргументу source_version для compile_java_class" + +#~ msgid "invalid target_version argument to compile_java_class" +#~ msgstr "недійсне значення аргументу target_version для compile_java_class" + +#~ msgid "failed to create \"%s\"" +#~ msgstr "не вдалося створити \"%s\"" + +#~ msgid "error while writing \"%s\" file" +#~ msgstr "помилка запису у файл \"%s\"" + +#~ msgid "Java compiler not found, try installing gcj or set $JAVAC" +#~ msgstr "" +#~ "Не знайдено компілятора java, спробуйте встановити gcj або задати " +#~ "значення $JAVAC" + +#~ msgid "Java virtual machine not found, try installing gij or set $JAVA" +#~ msgstr "" +#~ "Не знайдено віртуальної машини java, спробуйте встановити gij або задати " +#~ "значення $JAVA" + +#~ msgid "%s subprocess I/O error" +#~ msgstr "помилка вводу-виводу нащадка %s" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "не вдається змінити права доступу до %s" + +#~ msgid "cannot create directory %s" +#~ msgstr "не вдається створити каталог %s" + +#~ msgid "memory exhausted" +#~ msgstr "пам'ять вичерпано" + +#~ msgid "unable to record current working directory" +#~ msgstr "не вдається змінити поточний каталог" + +#~ msgid "failed to return to initial working directory" +#~ msgstr "не вдається зберегти поточний каталог" + +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "Не вдалося відкрити /dev/zero для читання" + +#~ msgid "creation of reading thread failed" +#~ msgstr "не вдалося створити потік читання" + +#~ msgid "cannot set up nonblocking I/O to %s subprocess" +#~ msgstr "не вдається встановити неблокуючий ввід-вивід з підпроцесом %s" + +#~ msgid "communication with %s subprocess failed" +#~ msgstr "помилка зв'язку з підпроцесом %s" + +#~ msgid "write to %s subprocess failed" +#~ msgstr "помилка запису у підпроцес %s" + +#~ msgid "read from %s subprocess failed" +#~ msgstr "помилка читання з підпроцесу %s" + +#~ msgid "subprocess %s terminated with exit code %d" +#~ msgstr "підпроцес %s закінчився кодом %d" + +#~ msgid "creation of threads failed" +#~ msgstr "помилка створення потоків" + +#~ msgid "%s subprocess terminated with exit code %d" +#~ msgstr "підпроцес %s закінчився кодом %d" + +#~ msgid "Franc,ois Pinard" +#~ msgstr "Franc,ois Pinard" + +#~ msgid "`" +#~ msgstr "`" + +#~ msgid "'" +#~ msgstr "'" + +#~ msgid "Success" +#~ msgstr "Успіх" + +#~ msgid "No match" +#~ msgstr "Брак збігів" + +#~ msgid "Invalid regular expression" +#~ msgstr "Некоректний формальний вираз" + +#~ msgid "Invalid collation character" +#~ msgstr "Некоректний об'єднувальний символ" + +#~ msgid "Invalid character class name" +#~ msgstr "Некоректна назва класу символів" + +#~ msgid "Trailing backslash" +#~ msgstr "Зворотна похила риска наприкінці виразу" + +#~ msgid "Invalid back reference" +#~ msgstr "Недійсне зворотнє посилання" + +#~ msgid "Unmatched [ or [^" +#~ msgstr "Незакрита [ або [^" + +#~ msgid "Unmatched ( or \\(" +#~ msgstr "Незакрита ( або \\(" + +#~ msgid "Unmatched \\{" +#~ msgstr "Незакрита \\{" + +#~ msgid "Invalid content of \\{\\}" +#~ msgstr "Некоректний вміст \\{\\}" + +#~ msgid "Invalid range end" +#~ msgstr "Некоректний кінець діапазону" + +#~ msgid "Memory exhausted" +#~ msgstr "Пам'ять вичерпана" + +#~ msgid "Invalid preceding regular expression" +#~ msgstr "Некоректний попередній формальний вираз" + +#~ msgid "Premature end of regular expression" +#~ msgstr "Передчасне закінчення формального виразу" + +#~ msgid "Regular expression too big" +#~ msgstr "Завеликий формальний вираз" + +#~ msgid "Unmatched ) or \\)" +#~ msgstr "Неузгоджена ) або \\)" + +#~ msgid "No previous regular expression" +#~ msgstr "Не вказано попереднього формального виразу" + +#~ msgid "^[yY]" +#~ msgstr "^[yYтТ]" + +#~ msgid "^[nN]" +#~ msgstr "^[nNнН]" + +#~ msgid "setting permissions for %s" +#~ msgstr "встановлення прав доступу до %s" + +#~ msgid "Hangup" +#~ msgstr "Відбій" + +#~ msgid "Interrupt" +#~ msgstr "Переривання" + +#~ msgid "Quit" +#~ msgstr "Закінчення" + +#~ msgid "Illegal instruction" +#~ msgstr "Недійсна інструкція" + +#~ msgid "Trace/breakpoint trap" +#~ msgstr "Перехоплення трасування/контрольної точки" + +#~ msgid "Aborted" +#~ msgstr "Аварійне завершення" + +#~ msgid "Floating point exception" +#~ msgstr "Виняток операції з рухомою крапкою" + +#~ msgid "Killed" +#~ msgstr "Знищено" + +#~ msgid "Bus error" +#~ msgstr "Помилка шини" + +#~ msgid "Segmentation fault" +#~ msgstr "Помилка сегментації" + +#~ msgid "Broken pipe" +#~ msgstr "Розімкнений конвеєр" + +#~ msgid "Alarm clock" +#~ msgstr "Таймер" + +#~ msgid "Terminated" +#~ msgstr "Закінчено" + +#~ msgid "Urgent I/O condition" +#~ msgstr "Екстрена ситуація вводу-виводу" + +#~ msgid "Stopped (signal)" +#~ msgstr "Припинення (сигнал)" + +#~ msgid "Stopped" +#~ msgstr "Припинення" + +#~ msgid "Continued" +#~ msgstr "Продовження" + +#~ msgid "Child exited" +#~ msgstr "Нащадок завершився" + +#~ msgid "Stopped (tty input)" +#~ msgstr "Припинення (ввід з консолі)" + +#~ msgid "Stopped (tty output)" +#~ msgstr "Припинення (вивід на консоль)" + +#~ msgid "I/O possible" +#~ msgstr "Можливий ввід-вивід" + +#~ msgid "CPU time limit exceeded" +#~ msgstr "Перевищення ліміту часу ЦП" + +#~ msgid "File size limit exceeded" +#~ msgstr "Перевищення ліміту розміру файлів" + +#~ msgid "Virtual timer expired" +#~ msgstr "Відлік віртуального таймера завершено" + +#~ msgid "Profiling timer expired" +#~ msgstr "Відлік таймера профілювання завершено" + +#~ msgid "Window changed" +#~ msgstr "Вікно змінилося" + +#~ msgid "User defined signal 1" +#~ msgstr "Визначений користувачем сигнал 1" + +#~ msgid "User defined signal 2" +#~ msgstr "Визначений користувачем сигнал 2" + +#~ msgid "EMT trap" +#~ msgstr "Пастка EMT" + +#~ msgid "Bad system call" +#~ msgstr "Некоректний системний виклик" + +#~ msgid "Stack fault" +#~ msgstr "Збій стосу" + +#~ msgid "Information request" +#~ msgstr "Запит інформації" + +#~ msgid "Power failure" +#~ msgstr "Аварія живлення" + +#~ msgid "Resource lost" +#~ msgstr "Втрата засобу" + +#~ msgid "error writing to a closed pipe or socket" +#~ msgstr "помилка запису у закритий конвеєр або гніздо" + +#~ msgid "cannot create pipe" +#~ msgstr "не вдається створити конвеєр" + +#~ msgid "Real-time signal %d" +#~ msgstr "Сигнал реального часу %d" + +#~ msgid "Unknown signal %d" +#~ msgstr "Невідомий сигнал %d" + +#~ msgid "iconv function not usable" +#~ msgstr "функція iconv непридатна до вжитку" + +#~ msgid "iconv function not available" +#~ msgstr "функція iconv недоступна" + +#~ msgid "character out of range" +#~ msgstr "символ поза діапазоном" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "не вдається передати U+%04X у локальному зборі знаків" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "не вдається передати U+%04X у локальному зборі знаків: %s" + +#~ msgid "invalid user" +#~ msgstr "Некоректний користувач" + +#~ msgid "invalid group" +#~ msgstr "недійсна група" + +#~ msgid "invalid spec" +#~ msgstr "недійсна специфікація" + +#~ msgid "unable to display error message" +#~ msgstr "не вдається вивести повідомлення про помилку" + +#~ msgid "Packaged by %s (%s)\n" +#~ msgstr "Пакет створив %s (%s)\n" + +#~ msgid "Packaged by %s\n" +#~ msgstr "Пакет створив %s\n" + +#~ msgid "(C)" +#~ msgstr "©" + +#~ msgid "" +#~ "\n" +#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +#~ "html>.\n" +#~ "This is free software: you are free to change and redistribute it.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "Ліцензія GPLv3+: GNU GPL версії 3 або пізнішої <http://gnu.org/licenses/" +#~ "gpl.html>\n" +#~ "Це вільне програмне забезпечення: ви можете змінювати та розповсюджувати " +#~ "його.\n" +#~ "Не надається ЖОДНИХ ГАРАНТІЙ в межах дозволених законодавством.\n" +#~ "\n" + +#~ msgid "Written by %s.\n" +#~ msgstr "Автор: %s.\n" + +#~ msgid "Written by %s and %s.\n" +#~ msgstr "Автори: %s та %s.\n" + +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "Автори: %s, %s та %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Автори: %s, %s, %s\n" +#~ "та %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Автори: %s, %s, %s\n" +#~ "%s, та %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, and %s.\n" +#~ msgstr "" +#~ "Автори: %s, %s, %s\n" +#~ "%s, %s та %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, and %s.\n" +#~ msgstr "" +#~ "Автори: %s, %s, %s\n" +#~ "%s, %s, %s та %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Автори: %s, %s, %s\n" +#~ "%s, %s, %s, %s та %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Автори: %s, %s, %s\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s та %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, and others.\n" +#~ msgstr "" +#~ "Автори: %s, %s, %s\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s та інші.\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to: %s\n" +#~ msgstr "" +#~ "\n" +#~ "Про помилки звітуйте на %s\n" + +#~ msgid "Report %s bugs to: %s\n" +#~ msgstr "Про помилки у програмі %s звітуйте на %s\n" + +#~ msgid "%s home page: <%s>\n" +#~ msgstr "домашня сторінка %s: <%s>\n" + +#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +#~ msgstr "домашня сторінка %s: <http://www.gnu.org/software/%s/>\n" + +#~ msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +#~ msgstr "" +#~ "Загальна допомога щодо використання ПО GNU: <http://www.gnu.org/gethelp/" +#~ ">\n" + +#~ msgid "_open_osfhandle failed" +#~ msgstr "помилка _open_osfhandle" + +#~ msgid "cannot restore fd %d: dup2 failed" +#~ msgstr "не вдається відновити дескриптор %d: помилка dup2" + +#~ msgid "%s subprocess" +#~ msgstr "нащадок процесу %s" + +#~ msgid "%s subprocess got fatal signal %d" +#~ msgstr "підпроцес %s отримав фатальний сигнал %d" + +#~ msgid "stdin" +#~ msgstr "stdin" + +#~ msgid "stdout" +#~ msgstr "stdout" + +#~ msgid "stderr" +#~ msgstr "stderr" + +#~ msgid "unknown stream" +#~ msgstr "невідомий потік" + +#~ msgid "failed to reopen %s with mode %s" +#~ msgstr "не вдалося відкрити %s у режимі %s" + +#~ msgid "string comparison failed" +#~ msgstr "невдале порівняння рядків" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "Встановити LC_ALL='C', щоб уникнути цієї помилки." + +#~ msgid "The strings compared were %s and %s." +#~ msgstr "Порівнювалися рядки: \"%s\" та \"%s\"." + +#~ msgid "cannot perform formatted output" +#~ msgstr "неможливо здійснити форматований вивід" + +#~ msgid "invalid %s%s argument `%s'" +#~ msgstr "некоректний аргумент для %s%s: `%s'" + +#~ msgid "invalid suffix in %s%s argument `%s'" +#~ msgstr "некоректний суфікс в аргументі для %s%s: `%s'" + +#~ msgid "%s%s argument `%s' too large" +#~ msgstr "завеликий аргумент для %s%s: `%s'" diff --git a/gnulib/po/vi.po b/gnulib/po/vi.po new file mode 100644 index 0000000..5e80afa --- /dev/null +++ b/gnulib/po/vi.po @@ -0,0 +1,782 @@ +# Vietnamese translation for GNU Lib. +# Copyright © 2012 Free Software Foundation, Inc. +# This file is distributed under the same license as the gnulib package. +# Clytie Siddall <clytie@riverland.net.au>, 2006-2010. +# Trần Ngọc Quân <vnwildman@gmail.com>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: gnulib-3.0.0.6062.a6b16\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2012-03-30 14:47+0700\n" +"Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n" +"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n" +"Language: vi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: LocFactoryEditor 1.8\n" +"X-Poedit-Language: Vietnamese\n" +"X-Poedit-Country: VIET NAM\n" +"X-Poedit-SourceCharset: utf-8\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: giá trị %s value nhỏ hơn hay bằng %s" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: tham số « ARGP_HELP_FMT » cần thiết giá trị" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: tham số « ARGP_HELP_FMT » phải là số dương" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Không biết tham số « ARGP_HELP_FMT »" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Gặp rác trong « ARGP_HELP_FMT » : %s" + +#: gnulib/lib/argp-help.c:1247 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Tất cả đối số bắt buộc phải sử dụng với tùy chọn dài cũng bắt buộc với tùy " +"chọn ngắn tương ứng." + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "Cách sử dụng:" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr " hoặc " + +#: gnulib/lib/argp-help.c:1656 +msgid " [OPTION...]" +msgstr " [TÙY_CHỌN...]" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "" +"Hãy thử lệnh « %s --help » (trợ giúp) hay « %s --usage » (cách sử dụng) để " +"xem thông tin thêm.\n" + +#: gnulib/lib/argp-help.c:1711 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Hãy thông báo lỗi cho %s\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "Gặp lỗi hệ thống lạ" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "hiển thị trợ giúp này" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "hiển thị thông điệp cách sử dụng ngắn" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "TÊN" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "đặt tên chương trình" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "GIÂY" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "treo trong vòng GIÂY giây (mặc định là 3600)" + +#: gnulib/lib/argp-parse.c:142 +msgid "print program version" +msgstr "in ra phiên bản chương trình" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(LỖI CHƯƠNG TRÌNH) Không có phiên bản đã biết ?" + +#: gnulib/lib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Quá nhiều đối số\n" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(LỖI CHƯƠNG TRÌNH) Nên nhận biệt tùy chọn mà chưa?" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: tùy chọn '%s' chưa rõ ràng; khả năng là:" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: tùy chọn « --%s » không cho phép đối số\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: tùy chọn « %c%s » không cho phép đối số\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: tùy chọn '--%s' yêu cầu một đối số\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: không nhận ra tùy chọn « --%s »\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: không nhận ra tùy chọn « %c%s »\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: tùy chọn không hợp lệ -- « %c »\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: tùy chọn yêu cầu một đối số -- « %c »\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: tùy chọn « -W %s » vẫn mơ hồ\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: tùy chọn « -W %s » không cho phép đối số\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: tùy chọn '-W %s' yêu cầu một đối số\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "đối sô không hợp lệ %s cho %s" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "đối số mơ hồ %s cho %s" + +#~ msgid "Valid arguments are:" +#~ msgstr "Các đối số hợp lệ:" + +#~ msgid "program error" +#~ msgstr "lỗi chương trình" + +#~ msgid "stack overflow" +#~ msgstr "tràn động" + +#~ msgid "cannot find a temporary directory, try setting $TMPDIR" +#~ msgstr "" +#~ "không tìm thấy thư mục tạm thời, hãy thử đặt biến môi trường $TMPDIR" + +#~ msgid "cannot create a temporary directory using template \"%s\"" +#~ msgstr "không thể tạo một thư mục tạm thời dùng mẫu « %s »" + +#~ msgid "cannot remove temporary file %s" +#~ msgstr "không thể gỡ bỏ tập tin tạm thời %s" + +#~ msgid "cannot remove temporary directory %s" +#~ msgstr "không thể gỡ bỏ thư mục tạm thời %s" + +#~ msgid "error closing file" +#~ msgstr "lỗi đóng tập tin" + +#~ msgid "write error" +#~ msgstr "lỗi ghi" + +#~ msgid "preserving permissions for %s" +#~ msgstr "đang bảo tồn quyền hạn cho %s" + +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "gặp lỗi khi mở « %s » để đọc" + +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "không thể mở tập tin sao lưu « %s » để ghi" + +#~ msgid "error reading \"%s\"" +#~ msgstr "gặp lỗi khi đọc « %s»" + +#~ msgid "error writing \"%s\"" +#~ msgstr "gặp lỗi khi ghi « %s»" + +#~ msgid "error after reading \"%s\"" +#~ msgstr "gặp lỗi sau khi đọc « %s»" + +#~ msgid "fdopen() failed" +#~ msgstr "fdopen() bị lỗi" + +#~ msgid "C# compiler not found, try installing pnet" +#~ msgstr "Không tìm thấy trình biên dịch C# nên thử cài đặt pnet" + +#~ msgid "C# virtual machine not found, try installing pnet" +#~ msgstr "Không tìm thấy cơ chế ảo C# nên thử cài đặt pnet" + +#~ msgid "%s subprocess failed" +#~ msgstr "Tiến trình con %s bị lỗi" + +#~ msgid "regular empty file" +#~ msgstr "tập tin rỗng kiểu thường" + +#~ msgid "regular file" +#~ msgstr "tập tin thông thường" + +#~ msgid "directory" +#~ msgstr "thư mục" + +#~ msgid "block special file" +#~ msgstr "tập tin đặc biệt khối" + +#~ msgid "character special file" +#~ msgstr "tập tin đặc biệt ký tự" + +#~ msgid "fifo" +#~ msgstr "fifo (vào trước, ra trước)" + +#~ msgid "symbolic link" +#~ msgstr "liên kết tượng trưng" + +#~ msgid "socket" +#~ msgstr "ổ cắm" + +#~ msgid "message queue" +#~ msgstr "hàng đời thông điệp" + +#~ msgid "semaphore" +#~ msgstr "cờ hiệu" + +#~ msgid "shared memory object" +#~ msgstr "đối tượng bộ nhớ dùng chung" + +#~ msgid "typed memory object" +#~ msgstr "đốí tượng bộ nhớ đánh kiểu" + +#~ msgid "weird file" +#~ msgstr "tập tin lạ" + +#~ msgid "Address family for hostname not supported" +#~ msgstr "Họ địa chỉ dành cho tên máy không được hỗ trợ" + +#~ msgid "Temporary failure in name resolution" +#~ msgstr "Tạm thời không thể quyết định tên" + +#~ msgid "Bad value for ai_flags" +#~ msgstr "Giá trị sai đối với « ai_flags » (cờ)" + +#~ msgid "Non-recoverable failure in name resolution" +#~ msgstr "Lỗi không thể phục hồi khi quyết định tên" + +#~ msgid "ai_family not supported" +#~ msgstr "Không hỗ trợ « ai_family »" + +#~ msgid "Memory allocation failure" +#~ msgstr "Lỗi cấp phát bộ nhớ" + +#~ msgid "No address associated with hostname" +#~ msgstr "Không có địa chỉ liên quan đến tên máy" + +#~ msgid "Name or service not known" +#~ msgstr "Không nhận ra tên hay dịch vụ" + +#~ msgid "Servname not supported for ai_socktype" +#~ msgstr "Không hỗ trợ tên máy phục vụ đối với « ai_socktype » (kiểu ổ cắm)" + +#~ msgid "ai_socktype not supported" +#~ msgstr "Không hỗ trợ « ai-socktype » (kiểu ổ cắm)" + +#~ msgid "System error" +#~ msgstr "Lỗi hệ thống" + +#~ msgid "Argument buffer too small" +#~ msgstr "Vùng đệm đối số quá ngắn" + +#~ msgid "Processing request in progress" +#~ msgstr "Yêu cầu xử lý đang chạy" + +#~ msgid "Request canceled" +#~ msgstr "Yêu cầu bị thôi" + +#~ msgid "Request not canceled" +#~ msgstr "Chưa thôi yêu cầu" + +#~ msgid "All requests done" +#~ msgstr "Mọi yêu cầu hoàn tất" + +#~ msgid "Interrupted by a signal" +#~ msgstr "bị tín hiệu gián đoạn" + +#~ msgid "Parameter string not correctly encoded" +#~ msgstr "Chuỗi tham số không phải được mã hóa đúng" + +#~ msgid "Unknown error" +#~ msgstr "Gặp lỗi không rõ" + +#~ msgid "invalid source_version argument to compile_java_class" +#~ msgstr "" +#~ "đối số phiên bản nguồn « source_version » không hợp lệ đối với hạn Java " +#~ "biên dịch « compile_java_class »" + +#~ msgid "invalid target_version argument to compile_java_class" +#~ msgstr "" +#~ "đối số phiên bản đích « source_version » không hợp lệ đối với hạn Java " +#~ "biên dịch « compile_java_class »" + +#~ msgid "failed to create \"%s\"" +#~ msgstr "lỗi tạo « %s »" + +#~ msgid "error while writing \"%s\" file" +#~ msgstr "gặp lỗi khi ghi tập tin « %s»" + +#~ msgid "Java compiler not found, try installing gcj or set $JAVAC" +#~ msgstr "" +#~ "Không tìm thấy trình biên dịch Java nên thử cài đặt trình « gcj » hoặc " +#~ "đặt biến môi trường « $JAVAC »." + +#~ msgid "Java virtual machine not found, try installing gij or set $JAVA" +#~ msgstr "" +#~ "Không tìm thấy cơ chế ảo Java nên thử cài đặt trình « gcj » hoặc đặt biến " +#~ "môi trường « $JAVAC »." + +#~ msgid "%s subprocess I/O error" +#~ msgstr "Lỗi V/R tiến trình phụ %s" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "không thể thay đổi quyền hạn của %s" + +#~ msgid "cannot create directory %s" +#~ msgstr "không thể tạo thư mục %s" + +#~ msgid "memory exhausted" +#~ msgstr "hết bộ nhớ hoàn toàn" + +#~ msgid "unable to record current working directory" +#~ msgstr "không thể ghi lưu thư mục làm việc hiện thời" + +#~ msgid "failed to return to initial working directory" +#~ msgstr "chưa trở về thư mục làm việc ban đầu" + +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "Lỗi mở thiết bị « /dev/zero » để đọc" + +#~ msgid "creation of reading thread failed" +#~ msgstr "lỗi tạo nhánh đọc" + +#~ msgid "cannot set up nonblocking I/O to %s subprocess" +#~ msgstr "không thể thiết lập V/R không chặn đối với tiến trình con %s" + +#~ msgid "communication with %s subprocess failed" +#~ msgstr "lỗi liên lạc với tiến trình con %s" + +#~ msgid "write to %s subprocess failed" +#~ msgstr "lỗi ghi vào tiến trình con %s" + +#~ msgid "read from %s subprocess failed" +#~ msgstr "lỗi đọc từ tiến trình con %s" + +#~ msgid "subprocess %s terminated with exit code %d" +#~ msgstr "tiến trình con %s đã kết thúc với mã thoát %d" + +#~ msgid "creation of threads failed" +#~ msgstr "lỗi tạo nhánh" + +#~ msgid "%s subprocess terminated with exit code %d" +#~ msgstr "tiến trình con %s đã kết thúc với mã thoát %d" + +#~ msgid "Franc,ois Pinard" +#~ msgstr "Franc,ois Pinard" + +#~ msgid "`" +#~ msgstr "« " + +#~ msgid "'" +#~ msgstr " »" + +#~ msgid "Success" +#~ msgstr "Thành công" + +#~ msgid "No match" +#~ msgstr "Không khớp" + +#~ msgid "Invalid regular expression" +#~ msgstr "Biểu thức chính quy không hợp lệ" + +#~ msgid "Invalid collation character" +#~ msgstr "Ký tự đối chiếu không hợp lệ" + +#~ msgid "Invalid character class name" +#~ msgstr "Tên loại ký tự không hợp lệ" + +#~ msgid "Trailing backslash" +#~ msgstr "Có xuyệc ngược theo sau" + +#~ msgid "Invalid back reference" +#~ msgstr "Tham chiếu ngược không hợp lệ" + +#~ msgid "Unmatched [ or [^" +#~ msgstr "Chưa khớp ký tự « [ » hay « [^ »" + +#~ msgid "Unmatched ( or \\(" +#~ msgstr "Chưa khớp ký tự « ( » hay « \\( »" + +#~ msgid "Unmatched \\{" +#~ msgstr "Chưa khớp ký tự « \\{ »" + +#~ msgid "Invalid content of \\{\\}" +#~ msgstr "Nội dụng « \\{\\} » không hợp lệ" + +#~ msgid "Invalid range end" +#~ msgstr "Kết thúc phạm vi không hợp lệ" + +#~ msgid "Memory exhausted" +#~ msgstr "Hết bộ nhớ hoàn toàn" + +#~ msgid "Invalid preceding regular expression" +#~ msgstr "Biểu thức chính quy đi trước không hợp lệ" + +#~ msgid "Premature end of regular expression" +#~ msgstr "Biểu thức chính quy kết thúc quá sớm" + +#~ msgid "Regular expression too big" +#~ msgstr "Biểu thức chính quy quá lớn" + +#~ msgid "Unmatched ) or \\)" +#~ msgstr "Chưa khớp ký tự « ) » hay « \\) »" + +#~ msgid "No previous regular expression" +#~ msgstr "Không có biểu thức chính quy đi trước" + +#~ msgid "^[yY]" +#~ msgstr "^[cC]" + +#~ msgid "^[nN]" +#~ msgstr "^[kK]" + +#~ msgid "setting permissions for %s" +#~ msgstr "đang đặt quyền hạn về %s" + +#~ msgid "Hangup" +#~ msgstr "Ngừng nói" + +#~ msgid "Interrupt" +#~ msgstr "Ngắt" + +#~ msgid "Quit" +#~ msgstr "Thoát" + +#~ msgid "Illegal instruction" +#~ msgstr "Câu lệnh sai" + +#~ msgid "Trace/breakpoint trap" +#~ msgstr "Bẫy vết/điểm ngắt" + +#~ msgid "Aborted" +#~ msgstr "Bị hủy bỏ" + +#~ msgid "Floating point exception" +#~ msgstr "Ngoại lệ điểm phù động" + +#~ msgid "Killed" +#~ msgstr "Bị buộc kết thúc" + +#~ msgid "Bus error" +#~ msgstr "Lỗi mạch nối" + +#~ msgid "Segmentation fault" +#~ msgstr "Lỗi phân đoạn" + +#~ msgid "Broken pipe" +#~ msgstr "Ống dẫn bị ngắt" + +#~ msgid "Alarm clock" +#~ msgstr "Đồng hồ báo động" + +#~ msgid "Terminated" +#~ msgstr "Bị chấm dứt" + +#~ msgid "Urgent I/O condition" +#~ msgstr "Điều kiện V/R khẩn" + +#~ msgid "Stopped (signal)" +#~ msgstr "Bị ngừng (ký hiệu)" + +#~ msgid "Stopped" +#~ msgstr "Bị ngừng" + +#~ msgid "Continued" +#~ msgstr "Đã tiếp tục" + +#~ msgid "Child exited" +#~ msgstr "Tiến trình con đã thoát" + +#~ msgid "Stopped (tty input)" +#~ msgstr "Bị ngừng (đầu vào TTY)" + +#~ msgid "Stopped (tty output)" +#~ msgstr "Bị ngừng (đầu ra TTY)" + +#~ msgid "I/O possible" +#~ msgstr "Có thể V/R" + +#~ msgid "CPU time limit exceeded" +#~ msgstr "Vượt quá thời hạn CPU" + +#~ msgid "File size limit exceeded" +#~ msgstr "Vượt quá giới hạn kích cỡ tập tin" + +#~ msgid "Virtual timer expired" +#~ msgstr "Hàm đếm thời gian ảo đã hết hạn" + +#~ msgid "Profiling timer expired" +#~ msgstr "Hàm đếm thời gian đo hiệu năng sử dụng đã hết hạn" + +#~ msgid "Window changed" +#~ msgstr "Cửa sổ bị thay đổi" + +#~ msgid "User defined signal 1" +#~ msgstr "Tín hiệu do người dùng xác định 1" + +#~ msgid "User defined signal 2" +#~ msgstr "Tín hiệu do người dùng xác định 2" + +#~ msgid "EMT trap" +#~ msgstr "Bẫy EMT" + +#~ msgid "Bad system call" +#~ msgstr "Sai gọi hệ thống" + +#~ msgid "Stack fault" +#~ msgstr "Lỗi đống" + +#~ msgid "Information request" +#~ msgstr "Yêu cầu thông tin" + +#~ msgid "Power failure" +#~ msgstr "Bị cúp điện đột ngột" + +#~ msgid "Resource lost" +#~ msgstr "Tài nguyên bị mất" + +#~ msgid "error writing to a closed pipe or socket" +#~ msgstr "lỗi ghi vào một đường ống hay ổ cắm bị đóng" + +#~ msgid "cannot create pipe" +#~ msgstr "không thể tạo ống dẫn" + +#~ msgid "Real-time signal %d" +#~ msgstr "Tín hiệu thời gian thật %d" + +#~ msgid "Unknown signal %d" +#~ msgstr "Không rõ tín hiệu %d" + +#~ msgid "iconv function not usable" +#~ msgstr "hàm iconv vô ích" + +#~ msgid "iconv function not available" +#~ msgstr "không có hàm iconv" + +#~ msgid "character out of range" +#~ msgstr "Ký tự ở ngoại phạm vi" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "không thể chuyển đổi U+%04X sang bộ ký tự địa phương" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "không thể chuyển đổi U+%04X sang bộ ký tự địa phương: %s" + +#~ msgid "invalid user" +#~ msgstr "người dùng không hợp lệ" + +#~ msgid "invalid group" +#~ msgstr "nhóm không hợp lệ" + +#~ msgid "invalid spec" +#~ msgstr "đặc tả không hợp lệ" + +#~ msgid "unable to display error message" +#~ msgstr "không thể hiển thị thông điệp lỗi" + +#~ msgid "Packaged by %s (%s)\n" +#~ msgstr "Gói đóng bởi %s (%s)\n" + +#~ msgid "Packaged by %s\n" +#~ msgstr "Gói đóng bởi %s\n" + +#~ msgid "(C)" +#~ msgstr "©" + +#~ msgid "" +#~ "\n" +#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +#~ "html>.\n" +#~ "This is free software: you are free to change and redistribute it.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "GPLv3+: Giấy Phép Công Cộng GNU, phiên bản 3 hay sau <http://gnu.org/" +#~ "licenses/gpl.html>\n" +#~ "Đây là phần mềm tự do : bạn có quyền thay đổi và phát hành lại nó.\n" +#~ "KHÔNG CÓ BẢO HÀNH GÌ CẢ, với điều kiện được pháp luật cho phép.\n" +#~ "\n" + +#~ msgid "Written by %s.\n" +#~ msgstr "Tác giả: %s.\n" + +#~ msgid "Written by %s and %s.\n" +#~ msgstr "Tác giả: %s và %s.\n" + +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "Tác giả: %s, %s, và %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Tác giả: %s, %s, %s,\n" +#~ "và %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Tác giả: %s, %s, %s,\n" +#~ "%s, và %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, and %s.\n" +#~ msgstr "" +#~ "Tác gia: %s, %s, %s,\n" +#~ "%s, %s, và %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, and %s.\n" +#~ msgstr "" +#~ "Tác giả: %s, %s, %s,\n" +#~ "%s, %s, %s, và %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "Tác giả: %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "và %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "Tác giả: %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, và %s.\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, and others.\n" +#~ msgstr "" +#~ "Tác giả: %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, và các người khác.\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to: %s\n" +#~ msgstr "" +#~ "\n" +#~ "Hãy thông báo lỗi nào cho : %s\n" + +#~ msgid "Report %s bugs to: %s\n" +#~ msgstr "Hãy thông báo lỗi %s nào cho : %s\n" + +#~ msgid "%s home page: <%s>\n" +#~ msgstr "Trang chủ %s: <%s>\n" + +#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +#~ msgstr "Trang chủ %s: <http://www.gnu.org/software/%s/>\n" + +#~ msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +#~ msgstr "" +#~ "Trợ giúp chung về cách sử dụng phần mềm GNU: <http://www.gnu.org/gethelp/" +#~ ">\n" + +#~ msgid "_open_osfhandle failed" +#~ msgstr "_open_osfhandle bị lỗi" + +#~ msgid "cannot restore fd %d: dup2 failed" +#~ msgstr "không thể phục hồi bộ mô tả tập tin %d: « dup2 » bị lỗi" + +#~ msgid "%s subprocess" +#~ msgstr "Tiến trình con %s" + +#~ msgid "%s subprocess got fatal signal %d" +#~ msgstr "Tiến trình con %s đã nhận tín hiệu nghiêm trọng %d" + +#~ msgid "stdin" +#~ msgstr "đầu vào tiêu chuẩn" + +#~ msgid "stdout" +#~ msgstr "đầu ra tiêu chuẩn" + +#~ msgid "stderr" +#~ msgstr "đầu lỗi tiêu chuẩn" + +#~ msgid "unknown stream" +#~ msgstr "không nhận ra luồng" + +#~ msgid "failed to reopen %s with mode %s" +#~ msgstr "lỗi mở lại %s với chế độ %s" + +#~ msgid "string comparison failed" +#~ msgstr "lỗi so sánh chuỗi" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "Hãy lập « LC_ALL='C' » để chỉnh sửa vấn đề đó." + +#~ msgid "The strings compared were %s and %s." +#~ msgstr "Hai chuỗi được so sánh là %s và %s." + +#~ msgid "cannot perform formatted output" +#~ msgstr "không thể thực hiện kết xuất có định dạng" + +#~ msgid "invalid %s%s argument `%s'" +#~ msgstr "đối số %s%s không hợp lệ « %s »" + +#~ msgid "invalid suffix in %s%s argument `%s'" +#~ msgstr "hậu tố không hợp lệ trong đối số %s%s « %s »" + +#~ msgid "%s%s argument `%s' too large" +#~ msgstr "Đối số %s%s « %s » quá lớn" diff --git a/gnulib/po/zh_CN.po b/gnulib/po/zh_CN.po new file mode 100644 index 0000000..06bc4fd --- /dev/null +++ b/gnulib/po/zh_CN.po @@ -0,0 +1,791 @@ +# simplified Chinese translation of gnulib. +# Copyright (C) 2010 Free Software Foundation, Inc. +# This file is distributed under the same license as the gnulib package. +# Yip Chi Lap <clyip@cs.hku.hk>, 1998. +# Abel Cheung <maddog@linux.org.hk>, 2002. +# Anthony Fok <anthony@thizlinux.com>, 2002. +# Funda Wang <fundawang@linux.net.cn>, 2004, 2005. +# Ji ZhengYu <zhengyuji@gmail.com>, 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: gnulib 2.0.0.3462.e9796\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2010-02-26 09:54+0800\n" +"Last-Translator: Ji ZhengYu <zhengyuji@gmail.com>\n" +"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: %s 的值小于或等于 %s" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: ARGP_HELP_FMT 参数需要一个值" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: ARGP_HELP_FMT 参数必须为正值" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: 未知的 ARGP_HELP_FMT 参数" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "ARGP_HELP_FMT 中的无效参数: %s" + +#: gnulib/lib/argp-help.c:1247 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"选项完整形式所必须用的或是可选的参数,在使用选项缩写形式时也是必须的或是可选" +"的。" + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "用法:" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr " 或者: " + +#: gnulib/lib/argp-help.c:1656 +msgid " [OPTION...]" +msgstr "[选项...]" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "请尝试执行“%s --help”或“%s --usage”来获取更多信息。\n" + +#: gnulib/lib/argp-help.c:1711 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "请向 %s 报告错误。\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "未知的系统错误" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "显示此帮助列表" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "显示一份简洁的用法信息" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "NAME" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "设定程序名称" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "SECS" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "挂起 SECS 秒(默认 3600 秒)" + +#: gnulib/lib/argp-parse.c:142 +msgid "print program version" +msgstr "打印程序版本" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(程序错误)未知版本!?" + +#: gnulib/lib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s:参数太多\n" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(程序错误)未知的选项!?" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: 选项\"%s\"歧义\n" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: 选项\"--%s\"不要参数\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: 选项\"%c%s\"不要参数\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: 选项\"%s\"必须带参数\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: 无法识别的选项\"--%s\"\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: 无法识别的选项\"%c%s\"\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: 无效选项 -- \"%c\"\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: 选项需要参数 -- \"%c\"\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: 选项\"-W %s\"有歧义\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: 选项\"-W %s\"不要带参数\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: 选项\"%s\"必须带参数\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "%2$s 的参数 %1$s 无效" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "%2$s 的参数 %1$s 有歧义" + +#~ msgid "Valid arguments are:" +#~ msgstr "有效的参数为:" + +#~ msgid "program error" +#~ msgstr "程序错误" + +#~ msgid "stack overflow" +#~ msgstr "堆栈溢出" + +#~ msgid "cannot find a temporary directory, try setting $TMPDIR" +#~ msgstr "无法找到一个临时目录,请尝试设置 $TMPDIR 环境变量" + +#~ msgid "cannot create a temporary directory using template \"%s\"" +#~ msgstr "无法以模板“%s”创建一个临时目录" + +#~ msgid "cannot remove temporary file %s" +#~ msgstr "无法删除临时文件 %s" + +#~ msgid "cannot remove temporary directory %s" +#~ msgstr "无法删除临时目录 %s" + +#~ msgid "error closing file" +#~ msgstr "关闭文件时发生错误" + +#~ msgid "write error" +#~ msgstr "写入错误" + +#~ msgid "preserving permissions for %s" +#~ msgstr "保留 %s 的权限" + +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "打开“%s”读取数据时发生错误" + +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "无法打开备份文件“%s”写入数据" + +#~ msgid "error reading \"%s\"" +#~ msgstr "读入“%s”时错误" + +#~ msgid "error writing \"%s\"" +#~ msgstr "写入“%s”时错误" + +#~ msgid "error after reading \"%s\"" +#~ msgstr "读入“%s”后错误" + +#~ msgid "fdopen() failed" +#~ msgstr "fdopen() 错误" + +#~ msgid "C# compiler not found, try installing pnet" +#~ msgstr "未找到 C# 编译器,尝试安装 pnet" + +#~ msgid "C# virtual machine not found, try installing pnet" +#~ msgstr "未找到 C# 虚拟机,尝试安装 pnet" + +#~ msgid "%s subprocess failed" +#~ msgstr "%s 子进程错误" + +#~ msgid "regular empty file" +#~ msgstr "一般空文件" + +#~ msgid "regular file" +#~ msgstr "一般文件" + +#~ msgid "directory" +#~ msgstr "目录" + +#~ msgid "block special file" +#~ msgstr "块特殊文件" + +#~ msgid "character special file" +#~ msgstr "字符特殊文件" + +#~ msgid "fifo" +#~ msgstr "先进先出" + +#~ msgid "symbolic link" +#~ msgstr "符号链接" + +#~ msgid "socket" +#~ msgstr "套接字" + +#~ msgid "message queue" +#~ msgstr "消息队列" + +#~ msgid "semaphore" +#~ msgstr "信号量" + +#~ msgid "shared memory object" +#~ msgstr "共享内存对象" + +#~ msgid "typed memory object" +#~ msgstr "标准内存对象" + +#~ msgid "weird file" +#~ msgstr "古怪文件" + +#~ msgid "Address family for hostname not supported" +#~ msgstr "不支持主机名的地址族" + +#~ msgid "Temporary failure in name resolution" +#~ msgstr "名称解析时发生临时错误" + +#~ msgid "Bad value for ai_flags" +#~ msgstr "ai_flags 的值错误" + +#~ msgid "Non-recoverable failure in name resolution" +#~ msgstr "名称解析时发生不可恢复的错误" + +#~ msgid "ai_family not supported" +#~ msgstr "不支持 ai_family" + +#~ msgid "Memory allocation failure" +#~ msgstr "内存分配错误" + +#~ msgid "No address associated with hostname" +#~ msgstr "主机名未分配到地址" + +#~ msgid "Name or service not known" +#~ msgstr "未知的名称或服务" + +#~ msgid "Servname not supported for ai_socktype" +#~ msgstr "ai_socktype 不支持的服务名" + +#~ msgid "ai_socktype not supported" +#~ msgstr "不支持 ai_socktype" + +#~ msgid "System error" +#~ msgstr "系统错误" + +#~ msgid "Argument buffer too small" +#~ msgstr "参数缓冲区太小" + +#~ msgid "Processing request in progress" +#~ msgstr "正在处理进程的请求" + +#~ msgid "Request canceled" +#~ msgstr "请求已取消" + +#~ msgid "Request not canceled" +#~ msgstr "请求未取消" + +#~ msgid "All requests done" +#~ msgstr "已处理所有请求" + +#~ msgid "Interrupted by a signal" +#~ msgstr "被一个信号中断" + +#~ msgid "Parameter string not correctly encoded" +#~ msgstr "参数字符串未正确编码" + +#~ msgid "Unknown error" +#~ msgstr "未知错误" + +#~ msgid "invalid source_version argument to compile_java_class" +#~ msgstr "compile_java_class 的 source_version 参数无效" + +#~ msgid "invalid target_version argument to compile_java_class" +#~ msgstr "compile_java_class 的 target_version 参数无效" + +#~ msgid "failed to create \"%s\"" +#~ msgstr "无法创建“%s”" + +#~ msgid "error while writing \"%s\" file" +#~ msgstr "正在写入“%s”文件时发生错误" + +#~ msgid "Java compiler not found, try installing gcj or set $JAVAC" +#~ msgstr "未找到 Java 编译器,尝试安装 gcj 或是设置 $JAVAC" + +#~ msgid "Java virtual machine not found, try installing gij or set $JAVA" +#~ msgstr "未找到 Java 虚拟机,尝试安装 gij 或是设置 $JAVA" + +#~ msgid "%s subprocess I/O error" +#~ msgstr "%s 子进程输入/输出错误" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "无法更改 %s 的权限" + +#~ msgid "cannot create directory %s" +#~ msgstr "无法创建目录 %s" + +#~ msgid "memory exhausted" +#~ msgstr "内存用尽" + +#~ msgid "unable to record current working directory" +#~ msgstr "无法记录当前工作的目录" + +#~ msgid "failed to return to initial working directory" +#~ msgstr "返回到初始工作目录失败" + +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "无法以读方式打开 /dev/zero" + +#~ msgid "creation of reading thread failed" +#~ msgstr "读线程创建错误" + +#~ msgid "cannot set up nonblocking I/O to %s subprocess" +#~ msgstr "无法为 %s 子进程设置非阻塞性 I/O" + +#~ msgid "communication with %s subprocess failed" +#~ msgstr "与 %s 子进程通讯错误" + +#~ msgid "write to %s subprocess failed" +#~ msgstr "写入 %s 子进程错误" + +#~ msgid "read from %s subprocess failed" +#~ msgstr "读取 %s 子进程错误" + +#~ msgid "subprocess %s terminated with exit code %d" +#~ msgstr "子进程 %s 由退出码 %d 终止" + +#~ msgid "creation of threads failed" +#~ msgstr "线程创建失败" + +#~ msgid "%s subprocess terminated with exit code %d" +#~ msgstr "子进程 %s 由退出码 %d 终止" + +#~ msgid "cannot create pipe" +#~ msgstr "无法创建管道" + +#~ msgid "`" +#~ msgstr "“" + +#~ msgid "'" +#~ msgstr "”" + +#~ msgid "Success" +#~ msgstr "成功" + +#~ msgid "No match" +#~ msgstr "不匹配" + +#~ msgid "Invalid regular expression" +#~ msgstr "正则表达式无效" + +#, fuzzy +#~ msgid "Invalid collation character" +#~ msgstr "无效的重组字符" + +#~ msgid "Invalid character class name" +#~ msgstr "无效的字符类名" + +#~ msgid "Trailing backslash" +#~ msgstr "多余的反斜杠" + +#~ msgid "Invalid back reference" +#~ msgstr "无效的向后索引" + +#~ msgid "Unmatched [ or [^" +#~ msgstr "[ 或 [^ 不匹配" + +#~ msgid "Unmatched ( or \\(" +#~ msgstr "( 或 \\( 不匹配" + +#~ msgid "Unmatched \\{" +#~ msgstr "\\{ 不匹配" + +#~ msgid "Invalid content of \\{\\}" +#~ msgstr "\\{\\} 的内容无效" + +#~ msgid "Invalid range end" +#~ msgstr "无效的范围结尾" + +#~ msgid "Memory exhausted" +#~ msgstr "内存用尽" + +#~ msgid "Invalid preceding regular expression" +#~ msgstr "前置的正则表达式无效" + +#~ msgid "Premature end of regular expression" +#~ msgstr "正则表达式结尾过早" + +#~ msgid "Regular expression too big" +#~ msgstr "正则表达式太大" + +#~ msgid "Unmatched ) or \\)" +#~ msgstr ") 或 \\) 不匹配" + +#~ msgid "No previous regular expression" +#~ msgstr "没有前次正则表达式" + +#~ msgid "^[yY]" +#~ msgstr "^[yY]" + +#~ msgid "^[nN]" +#~ msgstr "^[nN]" + +#~ msgid "setting permissions for %s" +#~ msgstr "设置 %s 的权限" + +#~ msgid "Hangup" +#~ msgstr "挂起" + +#~ msgid "Interrupt" +#~ msgstr "中断" + +#~ msgid "Quit" +#~ msgstr "退出" + +#~ msgid "Illegal instruction" +#~ msgstr "非法指令" + +#~ msgid "Trace/breakpoint trap" +#~ msgstr "跟踪(断点)" + +#~ msgid "Aborted" +#~ msgstr "取消" + +#~ msgid "Floating point exception" +#~ msgstr "浮点溢出" + +#~ msgid "Killed" +#~ msgstr "强行终止" + +#~ msgid "Bus error" +#~ msgstr "总线错误" + +#~ msgid "Segmentation fault" +#~ msgstr "段错误" + +#~ msgid "Broken pipe" +#~ msgstr "管道断开" + +#~ msgid "Alarm clock" +#~ msgstr "时钟警报" + +#~ msgid "Terminated" +#~ msgstr "被终止" + +#~ msgid "Urgent I/O condition" +#~ msgstr "I/O 条件不足" + +#~ msgid "Stopped (signal)" +#~ msgstr "被停止(通过信号)" + +#~ msgid "Stopped" +#~ msgstr "被停止" + +#~ msgid "Continued" +#~ msgstr "继续" + +#~ msgid "Child exited" +#~ msgstr "子进程退出" + +#~ msgid "Stopped (tty input)" +#~ msgstr "被停止(tty 输入)" + +#~ msgid "Stopped (tty output)" +#~ msgstr "被停止(tty 输出)" + +#~ msgid "I/O possible" +#~ msgstr "I/O 可能" + +#~ msgid "CPU time limit exceeded" +#~ msgstr "超出CPU 时间限制" + +#~ msgid "File size limit exceeded" +#~ msgstr "超出文件大小限制" + +#~ msgid "Virtual timer expired" +#~ msgstr "虚拟计时器过期" + +#, fuzzy +#~ msgid "Profiling timer expired" +#~ msgstr "数据计时器过期" + +#~ msgid "Window changed" +#~ msgstr "窗口改变" + +#~ msgid "User defined signal 1" +#~ msgstr "用户自定义信号 1" + +#~ msgid "User defined signal 2" +#~ msgstr "用户自定义信号 2" + +#~ msgid "EMT trap" +#~ msgstr "仿真程序陷阱" + +#~ msgid "Bad system call" +#~ msgstr "错误的系统调用" + +#~ msgid "Stack fault" +#~ msgstr "堆栈错误" + +#~ msgid "Information request" +#~ msgstr "信息请求" + +#~ msgid "Power failure" +#~ msgstr "电力问题" + +#~ msgid "Resource lost" +#~ msgstr "资源丢失" + +#~ msgid "error writing to a closed pipe or socket" +#~ msgstr "写入一个已关闭的管道或套接字时发生错误" + +#~ msgid "Real-time signal %d" +#~ msgstr "实时信号 %d" + +#~ msgid "Unknown signal %d" +#~ msgstr "未知信号 %d" + +#~ msgid "iconv function not usable" +#~ msgstr "iconv 函数无法使用" + +#~ msgid "iconv function not available" +#~ msgstr "iconv 函数不存在" + +#~ msgid "character out of range" +#~ msgstr "字符值超出可接受的范围以外" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "无法将 U+%04X 转换至用户的字符集" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "无法将 U+%04X 转换至用户的字符集:%s" + +#~ msgid "invalid user" +#~ msgstr "无效的用户" + +#~ msgid "invalid group" +#~ msgstr "无效的组" + +#~ msgid "invalid spec" +#~ msgstr "无效的 spec" + +#~ msgid "unable to display error message" +#~ msgstr "无法显示错误信息" + +#~ msgid "Packaged by %s (%s)\n" +#~ msgstr "由 %s (%s) 打包\n" + +#~ msgid "Packaged by %s\n" +#~ msgstr "由 %s 打包\n" + +#~ msgid "(C)" +#~ msgstr "(C)" + +#~ msgid "" +#~ "\n" +#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +#~ "html>.\n" +#~ "This is free software: you are free to change and redistribute it.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "授权协议 GPLv3+: GNU GPL 版本 3 或更新版本 <http://gnu.org/licenses/gpl." +#~ "html>\n" +#~ "这是自由软件:您可以自由的更改并重新发布它。\n" +#~ "在法律允许的范围内,没有任何担保。\n" +#~ "\n" + +#~ msgid "Written by %s.\n" +#~ msgstr "由 %s 编写。\n" + +#~ msgid "Written by %s and %s.\n" +#~ msgstr "由 %s 和 %s 编写。\n" + +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "由 %s、%s 和 %s 编写。\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "由 %s、%s、%s 和\n" +#~ "%s 编写。\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "由 %s、%s、%s、\n" +#~ "%s 和 %s 编写。\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, and %s.\n" +#~ msgstr "" +#~ "由 %s、%s、%s、\n" +#~ "%s、%s 和 %s 编写。\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, and %s.\n" +#~ msgstr "" +#~ "由 %s、%s、%s、\n" +#~ "%s、%s、%s 和 %s 编写。\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "由 %s、%s、%s、\n" +#~ "%s、%s、%s、%s\n" +#~ "和 %s 编写。\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "由 %s、%s、%s、\n" +#~ "%s、%s、%s、%s、\n" +#~ "%s、和 %s 编写。\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, and others.\n" +#~ msgstr "" +#~ "由 %s、%s、%s、\n" +#~ "%s、%s、%s、%s、\n" +#~ "%s、%s、和其他人编写。\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to: %s\n" +#~ msgstr "" +#~ "\n" +#~ "请向 %s 报告错误。向 <i18n-zh@googlegroups.com> 报告翻译错误。\n" + +#~ msgid "Report %s bugs to: %s\n" +#~ msgstr "将 %s 错误报告给: %s\n" + +#~ msgid "%s home page: <%s>\n" +#~ msgstr "%s 主页: <%s>\n" + +#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +#~ msgstr "%s 主页: <http://www.gnu.org/software/%s/>\n" + +#~ msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +#~ msgstr "GNU 软件的通用帮助: <http://www.gnu.org/gethelp/>\n" + +#~ msgid "_open_osfhandle failed" +#~ msgstr "_open_osfhandle 失败" + +#~ msgid "cannot restore fd %d: dup2 failed" +#~ msgstr "无法恢复文件描述符 %d: dup2 失败" + +#~ msgid "%s subprocess" +#~ msgstr "%s 子进程" + +#~ msgid "%s subprocess got fatal signal %d" +#~ msgstr "%s 子进程获得终结信号 %d" + +#~ msgid "stdin" +#~ msgstr "标准输入" + +#~ msgid "stdout" +#~ msgstr "标准输出" + +#~ msgid "stderr" +#~ msgstr "标准错误输出" + +#~ msgid "unknown stream" +#~ msgstr "未知的流" + +#~ msgid "failed to reopen %s with mode %s" +#~ msgstr "无法以 %2$s 模式重新打开 %1$s" + +#~ msgid "string comparison failed" +#~ msgstr "字符串比较出现错误" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "请设定 LC_ALL='C' 避免问题出现。" + +#~ msgid "The strings compared were %s and %s." +#~ msgstr "要比较的字符串为 %s 和 %s。" + +#~ msgid "cannot perform formatted output" +#~ msgstr "无法执行格式化输出" + +#~ msgid "invalid %s%s argument `%s'" +#~ msgstr "%s%s 参数‘%s’无效" + +#~ msgid "invalid suffix in %s%s argument `%s'" +#~ msgstr "%s%s 参数‘%s’的后缀无效" + +#~ msgid "%s%s argument `%s' too large" +#~ msgstr "%s%s 参数‘%s’太长" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s:非法选项 -- %c\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "" +#~ "\n" +#~ "请向 <%s> 报告错误。\n" + +#~ msgid "block size" +#~ msgstr "块大小" + +#~ msgid "%s exists but is not a directory" +#~ msgstr "%s 存在但并非目录" + +#~ msgid "cannot change owner and/or group of %s" +#~ msgstr "无法更改 %s 的属主和/或组" + +#~ msgid "cannot chdir to directory %s" +#~ msgstr "无法切换到目录 %s" + +#~ msgid "cannot get the login group of a numeric UID" +#~ msgstr "无法取得 UID 数值所表示的用户的主组" diff --git a/gnulib/po/zh_TW.po b/gnulib/po/zh_TW.po new file mode 100644 index 0000000..8e6f2f9 --- /dev/null +++ b/gnulib/po/zh_TW.po @@ -0,0 +1,478 @@ +# traditional Chinese translation of coreutils. +# Copyright (C) 1998, 2002, 2005 Free Software Foundation, Inc. +# +# # Merged from textutils, sh-utils and fileutils translation: +# # Yip Chi Lap <clyip@cs.hku.hk>, 1998. +# # Yuan-Chung Cheng <platin@ms.ccafps.khc.edu.tw>, 1998. +# # Abel Cheung <abelcheung@gmail.com>, 2002. +# # Pofeng Lee <pofeng@linux.org.tw>, 1998, 2002. +# +# Abel Cheung <abelcheung@gmail.com>, 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: coreutils 5.3.0\n" +"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n" +"POT-Creation-Date: 2013-07-01 17:23+0400\n" +"PO-Revision-Date: 2005-07-02 04:13+0800\n" +"Last-Translator: Abel Cheung <abelcheung@gmail.com>\n" +"Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: gnulib/lib/argp-help.c:147 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "" + +#: gnulib/lib/argp-help.c:220 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "" + +#: gnulib/lib/argp-help.c:226 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "" + +#: gnulib/lib/argp-help.c:235 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "" + +#: gnulib/lib/argp-help.c:247 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "" + +#: gnulib/lib/argp-help.c:1247 +#, fuzzy +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "長選項必須用的參數在使用短選項時也是必須的。\n" + +#: gnulib/lib/argp-help.c:1640 +msgid "Usage:" +msgstr "" + +#: gnulib/lib/argp-help.c:1644 +msgid " or: " +msgstr "" + +#: gnulib/lib/argp-help.c:1656 +#, fuzzy +msgid " [OPTION...]" +msgstr "用法:%s [選項] [檔案]...\n" + +#: gnulib/lib/argp-help.c:1683 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "請嘗試執行‘%s --help’來獲取更多資訊。\n" + +#: gnulib/lib/argp-help.c:1711 +#, fuzzy, c-format +msgid "Report bugs to %s.\n" +msgstr "" +"\n" +"請向 <%s> 回報錯誤。\n" + +#: gnulib/lib/argp-help.c:1930 +msgid "Unknown system error" +msgstr "不明的系統錯誤" + +#: gnulib/lib/argp-parse.c:81 +msgid "give this help list" +msgstr "" + +#: gnulib/lib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "" + +#: gnulib/lib/argp-parse.c:83 +msgid "NAME" +msgstr "名稱" + +#: gnulib/lib/argp-parse.c:83 +msgid "set the program name" +msgstr "" + +#: gnulib/lib/argp-parse.c:84 +msgid "SECS" +msgstr "" + +#: gnulib/lib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "" + +#: gnulib/lib/argp-parse.c:142 +#, fuzzy +msgid "print program version" +msgstr "讀取時發生錯誤" + +#: gnulib/lib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "" + +#: gnulib/lib/argp-parse.c:612 +#, fuzzy, c-format +msgid "%s: Too many arguments\n" +msgstr "%s:找不到正確格式的 %s 總和檢查值" + +#: gnulib/lib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "" + +#: gnulib/lib/getopt.c:547 gnulib/lib/getopt.c:576 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s:選項‘%s’不明確\n" + +#: gnulib/lib/getopt.c:624 gnulib/lib/getopt.c:628 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s:選項‘--%s’不可配合參數使用\n" + +#: gnulib/lib/getopt.c:637 gnulib/lib/getopt.c:642 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s:選項‘%c%s’不可配合參數使用\n" + +#: gnulib/lib/getopt.c:685 gnulib/lib/getopt.c:704 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s:選項‘%s’需要參數\n" + +#: gnulib/lib/getopt.c:742 gnulib/lib/getopt.c:745 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s:無法識別的選項‘--%s’\n" + +#: gnulib/lib/getopt.c:753 gnulib/lib/getopt.c:756 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s:無法識別的選項‘%c%s’\n" + +#: gnulib/lib/getopt.c:805 gnulib/lib/getopt.c:808 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s:無效的選項 ─ %c\n" + +#: gnulib/lib/getopt.c:861 gnulib/lib/getopt.c:878 gnulib/lib/getopt.c:1088 +#: gnulib/lib/getopt.c:1106 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s:選項需要參數 ─ %c\n" + +#: gnulib/lib/getopt.c:934 gnulib/lib/getopt.c:950 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s:選項‘-W %s’不明確\n" + +#: gnulib/lib/getopt.c:974 gnulib/lib/getopt.c:992 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s:選項‘-W %s’不可配合參數使用\n" + +#: gnulib/lib/getopt.c:1013 gnulib/lib/getopt.c:1031 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s:選項‘%s’需要參數\n" + +#~ msgid "invalid argument %s for %s" +#~ msgstr "%2$s的參數%1$s無效" + +#~ msgid "ambiguous argument %s for %s" +#~ msgstr "%2$s的參數%1$s不明確" + +#~ msgid "Valid arguments are:" +#~ msgstr "有效的參數為:" + +#~ msgid "write error" +#~ msgstr "寫入時發生錯誤" + +#, fuzzy +#~ msgid "error while opening \"%s\" for reading" +#~ msgstr "無法開啟 %s 來讀取資料" + +#, fuzzy +#~ msgid "cannot open backup file \"%s\" for writing" +#~ msgstr "無法開啟%s來讀取資料" + +#, fuzzy +#~ msgid "error reading \"%s\"" +#~ msgstr "讀取 %s 時發生錯誤" + +#, fuzzy +#~ msgid "error writing \"%s\"" +#~ msgstr "寫入 %s 時發生錯誤" + +#, fuzzy +#~ msgid "error after reading \"%s\"" +#~ msgstr "讀取 %s 時發生錯誤" + +#, fuzzy +#~ msgid "fdopen() failed" +#~ msgstr "開啟時發生錯誤" + +#, fuzzy +#~ msgid "%s subprocess failed" +#~ msgstr "關閉時發生錯誤" + +#~ msgid "regular empty file" +#~ msgstr "普通空白檔案" + +#~ msgid "regular file" +#~ msgstr "普通檔案" + +#~ msgid "directory" +#~ msgstr "目錄" + +#~ msgid "block special file" +#~ msgstr "區塊特殊檔案" + +#~ msgid "character special file" +#~ msgstr "字元特殊檔案" + +#~ msgid "fifo" +#~ msgstr "fifo" + +#~ msgid "symbolic link" +#~ msgstr "符號連結" + +#~ msgid "socket" +#~ msgstr "socket" + +#~ msgid "message queue" +#~ msgstr "訊息佇列" + +#~ msgid "semaphore" +#~ msgstr "semaphore" + +#~ msgid "shared memory object" +#~ msgstr "共用記憶體物件" + +#, fuzzy +#~ msgid "typed memory object" +#~ msgstr "共用記憶體物件" + +#~ msgid "weird file" +#~ msgstr "不正常的檔案" + +#, fuzzy +#~ msgid "Address family for hostname not supported" +#~ msgstr "不支援 FIFO 檔案" + +#, fuzzy +#~ msgid "ai_family not supported" +#~ msgstr "不支援 FIFO 檔案" + +#, fuzzy +#~ msgid "ai_socktype not supported" +#~ msgstr "不支援 FIFO 檔案" + +#, fuzzy +#~ msgid "System error" +#~ msgstr "寫入時發生錯誤" + +#, fuzzy +#~ msgid "Unknown error" +#~ msgstr "不明的系統錯誤" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s:不合法的選項 ─ %c\n" + +#, fuzzy +#~ msgid "block size" +#~ msgstr "區塊特殊檔案" + +#~ msgid "%s exists but is not a directory" +#~ msgstr "%s已存在但不是目錄" + +#~ msgid "cannot change owner and/or group of %s" +#~ msgstr "無法更改%s的擁有者和/或所屬群組" + +#~ msgid "cannot create directory %s" +#~ msgstr "無法建立目錄%s" + +#~ msgid "cannot chdir to directory %s" +#~ msgstr "無法進入%s目錄" + +#~ msgid "cannot change permissions of %s" +#~ msgstr "無法更改%s的權限" + +#~ msgid "memory exhausted" +#~ msgstr "記憶體耗盡" + +#, fuzzy +#~ msgid "unable to record current working directory" +#~ msgstr "無法建立目錄%s" + +#, fuzzy +#~ msgid "failed to return to initial working directory" +#~ msgstr "無法建立目錄%s" + +#, fuzzy +#~ msgid "Failed to open /dev/zero for read" +#~ msgstr "%s:無法開啟來寫入資料" + +#, fuzzy +#~ msgid "cannot create pipe" +#~ msgstr "無法建立 %s 鏈結" + +#~ msgid "`" +#~ msgstr "‘" + +#~ msgid "'" +#~ msgstr "’" + +#, fuzzy +#~ msgid "Invalid regular expression" +#~ msgstr "%s:無效的正規表示式:%s" + +#, fuzzy +#~ msgid "Invalid character class name" +#~ msgstr "無效的字元種類‘%s’" + +#, fuzzy +#~ msgid "Invalid range end" +#~ msgstr "無效的類型‘%s’" + +#, fuzzy +#~ msgid "Memory exhausted" +#~ msgstr "記憶體耗盡" + +#, fuzzy +#~ msgid "Invalid preceding regular expression" +#~ msgstr "%s:無效的正規表示式:%s" + +#, fuzzy +#~ msgid "Premature end of regular expression" +#~ msgstr "在正規運算式搜尋時發生錯誤" + +#, fuzzy +#~ msgid "Regular expression too big" +#~ msgstr "%s:無效的正規表示式:%s" + +#, fuzzy +#~ msgid "No previous regular expression" +#~ msgstr "在正規運算式搜尋時發生錯誤" + +#~ msgid "^[yY]" +#~ msgstr "^[yY]" + +#~ msgid "^[nN]" +#~ msgstr "^[nN]" + +#~ msgid "iconv function not usable" +#~ msgstr "iconv 功能無法使用" + +#~ msgid "iconv function not available" +#~ msgstr "iconv 功能不存在" + +#~ msgid "character out of range" +#~ msgstr "字元值超出可接受的範圍以外" + +#~ msgid "cannot convert U+%04X to local character set" +#~ msgstr "無法將 U+%04X 轉換至使用者的字元集" + +#~ msgid "cannot convert U+%04X to local character set: %s" +#~ msgstr "無法將 U+%04X 轉換至使用者的字元集:%s" + +#~ msgid "invalid user" +#~ msgstr "無效的使用者" + +#~ msgid "invalid group" +#~ msgstr "無效的群組" + +#~ msgid "cannot get the login group of a numeric UID" +#~ msgstr "無法取得 UID 數值所代表的登入群組" + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "This is free software. You may redistribute copies of it under the terms " +#~ "of\n" +#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n" +#~ "There is NO WARRANTY, to the extent permitted by law.\n" +#~ "\n" +#~ msgstr "" +#~ "本程式是自由軟體;你可以根據 Free Software Foundation 所公佈的 GNU\n" +#~ "General Public License 第二版或(自由選擇)較新的版本中的條款去重新\n" +#~ "散佈及/或修改本軟體。\n" +#~ "\n" + +#~ msgid "Written by %s.\n" +#~ msgstr "由 %s 編寫。\n" + +#~ msgid "Written by %s and %s.\n" +#~ msgstr "由 %s 和 %s 編寫。\n" + +#~ msgid "Written by %s, %s, and %s.\n" +#~ msgstr "由 %s, %s 和 %s 編寫。\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "由 %s, %s, %s\n" +#~ "和 %s 編寫。\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "由 %s, %s, %s,\n" +#~ "%s 和 %s 編寫。\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, and %s.\n" +#~ msgstr "" +#~ "由 %s, %s, %s,\n" +#~ "%s, %s 和 %s 編寫。\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, and %s.\n" +#~ msgstr "" +#~ "由 %s, %s, %s, %s,\n" +#~ "%s, %s 和 %s 編寫。\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "and %s.\n" +#~ msgstr "" +#~ "由 %s, %s, %s, %s,\n" +#~ "%s, %s, %s 和 %s 編寫。\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, and %s.\n" +#~ msgstr "" +#~ "由 %s, %s, %s, %s,\n" +#~ "%s, %s, %s, %s\n" +#~ "和 %s 編寫。\n" + +#~ msgid "" +#~ "Written by %s, %s, %s,\n" +#~ "%s, %s, %s, %s,\n" +#~ "%s, %s, and others.\n" +#~ msgstr "" +#~ "由 %s, %s, %s, %s,\n" +#~ "%s, %s, %s, %s\n" +#~ "和 %s 等等編寫。\n" + +#~ msgid "string comparison failed" +#~ msgstr "字串比較出現錯誤" + +#~ msgid "Set LC_ALL='C' to work around the problem." +#~ msgstr "請設定 LC_ALL='C' 避免問題出現。" + +#~ msgid "The strings compared were %s and %s." +#~ msgstr "要比較的字串為%s及%s。" |