summaryrefslogtreecommitdiff
path: root/gl
diff options
context:
space:
mode:
authorColin Watson <cjwatson@debian.org>2019-08-03 12:15:34 +0100
committerColin Watson <cjwatson@debian.org>2019-08-03 12:15:34 +0100
commitf22ec2853f6ea2123dc4a1fee566a828e8d86bc6 (patch)
treeb4d8e7309d6d25acee9b3a94f6e07acb209daacd /gl
parent182141146d0ad9c735949840504bdfc66332da4e (diff)
parent74d8f72dc1ca9620d3e8e1ae2ed9b19047ba348f (diff)
Import man-db_2.8.6.orig.tar.xz
Diffstat (limited to 'gl')
-rw-r--r--gl/lib/Makefile.am120
-rw-r--r--gl/lib/Makefile.in306
-rw-r--r--gl/lib/argp-help.c10
-rw-r--r--gl/lib/argp.h9
-rw-r--r--gl/lib/cdefs.h2
-rw-r--r--gl/lib/chown.c151
-rw-r--r--gl/lib/fchown-stub.c16
-rw-r--r--gl/lib/fcntl.c2
-rw-r--r--gl/lib/file-set.c2
-rw-r--r--gl/lib/gettext.h13
-rw-r--r--gl/lib/gl_anyhash1.h31
-rw-r--r--gl/lib/gl_anyhash2.h82
-rw-r--r--gl/lib/gl_anyhash_primes.h87
-rw-r--r--gl/lib/gl_anylinked_list1.h48
-rw-r--r--gl/lib/gl_anylinked_list2.h1195
-rw-r--r--gl/lib/gl_anyrbtree_list1.h76
-rw-r--r--gl/lib/gl_anyrbtree_list2.h1028
-rw-r--r--gl/lib/gl_anytree_list1.h41
-rw-r--r--gl/lib/gl_anytree_list2.h940
-rw-r--r--gl/lib/gl_array_list.c680
-rw-r--r--gl/lib/gl_array_list.h34
-rw-r--r--gl/lib/gl_hash_map.c337
-rw-r--r--gl/lib/gl_hash_map.h34
-rw-r--r--gl/lib/gl_hash_set.c317
-rw-r--r--gl/lib/gl_hash_set.h34
-rw-r--r--gl/lib/gl_linkedhash_list.c116
-rw-r--r--gl/lib/gl_linkedhash_list.h34
-rw-r--r--gl/lib/gl_list.c3
-rw-r--r--gl/lib/gl_list.h843
-rw-r--r--gl/lib/gl_map.c3
-rw-r--r--gl/lib/gl_map.h382
-rw-r--r--gl/lib/gl_rbtree_list.c102
-rw-r--r--gl/lib/gl_rbtree_list.h34
-rw-r--r--gl/lib/gl_set.c3
-rw-r--r--gl/lib/gl_set.h281
-rw-r--r--gl/lib/gl_xlist.c3
-rw-r--r--gl/lib/gl_xlist.h177
-rw-r--r--gl/lib/gl_xmap.c3
-rw-r--r--gl/lib/gl_xmap.h91
-rw-r--r--gl/lib/gl_xset.c3
-rw-r--r--gl/lib/gl_xset.h76
-rw-r--r--gl/lib/hash-pjw-bare.c42
-rw-r--r--gl/lib/hash-pjw-bare.h24
-rw-r--r--gl/lib/lchown.c117
-rw-r--r--gl/lib/regexec.c2
-rw-r--r--gl/lib/stdopen.c66
-rw-r--r--gl/lib/stdopen.h14
-rw-r--r--gl/lib/sys_stat.in.h9
-rw-r--r--gl/lib/vasnprintf.c9
-rw-r--r--gl/lib/verify.h6
-rw-r--r--gl/lib/xstdopen.c35
-rw-r--r--gl/lib/xstdopen.h28
-rw-r--r--gl/m4/chown.m4208
-rw-r--r--gl/m4/getcwd-path-max.m416
-rw-r--r--gl/m4/gnulib-comp.m471
-rw-r--r--gl/m4/lchown.m438
-rw-r--r--gl/m4/math_h.m45
-rw-r--r--gl/m4/printf.m4190
-rw-r--r--gl/m4/threadlib.m482
-rw-r--r--gl/po/POTFILES.in40
-rw-r--r--gl/po/af.po19
-rw-r--r--gl/po/be.po19
-rw-r--r--gl/po/bg.gmobin1000 -> 6044 bytes
-rw-r--r--gl/po/bg.po749
-rw-r--r--gl/po/ca.po19
-rw-r--r--gl/po/cs.po19
-rw-r--r--gl/po/da.po19
-rw-r--r--gl/po/de.gmobin3997 -> 4855 bytes
-rw-r--r--gl/po/de.po454
-rw-r--r--gl/po/el.po19
-rw-r--r--gl/po/eo.gmobin3758 -> 4588 bytes
-rw-r--r--gl/po/eo.po302
-rw-r--r--gl/po/es.po19
-rw-r--r--gl/po/et.po19
-rw-r--r--gl/po/eu.po19
-rw-r--r--gl/po/fi.po19
-rw-r--r--gl/po/fr.gmobin4035 -> 4911 bytes
-rw-r--r--gl/po/fr.po321
-rw-r--r--gl/po/ga.po19
-rw-r--r--gl/po/gl.po19
-rw-r--r--gl/po/hu.po19
-rw-r--r--gl/po/it.gmobin3941 -> 4790 bytes
-rw-r--r--gl/po/it.po296
-rw-r--r--gl/po/ja.po19
-rw-r--r--gl/po/ko.po19
-rw-r--r--gl/po/man-db-gnulib.pot21
-rw-r--r--gl/po/ms.po19
-rw-r--r--gl/po/nb.po19
-rw-r--r--gl/po/nl.gmobin3966 -> 4739 bytes
-rw-r--r--gl/po/nl.po296
-rw-r--r--gl/po/pl.gmobin3998 -> 4822 bytes
-rw-r--r--gl/po/pl.po280
-rw-r--r--gl/po/pt.gmobin3979 -> 4716 bytes
-rw-r--r--gl/po/pt.po672
-rw-r--r--gl/po/pt_BR.gmobin3996 -> 4810 bytes
-rw-r--r--gl/po/pt_BR.po307
-rw-r--r--gl/po/ro.po19
-rw-r--r--gl/po/ru.gmobin5060 -> 6161 bytes
-rw-r--r--gl/po/ru.po309
-rw-r--r--gl/po/rw.po19
-rw-r--r--gl/po/sk.po19
-rw-r--r--gl/po/sl.po19
-rw-r--r--gl/po/sr.po19
-rw-r--r--gl/po/sv.gmobin3827 -> 4638 bytes
-rw-r--r--gl/po/sv.po281
-rw-r--r--gl/po/tr.po19
-rw-r--r--gl/po/uk.gmobin4882 -> 5964 bytes
-rw-r--r--gl/po/uk.po317
-rw-r--r--gl/po/vi.po19
-rw-r--r--gl/po/zh_CN.po19
-rw-r--r--gl/po/zh_TW.gmobin638 -> 4389 bytes
-rw-r--r--gl/po/zh_TW.po792
112 files changed, 12625 insertions, 1998 deletions
diff --git a/gl/lib/Makefile.am b/gl/lib/Makefile.am
index 6ae85232..2bb6646e 100644
--- a/gl/lib/Makefile.am
+++ b/gl/lib/Makefile.am
@@ -36,11 +36,13 @@
# --po-domain=man-db \
# --no-vc-files \
# argp \
+# array-list \
# canonicalize \
# closedir \
# dirent \
# dirname \
# error \
+# fcntl \
# flock \
# fnmatch-gnu \
# fstat \
@@ -51,9 +53,14 @@
# gitlog-to-changelog \
# glob \
# gnupload \
+# hash-map \
+# hash-pjw-bare \
+# hash-set \
# idpriv-drop \
# idpriv-droptemp \
+# lchown \
# lib-ignore \
+# linkedhash-list \
# localcharset \
# lock \
# memmem \
@@ -65,6 +72,7 @@
# openat \
# opendir \
# progname \
+# rbtree-list \
# regex \
# rename \
# setenv \
@@ -72,6 +80,8 @@
# signal \
# sigprocmask \
# stat-time \
+# stdbool \
+# strcase \
# strcasestr \
# strerror \
# strsep \
@@ -81,6 +91,10 @@
# warnings \
# xalloc \
# xgetcwd \
+# xlist \
+# xmap \
+# xset \
+# xstdopen \
# xstrndup \
# xvasprintf
@@ -178,6 +192,12 @@ libgnu_la_SOURCES += argp.h argp-ba.c argp-eexst.c argp-fmtstream.c
## end gnulib module argp
+## begin gnulib module array-list
+
+libgnu_la_SOURCES += gl_array_list.h gl_array_list.c
+
+## end gnulib module array-list
+
## begin gnulib module assure
@@ -235,6 +255,15 @@ EXTRA_libgnu_la_SOURCES += chdir-long.c
## end gnulib module chdir-long
+## begin gnulib module chown
+
+
+EXTRA_DIST += chown.c fchown-stub.c
+
+EXTRA_libgnu_la_SOURCES += chown.c fchown-stub.c
+
+## end gnulib module chown
+
## begin gnulib module cloexec
libgnu_la_SOURCES += cloexec.c
@@ -820,12 +849,30 @@ EXTRA_DIST += hash.h
## end gnulib module hash
+## begin gnulib module hash-map
+
+libgnu_la_SOURCES += gl_hash_map.h gl_hash_map.c gl_anyhash1.h gl_anyhash2.h gl_anyhash_primes.h
+
+## end gnulib module hash-map
+
## begin gnulib module hash-pjw
libgnu_la_SOURCES += hash-pjw.h hash-pjw.c
## end gnulib module hash-pjw
+## begin gnulib module hash-pjw-bare
+
+libgnu_la_SOURCES += hash-pjw-bare.h hash-pjw-bare.c
+
+## end gnulib module hash-pjw-bare
+
+## begin gnulib module hash-set
+
+libgnu_la_SOURCES += gl_hash_set.h gl_hash_set.c gl_anyhash1.h gl_anyhash2.h gl_anyhash_primes.h
+
+## end gnulib module hash-set
+
## begin gnulib module hash-triple
libgnu_la_SOURCES += hash-triple.c
@@ -907,6 +954,15 @@ EXTRA_DIST += langinfo.in.h
## end gnulib module langinfo
+## begin gnulib module lchown
+
+
+EXTRA_DIST += lchown.c
+
+EXTRA_libgnu_la_SOURCES += lchown.c
+
+## end gnulib module lchown
+
## begin gnulib module libc-config
@@ -942,6 +998,18 @@ EXTRA_DIST += limits.in.h
## end gnulib module limits-h
+## begin gnulib module linkedhash-list
+
+libgnu_la_SOURCES += gl_linkedhash_list.h gl_linkedhash_list.c gl_anyhash1.h gl_anyhash2.h gl_anyhash_primes.h gl_anylinked_list1.h gl_anylinked_list2.h
+
+## end gnulib module linkedhash-list
+
+## begin gnulib module list
+
+libgnu_la_SOURCES += gl_list.h gl_list.c
+
+## end gnulib module list
+
## begin gnulib module localcharset
libgnu_la_SOURCES += localcharset.c
@@ -1049,6 +1117,12 @@ EXTRA_DIST += malloca.h
## end gnulib module malloca
+## begin gnulib module map
+
+libgnu_la_SOURCES += gl_map.h gl_map.c
+
+## end gnulib module map
+
## begin gnulib module mbrtowc
@@ -1271,6 +1345,12 @@ EXTRA_libgnu_la_SOURCES += rawmemchr.c
## end gnulib module rawmemchr
+## begin gnulib module rbtree-list
+
+libgnu_la_SOURCES += gl_rbtree_list.h gl_rbtree_list.c gl_anyrbtree_list1.h gl_anyrbtree_list2.h gl_anytree_list1.h gl_anytree_list2.h
+
+## end gnulib module rbtree-list
+
## begin gnulib module readdir
@@ -1374,6 +1454,12 @@ EXTRA_libgnu_la_SOURCES += select.c
## end gnulib module select
+## begin gnulib module set
+
+libgnu_la_SOURCES += gl_set.h gl_set.c
+
+## end gnulib module set
+
## begin gnulib module setenv
@@ -1927,6 +2013,14 @@ EXTRA_DIST += stdlib.in.h
## end gnulib module stdlib
+## begin gnulib module stdopen
+
+libgnu_la_SOURCES += stdopen.c
+
+EXTRA_DIST += stdopen.h
+
+## end gnulib module stdopen
+
## begin gnulib module strcase
@@ -3029,12 +3123,38 @@ EXTRA_DIST += xgetcwd.h
## end gnulib module xgetcwd
+## begin gnulib module xlist
+
+libgnu_la_SOURCES += gl_xlist.h gl_xlist.c
+
+## end gnulib module xlist
+
+## begin gnulib module xmap
+
+libgnu_la_SOURCES += gl_xmap.h gl_xmap.c
+
+## end gnulib module xmap
+
+## begin gnulib module xset
+
+libgnu_la_SOURCES += gl_xset.h gl_xset.c
+
+## end gnulib module xset
+
## begin gnulib module xsize
libgnu_la_SOURCES += xsize.h xsize.c
## end gnulib module xsize
+## begin gnulib module xstdopen
+
+libgnu_la_SOURCES += xstdopen.c
+
+EXTRA_DIST += xstdopen.h
+
+## end gnulib module xstdopen
+
## begin gnulib module xstrndup
libgnu_la_SOURCES += xstrndup.h xstrndup.c
diff --git a/gl/lib/Makefile.in b/gl/lib/Makefile.in
index f95eca35..3433fb81 100644
--- a/gl/lib/Makefile.in
+++ b/gl/lib/Makefile.in
@@ -50,11 +50,13 @@
# --po-domain=man-db \
# --no-vc-files \
# argp \
+# array-list \
# canonicalize \
# closedir \
# dirent \
# dirname \
# error \
+# fcntl \
# flock \
# fnmatch-gnu \
# fstat \
@@ -65,9 +67,14 @@
# gitlog-to-changelog \
# glob \
# gnupload \
+# hash-map \
+# hash-pjw-bare \
+# hash-set \
# idpriv-drop \
# idpriv-droptemp \
+# lchown \
# lib-ignore \
+# linkedhash-list \
# localcharset \
# lock \
# memmem \
@@ -79,6 +86,7 @@
# openat \
# opendir \
# progname \
+# rbtree-list \
# regex \
# rename \
# setenv \
@@ -86,6 +94,8 @@
# signal \
# sigprocmask \
# stat-time \
+# stdbool \
+# strcase \
# strcasestr \
# strerror \
# strsep \
@@ -95,6 +105,10 @@
# warnings \
# xalloc \
# xgetcwd \
+# xlist \
+# xmap \
+# xset \
+# xstdopen \
# xstrndup \
# xvasprintf
@@ -184,6 +198,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/man-arg-automatic-create.m4 \
$(top_srcdir)/m4/man-arg-db.m4 \
$(top_srcdir)/m4/man-arg-device.m4 \
$(top_srcdir)/m4/man-arg-mandirs.m4 \
+ $(top_srcdir)/m4/man-arg-manual.m4 \
$(top_srcdir)/m4/man-arg-override-dir.m4 \
$(top_srcdir)/m4/man-arg-sections.m4 \
$(top_srcdir)/m4/man-arg-setuid.m4 \
@@ -206,7 +221,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/man-arg-automatic-create.m4 \
$(top_srcdir)/gl/m4/btowc.m4 \
$(top_srcdir)/gl/m4/builtin-expect.m4 \
$(top_srcdir)/gl/m4/canonicalize.m4 \
- $(top_srcdir)/gl/m4/chdir-long.m4 \
+ $(top_srcdir)/gl/m4/chdir-long.m4 $(top_srcdir)/gl/m4/chown.m4 \
$(top_srcdir)/gl/m4/clock_time.m4 $(top_srcdir)/gl/m4/close.m4 \
$(top_srcdir)/gl/m4/closedir.m4 $(top_srcdir)/gl/m4/codeset.m4 \
$(top_srcdir)/gl/m4/d-ino.m4 $(top_srcdir)/gl/m4/d-type.m4 \
@@ -250,7 +265,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/man-arg-automatic-create.m4 \
$(top_srcdir)/gl/m4/intmax_t.m4 \
$(top_srcdir)/gl/m4/inttypes_h.m4 $(top_srcdir)/gl/m4/ioctl.m4 \
$(top_srcdir)/gl/m4/langinfo_h.m4 \
- $(top_srcdir)/gl/m4/largefile.m4 \
+ $(top_srcdir)/gl/m4/largefile.m4 $(top_srcdir)/gl/m4/lchown.m4 \
$(top_srcdir)/gl/m4/lib-ignore.m4 \
$(top_srcdir)/gl/m4/lib-ld.m4 $(top_srcdir)/gl/m4/lib-link.m4 \
$(top_srcdir)/gl/m4/lib-prefix.m4 \
@@ -357,22 +372,26 @@ am__DEPENDENCIES_1 =
am__dirstamp = $(am__leading_dot)dirstamp
am_libgnu_la_OBJECTS = areadlink-with-size.lo argp-ba.lo argp-eexst.lo \
argp-fmtstream.lo argp-fs-xinl.lo argp-help.lo argp-parse.lo \
- argp-pin.lo argp-pv.lo argp-pvh.lo argp-xinl.lo bitrotate.lo \
- canonicalize.lo cloexec.lo dirname.lo basename.lo \
- dirname-lgpl.lo basename-lgpl.lo stripslash.lo exitfail.lo \
- fd-hook.lo fd-safer-flag.lo dup-safer-flag.lo file-set.lo \
- filenamecat-lgpl.lo getprogname.lo gettime.lo hard-locale.lo \
- hash.lo hash-pjw.lo hash-triple.lo idpriv-drop.lo \
- idpriv-droptemp.lo localcharset.lo glthread/lock.lo malloca.lo \
- nonblocking.lo openat-die.lo progname.lo same.lo save-cwd.lo \
- malloc/scratch_buffer_grow.lo \
+ argp-pin.lo argp-pv.lo argp-pvh.lo argp-xinl.lo \
+ gl_array_list.lo bitrotate.lo canonicalize.lo cloexec.lo \
+ dirname.lo basename.lo dirname-lgpl.lo basename-lgpl.lo \
+ stripslash.lo exitfail.lo fd-hook.lo fd-safer-flag.lo \
+ dup-safer-flag.lo file-set.lo filenamecat-lgpl.lo \
+ getprogname.lo gettime.lo hard-locale.lo hash.lo \
+ gl_hash_map.lo hash-pjw.lo hash-pjw-bare.lo gl_hash_set.lo \
+ hash-triple.lo idpriv-drop.lo idpriv-droptemp.lo \
+ gl_linkedhash_list.lo gl_list.lo localcharset.lo \
+ glthread/lock.lo malloca.lo gl_map.lo nonblocking.lo \
+ openat-die.lo progname.lo gl_rbtree_list.lo same.lo \
+ save-cwd.lo malloc/scratch_buffer_grow.lo \
malloc/scratch_buffer_grow_preserve.lo \
- malloc/scratch_buffer_set_array_size.lo sig-handler.lo \
- sockets.lo stat-time.lo strnlen1.lo sys_socket.lo tempname.lo \
- glthread/threadlib.lo timespec.lo unistd.lo dup-safer.lo \
- fd-safer.lo pipe-safer.lo utimens.lo wctype-h.lo xmalloc.lo \
- xalloc-die.lo xgetcwd.lo xsize.lo xstrndup.lo xvasprintf.lo \
- xasprintf.lo
+ malloc/scratch_buffer_set_array_size.lo gl_set.lo \
+ sig-handler.lo sockets.lo stat-time.lo stdopen.lo strnlen1.lo \
+ sys_socket.lo tempname.lo glthread/threadlib.lo timespec.lo \
+ unistd.lo dup-safer.lo fd-safer.lo pipe-safer.lo utimens.lo \
+ wctype-h.lo xmalloc.lo xalloc-die.lo xgetcwd.lo gl_xlist.lo \
+ gl_xmap.lo gl_xset.lo xsize.lo xstdopen.lo xstrndup.lo \
+ xvasprintf.lo xasprintf.lo
libgnu_la_OBJECTS = $(am_libgnu_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -407,31 +426,38 @@ am__depfiles_remade = ./$(DEPDIR)/alloca.Plo \
./$(DEPDIR)/basename-lgpl.Plo ./$(DEPDIR)/basename.Plo \
./$(DEPDIR)/bitrotate.Plo ./$(DEPDIR)/btowc.Plo \
./$(DEPDIR)/canonicalize-lgpl.Plo ./$(DEPDIR)/canonicalize.Plo \
- ./$(DEPDIR)/chdir-long.Plo ./$(DEPDIR)/cloexec.Plo \
- ./$(DEPDIR)/close.Plo ./$(DEPDIR)/closedir.Plo \
- ./$(DEPDIR)/dirfd.Plo ./$(DEPDIR)/dirname-lgpl.Plo \
- ./$(DEPDIR)/dirname.Plo ./$(DEPDIR)/dup-safer-flag.Plo \
- ./$(DEPDIR)/dup-safer.Plo ./$(DEPDIR)/dup.Plo \
- ./$(DEPDIR)/dup2.Plo ./$(DEPDIR)/error.Plo \
+ ./$(DEPDIR)/chdir-long.Plo ./$(DEPDIR)/chown.Plo \
+ ./$(DEPDIR)/cloexec.Plo ./$(DEPDIR)/close.Plo \
+ ./$(DEPDIR)/closedir.Plo ./$(DEPDIR)/dirfd.Plo \
+ ./$(DEPDIR)/dirname-lgpl.Plo ./$(DEPDIR)/dirname.Plo \
+ ./$(DEPDIR)/dup-safer-flag.Plo ./$(DEPDIR)/dup-safer.Plo \
+ ./$(DEPDIR)/dup.Plo ./$(DEPDIR)/dup2.Plo ./$(DEPDIR)/error.Plo \
./$(DEPDIR)/exitfail.Plo ./$(DEPDIR)/fchdir.Plo \
- ./$(DEPDIR)/fcntl.Plo ./$(DEPDIR)/fd-hook.Plo \
- ./$(DEPDIR)/fd-safer-flag.Plo ./$(DEPDIR)/fd-safer.Plo \
- ./$(DEPDIR)/fdopendir.Plo ./$(DEPDIR)/file-set.Plo \
- ./$(DEPDIR)/filenamecat-lgpl.Plo ./$(DEPDIR)/float.Plo \
- ./$(DEPDIR)/flock.Plo ./$(DEPDIR)/fnmatch.Plo \
- ./$(DEPDIR)/fnmatch_loop.Plo ./$(DEPDIR)/fstat.Plo \
- ./$(DEPDIR)/fstatat.Plo ./$(DEPDIR)/futimens.Plo \
- ./$(DEPDIR)/getcwd-lgpl.Plo ./$(DEPDIR)/getcwd.Plo \
- ./$(DEPDIR)/getdelim.Plo ./$(DEPDIR)/getdtablesize.Plo \
- ./$(DEPDIR)/getline.Plo ./$(DEPDIR)/getlogin_r.Plo \
- ./$(DEPDIR)/getopt.Plo ./$(DEPDIR)/getopt1.Plo \
- ./$(DEPDIR)/getprogname.Plo ./$(DEPDIR)/gettime.Plo \
- ./$(DEPDIR)/gettimeofday.Plo ./$(DEPDIR)/glob.Plo \
+ ./$(DEPDIR)/fchown-stub.Plo ./$(DEPDIR)/fcntl.Plo \
+ ./$(DEPDIR)/fd-hook.Plo ./$(DEPDIR)/fd-safer-flag.Plo \
+ ./$(DEPDIR)/fd-safer.Plo ./$(DEPDIR)/fdopendir.Plo \
+ ./$(DEPDIR)/file-set.Plo ./$(DEPDIR)/filenamecat-lgpl.Plo \
+ ./$(DEPDIR)/float.Plo ./$(DEPDIR)/flock.Plo \
+ ./$(DEPDIR)/fnmatch.Plo ./$(DEPDIR)/fnmatch_loop.Plo \
+ ./$(DEPDIR)/fstat.Plo ./$(DEPDIR)/fstatat.Plo \
+ ./$(DEPDIR)/futimens.Plo ./$(DEPDIR)/getcwd-lgpl.Plo \
+ ./$(DEPDIR)/getcwd.Plo ./$(DEPDIR)/getdelim.Plo \
+ ./$(DEPDIR)/getdtablesize.Plo ./$(DEPDIR)/getline.Plo \
+ ./$(DEPDIR)/getlogin_r.Plo ./$(DEPDIR)/getopt.Plo \
+ ./$(DEPDIR)/getopt1.Plo ./$(DEPDIR)/getprogname.Plo \
+ ./$(DEPDIR)/gettime.Plo ./$(DEPDIR)/gettimeofday.Plo \
+ ./$(DEPDIR)/gl_array_list.Plo ./$(DEPDIR)/gl_hash_map.Plo \
+ ./$(DEPDIR)/gl_hash_set.Plo ./$(DEPDIR)/gl_linkedhash_list.Plo \
+ ./$(DEPDIR)/gl_list.Plo ./$(DEPDIR)/gl_map.Plo \
+ ./$(DEPDIR)/gl_rbtree_list.Plo ./$(DEPDIR)/gl_set.Plo \
+ ./$(DEPDIR)/gl_xlist.Plo ./$(DEPDIR)/gl_xmap.Plo \
+ ./$(DEPDIR)/gl_xset.Plo ./$(DEPDIR)/glob.Plo \
./$(DEPDIR)/glob_pattern_p.Plo ./$(DEPDIR)/globfree.Plo \
- ./$(DEPDIR)/hard-locale.Plo ./$(DEPDIR)/hash-pjw.Plo \
- ./$(DEPDIR)/hash-triple.Plo ./$(DEPDIR)/hash.Plo \
- ./$(DEPDIR)/idpriv-drop.Plo ./$(DEPDIR)/idpriv-droptemp.Plo \
- ./$(DEPDIR)/ioctl.Plo ./$(DEPDIR)/itold.Plo \
+ ./$(DEPDIR)/hard-locale.Plo ./$(DEPDIR)/hash-pjw-bare.Plo \
+ ./$(DEPDIR)/hash-pjw.Plo ./$(DEPDIR)/hash-triple.Plo \
+ ./$(DEPDIR)/hash.Plo ./$(DEPDIR)/idpriv-drop.Plo \
+ ./$(DEPDIR)/idpriv-droptemp.Plo ./$(DEPDIR)/ioctl.Plo \
+ ./$(DEPDIR)/itold.Plo ./$(DEPDIR)/lchown.Plo \
./$(DEPDIR)/localcharset.Plo ./$(DEPDIR)/localeconv.Plo \
./$(DEPDIR)/localtime-buffer.Plo ./$(DEPDIR)/lstat.Plo \
./$(DEPDIR)/malloc.Plo ./$(DEPDIR)/malloca.Plo \
@@ -461,21 +487,22 @@ am__depfiles_remade = ./$(DEPDIR)/alloca.Plo \
./$(DEPDIR)/sockets.Plo ./$(DEPDIR)/stat-time.Plo \
./$(DEPDIR)/stat-w32.Plo ./$(DEPDIR)/stat.Plo \
./$(DEPDIR)/stdio-read.Plo ./$(DEPDIR)/stdio-write.Plo \
- ./$(DEPDIR)/strcasecmp.Plo ./$(DEPDIR)/strcasestr.Plo \
- ./$(DEPDIR)/strchrnul.Plo ./$(DEPDIR)/strdup.Plo \
- ./$(DEPDIR)/strerror-override.Plo ./$(DEPDIR)/strerror.Plo \
- ./$(DEPDIR)/stripslash.Plo ./$(DEPDIR)/strncasecmp.Plo \
- ./$(DEPDIR)/strndup.Plo ./$(DEPDIR)/strnlen.Plo \
- ./$(DEPDIR)/strnlen1.Plo ./$(DEPDIR)/strsep.Plo \
- ./$(DEPDIR)/sys_socket.Plo ./$(DEPDIR)/tempname.Plo \
- ./$(DEPDIR)/timespec.Plo ./$(DEPDIR)/unistd.Plo \
- ./$(DEPDIR)/unsetenv.Plo ./$(DEPDIR)/utime.Plo \
- ./$(DEPDIR)/utimens.Plo ./$(DEPDIR)/vasnprintf.Plo \
- ./$(DEPDIR)/vasprintf.Plo ./$(DEPDIR)/vsnprintf.Plo \
- ./$(DEPDIR)/wcrtomb.Plo ./$(DEPDIR)/wctype-h.Plo \
- ./$(DEPDIR)/xalloc-die.Plo ./$(DEPDIR)/xasprintf.Plo \
- ./$(DEPDIR)/xgetcwd.Plo ./$(DEPDIR)/xmalloc.Plo \
- ./$(DEPDIR)/xsize.Plo ./$(DEPDIR)/xstrndup.Plo \
+ ./$(DEPDIR)/stdopen.Plo ./$(DEPDIR)/strcasecmp.Plo \
+ ./$(DEPDIR)/strcasestr.Plo ./$(DEPDIR)/strchrnul.Plo \
+ ./$(DEPDIR)/strdup.Plo ./$(DEPDIR)/strerror-override.Plo \
+ ./$(DEPDIR)/strerror.Plo ./$(DEPDIR)/stripslash.Plo \
+ ./$(DEPDIR)/strncasecmp.Plo ./$(DEPDIR)/strndup.Plo \
+ ./$(DEPDIR)/strnlen.Plo ./$(DEPDIR)/strnlen1.Plo \
+ ./$(DEPDIR)/strsep.Plo ./$(DEPDIR)/sys_socket.Plo \
+ ./$(DEPDIR)/tempname.Plo ./$(DEPDIR)/timespec.Plo \
+ ./$(DEPDIR)/unistd.Plo ./$(DEPDIR)/unsetenv.Plo \
+ ./$(DEPDIR)/utime.Plo ./$(DEPDIR)/utimens.Plo \
+ ./$(DEPDIR)/vasnprintf.Plo ./$(DEPDIR)/vasprintf.Plo \
+ ./$(DEPDIR)/vsnprintf.Plo ./$(DEPDIR)/wcrtomb.Plo \
+ ./$(DEPDIR)/wctype-h.Plo ./$(DEPDIR)/xalloc-die.Plo \
+ ./$(DEPDIR)/xasprintf.Plo ./$(DEPDIR)/xgetcwd.Plo \
+ ./$(DEPDIR)/xmalloc.Plo ./$(DEPDIR)/xsize.Plo \
+ ./$(DEPDIR)/xstdopen.Plo ./$(DEPDIR)/xstrndup.Plo \
./$(DEPDIR)/xvasprintf.Plo glthread/$(DEPDIR)/lock.Plo \
glthread/$(DEPDIR)/threadlib.Plo \
malloc/$(DEPDIR)/scratch_buffer_grow.Plo \
@@ -1644,25 +1671,25 @@ noinst_LIBRARIES =
noinst_LTLIBRARIES = libgnu.la
EXTRA_DIST = alloca.c alloca.in.h areadlink.h assure.h openat-priv.h \
openat-proc.c btowc.c canonicalize.h canonicalize-lgpl.c \
- chdir-long.c chdir-long.h cloexec.h close.c closedir.c \
- dirent-private.h dirent.in.h dirfd.c stripslash.c dirname.h \
- dosname.h dup.c dup2.c errno.in.h error.c error.h exitfail.h \
- fchdir.c fcntl.c fcntl.in.h fd-hook.h fdopendir.c file-set.h \
- filename.h filenamecat.h flexmember.h float.c float.in.h \
- itold.c flock.c fnmatch.c fnmatch_loop.c fnmatch.in.h fstat.c \
- stat-w32.c stat-w32.h at-func.c fstatat.c futimens.c getcwd.c \
- getcwd-lgpl.c getdelim.c getdtablesize.c getline.c \
- getlogin_r.c getopt-cdefs.in.h getopt-core.h getopt-ext.h \
- getopt-pfx-core.h getopt-pfx-ext.h getopt.c getopt.in.h \
- getopt1.c getopt_int.h gettimeofday.c \
- $(top_srcdir)/build-aux/gitlog-to-changelog glob.c \
- glob_internal.h glob_pattern_p.c globfree.c glob-libc.h \
+ chdir-long.c chdir-long.h chown.c fchown-stub.c cloexec.h \
+ close.c closedir.c dirent-private.h dirent.in.h dirfd.c \
+ stripslash.c dirname.h dosname.h dup.c dup2.c errno.in.h \
+ error.c error.h exitfail.h fchdir.c fcntl.c fcntl.in.h \
+ fd-hook.h fdopendir.c file-set.h filename.h filenamecat.h \
+ flexmember.h float.c float.in.h itold.c flock.c fnmatch.c \
+ fnmatch_loop.c fnmatch.in.h fstat.c stat-w32.c stat-w32.h \
+ at-func.c fstatat.c futimens.c getcwd.c getcwd-lgpl.c \
+ getdelim.c getdtablesize.c getline.c getlogin_r.c \
+ getopt-cdefs.in.h getopt-core.h getopt-ext.h getopt-pfx-core.h \
+ getopt-pfx-ext.h getopt.c getopt.in.h getopt1.c getopt_int.h \
+ gettimeofday.c $(top_srcdir)/build-aux/gitlog-to-changelog \
+ glob.c glob_internal.h glob_pattern_p.c globfree.c glob-libc.h \
glob.in.h $(top_srcdir)/build-aux/gnupload hard-locale.h \
hash.h hash-triple.h $(top_srcdir)/build-aux/config.rpath \
idpriv.h idpriv.h intprops.h ioctl.c w32sock.h langinfo.in.h \
- cdefs.h libc-config.h limits.in.h localcharset.h locale.in.h \
- localeconv.c localtime-buffer.c localtime-buffer.h lstat.c \
- malloc.c malloc.c malloca.h mbrtowc.c mbsinit.c \
+ lchown.c cdefs.h libc-config.h limits.in.h localcharset.h \
+ locale.in.h localeconv.c localtime-buffer.c localtime-buffer.h \
+ lstat.c malloc.c malloc.c malloca.h mbrtowc.c mbsinit.c \
mbsrtowcs-impl.h mbsrtowcs-state.c mbsrtowcs.c mbtowc-impl.h \
mbtowc.c memchr.c memchr.valgrind memmem.c str-two-way.h \
mempcpy.c memrchr.c mkdir.c mkdtemp.c mkstemp.c msvc-inval.c \
@@ -1678,7 +1705,7 @@ EXTRA_DIST = alloca.c alloca.in.h areadlink.h assure.h openat-priv.h \
sleep.c _Noreturn.h arg-nonnull.h c++defs.h warn-on-use.h \
w32sock.h stat-w32.c stat-w32.h stat.c stat-time.h \
stdalign.in.h stdarg.in.h stdbool.in.h stddef.in.h stdint.in.h \
- stdio.in.h stdlib.in.h strcasecmp.c strncasecmp.c \
+ stdio.in.h stdlib.in.h stdopen.h strcasecmp.c strncasecmp.c \
str-two-way.h strcasestr.c strchrnul.c strchrnul.valgrind \
strdup.c streq.h strerror.c strerror-override.c \
strerror-override.h string.in.h strings.in.h strndup.c \
@@ -1691,7 +1718,7 @@ EXTRA_DIST = alloca.c alloca.in.h areadlink.h assure.h openat-priv.h \
printf-args.h printf-parse.c printf-parse.h vasnprintf.c \
vasnprintf.h asprintf.c vasprintf.c verify.h vsnprintf.c \
wchar.in.h wcrtomb.c wctype.in.h xalloc.h xalloc-oversized.h \
- xgetcwd.h xalloc.h
+ xgetcwd.h xstdopen.h xalloc.h
BUILT_SOURCES = $(ALLOCA_H) dirent.h $(ERRNO_H) fcntl.h $(FLOAT_H) \
$(FNMATCH_H) $(GETOPT_H) $(GETOPT_CDEFS_H) $(GLOB_H) \
langinfo.h $(LIMITS_H) locale.h signal.h $(STDALIGN_H) \
@@ -1725,47 +1752,57 @@ AM_CFLAGS =
libgnu_la_SOURCES = areadlink-with-size.c 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 bitrotate.h bitrotate.c canonicalize.c \
- cloexec.c dirname.c basename.c dirname-lgpl.c basename-lgpl.c \
- stripslash.c exitfail.c fd-hook.c fd-safer-flag.c \
- dup-safer-flag.c file-set.c filenamecat-lgpl.c getprogname.h \
- getprogname.c gettext.h gettime.c hard-locale.c hash.c \
- hash-pjw.h hash-pjw.c hash-triple.c idpriv-drop.c \
- idpriv-droptemp.c localcharset.c glthread/lock.h \
- glthread/lock.c malloca.c minmax.h nonblocking.c openat-die.c \
- progname.h progname.c same.c save-cwd.c \
+ argp-pvh.c argp-xinl.c gl_array_list.h gl_array_list.c \
+ bitrotate.h bitrotate.c canonicalize.c cloexec.c dirname.c \
+ basename.c dirname-lgpl.c basename-lgpl.c stripslash.c \
+ exitfail.c fd-hook.c fd-safer-flag.c dup-safer-flag.c \
+ file-set.c filenamecat-lgpl.c getprogname.h getprogname.c \
+ gettext.h gettime.c hard-locale.c hash.c gl_hash_map.h \
+ gl_hash_map.c gl_anyhash1.h gl_anyhash2.h gl_anyhash_primes.h \
+ hash-pjw.h hash-pjw.c hash-pjw-bare.h hash-pjw-bare.c \
+ gl_hash_set.h gl_hash_set.c gl_anyhash1.h gl_anyhash2.h \
+ gl_anyhash_primes.h hash-triple.c idpriv-drop.c \
+ idpriv-droptemp.c gl_linkedhash_list.h gl_linkedhash_list.c \
+ gl_anyhash1.h gl_anyhash2.h gl_anyhash_primes.h \
+ gl_anylinked_list1.h gl_anylinked_list2.h gl_list.h gl_list.c \
+ localcharset.c glthread/lock.h glthread/lock.c malloca.c \
+ gl_map.h gl_map.c minmax.h nonblocking.c openat-die.c \
+ progname.h progname.c gl_rbtree_list.h gl_rbtree_list.c \
+ gl_anyrbtree_list1.h gl_anyrbtree_list2.h gl_anytree_list1.h \
+ gl_anytree_list2.h same.c save-cwd.c \
malloc/scratch_buffer_grow.c \
malloc/scratch_buffer_grow_preserve.c \
- malloc/scratch_buffer_set_array_size.c sig-handler.c \
- size_max.h sockets.h sockets.c stat-time.c strnlen1.h \
- strnlen1.c sys_socket.c tempname.c glthread/threadlib.c \
- timespec.c unistd.c dup-safer.c fd-safer.c pipe-safer.c \
- utimens.c wctype-h.c xmalloc.c xalloc-die.c xgetcwd.c xsize.h \
- xsize.c xstrndup.h xstrndup.c xvasprintf.h xvasprintf.c \
- xasprintf.c
+ malloc/scratch_buffer_set_array_size.c gl_set.h gl_set.c \
+ sig-handler.c size_max.h sockets.h sockets.c stat-time.c \
+ stdopen.c strnlen1.h strnlen1.c sys_socket.c tempname.c \
+ glthread/threadlib.c timespec.c unistd.c dup-safer.c \
+ fd-safer.c pipe-safer.c utimens.c wctype-h.c xmalloc.c \
+ xalloc-die.c xgetcwd.c gl_xlist.h gl_xlist.c gl_xmap.h \
+ gl_xmap.c gl_xset.h gl_xset.c xsize.h xsize.c xstdopen.c \
+ xstrndup.h xstrndup.c xvasprintf.h xvasprintf.c xasprintf.c
libgnu_la_LIBADD = $(gl_LTLIBOBJS) @LTALLOCA@
libgnu_la_DEPENDENCIES = $(gl_LTLIBOBJS) @LTALLOCA@
EXTRA_libgnu_la_SOURCES = alloca.c openat-proc.c btowc.c \
- canonicalize-lgpl.c chdir-long.c close.c closedir.c dirfd.c \
- stripslash.c dup.c dup2.c error.c fchdir.c fcntl.c fdopendir.c \
- float.c itold.c flock.c fnmatch.c fnmatch_loop.c fstat.c \
- stat-w32.c at-func.c fstatat.c futimens.c getcwd.c \
- getcwd-lgpl.c getdelim.c getdtablesize.c getline.c \
- getlogin_r.c getopt.c getopt1.c gettimeofday.c glob.c \
- glob_pattern_p.c globfree.c ioctl.c localeconv.c \
- localtime-buffer.c lstat.c malloc.c malloc.c mbrtowc.c \
- mbsinit.c mbsrtowcs-state.c mbsrtowcs.c mbtowc.c memchr.c \
- memmem.c mempcpy.c memrchr.c mkdir.c mkdtemp.c mkstemp.c \
- msvc-inval.c msvc-nothrow.c nanosleep.c nl_langinfo.c \
- stdio-read.c stdio-write.c open.c openat.c opendir.c raise.c \
- rawmemchr.c readdir.c readlink.c realloc.c regcomp.c regex.c \
- regex_internal.c regexec.c rename.c rewinddir.c rmdir.c \
- select.c setenv.c sigaction.c sigprocmask.c sleep.c stat-w32.c \
- stat.c strcasecmp.c strncasecmp.c strcasestr.c strchrnul.c \
- strdup.c strerror.c strerror-override.c strndup.c strnlen.c \
- strsep.c unsetenv.c utime.c asnprintf.c printf-args.c \
- printf-parse.c vasnprintf.c asprintf.c vasprintf.c vsnprintf.c \
- wcrtomb.c
+ canonicalize-lgpl.c chdir-long.c chown.c fchown-stub.c close.c \
+ closedir.c dirfd.c stripslash.c dup.c dup2.c error.c fchdir.c \
+ fcntl.c fdopendir.c float.c itold.c flock.c fnmatch.c \
+ fnmatch_loop.c fstat.c stat-w32.c at-func.c fstatat.c \
+ futimens.c getcwd.c getcwd-lgpl.c getdelim.c getdtablesize.c \
+ getline.c getlogin_r.c getopt.c getopt1.c gettimeofday.c \
+ glob.c glob_pattern_p.c globfree.c ioctl.c lchown.c \
+ localeconv.c localtime-buffer.c lstat.c malloc.c malloc.c \
+ mbrtowc.c mbsinit.c mbsrtowcs-state.c mbsrtowcs.c mbtowc.c \
+ memchr.c memmem.c mempcpy.c memrchr.c mkdir.c mkdtemp.c \
+ mkstemp.c msvc-inval.c msvc-nothrow.c nanosleep.c \
+ nl_langinfo.c stdio-read.c stdio-write.c open.c openat.c \
+ opendir.c raise.c rawmemchr.c readdir.c readlink.c realloc.c \
+ regcomp.c regex.c regex_internal.c regexec.c rename.c \
+ rewinddir.c rmdir.c select.c setenv.c sigaction.c \
+ sigprocmask.c sleep.c stat-w32.c stat.c strcasecmp.c \
+ strncasecmp.c strcasestr.c strchrnul.c strdup.c strerror.c \
+ strerror-override.c strndup.c strnlen.c strsep.c unsetenv.c \
+ utime.c asnprintf.c printf-args.c printf-parse.c vasnprintf.c \
+ asprintf.c vasprintf.c vsnprintf.c wcrtomb.c
libgnu_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined $(LIBSOCKET) \
$(LIB_CLOCK_GETTIME) $(LIB_GETLOGIN) $(LIB_NANOSLEEP) \
$(LIB_SELECT) $(LTLIBINTL) $(LTLIBTHREAD)
@@ -1900,6 +1937,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/canonicalize-lgpl.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/canonicalize.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chdir-long.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chown.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cloexec.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/close.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/closedir.Plo@am__quote@ # am--include-marker
@@ -1913,6 +1951,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exitfail.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fchdir.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fchown-stub.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcntl.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fd-hook.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fd-safer-flag.Plo@am__quote@ # am--include-marker
@@ -1938,10 +1977,22 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getprogname.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gettime.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gettimeofday.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gl_array_list.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gl_hash_map.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gl_hash_set.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gl_linkedhash_list.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gl_list.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gl_map.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gl_rbtree_list.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gl_set.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gl_xlist.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gl_xmap.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gl_xset.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glob.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glob_pattern_p.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globfree.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hard-locale.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash-pjw-bare.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash-pjw.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash-triple.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash.Plo@am__quote@ # am--include-marker
@@ -1949,6 +2000,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/idpriv-droptemp.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/itold.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lchown.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localcharset.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localeconv.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localtime-buffer.Plo@am__quote@ # am--include-marker
@@ -2007,6 +2059,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stat.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stdio-read.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stdio-write.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stdopen.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strcasecmp.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strcasestr.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strchrnul.Plo@am__quote@ # am--include-marker
@@ -2036,6 +2089,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xgetcwd.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmalloc.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xsize.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xstdopen.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xstrndup.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xvasprintf.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@glthread/$(DEPDIR)/lock.Plo@am__quote@ # am--include-marker
@@ -2313,6 +2367,7 @@ distclean: distclean-recursive
-rm -f ./$(DEPDIR)/canonicalize-lgpl.Plo
-rm -f ./$(DEPDIR)/canonicalize.Plo
-rm -f ./$(DEPDIR)/chdir-long.Plo
+ -rm -f ./$(DEPDIR)/chown.Plo
-rm -f ./$(DEPDIR)/cloexec.Plo
-rm -f ./$(DEPDIR)/close.Plo
-rm -f ./$(DEPDIR)/closedir.Plo
@@ -2326,6 +2381,7 @@ distclean: distclean-recursive
-rm -f ./$(DEPDIR)/error.Plo
-rm -f ./$(DEPDIR)/exitfail.Plo
-rm -f ./$(DEPDIR)/fchdir.Plo
+ -rm -f ./$(DEPDIR)/fchown-stub.Plo
-rm -f ./$(DEPDIR)/fcntl.Plo
-rm -f ./$(DEPDIR)/fd-hook.Plo
-rm -f ./$(DEPDIR)/fd-safer-flag.Plo
@@ -2351,10 +2407,22 @@ distclean: distclean-recursive
-rm -f ./$(DEPDIR)/getprogname.Plo
-rm -f ./$(DEPDIR)/gettime.Plo
-rm -f ./$(DEPDIR)/gettimeofday.Plo
+ -rm -f ./$(DEPDIR)/gl_array_list.Plo
+ -rm -f ./$(DEPDIR)/gl_hash_map.Plo
+ -rm -f ./$(DEPDIR)/gl_hash_set.Plo
+ -rm -f ./$(DEPDIR)/gl_linkedhash_list.Plo
+ -rm -f ./$(DEPDIR)/gl_list.Plo
+ -rm -f ./$(DEPDIR)/gl_map.Plo
+ -rm -f ./$(DEPDIR)/gl_rbtree_list.Plo
+ -rm -f ./$(DEPDIR)/gl_set.Plo
+ -rm -f ./$(DEPDIR)/gl_xlist.Plo
+ -rm -f ./$(DEPDIR)/gl_xmap.Plo
+ -rm -f ./$(DEPDIR)/gl_xset.Plo
-rm -f ./$(DEPDIR)/glob.Plo
-rm -f ./$(DEPDIR)/glob_pattern_p.Plo
-rm -f ./$(DEPDIR)/globfree.Plo
-rm -f ./$(DEPDIR)/hard-locale.Plo
+ -rm -f ./$(DEPDIR)/hash-pjw-bare.Plo
-rm -f ./$(DEPDIR)/hash-pjw.Plo
-rm -f ./$(DEPDIR)/hash-triple.Plo
-rm -f ./$(DEPDIR)/hash.Plo
@@ -2362,6 +2430,7 @@ distclean: distclean-recursive
-rm -f ./$(DEPDIR)/idpriv-droptemp.Plo
-rm -f ./$(DEPDIR)/ioctl.Plo
-rm -f ./$(DEPDIR)/itold.Plo
+ -rm -f ./$(DEPDIR)/lchown.Plo
-rm -f ./$(DEPDIR)/localcharset.Plo
-rm -f ./$(DEPDIR)/localeconv.Plo
-rm -f ./$(DEPDIR)/localtime-buffer.Plo
@@ -2420,6 +2489,7 @@ distclean: distclean-recursive
-rm -f ./$(DEPDIR)/stat.Plo
-rm -f ./$(DEPDIR)/stdio-read.Plo
-rm -f ./$(DEPDIR)/stdio-write.Plo
+ -rm -f ./$(DEPDIR)/stdopen.Plo
-rm -f ./$(DEPDIR)/strcasecmp.Plo
-rm -f ./$(DEPDIR)/strcasestr.Plo
-rm -f ./$(DEPDIR)/strchrnul.Plo
@@ -2449,6 +2519,7 @@ distclean: distclean-recursive
-rm -f ./$(DEPDIR)/xgetcwd.Plo
-rm -f ./$(DEPDIR)/xmalloc.Plo
-rm -f ./$(DEPDIR)/xsize.Plo
+ -rm -f ./$(DEPDIR)/xstdopen.Plo
-rm -f ./$(DEPDIR)/xstrndup.Plo
-rm -f ./$(DEPDIR)/xvasprintf.Plo
-rm -f glthread/$(DEPDIR)/lock.Plo
@@ -2523,6 +2594,7 @@ maintainer-clean: maintainer-clean-recursive
-rm -f ./$(DEPDIR)/canonicalize-lgpl.Plo
-rm -f ./$(DEPDIR)/canonicalize.Plo
-rm -f ./$(DEPDIR)/chdir-long.Plo
+ -rm -f ./$(DEPDIR)/chown.Plo
-rm -f ./$(DEPDIR)/cloexec.Plo
-rm -f ./$(DEPDIR)/close.Plo
-rm -f ./$(DEPDIR)/closedir.Plo
@@ -2536,6 +2608,7 @@ maintainer-clean: maintainer-clean-recursive
-rm -f ./$(DEPDIR)/error.Plo
-rm -f ./$(DEPDIR)/exitfail.Plo
-rm -f ./$(DEPDIR)/fchdir.Plo
+ -rm -f ./$(DEPDIR)/fchown-stub.Plo
-rm -f ./$(DEPDIR)/fcntl.Plo
-rm -f ./$(DEPDIR)/fd-hook.Plo
-rm -f ./$(DEPDIR)/fd-safer-flag.Plo
@@ -2561,10 +2634,22 @@ maintainer-clean: maintainer-clean-recursive
-rm -f ./$(DEPDIR)/getprogname.Plo
-rm -f ./$(DEPDIR)/gettime.Plo
-rm -f ./$(DEPDIR)/gettimeofday.Plo
+ -rm -f ./$(DEPDIR)/gl_array_list.Plo
+ -rm -f ./$(DEPDIR)/gl_hash_map.Plo
+ -rm -f ./$(DEPDIR)/gl_hash_set.Plo
+ -rm -f ./$(DEPDIR)/gl_linkedhash_list.Plo
+ -rm -f ./$(DEPDIR)/gl_list.Plo
+ -rm -f ./$(DEPDIR)/gl_map.Plo
+ -rm -f ./$(DEPDIR)/gl_rbtree_list.Plo
+ -rm -f ./$(DEPDIR)/gl_set.Plo
+ -rm -f ./$(DEPDIR)/gl_xlist.Plo
+ -rm -f ./$(DEPDIR)/gl_xmap.Plo
+ -rm -f ./$(DEPDIR)/gl_xset.Plo
-rm -f ./$(DEPDIR)/glob.Plo
-rm -f ./$(DEPDIR)/glob_pattern_p.Plo
-rm -f ./$(DEPDIR)/globfree.Plo
-rm -f ./$(DEPDIR)/hard-locale.Plo
+ -rm -f ./$(DEPDIR)/hash-pjw-bare.Plo
-rm -f ./$(DEPDIR)/hash-pjw.Plo
-rm -f ./$(DEPDIR)/hash-triple.Plo
-rm -f ./$(DEPDIR)/hash.Plo
@@ -2572,6 +2657,7 @@ maintainer-clean: maintainer-clean-recursive
-rm -f ./$(DEPDIR)/idpriv-droptemp.Plo
-rm -f ./$(DEPDIR)/ioctl.Plo
-rm -f ./$(DEPDIR)/itold.Plo
+ -rm -f ./$(DEPDIR)/lchown.Plo
-rm -f ./$(DEPDIR)/localcharset.Plo
-rm -f ./$(DEPDIR)/localeconv.Plo
-rm -f ./$(DEPDIR)/localtime-buffer.Plo
@@ -2630,6 +2716,7 @@ maintainer-clean: maintainer-clean-recursive
-rm -f ./$(DEPDIR)/stat.Plo
-rm -f ./$(DEPDIR)/stdio-read.Plo
-rm -f ./$(DEPDIR)/stdio-write.Plo
+ -rm -f ./$(DEPDIR)/stdopen.Plo
-rm -f ./$(DEPDIR)/strcasecmp.Plo
-rm -f ./$(DEPDIR)/strcasestr.Plo
-rm -f ./$(DEPDIR)/strchrnul.Plo
@@ -2659,6 +2746,7 @@ maintainer-clean: maintainer-clean-recursive
-rm -f ./$(DEPDIR)/xgetcwd.Plo
-rm -f ./$(DEPDIR)/xmalloc.Plo
-rm -f ./$(DEPDIR)/xsize.Plo
+ -rm -f ./$(DEPDIR)/xstdopen.Plo
-rm -f ./$(DEPDIR)/xstrndup.Plo
-rm -f ./$(DEPDIR)/xvasprintf.Plo
-rm -f glthread/$(DEPDIR)/lock.Plo
diff --git a/gl/lib/argp-help.c b/gl/lib/argp-help.c
index febd5477..f4e2e048 100644
--- a/gl/lib/argp-help.c
+++ b/gl/lib/argp-help.c
@@ -1031,7 +1031,7 @@ 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 *tstr = str ? dgettext (argp->argp_domain, str) : NULL;
const char *fstr = filter_doc (tstr, ARGP_KEY_HELP_HEADER, argp, pest->state);
if (fstr)
@@ -1422,8 +1422,10 @@ argp_args_usage (const struct argp *argp, const struct argp_state *state,
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 *tdoc =
+ argp->args_doc ? dgettext (argp->argp_domain, argp->args_doc) : NULL;
const char *fdoc = filter_doc (tdoc, ARGP_KEY_HELP_ARGS_DOC, argp, state);
+ const char *nl = NULL;
if (fdoc)
{
@@ -1487,7 +1489,7 @@ argp_doc (const struct argp *argp, const struct argp_state *state,
void *input = 0;
int anything = 0;
size_t inp_text_limit = 0;
- const char *doc = dgettext (argp->argp_domain, argp->doc);
+ const char *doc = argp->doc ? dgettext (argp->argp_domain, argp->doc) : NULL;
const struct argp_child *child = argp->children;
if (doc)
@@ -1564,7 +1566,7 @@ argp_doc (const struct argp *argp, const struct argp_state *state,
}
/* Output a usage message for ARGP to STREAM. If called from
- argp_state_help, STATE is the relevent parsing state. FLAGS are from the
+ 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
diff --git a/gl/lib/argp.h b/gl/lib/argp.h
index 317ac034..7aba8877 100644
--- a/gl/lib/argp.h
+++ b/gl/lib/argp.h
@@ -69,6 +69,9 @@ typedef int error_t;
extern "C" {
#endif
+/* Glibc documentation:
+ https://www.gnu.org/software/libc/manual/html_node/Argp.html */
+
/* 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
@@ -236,9 +239,9 @@ struct argp
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
+ /* If non-NULL, 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;
diff --git a/gl/lib/cdefs.h b/gl/lib/cdefs.h
index f7a10644..96d26164 100644
--- a/gl/lib/cdefs.h
+++ b/gl/lib/cdefs.h
@@ -340,7 +340,7 @@
semantics.
clang++ identifies itself as gcc-4.2, but has support for GNU inlining
- semantics, that can be checked fot by using the __GNUC_STDC_INLINE_ and
+ semantics, that can be checked for by using the __GNUC_STDC_INLINE_ and
__GNUC_GNU_INLINE__ macro definitions. */
#if (!defined __cplusplus || __GNUC_PREREQ (4,3) \
|| (defined __clang__ && (defined __GNUC_STDC_INLINE__ \
diff --git a/gl/lib/chown.c b/gl/lib/chown.c
new file mode 100644
index 00000000..fc73e778
--- /dev/null
+++ b/gl/lib/chown.c
@@ -0,0 +1,151 @@
+/* provide consistent interface to chown for systems that don't interpret
+ an ID of -1 as meaning "don't change the corresponding ID".
+
+ Copyright (C) 1997, 2004-2007, 2009-2019 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 <https://www.gnu.org/licenses/>. */
+
+/* written by Jim Meyering */
+
+#include <config.h>
+
+/* Specification. */
+#include <unistd.h>
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdbool.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#if !HAVE_CHOWN
+
+/* Simple stub that always fails with ENOSYS, for mingw. */
+int
+chown (const char *file _GL_UNUSED, uid_t uid _GL_UNUSED,
+ gid_t gid _GL_UNUSED)
+{
+ errno = ENOSYS;
+ return -1;
+}
+
+#else /* HAVE_CHOWN */
+
+/* Below we refer to the system's chown(). */
+# undef chown
+
+/* Provide a more-closely POSIX-conforming version of chown on
+ systems with one or both of the following problems:
+ - chown doesn't treat an ID of -1 as meaning
+ "don't change the corresponding ID".
+ - chown doesn't dereference symlinks. */
+
+int
+rpl_chown (const char *file, uid_t uid, gid_t gid)
+{
+ struct stat st;
+ bool stat_valid = false;
+ int result;
+
+# if CHOWN_CHANGE_TIME_BUG
+ if (gid != (gid_t) -1 || uid != (uid_t) -1)
+ {
+ if (stat (file, &st))
+ return -1;
+ stat_valid = true;
+ }
+# endif
+
+# if CHOWN_FAILS_TO_HONOR_ID_OF_NEGATIVE_ONE
+ if (gid == (gid_t) -1 || uid == (uid_t) -1)
+ {
+ /* Stat file to get id(s) that should remain unchanged. */
+ if (!stat_valid && stat (file, &st))
+ return -1;
+ if (gid == (gid_t) -1)
+ gid = st.st_gid;
+ if (uid == (uid_t) -1)
+ uid = st.st_uid;
+ }
+# endif
+
+# if CHOWN_MODIFIES_SYMLINK
+ {
+ /* Handle the case in which the system-supplied chown function
+ does *not* follow symlinks. Instead, it changes permissions
+ on the symlink itself. To work around that, we open the
+ file (but this can fail due to lack of read or write permission) and
+ use fchown on the resulting descriptor. */
+ int open_flags = O_NONBLOCK | O_NOCTTY;
+ int fd = open (file, O_RDONLY | open_flags);
+ if (0 <= fd
+ || (errno == EACCES
+ && 0 <= (fd = open (file, O_WRONLY | open_flags))))
+ {
+ int saved_errno;
+ bool fchown_socket_failure;
+
+ result = fchown (fd, uid, gid);
+ saved_errno = errno;
+
+ /* POSIX says fchown can fail with errno == EINVAL on sockets
+ and pipes, so fall back on chown in that case. */
+ fchown_socket_failure =
+ (result != 0 && saved_errno == EINVAL
+ && fstat (fd, &st) == 0
+ && (S_ISFIFO (st.st_mode) || S_ISSOCK (st.st_mode)));
+
+ close (fd);
+
+ if (! fchown_socket_failure)
+ {
+ errno = saved_errno;
+ return result;
+ }
+ }
+ else if (errno != EACCES)
+ return -1;
+ }
+# endif
+
+# if CHOWN_TRAILING_SLASH_BUG
+ if (!stat_valid)
+ {
+ size_t len = strlen (file);
+ if (len && file[len - 1] == '/' && stat (file, &st))
+ return -1;
+ }
+# endif
+
+ result = chown (file, uid, gid);
+
+# if CHOWN_CHANGE_TIME_BUG
+ if (result == 0 && stat_valid
+ && (uid == st.st_uid || uid == (uid_t) -1)
+ && (gid == st.st_gid || gid == (gid_t) -1))
+ {
+ /* No change in ownership, but at least one argument was not -1,
+ so we are required to update ctime. Since chown succeeded,
+ we assume that chmod will do likewise. Fortunately, on all
+ known systems where a 'no-op' chown skips the ctime update, a
+ 'no-op' chmod still does the trick. */
+ result = chmod (file, st.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO
+ | S_ISUID | S_ISGID | S_ISVTX));
+ }
+# endif
+
+ return result;
+}
+
+#endif /* HAVE_CHOWN */
diff --git a/gl/lib/fchown-stub.c b/gl/lib/fchown-stub.c
new file mode 100644
index 00000000..62b69690
--- /dev/null
+++ b/gl/lib/fchown-stub.c
@@ -0,0 +1,16 @@
+#include <config.h>
+
+#include <sys/types.h>
+#include <errno.h>
+
+/* A trivial substitute for 'fchown'.
+
+ DJGPP 2.03 and earlier (and perhaps later) don't have 'fchown',
+ so we pretend no-one has permission for this operation. */
+
+int
+fchown (int fd, uid_t uid, gid_t gid)
+{
+ errno = EPERM;
+ return -1;
+}
diff --git a/gl/lib/fcntl.c b/gl/lib/fcntl.c
index f602fad6..51f62ef7 100644
--- a/gl/lib/fcntl.c
+++ b/gl/lib/fcntl.c
@@ -545,7 +545,7 @@ rpl_fcntl_DUPFD_CLOEXEC (int fd, int target)
#ifdef __KLIBC__
static int
-klibc_fcntl (int fd, int action, /* arg */...);
+klibc_fcntl (int fd, int action, /* arg */...)
{
va_list arg_ptr;
int arg;
diff --git a/gl/lib/file-set.c b/gl/lib/file-set.c
index 5916a178..5eb9fae3 100644
--- a/gl/lib/file-set.c
+++ b/gl/lib/file-set.c
@@ -48,7 +48,7 @@ record_file (Hash_table *ht, char const *file, struct stat const *stats)
if (ent_from_table != ent)
{
- /* There was alread a matching entry in the table, so ENT was
+ /* There was already a matching entry in the table, so ENT was
not inserted. Free it. */
triple_free (ent);
}
diff --git a/gl/lib/gettext.h b/gl/lib/gettext.h
index 89f53d91..c7c0fdb5 100644
--- a/gl/lib/gettext.h
+++ b/gl/lib/gettext.h
@@ -184,9 +184,16 @@ npgettext_aux (const char *domain,
#include <string.h>
-#if (((__GNUC__ >= 3 || __GNUG__ >= 2) && !defined __STRICT_ANSI__) \
- /* || (__STDC_VERSION__ == 199901L && !defined __HP_cc)
- || (__STDC_VERSION__ >= 201112L && !defined __STDC_NO_VLA__) */ )
+/* GNULIB_NO_VLA can be defined to disable use of VLAs even if supported.
+ This relates to the -Wvla and -Wvla-larger-than warnings, enabled in
+ the default GCC many warnings set. This allows programs to disable use
+ of VLAs, which may be unintended, or may be awkward to support portably,
+ or may have security implications due to non-deterministic stack usage. */
+
+#if (!defined GNULIB_NO_VLA \
+ && (((__GNUC__ >= 3 || __GNUG__ >= 2) && !defined __STRICT_ANSI__) \
+ /* || (__STDC_VERSION__ == 199901L && !defined __HP_cc)
+ || (__STDC_VERSION__ >= 201112L && !defined __STDC_NO_VLA__) */ ))
# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 1
#else
# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0
diff --git a/gl/lib/gl_anyhash1.h b/gl/lib/gl_anyhash1.h
new file mode 100644
index 00000000..e9644546
--- /dev/null
+++ b/gl/lib/gl_anyhash1.h
@@ -0,0 +1,31 @@
+/* Hash table for sequential list, set, and map data type.
+ Copyright (C) 2006, 2009-2019 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2006.
+
+ 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 <https://www.gnu.org/licenses/>. */
+
+/* Common code of
+ gl_linkedhash_list.c, gl_avltreehash_list.c, gl_rbtreehash_list.c,
+ gl_linkedhash_set.c, gl_hash_set.c,
+ gl_linkedhash_map.c, gl_hash_map.c. */
+
+/* Hash table entry. */
+struct gl_hash_entry
+{
+ struct gl_hash_entry *hash_next; /* chain of entries in same bucket */
+ size_t hashcode; /* cache of the hash code of
+ - the key (for map data type) or
+ - the value (for list, set data types) */
+};
+typedef struct gl_hash_entry * gl_hash_entry_t;
diff --git a/gl/lib/gl_anyhash2.h b/gl/lib/gl_anyhash2.h
new file mode 100644
index 00000000..e9ccf84d
--- /dev/null
+++ b/gl/lib/gl_anyhash2.h
@@ -0,0 +1,82 @@
+/* Hash table for sequential list, set, and map data type.
+ Copyright (C) 2006, 2009-2019 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2006.
+
+ 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 <https://www.gnu.org/licenses/>. */
+
+/* Common code of
+ gl_linkedhash_list.c, gl_avltreehash_list.c, gl_rbtreehash_list.c,
+ gl_linkedhash_set.c, gl_hash_set.c,
+ gl_linkedhash_map.c, gl_hash_map.c. */
+
+#include "gl_anyhash_primes.h"
+
+/* Resize the hash table with a new estimated size. */
+static void
+hash_resize (CONTAINER_T container, size_t estimate)
+{
+ size_t new_size = next_prime (estimate);
+
+ if (new_size > container->table_size)
+ {
+ gl_hash_entry_t *old_table = container->table;
+ /* Allocate the new table. */
+ gl_hash_entry_t *new_table;
+ size_t i;
+
+ if (size_overflow_p (xtimes (new_size, sizeof (gl_hash_entry_t))))
+ goto fail;
+ new_table =
+ (gl_hash_entry_t *) calloc (new_size, sizeof (gl_hash_entry_t));
+ if (new_table == NULL)
+ goto fail;
+
+ /* Iterate through the entries of the old table. */
+ for (i = container->table_size; i > 0; )
+ {
+ gl_hash_entry_t node = old_table[--i];
+
+ while (node != NULL)
+ {
+ gl_hash_entry_t next = node->hash_next;
+ /* Add the entry to the new table. */
+ size_t bucket = node->hashcode % new_size;
+ node->hash_next = new_table[bucket];
+ new_table[bucket] = node;
+
+ node = next;
+ }
+ }
+
+ container->table = new_table;
+ container->table_size = new_size;
+ free (old_table);
+ }
+ return;
+
+ fail:
+ /* Just continue without resizing the table. */
+ return;
+}
+
+/* Resize the hash table if needed, after CONTAINER_COUNT (container) was
+ incremented. */
+static void
+hash_resize_after_add (CONTAINER_T container)
+{
+ size_t count = CONTAINER_COUNT (container);
+ size_t estimate = xsum (count, count / 2); /* 1.5 * count */
+ if (estimate > container->table_size)
+ hash_resize (container, estimate);
+}
diff --git a/gl/lib/gl_anyhash_primes.h b/gl/lib/gl_anyhash_primes.h
new file mode 100644
index 00000000..4f80b97f
--- /dev/null
+++ b/gl/lib/gl_anyhash_primes.h
@@ -0,0 +1,87 @@
+/* Table of primes, for use by hash tables.
+ Copyright (C) 2006, 2009-2019 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2006.
+
+ 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 <https://www.gnu.org/licenses/>. */
+
+/* Array of primes, approximately in steps of factor 1.2.
+ This table was computed by executing the Common Lisp expression
+ (dotimes (i 244) (format t "nextprime(~D)~%" (ceiling (expt 1.2d0 i))))
+ and feeding the result to PARI/gp. */
+static const size_t primes[] =
+ {
+ 11, 13, 17, 19, 23, 29, 37, 41, 47, 59, 67, 83, 97, 127, 139, 167, 199,
+ 239, 293, 347, 419, 499, 593, 709, 853, 1021, 1229, 1471, 1777, 2129, 2543,
+ 3049, 3659, 4391, 5273, 6323, 7589, 9103, 10937, 13109, 15727, 18899,
+ 22651, 27179, 32609, 39133, 46957, 56359, 67619, 81157, 97369, 116849,
+ 140221, 168253, 201907, 242309, 290761, 348889, 418667, 502409, 602887,
+ 723467, 868151, 1041779, 1250141, 1500181, 1800191, 2160233, 2592277,
+ 3110741, 3732887, 4479463, 5375371, 6450413, 7740517, 9288589, 11146307,
+ 13375573, 16050689, 19260817, 23112977, 27735583, 33282701, 39939233,
+ 47927081, 57512503, 69014987, 82818011, 99381577, 119257891, 143109469,
+ 171731387, 206077643, 247293161, 296751781, 356102141, 427322587,
+ 512787097, 615344489, 738413383, 886096061, 1063315271, 1275978331,
+ 1531174013, 1837408799, 2204890543UL, 2645868653UL, 3175042391UL,
+ 3810050851UL,
+#if SIZE_MAX > 4294967295UL
+ 4572061027UL, 5486473229UL, 6583767889UL, 7900521449UL, 9480625733UL,
+ 11376750877UL, 13652101063UL, 16382521261UL, 19659025513UL, 23590830631UL,
+ 28308996763UL, 33970796089UL, 40764955463UL, 48917946377UL, 58701535657UL,
+ 70441842749UL, 84530211301UL, 101436253561UL, 121723504277UL,
+ 146068205131UL, 175281846149UL, 210338215379UL, 252405858521UL,
+ 302887030151UL, 363464436191UL, 436157323417UL, 523388788231UL,
+ 628066545713UL, 753679854847UL, 904415825857UL, 1085298991109UL,
+ 1302358789181UL, 1562830547009UL, 1875396656429UL, 2250475987709UL,
+ 2700571185239UL, 3240685422287UL, 3888822506759UL, 4666587008147UL,
+ 5599904409713UL, 6719885291641UL, 8063862349969UL, 9676634819959UL,
+ 11611961783951UL, 13934354140769UL, 16721224968907UL, 20065469962669UL,
+ 24078563955191UL, 28894276746229UL, 34673132095507UL, 41607758514593UL,
+ 49929310217531UL, 59915172260971UL, 71898206713183UL, 86277848055823UL,
+ 103533417666967UL, 124240101200359UL, 149088121440451UL, 178905745728529UL,
+ 214686894874223UL, 257624273849081UL, 309149128618903UL, 370978954342639UL,
+ 445174745211143UL, 534209694253381UL, 641051633104063UL, 769261959724877UL,
+ 923114351670013UL, 1107737222003791UL, 1329284666404567UL,
+ 1595141599685509UL, 1914169919622551UL, 2297003903547091UL,
+ 2756404684256459UL, 3307685621107757UL, 3969222745329323UL,
+ 4763067294395177UL, 5715680753274209UL, 6858816903929113UL,
+ 8230580284714831UL, 9876696341657791UL, 11852035609989371UL,
+ 14222442731987227UL, 17066931278384657UL, 20480317534061597UL,
+ 24576381040873903UL, 29491657249048679UL, 35389988698858471UL,
+ 42467986438630267UL, 50961583726356109UL, 61153900471627387UL,
+ 73384680565952851UL, 88061616679143347UL, 105673940014972061UL,
+ 126808728017966413UL, 152170473621559703UL, 182604568345871671UL,
+ 219125482015045997UL, 262950578418055169UL, 315540694101666193UL,
+ 378648832921999397UL, 454378599506399233UL, 545254319407679131UL,
+ 654305183289214771UL, 785166219947057701UL, 942199463936469157UL,
+ 1130639356723763129UL, 1356767228068515623UL, 1628120673682218619UL,
+ 1953744808418662409UL, 2344493770102394881UL, 2813392524122873857UL,
+ 3376071028947448339UL, 4051285234736937517UL, 4861542281684325481UL,
+ 5833850738021191727UL, 7000620885625427969UL, 8400745062750513217UL,
+ 10080894075300616261UL, 12097072890360739951UL, 14516487468432885797UL,
+ 17419784962119465179UL,
+#endif
+ SIZE_MAX /* sentinel, to ensure the search terminates */
+ };
+
+/* Return a suitable prime >= ESTIMATE. */
+static size_t
+next_prime (size_t estimate)
+{
+ size_t i;
+
+ for (i = 0; i < sizeof (primes) / sizeof (primes[0]); i++)
+ if (primes[i] >= estimate)
+ return primes[i];
+ return SIZE_MAX; /* not a prime, but better than nothing */
+}
diff --git a/gl/lib/gl_anylinked_list1.h b/gl/lib/gl_anylinked_list1.h
new file mode 100644
index 00000000..a12b1adc
--- /dev/null
+++ b/gl/lib/gl_anylinked_list1.h
@@ -0,0 +1,48 @@
+/* Sequential list data type implemented by a linked list.
+ Copyright (C) 2006, 2009-2019 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2006.
+
+ 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 <https://www.gnu.org/licenses/>. */
+
+/* Common code of gl_linked_list.c and gl_linkedhash_list.c. */
+
+/* -------------------------- gl_list_t Data Type -------------------------- */
+
+/* Concrete list node implementation, valid for this file only. */
+struct gl_list_node_impl
+{
+#if WITH_HASHTABLE
+ struct gl_hash_entry h; /* hash table entry fields; must be first */
+#endif
+ struct gl_list_node_impl *next;
+ struct gl_list_node_impl *prev;
+ const void *value;
+};
+
+/* Concrete gl_list_impl type, valid for this file only. */
+struct gl_list_impl
+{
+ struct gl_list_impl_base base;
+#if WITH_HASHTABLE
+ /* A hash table: managed as an array of collision lists. */
+ struct gl_hash_entry **table;
+ size_t table_size;
+#endif
+ /* A circular list anchored at root.
+ The first node is = root.next, the last node is = root.prev.
+ The root's value is unused. */
+ struct gl_list_node_impl root;
+ /* Number of list nodes, excluding the root. */
+ size_t count;
+};
diff --git a/gl/lib/gl_anylinked_list2.h b/gl/lib/gl_anylinked_list2.h
new file mode 100644
index 00000000..dc7f2cd5
--- /dev/null
+++ b/gl/lib/gl_anylinked_list2.h
@@ -0,0 +1,1195 @@
+/* Sequential list data type implemented by a linked list.
+ Copyright (C) 2006-2019 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2006.
+
+ 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 <https://www.gnu.org/licenses/>. */
+
+/* Common code of gl_linked_list.c and gl_linkedhash_list.c. */
+
+/* If the symbol SIGNAL_SAFE_LIST is defined, the code is compiled in such
+ a way that a gl_list_t data structure may be used from within a signal
+ handler. The operations allowed in the signal handler are:
+ gl_list_iterator, gl_list_iterator_next, gl_list_iterator_free.
+ The list and node fields that are therefore accessed from the signal handler
+ are:
+ list->root, node->next, node->value.
+ We are careful to make modifications to these fields only in an order
+ that maintains the consistency of the list data structure at any moment,
+ and we use 'volatile' assignments to prevent the compiler from reordering
+ such assignments. */
+#ifdef SIGNAL_SAFE_LIST
+# define ASYNCSAFE(type) *(type volatile *)&
+#else
+# define ASYNCSAFE(type)
+#endif
+
+/* -------------------------- gl_list_t Data Type -------------------------- */
+
+static gl_list_t
+gl_linked_nx_create_empty (gl_list_implementation_t implementation,
+ gl_listelement_equals_fn equals_fn,
+ gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
+ bool allow_duplicates)
+{
+ struct gl_list_impl *list =
+ (struct gl_list_impl *) malloc (sizeof (struct gl_list_impl));
+
+ if (list == NULL)
+ return NULL;
+
+ list->base.vtable = implementation;
+ list->base.equals_fn = equals_fn;
+ list->base.hashcode_fn = hashcode_fn;
+ list->base.dispose_fn = dispose_fn;
+ list->base.allow_duplicates = allow_duplicates;
+#if WITH_HASHTABLE
+ list->table_size = 11;
+ list->table =
+ (gl_hash_entry_t *) calloc (list->table_size, sizeof (gl_hash_entry_t));
+ if (list->table == NULL)
+ goto fail;
+#endif
+ list->root.next = &list->root;
+ list->root.prev = &list->root;
+ list->count = 0;
+
+ return list;
+
+#if WITH_HASHTABLE
+ fail:
+ free (list);
+ return NULL;
+#endif
+}
+
+static gl_list_t
+gl_linked_nx_create (gl_list_implementation_t implementation,
+ gl_listelement_equals_fn equals_fn,
+ gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
+ bool allow_duplicates,
+ size_t count, const void **contents)
+{
+ struct gl_list_impl *list =
+ (struct gl_list_impl *) malloc (sizeof (struct gl_list_impl));
+ gl_list_node_t tail;
+
+ if (list == NULL)
+ return NULL;
+
+ list->base.vtable = implementation;
+ list->base.equals_fn = equals_fn;
+ list->base.hashcode_fn = hashcode_fn;
+ list->base.dispose_fn = dispose_fn;
+ list->base.allow_duplicates = allow_duplicates;
+#if WITH_HASHTABLE
+ {
+ size_t estimate = xsum (count, count / 2); /* 1.5 * count */
+ if (estimate < 10)
+ estimate = 10;
+ list->table_size = next_prime (estimate);
+ if (size_overflow_p (xtimes (list->table_size, sizeof (gl_hash_entry_t))))
+ goto fail1;
+ list->table =
+ (gl_hash_entry_t *) calloc (list->table_size, sizeof (gl_hash_entry_t));
+ if (list->table == NULL)
+ goto fail1;
+ }
+#endif
+ list->count = count;
+ tail = &list->root;
+ for (; count > 0; contents++, count--)
+ {
+ gl_list_node_t node =
+ (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl));
+
+ if (node == NULL)
+ goto fail2;
+
+ node->value = *contents;
+#if WITH_HASHTABLE
+ node->h.hashcode =
+ (list->base.hashcode_fn != NULL
+ ? list->base.hashcode_fn (node->value)
+ : (size_t)(uintptr_t) node->value);
+
+ /* Add node to the hash table. */
+ if (add_to_bucket (list, node) < 0)
+ {
+ free (node);
+ goto fail2;
+ }
+#endif
+
+ /* Add node to the list. */
+ node->prev = tail;
+ tail->next = node;
+ tail = node;
+ }
+ tail->next = &list->root;
+ list->root.prev = tail;
+
+ return list;
+
+ fail2:
+ {
+ gl_list_node_t node;
+
+ for (node = tail; node != &list->root; )
+ {
+ gl_list_node_t prev = node->prev;
+
+ free (node);
+ node = prev;
+ }
+ }
+#if WITH_HASHTABLE
+ free (list->table);
+ fail1:
+#endif
+ free (list);
+ return NULL;
+}
+
+static size_t _GL_ATTRIBUTE_PURE
+gl_linked_size (gl_list_t list)
+{
+ return list->count;
+}
+
+static const void * _GL_ATTRIBUTE_PURE
+gl_linked_node_value (gl_list_t list, gl_list_node_t node)
+{
+ return node->value;
+}
+
+static int
+gl_linked_node_nx_set_value (gl_list_t list, gl_list_node_t node,
+ const void *elt)
+{
+#if WITH_HASHTABLE
+ if (elt != node->value)
+ {
+ size_t new_hashcode =
+ (list->base.hashcode_fn != NULL
+ ? list->base.hashcode_fn (elt)
+ : (size_t)(uintptr_t) elt);
+
+ if (new_hashcode != node->h.hashcode)
+ {
+ remove_from_bucket (list, node);
+ node->value = elt;
+ node->h.hashcode = new_hashcode;
+ if (add_to_bucket (list, node) < 0)
+ {
+ /* Out of memory. We removed node from a bucket but cannot add
+ it to another bucket. In order to avoid inconsistencies, we
+ must remove node entirely from the list. */
+ gl_list_node_t before_removed = node->prev;
+ gl_list_node_t after_removed = node->next;
+ ASYNCSAFE(gl_list_node_t) before_removed->next = after_removed;
+ after_removed->prev = before_removed;
+ list->count--;
+ free (node);
+ return -1;
+ }
+ }
+ else
+ node->value = elt;
+ }
+#else
+ node->value = elt;
+#endif
+ return 0;
+}
+
+static gl_list_node_t _GL_ATTRIBUTE_PURE
+gl_linked_next_node (gl_list_t list, gl_list_node_t node)
+{
+ return (node->next != &list->root ? node->next : NULL);
+}
+
+static gl_list_node_t _GL_ATTRIBUTE_PURE
+gl_linked_previous_node (gl_list_t list, gl_list_node_t node)
+{
+ return (node->prev != &list->root ? node->prev : NULL);
+}
+
+static const void * _GL_ATTRIBUTE_PURE
+gl_linked_get_at (gl_list_t list, size_t position)
+{
+ size_t count = list->count;
+ gl_list_node_t node;
+
+ if (!(position < count))
+ /* Invalid argument. */
+ abort ();
+ /* Here we know count > 0. */
+ if (position <= ((count - 1) / 2))
+ {
+ node = list->root.next;
+ for (; position > 0; position--)
+ node = node->next;
+ }
+ else
+ {
+ position = count - 1 - position;
+ node = list->root.prev;
+ for (; position > 0; position--)
+ node = node->prev;
+ }
+ return node->value;
+}
+
+static gl_list_node_t
+gl_linked_nx_set_at (gl_list_t list, size_t position, const void *elt)
+{
+ size_t count = list->count;
+ gl_list_node_t node;
+
+ if (!(position < count))
+ /* Invalid argument. */
+ abort ();
+ /* Here we know count > 0. */
+ if (position <= ((count - 1) / 2))
+ {
+ node = list->root.next;
+ for (; position > 0; position--)
+ node = node->next;
+ }
+ else
+ {
+ position = count - 1 - position;
+ node = list->root.prev;
+ for (; position > 0; position--)
+ node = node->prev;
+ }
+#if WITH_HASHTABLE
+ if (elt != node->value)
+ {
+ size_t new_hashcode =
+ (list->base.hashcode_fn != NULL
+ ? list->base.hashcode_fn (elt)
+ : (size_t)(uintptr_t) elt);
+
+ if (new_hashcode != node->h.hashcode)
+ {
+ remove_from_bucket (list, node);
+ node->value = elt;
+ node->h.hashcode = new_hashcode;
+ if (add_to_bucket (list, node) < 0)
+ {
+ /* Out of memory. We removed node from a bucket but cannot add
+ it to another bucket. In order to avoid inconsistencies, we
+ must remove node entirely from the list. */
+ gl_list_node_t before_removed = node->prev;
+ gl_list_node_t after_removed = node->next;
+ ASYNCSAFE(gl_list_node_t) before_removed->next = after_removed;
+ after_removed->prev = before_removed;
+ list->count--;
+ free (node);
+ return NULL;
+ }
+ }
+ else
+ node->value = elt;
+ }
+#else
+ node->value = elt;
+#endif
+ return node;
+}
+
+static gl_list_node_t _GL_ATTRIBUTE_PURE
+gl_linked_search_from_to (gl_list_t list, size_t start_index, size_t end_index,
+ const void *elt)
+{
+ size_t count = list->count;
+
+ if (!(start_index <= end_index && end_index <= count))
+ /* Invalid arguments. */
+ abort ();
+ {
+#if WITH_HASHTABLE
+ size_t hashcode =
+ (list->base.hashcode_fn != NULL
+ ? list->base.hashcode_fn (elt)
+ : (size_t)(uintptr_t) elt);
+ size_t bucket = hashcode % list->table_size;
+ gl_listelement_equals_fn equals = list->base.equals_fn;
+
+ if (!list->base.allow_duplicates)
+ {
+ /* Look for the first match in the hash bucket. */
+ gl_list_node_t found = NULL;
+ gl_list_node_t node;
+
+ for (node = (gl_list_node_t) list->table[bucket];
+ node != NULL;
+ node = (gl_list_node_t) node->h.hash_next)
+ if (node->h.hashcode == hashcode
+ && (equals != NULL
+ ? equals (elt, node->value)
+ : elt == node->value))
+ {
+ found = node;
+ break;
+ }
+ if (start_index > 0)
+ /* Look whether found's index is < start_index. */
+ for (node = list->root.next; ; node = node->next)
+ {
+ if (node == found)
+ return NULL;
+ if (--start_index == 0)
+ break;
+ }
+ if (end_index < count)
+ /* Look whether found's index is >= end_index. */
+ {
+ end_index = count - end_index;
+ for (node = list->root.prev; ; node = node->prev)
+ {
+ if (node == found)
+ return NULL;
+ if (--end_index == 0)
+ break;
+ }
+ }
+ return found;
+ }
+ else
+ {
+ /* Look whether there is more than one match in the hash bucket. */
+ bool multiple_matches = false;
+ gl_list_node_t first_match = NULL;
+ gl_list_node_t node;
+
+ for (node = (gl_list_node_t) list->table[bucket];
+ node != NULL;
+ node = (gl_list_node_t) node->h.hash_next)
+ if (node->h.hashcode == hashcode
+ && (equals != NULL
+ ? equals (elt, node->value)
+ : elt == node->value))
+ {
+ if (first_match == NULL)
+ first_match = node;
+ else
+ {
+ multiple_matches = true;
+ break;
+ }
+ }
+ if (multiple_matches)
+ {
+ /* We need the match with the smallest index. But we don't have
+ a fast mapping node -> index. So we have to walk the list. */
+ end_index -= start_index;
+ node = list->root.next;
+ for (; start_index > 0; start_index--)
+ node = node->next;
+
+ for (;
+ end_index > 0;
+ node = node->next, end_index--)
+ if (node->h.hashcode == hashcode
+ && (equals != NULL
+ ? equals (elt, node->value)
+ : elt == node->value))
+ return node;
+ /* The matches must have all been at indices < start_index or
+ >= end_index. */
+ return NULL;
+ }
+ else
+ {
+ if (start_index > 0)
+ /* Look whether first_match's index is < start_index. */
+ for (node = list->root.next; node != &list->root; node = node->next)
+ {
+ if (node == first_match)
+ return NULL;
+ if (--start_index == 0)
+ break;
+ }
+ if (end_index < list->count)
+ /* Look whether first_match's index is >= end_index. */
+ {
+ end_index = list->count - end_index;
+ for (node = list->root.prev; ; node = node->prev)
+ {
+ if (node == first_match)
+ return NULL;
+ if (--end_index == 0)
+ break;
+ }
+ }
+ return first_match;
+ }
+ }
+#else
+ gl_listelement_equals_fn equals = list->base.equals_fn;
+ gl_list_node_t node = list->root.next;
+
+ end_index -= start_index;
+ for (; start_index > 0; start_index--)
+ node = node->next;
+
+ if (equals != NULL)
+ {
+ for (; end_index > 0; node = node->next, end_index--)
+ if (equals (elt, node->value))
+ return node;
+ }
+ else
+ {
+ for (; end_index > 0; node = node->next, end_index--)
+ if (elt == node->value)
+ return node;
+ }
+ return NULL;
+#endif
+ }
+}
+
+static size_t _GL_ATTRIBUTE_PURE
+gl_linked_indexof_from_to (gl_list_t list, size_t start_index, size_t end_index,
+ const void *elt)
+{
+ size_t count = list->count;
+
+ if (!(start_index <= end_index && end_index <= count))
+ /* Invalid arguments. */
+ abort ();
+ {
+#if WITH_HASHTABLE
+ /* Here the hash table doesn't help much. It only allows us to minimize
+ the number of equals() calls, by looking up first the node and then
+ its index. */
+ size_t hashcode =
+ (list->base.hashcode_fn != NULL
+ ? list->base.hashcode_fn (elt)
+ : (size_t)(uintptr_t) elt);
+ size_t bucket = hashcode % list->table_size;
+ gl_listelement_equals_fn equals = list->base.equals_fn;
+ gl_list_node_t node;
+
+ /* First step: Look up the node. */
+ if (!list->base.allow_duplicates)
+ {
+ /* Look for the first match in the hash bucket. */
+ for (node = (gl_list_node_t) list->table[bucket];
+ node != NULL;
+ node = (gl_list_node_t) node->h.hash_next)
+ if (node->h.hashcode == hashcode
+ && (equals != NULL
+ ? equals (elt, node->value)
+ : elt == node->value))
+ break;
+ }
+ else
+ {
+ /* Look whether there is more than one match in the hash bucket. */
+ bool multiple_matches = false;
+ gl_list_node_t first_match = NULL;
+
+ for (node = (gl_list_node_t) list->table[bucket];
+ node != NULL;
+ node = (gl_list_node_t) node->h.hash_next)
+ if (node->h.hashcode == hashcode
+ && (equals != NULL
+ ? equals (elt, node->value)
+ : elt == node->value))
+ {
+ if (first_match == NULL)
+ first_match = node;
+ else
+ {
+ multiple_matches = true;
+ break;
+ }
+ }
+ if (multiple_matches)
+ {
+ /* We need the match with the smallest index. But we don't have
+ a fast mapping node -> index. So we have to walk the list. */
+ size_t index;
+
+ index = start_index;
+ node = list->root.next;
+ for (; start_index > 0; start_index--)
+ node = node->next;
+
+ for (;
+ index < end_index;
+ node = node->next, index++)
+ if (node->h.hashcode == hashcode
+ && (equals != NULL
+ ? equals (elt, node->value)
+ : elt == node->value))
+ return index;
+ /* The matches must have all been at indices < start_index or
+ >= end_index. */
+ return (size_t)(-1);
+ }
+ node = first_match;
+ }
+
+ /* Second step: Look up the index of the node. */
+ if (node == NULL)
+ return (size_t)(-1);
+ else
+ {
+ size_t index = 0;
+
+ for (; node->prev != &list->root; node = node->prev)
+ index++;
+
+ if (index >= start_index && index < end_index)
+ return index;
+ else
+ return (size_t)(-1);
+ }
+#else
+ gl_listelement_equals_fn equals = list->base.equals_fn;
+ size_t index = start_index;
+ gl_list_node_t node = list->root.next;
+
+ for (; start_index > 0; start_index--)
+ node = node->next;
+
+ if (equals != NULL)
+ {
+ for (;
+ index < end_index;
+ node = node->next, index++)
+ if (equals (elt, node->value))
+ return index;
+ }
+ else
+ {
+ for (;
+ index < end_index;
+ node = node->next, index++)
+ if (elt == node->value)
+ return index;
+ }
+ return (size_t)(-1);
+#endif
+ }
+}
+
+static gl_list_node_t
+gl_linked_nx_add_first (gl_list_t list, const void *elt)
+{
+ gl_list_node_t node =
+ (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl));
+
+ if (node == NULL)
+ return NULL;
+
+ ASYNCSAFE(const void *) node->value = elt;
+#if WITH_HASHTABLE
+ node->h.hashcode =
+ (list->base.hashcode_fn != NULL
+ ? list->base.hashcode_fn (node->value)
+ : (size_t)(uintptr_t) node->value);
+
+ /* Add node to the hash table. */
+ if (add_to_bucket (list, node) < 0)
+ {
+ free (node);
+ return NULL;
+ }
+#endif
+
+ /* Add node to the list. */
+ node->prev = &list->root;
+ ASYNCSAFE(gl_list_node_t) node->next = list->root.next;
+ node->next->prev = node;
+ ASYNCSAFE(gl_list_node_t) list->root.next = node;
+ list->count++;
+
+#if WITH_HASHTABLE
+ hash_resize_after_add (list);
+#endif
+
+ return node;
+}
+
+static gl_list_node_t
+gl_linked_nx_add_last (gl_list_t list, const void *elt)
+{
+ gl_list_node_t node =
+ (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl));
+
+ if (node == NULL)
+ return NULL;
+
+ ASYNCSAFE(const void *) node->value = elt;
+#if WITH_HASHTABLE
+ node->h.hashcode =
+ (list->base.hashcode_fn != NULL
+ ? list->base.hashcode_fn (node->value)
+ : (size_t)(uintptr_t) node->value);
+
+ /* Add node to the hash table. */
+ if (add_to_bucket (list, node) < 0)
+ {
+ free (node);
+ return NULL;
+ }
+#endif
+
+ /* Add node to the list. */
+ ASYNCSAFE(gl_list_node_t) node->next = &list->root;
+ node->prev = list->root.prev;
+ ASYNCSAFE(gl_list_node_t) node->prev->next = node;
+ list->root.prev = node;
+ list->count++;
+
+#if WITH_HASHTABLE
+ hash_resize_after_add (list);
+#endif
+
+ return node;
+}
+
+static gl_list_node_t
+gl_linked_nx_add_before (gl_list_t list, gl_list_node_t node, const void *elt)
+{
+ gl_list_node_t new_node =
+ (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl));
+
+ if (new_node == NULL)
+ return NULL;
+
+ ASYNCSAFE(const void *) new_node->value = elt;
+#if WITH_HASHTABLE
+ new_node->h.hashcode =
+ (list->base.hashcode_fn != NULL
+ ? list->base.hashcode_fn (new_node->value)
+ : (size_t)(uintptr_t) new_node->value);
+
+ /* Add new_node to the hash table. */
+ if (add_to_bucket (list, new_node) < 0)
+ {
+ free (new_node);
+ return NULL;
+ }
+#endif
+
+ /* Add new_node to the list. */
+ ASYNCSAFE(gl_list_node_t) new_node->next = node;
+ new_node->prev = node->prev;
+ ASYNCSAFE(gl_list_node_t) new_node->prev->next = new_node;
+ node->prev = new_node;
+ list->count++;
+
+#if WITH_HASHTABLE
+ hash_resize_after_add (list);
+#endif
+
+ return new_node;
+}
+
+static gl_list_node_t
+gl_linked_nx_add_after (gl_list_t list, gl_list_node_t node, const void *elt)
+{
+ gl_list_node_t new_node =
+ (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl));
+
+ if (new_node == NULL)
+ return NULL;
+
+ ASYNCSAFE(const void *) new_node->value = elt;
+#if WITH_HASHTABLE
+ new_node->h.hashcode =
+ (list->base.hashcode_fn != NULL
+ ? list->base.hashcode_fn (new_node->value)
+ : (size_t)(uintptr_t) new_node->value);
+
+ /* Add new_node to the hash table. */
+ if (add_to_bucket (list, new_node) < 0)
+ {
+ free (new_node);
+ return NULL;
+ }
+#endif
+
+ /* Add new_node to the list. */
+ new_node->prev = node;
+ ASYNCSAFE(gl_list_node_t) new_node->next = node->next;
+ new_node->next->prev = new_node;
+ ASYNCSAFE(gl_list_node_t) node->next = new_node;
+ list->count++;
+
+#if WITH_HASHTABLE
+ hash_resize_after_add (list);
+#endif
+
+ return new_node;
+}
+
+static gl_list_node_t
+gl_linked_nx_add_at (gl_list_t list, size_t position, const void *elt)
+{
+ size_t count = list->count;
+ gl_list_node_t new_node;
+
+ if (!(position <= count))
+ /* Invalid argument. */
+ abort ();
+
+ new_node = (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl));
+ if (new_node == NULL)
+ return NULL;
+
+ ASYNCSAFE(const void *) new_node->value = elt;
+#if WITH_HASHTABLE
+ new_node->h.hashcode =
+ (list->base.hashcode_fn != NULL
+ ? list->base.hashcode_fn (new_node->value)
+ : (size_t)(uintptr_t) new_node->value);
+
+ /* Add new_node to the hash table. */
+ if (add_to_bucket (list, new_node) < 0)
+ {
+ free (new_node);
+ return NULL;
+ }
+#endif
+
+ /* Add new_node to the list. */
+ if (position <= (count / 2))
+ {
+ gl_list_node_t node;
+
+ node = &list->root;
+ for (; position > 0; position--)
+ node = node->next;
+ new_node->prev = node;
+ ASYNCSAFE(gl_list_node_t) new_node->next = node->next;
+ new_node->next->prev = new_node;
+ ASYNCSAFE(gl_list_node_t) node->next = new_node;
+ }
+ else
+ {
+ gl_list_node_t node;
+
+ position = count - position;
+ node = &list->root;
+ for (; position > 0; position--)
+ node = node->prev;
+ ASYNCSAFE(gl_list_node_t) new_node->next = node;
+ new_node->prev = node->prev;
+ ASYNCSAFE(gl_list_node_t) new_node->prev->next = new_node;
+ node->prev = new_node;
+ }
+ list->count++;
+
+#if WITH_HASHTABLE
+ hash_resize_after_add (list);
+#endif
+
+ return new_node;
+}
+
+static bool
+gl_linked_remove_node (gl_list_t list, gl_list_node_t node)
+{
+ gl_list_node_t prev;
+ gl_list_node_t next;
+
+#if WITH_HASHTABLE
+ /* Remove node from the hash table. */
+ remove_from_bucket (list, node);
+#endif
+
+ /* Remove node from the list. */
+ prev = node->prev;
+ next = node->next;
+
+ ASYNCSAFE(gl_list_node_t) prev->next = next;
+ next->prev = prev;
+ list->count--;
+
+ if (list->base.dispose_fn != NULL)
+ list->base.dispose_fn (node->value);
+ free (node);
+ return true;
+}
+
+static bool
+gl_linked_remove_at (gl_list_t list, size_t position)
+{
+ size_t count = list->count;
+ gl_list_node_t removed_node;
+
+ if (!(position < count))
+ /* Invalid argument. */
+ abort ();
+ /* Here we know count > 0. */
+ if (position <= ((count - 1) / 2))
+ {
+ gl_list_node_t node;
+ gl_list_node_t after_removed;
+
+ node = &list->root;
+ for (; position > 0; position--)
+ node = node->next;
+ removed_node = node->next;
+ after_removed = node->next->next;
+ ASYNCSAFE(gl_list_node_t) node->next = after_removed;
+ after_removed->prev = node;
+ }
+ else
+ {
+ gl_list_node_t node;
+ gl_list_node_t before_removed;
+
+ position = count - 1 - position;
+ node = &list->root;
+ for (; position > 0; position--)
+ node = node->prev;
+ removed_node = node->prev;
+ before_removed = node->prev->prev;
+ node->prev = before_removed;
+ ASYNCSAFE(gl_list_node_t) before_removed->next = node;
+ }
+#if WITH_HASHTABLE
+ remove_from_bucket (list, removed_node);
+#endif
+ list->count--;
+
+ if (list->base.dispose_fn != NULL)
+ list->base.dispose_fn (removed_node->value);
+ free (removed_node);
+ return true;
+}
+
+static bool
+gl_linked_remove (gl_list_t list, const void *elt)
+{
+ gl_list_node_t node = gl_linked_search_from_to (list, 0, list->count, elt);
+
+ if (node != NULL)
+ return gl_linked_remove_node (list, node);
+ else
+ return false;
+}
+
+static void
+gl_linked_list_free (gl_list_t list)
+{
+ gl_listelement_dispose_fn dispose = list->base.dispose_fn;
+ gl_list_node_t node;
+
+ for (node = list->root.next; node != &list->root; )
+ {
+ gl_list_node_t next = node->next;
+ if (dispose != NULL)
+ dispose (node->value);
+ free (node);
+ node = next;
+ }
+#if WITH_HASHTABLE
+ free (list->table);
+#endif
+ free (list);
+}
+
+/* --------------------- gl_list_iterator_t Data Type --------------------- */
+
+static gl_list_iterator_t
+gl_linked_iterator (gl_list_t list)
+{
+ gl_list_iterator_t result;
+
+ result.vtable = list->base.vtable;
+ result.list = list;
+ result.p = list->root.next;
+ result.q = &list->root;
+#if defined GCC_LINT || defined lint
+ result.i = 0;
+ result.j = 0;
+ result.count = 0;
+#endif
+
+ return result;
+}
+
+static gl_list_iterator_t
+gl_linked_iterator_from_to (gl_list_t list,
+ size_t start_index, size_t end_index)
+{
+ gl_list_iterator_t result;
+ size_t n1, n2, n3;
+
+ if (!(start_index <= end_index && end_index <= list->count))
+ /* Invalid arguments. */
+ abort ();
+ result.vtable = list->base.vtable;
+ result.list = list;
+ n1 = start_index;
+ n2 = end_index - start_index;
+ n3 = list->count - end_index;
+ /* Find the maximum among n1, n2, n3, so as to reduce the number of
+ loop iterations to n1 + n2 + n3 - max(n1,n2,n3). */
+ if (n1 > n2 && n1 > n3)
+ {
+ /* n1 is the maximum, use n2 and n3. */
+ gl_list_node_t node;
+ size_t i;
+
+ node = &list->root;
+ for (i = n3; i > 0; i--)
+ node = node->prev;
+ result.q = node;
+ for (i = n2; i > 0; i--)
+ node = node->prev;
+ result.p = node;
+ }
+ else if (n2 > n3)
+ {
+ /* n2 is the maximum, use n1 and n3. */
+ gl_list_node_t node;
+ size_t i;
+
+ node = list->root.next;
+ for (i = n1; i > 0; i--)
+ node = node->next;
+ result.p = node;
+
+ node = &list->root;
+ for (i = n3; i > 0; i--)
+ node = node->prev;
+ result.q = node;
+ }
+ else
+ {
+ /* n3 is the maximum, use n1 and n2. */
+ gl_list_node_t node;
+ size_t i;
+
+ node = list->root.next;
+ for (i = n1; i > 0; i--)
+ node = node->next;
+ result.p = node;
+ for (i = n2; i > 0; i--)
+ node = node->next;
+ result.q = node;
+ }
+
+#if defined GCC_LINT || defined lint
+ result.i = 0;
+ result.j = 0;
+ result.count = 0;
+#endif
+
+ return result;
+}
+
+static bool
+gl_linked_iterator_next (gl_list_iterator_t *iterator,
+ const void **eltp, gl_list_node_t *nodep)
+{
+ if (iterator->p != iterator->q)
+ {
+ gl_list_node_t node = (gl_list_node_t) iterator->p;
+ *eltp = node->value;
+ if (nodep != NULL)
+ *nodep = node;
+ iterator->p = node->next;
+ return true;
+ }
+ else
+ return false;
+}
+
+static void
+gl_linked_iterator_free (gl_list_iterator_t *iterator)
+{
+}
+
+/* ---------------------- Sorted gl_list_t Data Type ---------------------- */
+
+static gl_list_node_t _GL_ATTRIBUTE_PURE
+gl_linked_sortedlist_search (gl_list_t list, gl_listelement_compar_fn compar,
+ const void *elt)
+{
+ gl_list_node_t node;
+
+ for (node = list->root.next; node != &list->root; node = node->next)
+ {
+ int cmp = compar (node->value, elt);
+
+ if (cmp > 0)
+ break;
+ if (cmp == 0)
+ return node;
+ }
+ return NULL;
+}
+
+static gl_list_node_t _GL_ATTRIBUTE_PURE
+gl_linked_sortedlist_search_from_to (gl_list_t list,
+ gl_listelement_compar_fn compar,
+ size_t low, size_t high,
+ const void *elt)
+{
+ size_t count = list->count;
+
+ if (!(low <= high && high <= list->count))
+ /* Invalid arguments. */
+ abort ();
+
+ high -= low;
+ if (high > 0)
+ {
+ /* Here we know low < count. */
+ size_t position = low;
+ gl_list_node_t node;
+
+ if (position <= ((count - 1) / 2))
+ {
+ node = list->root.next;
+ for (; position > 0; position--)
+ node = node->next;
+ }
+ else
+ {
+ position = count - 1 - position;
+ node = list->root.prev;
+ for (; position > 0; position--)
+ node = node->prev;
+ }
+
+ do
+ {
+ int cmp = compar (node->value, elt);
+
+ if (cmp > 0)
+ break;
+ if (cmp == 0)
+ return node;
+ node = node->next;
+ }
+ while (--high > 0);
+ }
+ return NULL;
+}
+
+static size_t _GL_ATTRIBUTE_PURE
+gl_linked_sortedlist_indexof (gl_list_t list, gl_listelement_compar_fn compar,
+ const void *elt)
+{
+ gl_list_node_t node;
+ size_t index;
+
+ for (node = list->root.next, index = 0;
+ node != &list->root;
+ node = node->next, index++)
+ {
+ int cmp = compar (node->value, elt);
+
+ if (cmp > 0)
+ break;
+ if (cmp == 0)
+ return index;
+ }
+ return (size_t)(-1);
+}
+
+static size_t _GL_ATTRIBUTE_PURE
+gl_linked_sortedlist_indexof_from_to (gl_list_t list,
+ gl_listelement_compar_fn compar,
+ size_t low, size_t high,
+ const void *elt)
+{
+ size_t count = list->count;
+
+ if (!(low <= high && high <= list->count))
+ /* Invalid arguments. */
+ abort ();
+
+ high -= low;
+ if (high > 0)
+ {
+ /* Here we know low < count. */
+ size_t index = low;
+ size_t position = low;
+ gl_list_node_t node;
+
+ if (position <= ((count - 1) / 2))
+ {
+ node = list->root.next;
+ for (; position > 0; position--)
+ node = node->next;
+ }
+ else
+ {
+ position = count - 1 - position;
+ node = list->root.prev;
+ for (; position > 0; position--)
+ node = node->prev;
+ }
+
+ do
+ {
+ int cmp = compar (node->value, elt);
+
+ if (cmp > 0)
+ break;
+ if (cmp == 0)
+ return index;
+ node = node->next;
+ index++;
+ }
+ while (--high > 0);
+ }
+ return (size_t)(-1);
+}
+
+static gl_list_node_t
+gl_linked_sortedlist_nx_add (gl_list_t list, gl_listelement_compar_fn compar,
+ const void *elt)
+{
+ gl_list_node_t node;
+
+ for (node = list->root.next; node != &list->root; node = node->next)
+ if (compar (node->value, elt) >= 0)
+ return gl_linked_nx_add_before (list, node, elt);
+ return gl_linked_nx_add_last (list, elt);
+}
+
+static bool
+gl_linked_sortedlist_remove (gl_list_t list, gl_listelement_compar_fn compar,
+ const void *elt)
+{
+ gl_list_node_t node;
+
+ for (node = list->root.next; node != &list->root; node = node->next)
+ {
+ int cmp = compar (node->value, elt);
+
+ if (cmp > 0)
+ break;
+ if (cmp == 0)
+ return gl_linked_remove_node (list, node);
+ }
+ return false;
+}
diff --git a/gl/lib/gl_anyrbtree_list1.h b/gl/lib/gl_anyrbtree_list1.h
new file mode 100644
index 00000000..29ea451e
--- /dev/null
+++ b/gl/lib/gl_anyrbtree_list1.h
@@ -0,0 +1,76 @@
+/* Sequential list data type implemented by a binary tree.
+ Copyright (C) 2006, 2009-2019 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2006.
+
+ 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 <https://www.gnu.org/licenses/>. */
+
+/* Common code of gl_rbtree_list.c and gl_rbtreehash_list.c. */
+
+/* A red-black tree is a binary tree where every node is colored black or
+ red such that
+ 1. The root is black.
+ 2. No red node has a red parent.
+ Or equivalently: No red node has a red child.
+ 3. All paths from the root down to any NULL endpoint contain the same
+ number of black nodes.
+ Let's call this the "black-height" bh of the tree. It follows that every
+ such path contains exactly bh black and between 0 and bh red nodes. (The
+ extreme cases are a path containing only black nodes, and a path colored
+ alternately black-red-black-red-...-black-red.) The height of the tree
+ therefore is >= bh, <= 2*bh.
+ */
+
+/* -------------------------- gl_list_t Data Type -------------------------- */
+
+/* Color of a node. */
+typedef enum color { BLACK, RED } color_t;
+
+/* Concrete list node implementation, valid for this file only. */
+struct gl_list_node_impl
+{
+#if WITH_HASHTABLE
+ struct gl_hash_entry h; /* hash table entry fields; must be first */
+#endif
+ struct gl_list_node_impl *left; /* left branch, or NULL */
+ struct gl_list_node_impl *right; /* right branch, or NULL */
+ /* Parent pointer, or NULL. The parent pointer is not needed for most
+ operations. It is needed so that a gl_list_node_t can be returned
+ without memory allocation, on which the functions gl_list_remove_node,
+ gl_list_add_before, gl_list_add_after can be implemented. */
+ struct gl_list_node_impl *parent;
+ color_t color; /* node's color */
+ size_t branch_size; /* number of nodes in this branch,
+ = branchsize(left)+branchsize(right)+1 */
+ const void *value;
+};
+
+/* Concrete gl_list_impl type, valid for this file only. */
+struct gl_list_impl
+{
+ struct gl_list_impl_base base;
+#if WITH_HASHTABLE
+ /* A hash table: managed as an array of collision lists. */
+ struct gl_hash_entry **table;
+ size_t table_size;
+#endif
+ struct gl_list_node_impl *root; /* root node or NULL */
+};
+
+/* A red-black tree of height h has a black-height bh >= ceil(h/2) and
+ therefore at least 2^ceil(h/2) - 1 elements. So, h <= 116 (because a tree
+ of height h >= 117 would have at least 2^59 - 1 elements, and because even
+ on 64-bit machines,
+ sizeof (gl_list_node_impl) * (2^59 - 1) > 2^64
+ this would exceed the address space of the machine. */
+#define MAXHEIGHT 116
diff --git a/gl/lib/gl_anyrbtree_list2.h b/gl/lib/gl_anyrbtree_list2.h
new file mode 100644
index 00000000..102d71a5
--- /dev/null
+++ b/gl/lib/gl_anyrbtree_list2.h
@@ -0,0 +1,1028 @@
+/* Sequential list data type implemented by a binary tree.
+ Copyright (C) 2006-2007, 2009-2019 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2006.
+
+ 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 <https://www.gnu.org/licenses/>. */
+
+/* Common code of gl_rbtree_list.c and gl_rbtreehash_list.c. */
+
+/* -------------------------- gl_list_t Data Type -------------------------- */
+
+/* Create a subtree for count >= 1 elements.
+ Its black-height bh is passed as argument, with
+ 2^bh - 1 <= count <= 2^(bh+1) - 1. bh == 0 implies count == 1.
+ Its height is h where 2^(h-1) <= count <= 2^h - 1.
+ Return NULL upon out-of-memory. */
+static gl_list_node_t
+create_subtree_with_contents (unsigned int bh,
+ size_t count, const void **contents)
+{
+ size_t half1 = (count - 1) / 2;
+ size_t half2 = count / 2;
+ /* Note: half1 + half2 = count - 1. */
+ gl_list_node_t node =
+ (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl));
+ if (node == NULL)
+ return NULL;
+
+ if (half1 > 0)
+ {
+ /* half1 > 0 implies count > 1, implies bh >= 1, implies
+ 2^(bh-1) - 1 <= half1 <= 2^bh - 1. */
+ node->left =
+ create_subtree_with_contents (bh - 1, half1, contents);
+ if (node->left == NULL)
+ goto fail1;
+ node->left->parent = node;
+ }
+ else
+ node->left = NULL;
+
+ node->value = contents[half1];
+
+ if (half2 > 0)
+ {
+ /* half2 > 0 implies count > 1, implies bh >= 1, implies
+ 2^(bh-1) - 1 <= half2 <= 2^bh - 1. */
+ node->right =
+ create_subtree_with_contents (bh - 1, half2, contents + half1 + 1);
+ if (node->right == NULL)
+ goto fail2;
+ node->right->parent = node;
+ }
+ else
+ node->right = NULL;
+
+ node->color = (bh == 0 ? RED : BLACK);
+
+ node->branch_size = count;
+
+ return node;
+
+ fail2:
+ if (node->left != NULL)
+ free_subtree (node->left);
+ fail1:
+ free (node);
+ return NULL;
+}
+
+static gl_list_t
+gl_tree_nx_create (gl_list_implementation_t implementation,
+ gl_listelement_equals_fn equals_fn,
+ gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
+ bool allow_duplicates,
+ size_t count, const void **contents)
+{
+ struct gl_list_impl *list =
+ (struct gl_list_impl *) malloc (sizeof (struct gl_list_impl));
+
+ if (list == NULL)
+ return NULL;
+
+ list->base.vtable = implementation;
+ list->base.equals_fn = equals_fn;
+ list->base.hashcode_fn = hashcode_fn;
+ list->base.dispose_fn = dispose_fn;
+ list->base.allow_duplicates = allow_duplicates;
+#if WITH_HASHTABLE
+ {
+ size_t estimate = xsum (count, count / 2); /* 1.5 * count */
+ if (estimate < 10)
+ estimate = 10;
+ list->table_size = next_prime (estimate);
+ if (size_overflow_p (xtimes (list->table_size, sizeof (gl_hash_entry_t))))
+ goto fail1;
+ list->table =
+ (gl_hash_entry_t *) calloc (list->table_size, sizeof (gl_hash_entry_t));
+ if (list->table == NULL)
+ goto fail1;
+ }
+#endif
+ if (count > 0)
+ {
+ /* Assuming 2^bh - 1 <= count <= 2^(bh+1) - 2, we create a tree whose
+ upper bh levels are black, and only the partially present lowest
+ level is red. */
+ unsigned int bh;
+ {
+ size_t n;
+ for (n = count + 1, bh = 0; n > 1; n = n >> 1)
+ bh++;
+ }
+
+ list->root = create_subtree_with_contents (bh, count, contents);
+ if (list->root == NULL)
+ goto fail2;
+ list->root->parent = NULL;
+
+#if WITH_HASHTABLE
+ /* Now that the tree is built, node_position() works. Now we can
+ add the nodes to the hash table. */
+ if (add_nodes_to_buckets (list) < 0)
+ goto fail3;
+#endif
+ }
+ else
+ list->root = NULL;
+
+ return list;
+
+#if WITH_HASHTABLE
+ fail3:
+ free_subtree (list->root);
+#endif
+ fail2:
+#if WITH_HASHTABLE
+ free (list->table);
+ fail1:
+#endif
+ free (list);
+ return NULL;
+}
+
+/* Rotate left a subtree.
+
+ B D
+ / \ / \
+ A D --> B E
+ / \ / \
+ C E A C
+
+ Change the tree structure, update the branch sizes.
+ The caller must update the colors and register D as child of its parent. */
+static gl_list_node_t
+rotate_left (gl_list_node_t b_node, gl_list_node_t d_node)
+{
+ gl_list_node_t a_node = b_node->left;
+ gl_list_node_t c_node = d_node->left;
+ gl_list_node_t e_node = d_node->right;
+
+ b_node->right = c_node;
+ d_node->left = b_node;
+
+ d_node->parent = b_node->parent;
+ b_node->parent = d_node;
+ if (c_node != NULL)
+ c_node->parent = b_node;
+
+ b_node->branch_size =
+ (a_node != NULL ? a_node->branch_size : 0)
+ + 1 + (c_node != NULL ? c_node->branch_size : 0);
+ d_node->branch_size =
+ b_node->branch_size + 1 + (e_node != NULL ? e_node->branch_size : 0);
+
+ return d_node;
+}
+
+/* Rotate right a subtree.
+
+ D B
+ / \ / \
+ B E --> A D
+ / \ / \
+ A C C E
+
+ Change the tree structure, update the branch sizes.
+ The caller must update the colors and register B as child of its parent. */
+static gl_list_node_t
+rotate_right (gl_list_node_t b_node, gl_list_node_t d_node)
+{
+ gl_list_node_t a_node = b_node->left;
+ gl_list_node_t c_node = b_node->right;
+ gl_list_node_t e_node = d_node->right;
+
+ d_node->left = c_node;
+ b_node->right = d_node;
+
+ b_node->parent = d_node->parent;
+ d_node->parent = b_node;
+ if (c_node != NULL)
+ c_node->parent = d_node;
+
+ d_node->branch_size =
+ (c_node != NULL ? c_node->branch_size : 0)
+ + 1 + (e_node != NULL ? e_node->branch_size : 0);
+ b_node->branch_size =
+ (a_node != NULL ? a_node->branch_size : 0) + 1 + d_node->branch_size;
+
+ return b_node;
+}
+
+/* Ensure the tree is balanced, after an insertion operation.
+ Also assigns node->color.
+ parent is the given node's parent, known to be non-NULL. */
+static void
+rebalance_after_add (gl_list_t list, gl_list_node_t node, gl_list_node_t parent)
+{
+ for (;;)
+ {
+ /* At this point, parent = node->parent != NULL.
+ Think of node->color being RED (although node->color is not yet
+ assigned.) */
+ gl_list_node_t grandparent;
+ gl_list_node_t uncle;
+
+ if (parent->color == BLACK)
+ {
+ /* A RED color for node is acceptable. */
+ node->color = RED;
+ return;
+ }
+
+ grandparent = parent->parent;
+ /* Since parent is RED, we know that
+ grandparent is != NULL and colored BLACK. */
+
+ if (grandparent->left == parent)
+ uncle = grandparent->right;
+ else if (grandparent->right == parent)
+ uncle = grandparent->left;
+ else
+ abort ();
+
+ if (uncle != NULL && uncle->color == RED)
+ {
+ /* Change grandparent from BLACK to RED, and
+ change parent and uncle from RED to BLACK.
+ This makes it acceptable for node to be RED. */
+ node->color = RED;
+ parent->color = uncle->color = BLACK;
+ node = grandparent;
+ }
+ else
+ {
+ /* grandparent and uncle are BLACK. parent is RED. node wants
+ to be RED too.
+ In this case, recoloring is not sufficient. Need to perform
+ one or two rotations. */
+ gl_list_node_t *grandparentp;
+
+ if (grandparent->parent == NULL)
+ grandparentp = &list->root;
+ else if (grandparent->parent->left == grandparent)
+ grandparentp = &grandparent->parent->left;
+ else if (grandparent->parent->right == grandparent)
+ grandparentp = &grandparent->parent->right;
+ else
+ abort ();
+
+ if (grandparent->left == parent)
+ {
+ if (parent->right == node)
+ {
+ /* Rotation between node and parent. */
+ grandparent->left = rotate_left (parent, node);
+ node = parent;
+ parent = grandparent->left;
+ }
+ /* grandparent and uncle are BLACK. parent and node want to be
+ RED. parent = grandparent->left. node = parent->left.
+
+ grandparent parent
+ bh+1 bh+1
+ / \ / \
+ parent uncle --> node grandparent
+ bh bh bh bh
+ / \ / \
+ node C C uncle
+ bh bh bh bh
+ */
+ *grandparentp = rotate_right (parent, grandparent);
+ parent->color = BLACK;
+ node->color = grandparent->color = RED;
+ }
+ else /* grandparent->right == parent */
+ {
+ if (parent->left == node)
+ {
+ /* Rotation between node and parent. */
+ grandparent->right = rotate_right (node, parent);
+ node = parent;
+ parent = grandparent->right;
+ }
+ /* grandparent and uncle are BLACK. parent and node want to be
+ RED. parent = grandparent->right. node = parent->right.
+
+ grandparent parent
+ bh+1 bh+1
+ / \ / \
+ uncle parent --> grandparent node
+ bh bh bh bh
+ / \ / \
+ C node uncle C
+ bh bh bh bh
+ */
+ *grandparentp = rotate_left (grandparent, parent);
+ parent->color = BLACK;
+ node->color = grandparent->color = RED;
+ }
+ return;
+ }
+
+ /* Start again with a new (node, parent) pair. */
+ parent = node->parent;
+
+ if (parent == NULL)
+ {
+ /* Change node's color from RED to BLACK. This increases the
+ tree's black-height. */
+ node->color = BLACK;
+ return;
+ }
+ }
+}
+
+/* Ensure the tree is balanced, after a deletion operation.
+ CHILD was a grandchild of PARENT and is now its child. Between them,
+ a black node was removed. CHILD is also black, or NULL.
+ (CHILD can also be NULL. But PARENT is non-NULL.) */
+static void
+rebalance_after_remove (gl_list_t list, gl_list_node_t child, gl_list_node_t parent)
+{
+ for (;;)
+ {
+ /* At this point, we reduced the black-height of the CHILD subtree by 1.
+ To make up, either look for a possibility to turn a RED to a BLACK
+ node, or try to reduce the black-height tree of CHILD's sibling
+ subtree as well. */
+ gl_list_node_t *parentp;
+
+ if (parent->parent == NULL)
+ parentp = &list->root;
+ else if (parent->parent->left == parent)
+ parentp = &parent->parent->left;
+ else if (parent->parent->right == parent)
+ parentp = &parent->parent->right;
+ else
+ abort ();
+
+ if (parent->left == child)
+ {
+ gl_list_node_t sibling = parent->right;
+ /* sibling's black-height is >= 1. In particular,
+ sibling != NULL.
+
+ parent
+ / \
+ child sibling
+ bh bh+1
+ */
+
+ if (sibling->color == RED)
+ {
+ /* sibling is RED, hence parent is BLACK and sibling's children
+ are non-NULL and BLACK.
+
+ parent sibling
+ bh+2 bh+2
+ / \ / \
+ child sibling --> parent SR
+ bh bh+1 bh+1 bh+1
+ / \ / \
+ SL SR child SL
+ bh+1 bh+1 bh bh+1
+ */
+ *parentp = rotate_left (parent, sibling);
+ parent->color = RED;
+ sibling->color = BLACK;
+
+ /* Concentrate on the subtree of parent. The new sibling is
+ one of the old sibling's children, and known to be BLACK. */
+ parentp = &sibling->left;
+ sibling = parent->right;
+ }
+ /* Now we know that sibling is BLACK.
+
+ parent
+ / \
+ child sibling
+ bh bh+1
+ */
+ if (sibling->right != NULL && sibling->right->color == RED)
+ {
+ /*
+ parent sibling
+ bh+1|bh+2 bh+1|bh+2
+ / \ / \
+ child sibling --> parent SR
+ bh bh+1 bh+1 bh+1
+ / \ / \
+ SL SR child SL
+ bh bh bh bh
+ */
+ *parentp = rotate_left (parent, sibling);
+ sibling->color = parent->color;
+ parent->color = BLACK;
+ sibling->right->color = BLACK;
+ return;
+ }
+ else if (sibling->left != NULL && sibling->left->color == RED)
+ {
+ /*
+ parent parent
+ bh+1|bh+2 bh+1|bh+2
+ / \ / \
+ child sibling --> child SL
+ bh bh+1 bh bh+1
+ / \ / \
+ SL SR SLL sibling
+ bh bh bh bh
+ / \ / \
+ SLL SLR SLR SR
+ bh bh bh bh
+
+ where SLL, SLR, SR are all black.
+ */
+ parent->right = rotate_right (sibling->left, sibling);
+ /* Change sibling from BLACK to RED and SL from RED to BLACK. */
+ sibling->color = RED;
+ sibling = parent->right;
+ sibling->color = BLACK;
+
+ /* Now do as in the previous case. */
+ *parentp = rotate_left (parent, sibling);
+ sibling->color = parent->color;
+ parent->color = BLACK;
+ sibling->right->color = BLACK;
+ return;
+ }
+ else
+ {
+ if (parent->color == BLACK)
+ {
+ /* Change sibling from BLACK to RED. Then the entire
+ subtree at parent has decreased its black-height.
+ parent parent
+ bh+2 bh+1
+ / \ / \
+ child sibling --> child sibling
+ bh bh+1 bh bh
+ */
+ sibling->color = RED;
+
+ child = parent;
+ }
+ else
+ {
+ /* Change parent from RED to BLACK, but compensate by
+ changing sibling from BLACK to RED.
+ parent parent
+ bh+1 bh+1
+ / \ / \
+ child sibling --> child sibling
+ bh bh+1 bh bh
+ */
+ parent->color = BLACK;
+ sibling->color = RED;
+ return;
+ }
+ }
+ }
+ else if (parent->right == child)
+ {
+ gl_list_node_t sibling = parent->left;
+ /* sibling's black-height is >= 1. In particular,
+ sibling != NULL.
+
+ parent
+ / \
+ sibling child
+ bh+1 bh
+ */
+
+ if (sibling->color == RED)
+ {
+ /* sibling is RED, hence parent is BLACK and sibling's children
+ are non-NULL and BLACK.
+
+ parent sibling
+ bh+2 bh+2
+ / \ / \
+ sibling child --> SR parent
+ bh+1 ch bh+1 bh+1
+ / \ / \
+ SL SR SL child
+ bh+1 bh+1 bh+1 bh
+ */
+ *parentp = rotate_right (sibling, parent);
+ parent->color = RED;
+ sibling->color = BLACK;
+
+ /* Concentrate on the subtree of parent. The new sibling is
+ one of the old sibling's children, and known to be BLACK. */
+ parentp = &sibling->right;
+ sibling = parent->left;
+ }
+ /* Now we know that sibling is BLACK.
+
+ parent
+ / \
+ sibling child
+ bh+1 bh
+ */
+ if (sibling->left != NULL && sibling->left->color == RED)
+ {
+ /*
+ parent sibling
+ bh+1|bh+2 bh+1|bh+2
+ / \ / \
+ sibling child --> SL parent
+ bh+1 bh bh+1 bh+1
+ / \ / \
+ SL SR SR child
+ bh bh bh bh
+ */
+ *parentp = rotate_right (sibling, parent);
+ sibling->color = parent->color;
+ parent->color = BLACK;
+ sibling->left->color = BLACK;
+ return;
+ }
+ else if (sibling->right != NULL && sibling->right->color == RED)
+ {
+ /*
+ parent parent
+ bh+1|bh+2 bh+1|bh+2
+ / \ / \
+ sibling child --> SR child
+ bh+1 bh bh+1 bh
+ / \ / \
+ SL SR sibling SRR
+ bh bh bh bh
+ / \ / \
+ SRL SRR SL SRL
+ bh bh bh bh
+
+ where SL, SRL, SRR are all black.
+ */
+ parent->left = rotate_left (sibling, sibling->right);
+ /* Change sibling from BLACK to RED and SL from RED to BLACK. */
+ sibling->color = RED;
+ sibling = parent->left;
+ sibling->color = BLACK;
+
+ /* Now do as in the previous case. */
+ *parentp = rotate_right (sibling, parent);
+ sibling->color = parent->color;
+ parent->color = BLACK;
+ sibling->left->color = BLACK;
+ return;
+ }
+ else
+ {
+ if (parent->color == BLACK)
+ {
+ /* Change sibling from BLACK to RED. Then the entire
+ subtree at parent has decreased its black-height.
+ parent parent
+ bh+2 bh+1
+ / \ / \
+ sibling child --> sibling child
+ bh+1 bh bh bh
+ */
+ sibling->color = RED;
+
+ child = parent;
+ }
+ else
+ {
+ /* Change parent from RED to BLACK, but compensate by
+ changing sibling from BLACK to RED.
+ parent parent
+ bh+1 bh+1
+ / \ / \
+ sibling child --> sibling child
+ bh+1 bh bh bh
+ */
+ parent->color = BLACK;
+ sibling->color = RED;
+ return;
+ }
+ }
+ }
+ else
+ abort ();
+
+ /* Start again with a new (child, parent) pair. */
+ parent = child->parent;
+
+#if 0 /* Already handled. */
+ if (child != NULL && child->color == RED)
+ {
+ child->color = BLACK;
+ return;
+ }
+#endif
+
+ if (parent == NULL)
+ return;
+ }
+}
+
+static void
+gl_tree_remove_node_from_tree (gl_list_t list, gl_list_node_t node)
+{
+ gl_list_node_t parent = node->parent;
+
+ if (node->left == NULL)
+ {
+ /* Replace node with node->right. */
+ gl_list_node_t child = node->right;
+
+ if (child != NULL)
+ {
+ child->parent = parent;
+ /* Since node->left == NULL, child must be RED and of height 1,
+ hence node must have been BLACK. Recolor the child. */
+ child->color = BLACK;
+ }
+ if (parent == NULL)
+ list->root = child;
+ else
+ {
+ if (parent->left == node)
+ parent->left = child;
+ else /* parent->right == node */
+ parent->right = child;
+
+ /* Update branch_size fields of the parent nodes. */
+ {
+ gl_list_node_t p;
+
+ for (p = parent; p != NULL; p = p->parent)
+ p->branch_size--;
+ }
+
+ if (child == NULL && node->color == BLACK)
+ rebalance_after_remove (list, child, parent);
+ }
+ }
+ else if (node->right == NULL)
+ {
+ /* It is not absolutely necessary to treat this case. But the more
+ general case below is more complicated, hence slower. */
+ /* Replace node with node->left. */
+ gl_list_node_t child = node->left;
+
+ child->parent = parent;
+ /* Since node->right == NULL, child must be RED and of height 1,
+ hence node must have been BLACK. Recolor the child. */
+ child->color = BLACK;
+ if (parent == NULL)
+ list->root = child;
+ else
+ {
+ if (parent->left == node)
+ parent->left = child;
+ else /* parent->right == node */
+ parent->right = child;
+
+ /* Update branch_size fields of the parent nodes. */
+ {
+ gl_list_node_t p;
+
+ for (p = parent; p != NULL; p = p->parent)
+ p->branch_size--;
+ }
+ }
+ }
+ else
+ {
+ /* Replace node with the rightmost element of the node->left subtree. */
+ gl_list_node_t subst;
+ gl_list_node_t subst_parent;
+ gl_list_node_t child;
+ color_t removed_color;
+
+ for (subst = node->left; subst->right != NULL; )
+ subst = subst->right;
+
+ subst_parent = subst->parent;
+
+ child = subst->left;
+
+ removed_color = subst->color;
+
+ /* The case subst_parent == node is special: If we do nothing special,
+ we get confusion about node->left, subst->left and child->parent.
+ subst_parent == node
+ <==> The 'for' loop above terminated immediately.
+ <==> subst == subst_parent->left
+ [otherwise subst == subst_parent->right]
+ In this case, we would need to first set
+ child->parent = node; node->left = child;
+ and later - when we copy subst into node's position - again
+ child->parent = subst; subst->left = child;
+ Altogether a no-op. */
+ if (subst_parent != node)
+ {
+ if (child != NULL)
+ child->parent = subst_parent;
+ subst_parent->right = child;
+ }
+
+ /* Update branch_size fields of the parent nodes. */
+ {
+ gl_list_node_t p;
+
+ for (p = subst_parent; p != NULL; p = p->parent)
+ p->branch_size--;
+ }
+
+ /* Copy subst into node's position.
+ (This is safer than to copy subst's value into node, keep node in
+ place, and free subst.) */
+ if (subst_parent != node)
+ {
+ subst->left = node->left;
+ subst->left->parent = subst;
+ }
+ subst->right = node->right;
+ subst->right->parent = subst;
+ subst->color = node->color;
+ subst->branch_size = node->branch_size;
+ subst->parent = parent;
+ if (parent == NULL)
+ list->root = subst;
+ else if (parent->left == node)
+ parent->left = subst;
+ else /* parent->right == node */
+ parent->right = subst;
+
+ if (removed_color == BLACK)
+ {
+ if (child != NULL && child->color == RED)
+ /* Recolor the child. */
+ child->color = BLACK;
+ else
+ /* Rebalancing starts at child's parent, that is subst_parent -
+ except when subst_parent == node. In this case, we need to use
+ its replacement, subst. */
+ rebalance_after_remove (list, child,
+ subst_parent != node ? subst_parent : subst);
+ }
+ }
+}
+
+static gl_list_node_t
+gl_tree_nx_add_first (gl_list_t list, const void *elt)
+{
+ /* Create new node. */
+ gl_list_node_t new_node =
+ (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl));
+
+ if (new_node == NULL)
+ return NULL;
+
+ new_node->left = NULL;
+ new_node->right = NULL;
+ new_node->branch_size = 1;
+ new_node->value = elt;
+#if WITH_HASHTABLE
+ new_node->h.hashcode =
+ (list->base.hashcode_fn != NULL
+ ? list->base.hashcode_fn (new_node->value)
+ : (size_t)(uintptr_t) new_node->value);
+#endif
+
+ /* Add it to the tree. */
+ if (list->root == NULL)
+ {
+ new_node->color = BLACK;
+ list->root = new_node;
+ new_node->parent = NULL;
+ }
+ else
+ {
+ gl_list_node_t node;
+
+ for (node = list->root; node->left != NULL; )
+ node = node->left;
+
+ node->left = new_node;
+ new_node->parent = node;
+
+ /* Update branch_size fields of the parent nodes. */
+ {
+ gl_list_node_t p;
+
+ for (p = node; p != NULL; p = p->parent)
+ p->branch_size++;
+ }
+
+ /* Color and rebalance. */
+ rebalance_after_add (list, new_node, node);
+ }
+
+#if WITH_HASHTABLE
+ /* Add node to the hash table.
+ Note that this is only possible _after_ the node has been added to the
+ tree structure, because add_to_bucket() uses node_position(). */
+ if (add_to_bucket (list, new_node) < 0)
+ {
+ gl_tree_remove_node_from_tree (list, new_node);
+ free (new_node);
+ return NULL;
+ }
+ hash_resize_after_add (list);
+#endif
+
+ return new_node;
+}
+
+static gl_list_node_t
+gl_tree_nx_add_last (gl_list_t list, const void *elt)
+{
+ /* Create new node. */
+ gl_list_node_t new_node =
+ (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl));
+
+ if (new_node == NULL)
+ return NULL;
+
+ new_node->left = NULL;
+ new_node->right = NULL;
+ new_node->branch_size = 1;
+ new_node->value = elt;
+#if WITH_HASHTABLE
+ new_node->h.hashcode =
+ (list->base.hashcode_fn != NULL
+ ? list->base.hashcode_fn (new_node->value)
+ : (size_t)(uintptr_t) new_node->value);
+#endif
+
+ /* Add it to the tree. */
+ if (list->root == NULL)
+ {
+ new_node->color = BLACK;
+ list->root = new_node;
+ new_node->parent = NULL;
+ }
+ else
+ {
+ gl_list_node_t node;
+
+ for (node = list->root; node->right != NULL; )
+ node = node->right;
+
+ node->right = new_node;
+ new_node->parent = node;
+
+ /* Update branch_size fields of the parent nodes. */
+ {
+ gl_list_node_t p;
+
+ for (p = node; p != NULL; p = p->parent)
+ p->branch_size++;
+ }
+
+ /* Color and rebalance. */
+ rebalance_after_add (list, new_node, node);
+ }
+
+#if WITH_HASHTABLE
+ /* Add node to the hash table.
+ Note that this is only possible _after_ the node has been added to the
+ tree structure, because add_to_bucket() uses node_position(). */
+ if (add_to_bucket (list, new_node) < 0)
+ {
+ gl_tree_remove_node_from_tree (list, new_node);
+ free (new_node);
+ return NULL;
+ }
+ hash_resize_after_add (list);
+#endif
+
+ return new_node;
+}
+
+static gl_list_node_t
+gl_tree_nx_add_before (gl_list_t list, gl_list_node_t node, const void *elt)
+{
+ /* Create new node. */
+ gl_list_node_t new_node =
+ (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl));
+
+ if (new_node == NULL)
+ return NULL;
+
+ new_node->left = NULL;
+ new_node->right = NULL;
+ new_node->branch_size = 1;
+ new_node->value = elt;
+#if WITH_HASHTABLE
+ new_node->h.hashcode =
+ (list->base.hashcode_fn != NULL
+ ? list->base.hashcode_fn (new_node->value)
+ : (size_t)(uintptr_t) new_node->value);
+#endif
+
+ /* Add it to the tree. */
+ if (node->left == NULL)
+ node->left = new_node;
+ else
+ {
+ for (node = node->left; node->right != NULL; )
+ node = node->right;
+ node->right = new_node;
+ }
+ new_node->parent = node;
+
+ /* Update branch_size fields of the parent nodes. */
+ {
+ gl_list_node_t p;
+
+ for (p = node; p != NULL; p = p->parent)
+ p->branch_size++;
+ }
+
+ /* Color and rebalance. */
+ rebalance_after_add (list, new_node, node);
+
+#if WITH_HASHTABLE
+ /* Add node to the hash table.
+ Note that this is only possible _after_ the node has been added to the
+ tree structure, because add_to_bucket() uses node_position(). */
+ if (add_to_bucket (list, new_node) < 0)
+ {
+ gl_tree_remove_node_from_tree (list, new_node);
+ free (new_node);
+ return NULL;
+ }
+ hash_resize_after_add (list);
+#endif
+
+ return new_node;
+}
+
+static gl_list_node_t
+gl_tree_nx_add_after (gl_list_t list, gl_list_node_t node, const void *elt)
+{
+ /* Create new node. */
+ gl_list_node_t new_node =
+ (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl));
+
+ if (new_node == NULL)
+ return NULL;
+
+ new_node->left = NULL;
+ new_node->right = NULL;
+ new_node->branch_size = 1;
+ new_node->value = elt;
+#if WITH_HASHTABLE
+ new_node->h.hashcode =
+ (list->base.hashcode_fn != NULL
+ ? list->base.hashcode_fn (new_node->value)
+ : (size_t)(uintptr_t) new_node->value);
+#endif
+
+ /* Add it to the tree. */
+ if (node->right == NULL)
+ node->right = new_node;
+ else
+ {
+ for (node = node->right; node->left != NULL; )
+ node = node->left;
+ node->left = new_node;
+ }
+ new_node->parent = node;
+
+ /* Update branch_size fields of the parent nodes. */
+ {
+ gl_list_node_t p;
+
+ for (p = node; p != NULL; p = p->parent)
+ p->branch_size++;
+ }
+
+ /* Color and rebalance. */
+ rebalance_after_add (list, new_node, node);
+
+#if WITH_HASHTABLE
+ /* Add node to the hash table.
+ Note that this is only possible _after_ the node has been added to the
+ tree structure, because add_to_bucket() uses node_position(). */
+ if (add_to_bucket (list, new_node) < 0)
+ {
+ gl_tree_remove_node_from_tree (list, new_node);
+ free (new_node);
+ return NULL;
+ }
+ hash_resize_after_add (list);
+#endif
+
+ return new_node;
+}
diff --git a/gl/lib/gl_anytree_list1.h b/gl/lib/gl_anytree_list1.h
new file mode 100644
index 00000000..c0ef5677
--- /dev/null
+++ b/gl/lib/gl_anytree_list1.h
@@ -0,0 +1,41 @@
+/* Sequential list data type implemented by a binary tree.
+ Copyright (C) 2006, 2009-2019 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2006.
+
+ 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 <https://www.gnu.org/licenses/>. */
+
+/* Common code of gl_avltree_list.c, gl_rbtree_list.c,
+ gl_avltreehash_list.c, gl_rbtreehash_list.c. */
+
+/* An item on the stack used for iterating across the elements. */
+typedef struct
+{
+ gl_list_node_t node;
+ size_t rightp;
+} iterstack_item_t;
+
+/* A stack used for iterating across the elements. */
+typedef iterstack_item_t iterstack_t[MAXHEIGHT];
+
+/* Free a non-empty subtree recursively.
+ This function is recursive and therefore not very fast. */
+static void
+free_subtree (gl_list_node_t node)
+{
+ if (node->left != NULL)
+ free_subtree (node->left);
+ if (node->right != NULL)
+ free_subtree (node->right);
+ free (node);
+}
diff --git a/gl/lib/gl_anytree_list2.h b/gl/lib/gl_anytree_list2.h
new file mode 100644
index 00000000..6ce41bf7
--- /dev/null
+++ b/gl/lib/gl_anytree_list2.h
@@ -0,0 +1,940 @@
+/* Sequential list data type implemented by a binary tree.
+ Copyright (C) 2006-2019 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2006.
+
+ 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 <https://www.gnu.org/licenses/>. */
+
+/* Common code of gl_avltree_list.c, gl_rbtree_list.c,
+ gl_avltreehash_list.c, gl_rbtreehash_list.c. */
+
+static gl_list_t
+gl_tree_nx_create_empty (gl_list_implementation_t implementation,
+ gl_listelement_equals_fn equals_fn,
+ gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
+ bool allow_duplicates)
+{
+ struct gl_list_impl *list = (struct gl_list_impl *) malloc (sizeof (struct gl_list_impl));
+
+ if (list == NULL)
+ return NULL;
+
+ list->base.vtable = implementation;
+ list->base.equals_fn = equals_fn;
+ list->base.hashcode_fn = hashcode_fn;
+ list->base.dispose_fn = dispose_fn;
+ list->base.allow_duplicates = allow_duplicates;
+#if WITH_HASHTABLE
+ list->table_size = 11;
+ list->table =
+ (gl_hash_entry_t *) calloc (list->table_size, sizeof (gl_hash_entry_t));
+ if (list->table == NULL)
+ goto fail;
+#endif
+ list->root = NULL;
+
+ return list;
+
+#if WITH_HASHTABLE
+ fail:
+ free (list);
+ return NULL;
+#endif
+}
+
+static size_t
+gl_tree_size (gl_list_t list)
+{
+ return (list->root != NULL ? list->root->branch_size : 0);
+}
+
+static const void *
+gl_tree_node_value (gl_list_t list, gl_list_node_t node)
+{
+ return node->value;
+}
+
+static int
+gl_tree_node_nx_set_value (gl_list_t list, gl_list_node_t node, const void *elt)
+{
+#if WITH_HASHTABLE
+ if (elt != node->value)
+ {
+ size_t new_hashcode =
+ (list->base.hashcode_fn != NULL
+ ? list->base.hashcode_fn (elt)
+ : (size_t)(uintptr_t) elt);
+
+ if (new_hashcode != node->h.hashcode)
+ {
+ remove_from_bucket (list, node);
+ node->value = elt;
+ node->h.hashcode = new_hashcode;
+ if (add_to_bucket (list, node) < 0)
+ {
+ /* Out of memory. We removed node from a bucket but cannot add
+ it to another bucket. In order to avoid inconsistencies, we
+ must remove node entirely from the list. */
+ gl_tree_remove_node_from_tree (list, node);
+ free (node);
+ return -1;
+ }
+ }
+ else
+ node->value = elt;
+ }
+#else
+ node->value = elt;
+#endif
+ return 0;
+}
+
+static gl_list_node_t _GL_ATTRIBUTE_PURE
+gl_tree_next_node (gl_list_t list, gl_list_node_t node)
+{
+ if (node->right != NULL)
+ {
+ node = node->right;
+ while (node->left != NULL)
+ node = node->left;
+ }
+ else
+ {
+ while (node->parent != NULL && node->parent->right == node)
+ node = node->parent;
+ node = node->parent;
+ }
+ return node;
+}
+
+static gl_list_node_t _GL_ATTRIBUTE_PURE
+gl_tree_previous_node (gl_list_t list, gl_list_node_t node)
+{
+ if (node->left != NULL)
+ {
+ node = node->left;
+ while (node->right != NULL)
+ node = node->right;
+ }
+ else
+ {
+ while (node->parent != NULL && node->parent->left == node)
+ node = node->parent;
+ node = node->parent;
+ }
+ return node;
+}
+
+/* Return the node at the given position < gl_tree_size (list). */
+static gl_list_node_t _GL_ATTRIBUTE_PURE
+node_at (gl_list_node_t root, size_t position)
+{
+ /* Here we know that root != NULL. */
+ gl_list_node_t node = root;
+
+ for (;;)
+ {
+ if (node->left != NULL)
+ {
+ if (position < node->left->branch_size)
+ {
+ node = node->left;
+ continue;
+ }
+ position -= node->left->branch_size;
+ }
+ if (position == 0)
+ break;
+ position--;
+ node = node->right;
+ }
+ return node;
+}
+
+static const void * _GL_ATTRIBUTE_PURE
+gl_tree_get_at (gl_list_t list, size_t position)
+{
+ gl_list_node_t node = list->root;
+
+ if (!(node != NULL && position < node->branch_size))
+ /* Invalid argument. */
+ abort ();
+ node = node_at (node, position);
+ return node->value;
+}
+
+static gl_list_node_t
+gl_tree_nx_set_at (gl_list_t list, size_t position, const void *elt)
+{
+ gl_list_node_t node = list->root;
+
+ if (!(node != NULL && position < node->branch_size))
+ /* Invalid argument. */
+ abort ();
+ node = node_at (node, position);
+#if WITH_HASHTABLE
+ if (elt != node->value)
+ {
+ size_t new_hashcode =
+ (list->base.hashcode_fn != NULL
+ ? list->base.hashcode_fn (elt)
+ : (size_t)(uintptr_t) elt);
+
+ if (new_hashcode != node->h.hashcode)
+ {
+ remove_from_bucket (list, node);
+ node->value = elt;
+ node->h.hashcode = new_hashcode;
+ if (add_to_bucket (list, node) < 0)
+ {
+ /* Out of memory. We removed node from a bucket but cannot add
+ it to another bucket. In order to avoid inconsistencies, we
+ must remove node entirely from the list. */
+ gl_tree_remove_node_from_tree (list, node);
+ free (node);
+ return NULL;
+ }
+ }
+ else
+ node->value = elt;
+ }
+#else
+ node->value = elt;
+#endif
+ return node;
+}
+
+#if !WITH_HASHTABLE
+
+static gl_list_node_t
+gl_tree_search_from_to (gl_list_t list, size_t start_index, size_t end_index,
+ const void *elt)
+{
+ if (!(start_index <= end_index
+ && end_index <= (list->root != NULL ? list->root->branch_size : 0)))
+ /* Invalid arguments. */
+ abort ();
+ {
+ gl_listelement_equals_fn equals = list->base.equals_fn;
+ /* Iterate across all elements. */
+ gl_list_node_t node = list->root;
+ iterstack_t stack;
+ iterstack_item_t *stack_ptr = &stack[0];
+ size_t index = 0;
+
+ if (start_index == 0)
+ {
+ /* Consider all elements. */
+ for (;;)
+ {
+ /* Descend on left branch. */
+ for (;;)
+ {
+ if (node == NULL)
+ break;
+ stack_ptr->node = node;
+ stack_ptr->rightp = 0;
+ node = node->left;
+ stack_ptr++;
+ }
+ /* Climb up again. */
+ for (;;)
+ {
+ if (stack_ptr == &stack[0])
+ return NULL;
+ stack_ptr--;
+ if (!stack_ptr->rightp)
+ break;
+ }
+ node = stack_ptr->node;
+ /* Test against current element. */
+ if (equals != NULL ? equals (elt, node->value) : elt == node->value)
+ return node;
+ index++;
+ if (index >= end_index)
+ return NULL;
+ /* Descend on right branch. */
+ stack_ptr->rightp = 1;
+ node = node->right;
+ stack_ptr++;
+ }
+ }
+ else
+ {
+ /* Consider only elements at indices >= start_index.
+ In this case, rightp contains the difference between the start_index
+ for the parent node and the one for the child node (0 when the child
+ node is the parent's left child, > 0 when the child is the parent's
+ right child). */
+ for (;;)
+ {
+ /* Descend on left branch. */
+ for (;;)
+ {
+ if (node == NULL)
+ break;
+ if (node->branch_size <= start_index)
+ break;
+ stack_ptr->node = node;
+ stack_ptr->rightp = 0;
+ node = node->left;
+ stack_ptr++;
+ }
+ /* Climb up again. */
+ for (;;)
+ {
+ if (stack_ptr == &stack[0])
+ return NULL;
+ stack_ptr--;
+ if (!stack_ptr->rightp)
+ break;
+ start_index += stack_ptr->rightp;
+ }
+ node = stack_ptr->node;
+ {
+ size_t left_branch_size1 =
+ (node->left != NULL ? node->left->branch_size : 0) + 1;
+ if (start_index < left_branch_size1)
+ {
+ /* Test against current element. */
+ if (equals != NULL ? equals (elt, node->value) : elt == node->value)
+ return node;
+ /* Now that we have considered all indices < left_branch_size1,
+ we can increment start_index. */
+ start_index = left_branch_size1;
+ }
+ index++;
+ if (index >= end_index)
+ return NULL;
+ /* Descend on right branch. */
+ start_index -= left_branch_size1;
+ stack_ptr->rightp = left_branch_size1;
+ }
+ node = node->right;
+ stack_ptr++;
+ }
+ }
+ }
+}
+
+static size_t
+gl_tree_indexof_from_to (gl_list_t list, size_t start_index, size_t end_index,
+ const void *elt)
+{
+ if (!(start_index <= end_index
+ && end_index <= (list->root != NULL ? list->root->branch_size : 0)))
+ /* Invalid arguments. */
+ abort ();
+ {
+ gl_listelement_equals_fn equals = list->base.equals_fn;
+ /* Iterate across all elements. */
+ gl_list_node_t node = list->root;
+ iterstack_t stack;
+ iterstack_item_t *stack_ptr = &stack[0];
+ size_t index = 0;
+
+ if (start_index == 0)
+ {
+ /* Consider all elements. */
+ for (;;)
+ {
+ /* Descend on left branch. */
+ for (;;)
+ {
+ if (node == NULL)
+ break;
+ stack_ptr->node = node;
+ stack_ptr->rightp = 0;
+ node = node->left;
+ stack_ptr++;
+ }
+ /* Climb up again. */
+ for (;;)
+ {
+ if (stack_ptr == &stack[0])
+ return (size_t)(-1);
+ stack_ptr--;
+ if (!stack_ptr->rightp)
+ break;
+ }
+ node = stack_ptr->node;
+ /* Test against current element. */
+ if (equals != NULL ? equals (elt, node->value) : elt == node->value)
+ return index;
+ index++;
+ if (index >= end_index)
+ return (size_t)(-1);
+ /* Descend on right branch. */
+ stack_ptr->rightp = 1;
+ node = node->right;
+ stack_ptr++;
+ }
+ }
+ else
+ {
+ /* Consider only elements at indices >= start_index.
+ In this case, rightp contains the difference between the start_index
+ for the parent node and the one for the child node (0 when the child
+ node is the parent's left child, > 0 when the child is the parent's
+ right child). */
+ for (;;)
+ {
+ /* Descend on left branch. */
+ for (;;)
+ {
+ if (node == NULL)
+ break;
+ if (node->branch_size <= start_index)
+ break;
+ stack_ptr->node = node;
+ stack_ptr->rightp = 0;
+ node = node->left;
+ stack_ptr++;
+ }
+ /* Climb up again. */
+ for (;;)
+ {
+ if (stack_ptr == &stack[0])
+ return (size_t)(-1);
+ stack_ptr--;
+ if (!stack_ptr->rightp)
+ break;
+ start_index += stack_ptr->rightp;
+ }
+ node = stack_ptr->node;
+ {
+ size_t left_branch_size1 =
+ (node->left != NULL ? node->left->branch_size : 0) + 1;
+ if (start_index < left_branch_size1)
+ {
+ /* Test against current element. */
+ if (equals != NULL ? equals (elt, node->value) : elt == node->value)
+ return index;
+ /* Now that we have considered all indices < left_branch_size1,
+ we can increment start_index. */
+ start_index = left_branch_size1;
+ }
+ index++;
+ if (index >= end_index)
+ return (size_t)(-1);
+ /* Descend on right branch. */
+ start_index -= left_branch_size1;
+ stack_ptr->rightp = left_branch_size1;
+ }
+ node = node->right;
+ stack_ptr++;
+ }
+ }
+ }
+}
+
+#endif
+
+static gl_list_node_t
+gl_tree_nx_add_at (gl_list_t list, size_t position, const void *elt)
+{
+ size_t count = (list->root != NULL ? list->root->branch_size : 0);
+
+ if (!(position <= count))
+ /* Invalid argument. */
+ abort ();
+ if (position == count)
+ return gl_tree_nx_add_last (list, elt);
+ else
+ return gl_tree_nx_add_before (list, node_at (list->root, position), elt);
+}
+
+static bool
+gl_tree_remove_node (gl_list_t list, gl_list_node_t node)
+{
+#if WITH_HASHTABLE
+ /* Remove node from the hash table.
+ Note that this is only possible _before_ the node is removed from the
+ tree structure, because remove_from_bucket() uses node_position(). */
+ remove_from_bucket (list, node);
+#endif
+
+ gl_tree_remove_node_from_tree (list, node);
+
+ if (list->base.dispose_fn != NULL)
+ list->base.dispose_fn (node->value);
+ free (node);
+ return true;
+}
+
+static bool
+gl_tree_remove_at (gl_list_t list, size_t position)
+{
+ gl_list_node_t node = list->root;
+
+ if (!(node != NULL && position < node->branch_size))
+ /* Invalid argument. */
+ abort ();
+ node = node_at (node, position);
+ return gl_tree_remove_node (list, node);
+}
+
+static bool
+gl_tree_remove (gl_list_t list, const void *elt)
+{
+ if (list->root != NULL)
+ {
+ gl_list_node_t node =
+ gl_tree_search_from_to (list, 0, list->root->branch_size, elt);
+
+ if (node != NULL)
+ return gl_tree_remove_node (list, node);
+ }
+ return false;
+}
+
+#if !WITH_HASHTABLE
+
+static void
+gl_tree_list_free (gl_list_t list)
+{
+ /* Iterate across all elements in post-order. */
+ gl_list_node_t node = list->root;
+ iterstack_t stack;
+ iterstack_item_t *stack_ptr = &stack[0];
+
+ for (;;)
+ {
+ /* Descend on left branch. */
+ for (;;)
+ {
+ if (node == NULL)
+ break;
+ stack_ptr->node = node;
+ stack_ptr->rightp = false;
+ node = node->left;
+ stack_ptr++;
+ }
+ /* Climb up again. */
+ for (;;)
+ {
+ if (stack_ptr == &stack[0])
+ goto done_iterate;
+ stack_ptr--;
+ node = stack_ptr->node;
+ if (!stack_ptr->rightp)
+ break;
+ /* Free the current node. */
+ if (list->base.dispose_fn != NULL)
+ list->base.dispose_fn (node->value);
+ free (node);
+ }
+ /* Descend on right branch. */
+ stack_ptr->rightp = true;
+ node = node->right;
+ stack_ptr++;
+ }
+ done_iterate:
+ free (list);
+}
+
+#endif
+
+/* --------------------- gl_list_iterator_t Data Type --------------------- */
+
+static gl_list_iterator_t
+gl_tree_iterator (gl_list_t list)
+{
+ gl_list_iterator_t result;
+ gl_list_node_t node;
+
+ result.vtable = list->base.vtable;
+ result.list = list;
+ /* Start node is the leftmost node. */
+ node = list->root;
+ if (node != NULL)
+ while (node->left != NULL)
+ node = node->left;
+ result.p = node;
+ /* End point is past the rightmost node. */
+ result.q = NULL;
+#if defined GCC_LINT || defined lint
+ result.i = 0;
+ result.j = 0;
+ result.count = 0;
+#endif
+
+ return result;
+}
+
+static gl_list_iterator_t
+gl_tree_iterator_from_to (gl_list_t list, size_t start_index, size_t end_index)
+{
+ size_t count = (list->root != NULL ? list->root->branch_size : 0);
+ gl_list_iterator_t result;
+
+ if (!(start_index <= end_index && end_index <= count))
+ /* Invalid arguments. */
+ abort ();
+ result.vtable = list->base.vtable;
+ result.list = list;
+ /* Start node is the node at position start_index. */
+ result.p = (start_index < count ? node_at (list->root, start_index) : NULL);
+ /* End point is the node at position end_index. */
+ result.q = (end_index < count ? node_at (list->root, end_index) : NULL);
+#if defined GCC_LINT || defined lint
+ result.i = 0;
+ result.j = 0;
+ result.count = 0;
+#endif
+
+ return result;
+}
+
+static bool
+gl_tree_iterator_next (gl_list_iterator_t *iterator,
+ const void **eltp, gl_list_node_t *nodep)
+{
+ if (iterator->p != iterator->q)
+ {
+ gl_list_node_t node = (gl_list_node_t) iterator->p;
+ *eltp = node->value;
+ if (nodep != NULL)
+ *nodep = node;
+ /* Advance to the next node. */
+ if (node->right != NULL)
+ {
+ node = node->right;
+ while (node->left != NULL)
+ node = node->left;
+ }
+ else
+ {
+ while (node->parent != NULL && node->parent->right == node)
+ node = node->parent;
+ node = node->parent;
+ }
+ iterator->p = node;
+ return true;
+ }
+ else
+ return false;
+}
+
+static void
+gl_tree_iterator_free (gl_list_iterator_t *iterator)
+{
+}
+
+/* ---------------------- Sorted gl_list_t Data Type ---------------------- */
+
+static gl_list_node_t
+gl_tree_sortedlist_search (gl_list_t list, gl_listelement_compar_fn compar,
+ const void *elt)
+{
+ gl_list_node_t node;
+
+ for (node = list->root; node != NULL; )
+ {
+ int cmp = compar (node->value, elt);
+
+ if (cmp < 0)
+ node = node->right;
+ else if (cmp > 0)
+ node = node->left;
+ else /* cmp == 0 */
+ {
+ /* We have an element equal to ELT. But we need the leftmost such
+ element. */
+ gl_list_node_t found = node;
+ node = node->left;
+ for (; node != NULL; )
+ {
+ int cmp2 = compar (node->value, elt);
+
+ if (cmp2 < 0)
+ node = node->right;
+ else if (cmp2 > 0)
+ /* The list was not sorted. */
+ abort ();
+ else /* cmp2 == 0 */
+ {
+ found = node;
+ node = node->left;
+ }
+ }
+ return found;
+ }
+ }
+ return NULL;
+}
+
+static gl_list_node_t
+gl_tree_sortedlist_search_from_to (gl_list_t list,
+ gl_listelement_compar_fn compar,
+ size_t low, size_t high,
+ const void *elt)
+{
+ gl_list_node_t node;
+
+ if (!(low <= high
+ && high <= (list->root != NULL ? list->root->branch_size : 0)))
+ /* Invalid arguments. */
+ abort ();
+
+ for (node = list->root; node != NULL; )
+ {
+ size_t left_branch_size =
+ (node->left != NULL ? node->left->branch_size : 0);
+
+ if (low > left_branch_size)
+ {
+ low -= left_branch_size + 1;
+ high -= left_branch_size + 1;
+ node = node->right;
+ }
+ else if (high <= left_branch_size)
+ node = node->left;
+ else
+ {
+ /* Here low <= left_branch_size < high. */
+ int cmp = compar (node->value, elt);
+
+ if (cmp < 0)
+ {
+ low = 0;
+ high -= left_branch_size + 1;
+ node = node->right;
+ }
+ else if (cmp > 0)
+ node = node->left;
+ else /* cmp == 0 */
+ {
+ /* We have an element equal to ELT. But we need the leftmost
+ such element. */
+ gl_list_node_t found = node;
+ node = node->left;
+ for (; node != NULL; )
+ {
+ size_t left_branch_size2 =
+ (node->left != NULL ? node->left->branch_size : 0);
+
+ if (low > left_branch_size2)
+ {
+ low -= left_branch_size2 + 1;
+ node = node->right;
+ }
+ else
+ {
+ /* Here low <= left_branch_size2. */
+ int cmp2 = compar (node->value, elt);
+
+ if (cmp2 < 0)
+ {
+ low = 0;
+ node = node->right;
+ }
+ else if (cmp2 > 0)
+ /* The list was not sorted. */
+ abort ();
+ else /* cmp2 == 0 */
+ {
+ found = node;
+ node = node->left;
+ }
+ }
+ }
+ return found;
+ }
+ }
+ }
+ return NULL;
+}
+
+static size_t
+gl_tree_sortedlist_indexof (gl_list_t list, gl_listelement_compar_fn compar,
+ const void *elt)
+{
+ gl_list_node_t node;
+ size_t position;
+
+ for (node = list->root, position = 0; node != NULL; )
+ {
+ int cmp = compar (node->value, elt);
+
+ if (cmp < 0)
+ {
+ if (node->left != NULL)
+ position += node->left->branch_size;
+ position++;
+ node = node->right;
+ }
+ else if (cmp > 0)
+ node = node->left;
+ else /* cmp == 0 */
+ {
+ /* We have an element equal to ELT. But we need the leftmost such
+ element. */
+ size_t found_position =
+ position + (node->left != NULL ? node->left->branch_size : 0);
+ node = node->left;
+ for (; node != NULL; )
+ {
+ int cmp2 = compar (node->value, elt);
+
+ if (cmp2 < 0)
+ {
+ if (node->left != NULL)
+ position += node->left->branch_size;
+ position++;
+ node = node->right;
+ }
+ else if (cmp2 > 0)
+ /* The list was not sorted. */
+ abort ();
+ else /* cmp2 == 0 */
+ {
+ found_position =
+ position
+ + (node->left != NULL ? node->left->branch_size : 0);
+ node = node->left;
+ }
+ }
+ return found_position;
+ }
+ }
+ return (size_t)(-1);
+}
+
+static size_t
+gl_tree_sortedlist_indexof_from_to (gl_list_t list,
+ gl_listelement_compar_fn compar,
+ size_t low, size_t high,
+ const void *elt)
+{
+ gl_list_node_t node;
+ size_t position;
+
+ if (!(low <= high
+ && high <= (list->root != NULL ? list->root->branch_size : 0)))
+ /* Invalid arguments. */
+ abort ();
+
+ for (node = list->root, position = 0; node != NULL; )
+ {
+ size_t left_branch_size =
+ (node->left != NULL ? node->left->branch_size : 0);
+
+ if (low > left_branch_size)
+ {
+ low -= left_branch_size + 1;
+ high -= left_branch_size + 1;
+ position += left_branch_size + 1;
+ node = node->right;
+ }
+ else if (high <= left_branch_size)
+ node = node->left;
+ else
+ {
+ /* Here low <= left_branch_size < high. */
+ int cmp = compar (node->value, elt);
+
+ if (cmp < 0)
+ {
+ low = 0;
+ high -= left_branch_size + 1;
+ position += left_branch_size + 1;
+ node = node->right;
+ }
+ else if (cmp > 0)
+ node = node->left;
+ else /* cmp == 0 */
+ {
+ /* We have an element equal to ELT. But we need the leftmost
+ such element. */
+ size_t found_position =
+ position + (node->left != NULL ? node->left->branch_size : 0);
+ node = node->left;
+ for (; node != NULL; )
+ {
+ size_t left_branch_size2 =
+ (node->left != NULL ? node->left->branch_size : 0);
+
+ if (low > left_branch_size2)
+ {
+ low -= left_branch_size2 + 1;
+ node = node->right;
+ }
+ else
+ {
+ /* Here low <= left_branch_size2. */
+ int cmp2 = compar (node->value, elt);
+
+ if (cmp2 < 0)
+ {
+ position += left_branch_size2 + 1;
+ node = node->right;
+ }
+ else if (cmp2 > 0)
+ /* The list was not sorted. */
+ abort ();
+ else /* cmp2 == 0 */
+ {
+ found_position = position + left_branch_size2;
+ node = node->left;
+ }
+ }
+ }
+ return found_position;
+ }
+ }
+ }
+ return (size_t)(-1);
+}
+
+static gl_list_node_t
+gl_tree_sortedlist_nx_add (gl_list_t list, gl_listelement_compar_fn compar,
+ const void *elt)
+{
+ gl_list_node_t node = list->root;
+
+ if (node == NULL)
+ return gl_tree_nx_add_first (list, elt);
+
+ for (;;)
+ {
+ int cmp = compar (node->value, elt);
+
+ if (cmp < 0)
+ {
+ if (node->right == NULL)
+ return gl_tree_nx_add_after (list, node, elt);
+ node = node->right;
+ }
+ else if (cmp > 0)
+ {
+ if (node->left == NULL)
+ return gl_tree_nx_add_before (list, node, elt);
+ node = node->left;
+ }
+ else /* cmp == 0 */
+ return gl_tree_nx_add_before (list, node, elt);
+ }
+}
+
+static bool
+gl_tree_sortedlist_remove (gl_list_t list, gl_listelement_compar_fn compar,
+ const void *elt)
+{
+ gl_list_node_t node = gl_tree_sortedlist_search (list, compar, elt);
+ if (node != NULL)
+ return gl_tree_remove_node (list, node);
+ else
+ return false;
+}
diff --git a/gl/lib/gl_array_list.c b/gl/lib/gl_array_list.c
new file mode 100644
index 00000000..4ac743fd
--- /dev/null
+++ b/gl/lib/gl_array_list.c
@@ -0,0 +1,680 @@
+/* Sequential list data type implemented by an array.
+ Copyright (C) 2006-2019 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2006.
+
+ 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 <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include "gl_array_list.h"
+
+#include <stdlib.h>
+/* Get memcpy. */
+#include <string.h>
+
+/* Checked size_t computations. */
+#include "xsize.h"
+
+#ifndef uintptr_t
+# define uintptr_t unsigned long
+#endif
+
+/* -------------------------- gl_list_t Data Type -------------------------- */
+
+/* Concrete gl_list_impl type, valid for this file only. */
+struct gl_list_impl
+{
+ struct gl_list_impl_base base;
+ /* An array of ALLOCATED elements, of which the first COUNT are used.
+ 0 <= COUNT <= ALLOCATED. */
+ const void **elements;
+ size_t count;
+ size_t allocated;
+};
+
+/* struct gl_list_node_impl doesn't exist here. The pointers are actually
+ indices + 1. */
+#define INDEX_TO_NODE(index) (gl_list_node_t)(uintptr_t)(size_t)((index) + 1)
+#define NODE_TO_INDEX(node) ((uintptr_t)(node) - 1)
+
+static gl_list_t
+gl_array_nx_create_empty (gl_list_implementation_t implementation,
+ gl_listelement_equals_fn equals_fn,
+ gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
+ bool allow_duplicates)
+{
+ struct gl_list_impl *list =
+ (struct gl_list_impl *) malloc (sizeof (struct gl_list_impl));
+
+ if (list == NULL)
+ return NULL;
+
+ list->base.vtable = implementation;
+ list->base.equals_fn = equals_fn;
+ list->base.hashcode_fn = hashcode_fn;
+ list->base.dispose_fn = dispose_fn;
+ list->base.allow_duplicates = allow_duplicates;
+ list->elements = NULL;
+ list->count = 0;
+ list->allocated = 0;
+
+ return list;
+}
+
+static gl_list_t
+gl_array_nx_create (gl_list_implementation_t implementation,
+ gl_listelement_equals_fn equals_fn,
+ gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
+ bool allow_duplicates,
+ size_t count, const void **contents)
+{
+ struct gl_list_impl *list =
+ (struct gl_list_impl *) malloc (sizeof (struct gl_list_impl));
+
+ if (list == NULL)
+ return NULL;
+
+ list->base.vtable = implementation;
+ list->base.equals_fn = equals_fn;
+ list->base.hashcode_fn = hashcode_fn;
+ list->base.dispose_fn = dispose_fn;
+ list->base.allow_duplicates = allow_duplicates;
+ if (count > 0)
+ {
+ if (size_overflow_p (xtimes (count, sizeof (const void *))))
+ goto fail;
+ list->elements = (const void **) malloc (count * sizeof (const void *));
+ if (list->elements == NULL)
+ goto fail;
+ memcpy (list->elements, contents, count * sizeof (const void *));
+ }
+ else
+ list->elements = NULL;
+ list->count = count;
+ list->allocated = count;
+
+ return list;
+
+ fail:
+ free (list);
+ return NULL;
+}
+
+static size_t
+gl_array_size (gl_list_t list)
+{
+ return list->count;
+}
+
+static const void * _GL_ATTRIBUTE_PURE
+gl_array_node_value (gl_list_t list, gl_list_node_t node)
+{
+ uintptr_t index = NODE_TO_INDEX (node);
+ if (!(index < list->count))
+ /* Invalid argument. */
+ abort ();
+ return list->elements[index];
+}
+
+static int
+gl_array_node_nx_set_value (gl_list_t list, gl_list_node_t node,
+ const void *elt)
+{
+ uintptr_t index = NODE_TO_INDEX (node);
+ if (!(index < list->count))
+ /* Invalid argument. */
+ abort ();
+ list->elements[index] = elt;
+ return 0;
+}
+
+static gl_list_node_t _GL_ATTRIBUTE_PURE
+gl_array_next_node (gl_list_t list, gl_list_node_t node)
+{
+ uintptr_t index = NODE_TO_INDEX (node);
+ if (!(index < list->count))
+ /* Invalid argument. */
+ abort ();
+ index++;
+ if (index < list->count)
+ return INDEX_TO_NODE (index);
+ else
+ return NULL;
+}
+
+static gl_list_node_t _GL_ATTRIBUTE_PURE
+gl_array_previous_node (gl_list_t list, gl_list_node_t node)
+{
+ uintptr_t index = NODE_TO_INDEX (node);
+ if (!(index < list->count))
+ /* Invalid argument. */
+ abort ();
+ if (index > 0)
+ return INDEX_TO_NODE (index - 1);
+ else
+ return NULL;
+}
+
+static const void * _GL_ATTRIBUTE_PURE
+gl_array_get_at (gl_list_t list, size_t position)
+{
+ size_t count = list->count;
+
+ if (!(position < count))
+ /* Invalid argument. */
+ abort ();
+ return list->elements[position];
+}
+
+static gl_list_node_t
+gl_array_nx_set_at (gl_list_t list, size_t position, const void *elt)
+{
+ size_t count = list->count;
+
+ if (!(position < count))
+ /* Invalid argument. */
+ abort ();
+ list->elements[position] = elt;
+ return INDEX_TO_NODE (position);
+}
+
+static size_t
+gl_array_indexof_from_to (gl_list_t list, size_t start_index, size_t end_index,
+ const void *elt)
+{
+ size_t count = list->count;
+
+ if (!(start_index <= end_index && end_index <= count))
+ /* Invalid arguments. */
+ abort ();
+
+ if (start_index < end_index)
+ {
+ gl_listelement_equals_fn equals = list->base.equals_fn;
+ if (equals != NULL)
+ {
+ size_t i;
+
+ for (i = start_index;;)
+ {
+ if (equals (elt, list->elements[i]))
+ return i;
+ i++;
+ if (i == end_index)
+ break;
+ }
+ }
+ else
+ {
+ size_t i;
+
+ for (i = start_index;;)
+ {
+ if (elt == list->elements[i])
+ return i;
+ i++;
+ if (i == end_index)
+ break;
+ }
+ }
+ }
+ return (size_t)(-1);
+}
+
+static gl_list_node_t
+gl_array_search_from_to (gl_list_t list, size_t start_index, size_t end_index,
+ const void *elt)
+{
+ size_t index = gl_array_indexof_from_to (list, start_index, end_index, elt);
+ return INDEX_TO_NODE (index);
+}
+
+/* Ensure that list->allocated > list->count.
+ Return 0 upon success, -1 upon out-of-memory. */
+static int
+grow (gl_list_t list)
+{
+ size_t new_allocated;
+ size_t memory_size;
+ const void **memory;
+
+ new_allocated = xtimes (list->allocated, 2);
+ new_allocated = xsum (new_allocated, 1);
+ memory_size = xtimes (new_allocated, sizeof (const void *));
+ if (size_overflow_p (memory_size))
+ /* Overflow, would lead to out of memory. */
+ return -1;
+ memory = (const void **) realloc (list->elements, memory_size);
+ if (memory == NULL)
+ /* Out of memory. */
+ return -1;
+ list->elements = memory;
+ list->allocated = new_allocated;
+ return 0;
+}
+
+static gl_list_node_t
+gl_array_nx_add_first (gl_list_t list, const void *elt)
+{
+ size_t count = list->count;
+ const void **elements;
+ size_t i;
+
+ if (count == list->allocated)
+ if (grow (list) < 0)
+ return NULL;
+ elements = list->elements;
+ for (i = count; i > 0; i--)
+ elements[i] = elements[i - 1];
+ elements[0] = elt;
+ list->count = count + 1;
+ return INDEX_TO_NODE (0);
+}
+
+static gl_list_node_t
+gl_array_nx_add_last (gl_list_t list, const void *elt)
+{
+ size_t count = list->count;
+
+ if (count == list->allocated)
+ if (grow (list) < 0)
+ return NULL;
+ list->elements[count] = elt;
+ list->count = count + 1;
+ return INDEX_TO_NODE (count);
+}
+
+static gl_list_node_t
+gl_array_nx_add_before (gl_list_t list, gl_list_node_t node, const void *elt)
+{
+ size_t count = list->count;
+ uintptr_t index = NODE_TO_INDEX (node);
+ size_t position;
+ const void **elements;
+ size_t i;
+
+ if (!(index < count))
+ /* Invalid argument. */
+ abort ();
+ position = index;
+ if (count == list->allocated)
+ if (grow (list) < 0)
+ return NULL;
+ elements = list->elements;
+ for (i = count; i > position; i--)
+ elements[i] = elements[i - 1];
+ elements[position] = elt;
+ list->count = count + 1;
+ return INDEX_TO_NODE (position);
+}
+
+static gl_list_node_t
+gl_array_nx_add_after (gl_list_t list, gl_list_node_t node, const void *elt)
+{
+ size_t count = list->count;
+ uintptr_t index = NODE_TO_INDEX (node);
+ size_t position;
+ const void **elements;
+ size_t i;
+
+ if (!(index < count))
+ /* Invalid argument. */
+ abort ();
+ position = index + 1;
+ if (count == list->allocated)
+ if (grow (list) < 0)
+ return NULL;
+ elements = list->elements;
+ for (i = count; i > position; i--)
+ elements[i] = elements[i - 1];
+ elements[position] = elt;
+ list->count = count + 1;
+ return INDEX_TO_NODE (position);
+}
+
+static gl_list_node_t
+gl_array_nx_add_at (gl_list_t list, size_t position, const void *elt)
+{
+ size_t count = list->count;
+ const void **elements;
+ size_t i;
+
+ if (!(position <= count))
+ /* Invalid argument. */
+ abort ();
+ if (count == list->allocated)
+ if (grow (list) < 0)
+ return NULL;
+ elements = list->elements;
+ for (i = count; i > position; i--)
+ elements[i] = elements[i - 1];
+ elements[position] = elt;
+ list->count = count + 1;
+ return INDEX_TO_NODE (position);
+}
+
+static bool
+gl_array_remove_node (gl_list_t list, gl_list_node_t node)
+{
+ size_t count = list->count;
+ uintptr_t index = NODE_TO_INDEX (node);
+ size_t position;
+ const void **elements;
+ size_t i;
+
+ if (!(index < count))
+ /* Invalid argument. */
+ abort ();
+ position = index;
+ elements = list->elements;
+ if (list->base.dispose_fn != NULL)
+ list->base.dispose_fn (elements[position]);
+ for (i = position + 1; i < count; i++)
+ elements[i - 1] = elements[i];
+ list->count = count - 1;
+ return true;
+}
+
+static bool
+gl_array_remove_at (gl_list_t list, size_t position)
+{
+ size_t count = list->count;
+ const void **elements;
+ size_t i;
+
+ if (!(position < count))
+ /* Invalid argument. */
+ abort ();
+ elements = list->elements;
+ if (list->base.dispose_fn != NULL)
+ list->base.dispose_fn (elements[position]);
+ for (i = position + 1; i < count; i++)
+ elements[i - 1] = elements[i];
+ list->count = count - 1;
+ return true;
+}
+
+static bool
+gl_array_remove (gl_list_t list, const void *elt)
+{
+ size_t position = gl_array_indexof_from_to (list, 0, list->count, elt);
+ if (position == (size_t)(-1))
+ return false;
+ else
+ return gl_array_remove_at (list, position);
+}
+
+static void
+gl_array_list_free (gl_list_t list)
+{
+ if (list->elements != NULL)
+ {
+ if (list->base.dispose_fn != NULL)
+ {
+ size_t count = list->count;
+
+ if (count > 0)
+ {
+ gl_listelement_dispose_fn dispose = list->base.dispose_fn;
+ const void **elements = list->elements;
+
+ do
+ dispose (*elements++);
+ while (--count > 0);
+ }
+ }
+ free (list->elements);
+ }
+ free (list);
+}
+
+/* --------------------- gl_list_iterator_t Data Type --------------------- */
+
+static gl_list_iterator_t
+gl_array_iterator (gl_list_t list)
+{
+ gl_list_iterator_t result;
+
+ result.vtable = list->base.vtable;
+ result.list = list;
+ result.count = list->count;
+ result.p = list->elements + 0;
+ result.q = list->elements + list->count;
+#if defined GCC_LINT || defined lint
+ result.i = 0;
+ result.j = 0;
+#endif
+
+ return result;
+}
+
+static gl_list_iterator_t
+gl_array_iterator_from_to (gl_list_t list, size_t start_index, size_t end_index)
+{
+ gl_list_iterator_t result;
+
+ if (!(start_index <= end_index && end_index <= list->count))
+ /* Invalid arguments. */
+ abort ();
+ result.vtable = list->base.vtable;
+ result.list = list;
+ result.count = list->count;
+ result.p = list->elements + start_index;
+ result.q = list->elements + end_index;
+#if defined GCC_LINT || defined lint
+ result.i = 0;
+ result.j = 0;
+#endif
+
+ return result;
+}
+
+static bool
+gl_array_iterator_next (gl_list_iterator_t *iterator,
+ const void **eltp, gl_list_node_t *nodep)
+{
+ gl_list_t list = iterator->list;
+ if (iterator->count != list->count)
+ {
+ if (iterator->count != list->count + 1)
+ /* Concurrent modifications were done on the list. */
+ abort ();
+ /* The last returned element was removed. */
+ iterator->count--;
+ iterator->p = (const void **) iterator->p - 1;
+ iterator->q = (const void **) iterator->q - 1;
+ }
+ if (iterator->p < iterator->q)
+ {
+ const void **p = (const void **) iterator->p;
+ *eltp = *p;
+ if (nodep != NULL)
+ *nodep = INDEX_TO_NODE (p - list->elements);
+ iterator->p = p + 1;
+ return true;
+ }
+ else
+ return false;
+}
+
+static void
+gl_array_iterator_free (gl_list_iterator_t *iterator _GL_UNUSED)
+{
+}
+
+/* ---------------------- Sorted gl_list_t Data Type ---------------------- */
+
+static size_t
+gl_array_sortedlist_indexof_from_to (gl_list_t list,
+ gl_listelement_compar_fn compar,
+ size_t low, size_t high,
+ const void *elt)
+{
+ if (!(low <= high && high <= list->count))
+ /* Invalid arguments. */
+ abort ();
+ if (low < high)
+ {
+ /* At each loop iteration, low < high; for indices < low the values
+ are smaller than ELT; for indices >= high the values are greater
+ than ELT. So, if the element occurs in the list, it is at
+ low <= position < high. */
+ do
+ {
+ size_t mid = low + (high - low) / 2; /* low <= mid < high */
+ int cmp = compar (list->elements[mid], elt);
+
+ if (cmp < 0)
+ low = mid + 1;
+ else if (cmp > 0)
+ high = mid;
+ else /* cmp == 0 */
+ {
+ /* We have an element equal to ELT at index MID. But we need
+ the minimal such index. */
+ high = mid;
+ /* At each loop iteration, low <= high and
+ compar (list->elements[high], elt) == 0,
+ and we know that the first occurrence of the element is at
+ low <= position <= high. */
+ while (low < high)
+ {
+ size_t mid2 = low + (high - low) / 2; /* low <= mid2 < high */
+ int cmp2 = compar (list->elements[mid2], elt);
+
+ if (cmp2 < 0)
+ low = mid2 + 1;
+ else if (cmp2 > 0)
+ /* The list was not sorted. */
+ abort ();
+ else /* cmp2 == 0 */
+ {
+ if (mid2 == low)
+ break;
+ high = mid2 - 1;
+ }
+ }
+ return low;
+ }
+ }
+ while (low < high);
+ /* Here low == high. */
+ }
+ return (size_t)(-1);
+}
+
+static size_t
+gl_array_sortedlist_indexof (gl_list_t list, gl_listelement_compar_fn compar,
+ const void *elt)
+{
+ return gl_array_sortedlist_indexof_from_to (list, compar, 0, list->count,
+ elt);
+}
+
+static gl_list_node_t
+gl_array_sortedlist_search_from_to (gl_list_t list,
+ gl_listelement_compar_fn compar,
+ size_t low, size_t high,
+ const void *elt)
+{
+ size_t index =
+ gl_array_sortedlist_indexof_from_to (list, compar, low, high, elt);
+ return INDEX_TO_NODE (index);
+}
+
+static gl_list_node_t
+gl_array_sortedlist_search (gl_list_t list, gl_listelement_compar_fn compar,
+ const void *elt)
+{
+ size_t index =
+ gl_array_sortedlist_indexof_from_to (list, compar, 0, list->count, elt);
+ return INDEX_TO_NODE (index);
+}
+
+static gl_list_node_t
+gl_array_sortedlist_nx_add (gl_list_t list, gl_listelement_compar_fn compar,
+ const void *elt)
+{
+ size_t count = list->count;
+ size_t low = 0;
+ size_t high = count;
+
+ /* At each loop iteration, low <= high; for indices < low the values are
+ smaller than ELT; for indices >= high the values are greater than ELT. */
+ while (low < high)
+ {
+ size_t mid = low + (high - low) / 2; /* low <= mid < high */
+ int cmp = compar (list->elements[mid], elt);
+
+ if (cmp < 0)
+ low = mid + 1;
+ else if (cmp > 0)
+ high = mid;
+ else /* cmp == 0 */
+ {
+ low = mid;
+ break;
+ }
+ }
+ return gl_array_nx_add_at (list, low, elt);
+}
+
+static bool
+gl_array_sortedlist_remove (gl_list_t list, gl_listelement_compar_fn compar,
+ const void *elt)
+{
+ size_t index = gl_array_sortedlist_indexof (list, compar, elt);
+ if (index == (size_t)(-1))
+ return false;
+ else
+ return gl_array_remove_at (list, index);
+}
+
+
+const struct gl_list_implementation gl_array_list_implementation =
+ {
+ gl_array_nx_create_empty,
+ gl_array_nx_create,
+ gl_array_size,
+ gl_array_node_value,
+ gl_array_node_nx_set_value,
+ gl_array_next_node,
+ gl_array_previous_node,
+ gl_array_get_at,
+ gl_array_nx_set_at,
+ gl_array_search_from_to,
+ gl_array_indexof_from_to,
+ gl_array_nx_add_first,
+ gl_array_nx_add_last,
+ gl_array_nx_add_before,
+ gl_array_nx_add_after,
+ gl_array_nx_add_at,
+ gl_array_remove_node,
+ gl_array_remove_at,
+ gl_array_remove,
+ gl_array_list_free,
+ gl_array_iterator,
+ gl_array_iterator_from_to,
+ gl_array_iterator_next,
+ gl_array_iterator_free,
+ gl_array_sortedlist_search,
+ gl_array_sortedlist_search_from_to,
+ gl_array_sortedlist_indexof,
+ gl_array_sortedlist_indexof_from_to,
+ gl_array_sortedlist_nx_add,
+ gl_array_sortedlist_remove
+ };
diff --git a/gl/lib/gl_array_list.h b/gl/lib/gl_array_list.h
new file mode 100644
index 00000000..98158feb
--- /dev/null
+++ b/gl/lib/gl_array_list.h
@@ -0,0 +1,34 @@
+/* Sequential list data type implemented by an array.
+ Copyright (C) 2006, 2009-2019 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2006.
+
+ 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 <https://www.gnu.org/licenses/>. */
+
+#ifndef _GL_ARRAY_LIST_H
+#define _GL_ARRAY_LIST_H
+
+#include "gl_list.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern const struct gl_list_implementation gl_array_list_implementation;
+#define GL_ARRAY_LIST &gl_array_list_implementation
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _GL_ARRAY_LIST_H */
diff --git a/gl/lib/gl_hash_map.c b/gl/lib/gl_hash_map.c
new file mode 100644
index 00000000..534b472f
--- /dev/null
+++ b/gl/lib/gl_hash_map.c
@@ -0,0 +1,337 @@
+/* Map data type implemented by a hash table.
+ Copyright (C) 2006, 2008-2019 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2018.
+
+ 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 <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include "gl_hash_map.h"
+
+#include <stdint.h> /* for SIZE_MAX */
+#include <stdlib.h>
+
+#include "xsize.h"
+
+#ifndef uintptr_t
+# define uintptr_t unsigned long
+#endif
+
+/* --------------------------- gl_map_t Data Type --------------------------- */
+
+#include "gl_anyhash1.h"
+
+/* Concrete list node implementation, valid for this file only. */
+struct gl_list_node_impl
+{
+ struct gl_hash_entry h; /* hash table entry fields; must be first */
+ const void *key;
+ const void *value;
+};
+typedef struct gl_list_node_impl * gl_list_node_t;
+
+/* Concrete gl_map_impl type, valid for this file only. */
+struct gl_map_impl
+{
+ struct gl_map_impl_base base;
+ gl_mapkey_hashcode_fn hashcode_fn;
+ /* A hash table: managed as an array of collision lists. */
+ struct gl_hash_entry **table;
+ size_t table_size;
+ /* Number of hash table entries. */
+ size_t count;
+};
+
+#define CONTAINER_T gl_map_t
+#define CONTAINER_COUNT(map) (map)->count
+#include "gl_anyhash2.h"
+
+/* --------------------------- gl_map_t Data Type --------------------------- */
+
+static gl_map_t
+gl_hash_nx_create_empty (gl_map_implementation_t implementation,
+ gl_mapkey_equals_fn equals_fn,
+ gl_mapkey_hashcode_fn hashcode_fn,
+ gl_mapkey_dispose_fn kdispose_fn,
+ gl_mapvalue_dispose_fn vdispose_fn)
+{
+ struct gl_map_impl *map =
+ (struct gl_map_impl *) malloc (sizeof (struct gl_map_impl));
+
+ if (map == NULL)
+ return NULL;
+
+ map->base.vtable = implementation;
+ map->base.equals_fn = equals_fn;
+ map->base.kdispose_fn = kdispose_fn;
+ map->base.vdispose_fn = vdispose_fn;
+ map->hashcode_fn = hashcode_fn;
+ map->table_size = 11;
+ map->table =
+ (gl_hash_entry_t *) calloc (map->table_size, sizeof (gl_hash_entry_t));
+ if (map->table == NULL)
+ goto fail;
+ map->count = 0;
+
+ return map;
+
+ fail:
+ free (map);
+ return NULL;
+}
+
+static size_t _GL_ATTRIBUTE_PURE
+gl_hash_size (gl_map_t map)
+{
+ return map->count;
+}
+
+static bool _GL_ATTRIBUTE_PURE
+gl_hash_search (gl_map_t map, const void *key, const void **valuep)
+{
+ size_t hashcode =
+ (map->hashcode_fn != NULL
+ ? map->hashcode_fn (key)
+ : (size_t)(uintptr_t) key);
+ size_t bucket = hashcode % map->table_size;
+ gl_mapkey_equals_fn equals = map->base.equals_fn;
+
+ /* Look for a match in the hash bucket. */
+ gl_list_node_t node;
+
+ for (node = (gl_list_node_t) map->table[bucket];
+ node != NULL;
+ node = (gl_list_node_t) node->h.hash_next)
+ if (node->h.hashcode == hashcode
+ && (equals != NULL
+ ? equals (key, node->key)
+ : key == node->key))
+ {
+ *valuep = node->value;
+ return true;
+ }
+ return false;
+}
+
+static int
+gl_hash_nx_getput (gl_map_t map, const void *key, const void *value,
+ const void **oldvaluep)
+{
+ size_t hashcode =
+ (map->hashcode_fn != NULL
+ ? map->hashcode_fn (key)
+ : (size_t)(uintptr_t) key);
+ size_t bucket = hashcode % map->table_size;
+ gl_mapkey_equals_fn equals = map->base.equals_fn;
+
+ /* Look for a match in the hash bucket. */
+ {
+ gl_list_node_t node;
+
+ for (node = (gl_list_node_t) map->table[bucket];
+ node != NULL;
+ node = (gl_list_node_t) node->h.hash_next)
+ if (node->h.hashcode == hashcode
+ && (equals != NULL
+ ? equals (key, node->key)
+ : key == node->key))
+ {
+ *oldvaluep = node->value;
+ node->value = value;
+ return 0;
+ }
+ }
+
+ /* Allocate a new node. */
+ gl_list_node_t node =
+ (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl));
+
+ if (node == NULL)
+ return -1;
+
+ node->key = key;
+ node->value = value;
+ node->h.hashcode = hashcode;
+
+ /* Add node to the hash table. */
+ node->h.hash_next = map->table[bucket];
+ map->table[bucket] = &node->h;
+
+ /* Add node to the map. */
+ map->count++;
+
+ hash_resize_after_add (map);
+
+ return 1;
+}
+
+static bool
+gl_hash_getremove (gl_map_t map, const void *key, const void **oldvaluep)
+{
+ size_t hashcode =
+ (map->hashcode_fn != NULL
+ ? map->hashcode_fn (key)
+ : (size_t)(uintptr_t) key);
+ size_t bucket = hashcode % map->table_size;
+ gl_mapkey_equals_fn equals = map->base.equals_fn;
+
+ /* Look for the first match in the hash bucket. */
+ gl_list_node_t *nodep;
+
+ for (nodep = (gl_list_node_t *) &map->table[bucket];
+ *nodep != NULL;
+ nodep = (gl_list_node_t *) &(*nodep)->h.hash_next)
+ {
+ gl_list_node_t node = *nodep;
+ if (node->h.hashcode == hashcode
+ && (equals != NULL
+ ? equals (key, node->key)
+ : key == node->key))
+ {
+ *oldvaluep = node->value;
+
+ /* Remove node from the hash table. */
+ *nodep = (gl_list_node_t) node->h.hash_next;
+
+ /* Remove node from the map. */
+ map->count--;
+
+ if (map->base.kdispose_fn != NULL)
+ map->base.kdispose_fn (node->key);
+ free (node);
+ return true;
+ }
+ }
+
+ return false;
+}
+
+static void
+gl_hash_free (gl_map_t map)
+{
+ if (map->count > 0)
+ {
+ gl_mapkey_dispose_fn kdispose = map->base.kdispose_fn;
+ gl_mapvalue_dispose_fn vdispose = map->base.vdispose_fn;
+ struct gl_hash_entry **table = map->table;
+ size_t i;
+
+ for (i = map->table_size; i > 0; )
+ {
+ gl_hash_entry_t node = table[--i];
+
+ while (node != NULL)
+ {
+ gl_hash_entry_t next = node->hash_next;
+
+ /* Free the entry. */
+ if (vdispose != NULL)
+ vdispose (((gl_list_node_t) node)->value);
+ if (kdispose != NULL)
+ kdispose (((gl_list_node_t) node)->key);
+ free (node);
+
+ node = next;
+ }
+ }
+ }
+
+ free (map->table);
+ free (map);
+}
+
+/* ---------------------- gl_map_iterator_t Data Type ---------------------- */
+
+/* Here we iterate through the hash buckets. Therefore the order in which the
+ pairs are returned is unpredictable. */
+
+static gl_map_iterator_t
+gl_hash_iterator (gl_map_t map)
+{
+ gl_map_iterator_t result;
+
+ result.vtable = map->base.vtable;
+ result.map = map;
+ result.p = NULL; /* runs through the nodes of a bucket */
+ result.i = 0; /* index of the bucket that p points into + 1 */
+ result.j = map->table_size;
+#if defined GCC_LINT || defined lint
+ result.q = NULL;
+ result.count = 0;
+#endif
+
+ return result;
+}
+
+static bool
+gl_hash_iterator_next (gl_map_iterator_t *iterator,
+ const void **keyp, const void **valuep)
+{
+ if (iterator->p != NULL)
+ {
+ /* We're traversing a bucket. */
+ gl_list_node_t node = (gl_list_node_t) iterator->p;
+ *keyp = node->key;
+ *valuep = node->value;
+ iterator->p = (gl_list_node_t) node->h.hash_next;
+ return true;
+ }
+ else
+ {
+ /* Find the next bucket that is not empty. */
+ size_t j = iterator->j;
+ size_t i = iterator->i;
+
+ if (i < j)
+ {
+ gl_hash_entry_t *table = iterator->map->table;
+ do
+ {
+ gl_list_node_t node = (gl_list_node_t) table[i++];
+ if (node != NULL)
+ {
+ *keyp = node->key;
+ *valuep = node->value;
+ iterator->p = (gl_list_node_t) node->h.hash_next;
+ iterator->i = i;
+ return true;
+ }
+ }
+ while (i < j);
+ }
+ /* Here iterator->p is still NULL, and i == j. */
+ iterator->i = j;
+ return false;
+ }
+}
+
+static void
+gl_hash_iterator_free (gl_map_iterator_t *iterator)
+{
+}
+
+
+const struct gl_map_implementation gl_hash_map_implementation =
+ {
+ gl_hash_nx_create_empty,
+ gl_hash_size,
+ gl_hash_search,
+ gl_hash_nx_getput,
+ gl_hash_getremove,
+ gl_hash_free,
+ gl_hash_iterator,
+ gl_hash_iterator_next,
+ gl_hash_iterator_free
+ };
diff --git a/gl/lib/gl_hash_map.h b/gl/lib/gl_hash_map.h
new file mode 100644
index 00000000..9f539f93
--- /dev/null
+++ b/gl/lib/gl_hash_map.h
@@ -0,0 +1,34 @@
+/* Map data type implemented by a hash table.
+ Copyright (C) 2006, 2009-2019 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2018.
+
+ 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 <https://www.gnu.org/licenses/>. */
+
+#ifndef _GL_HASH_MAP_H
+#define _GL_HASH_MAP_H
+
+#include "gl_map.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern const struct gl_map_implementation gl_hash_map_implementation;
+#define GL_HASH_MAP &gl_hash_map_implementation
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _GL_HASH_MAP_H */
diff --git a/gl/lib/gl_hash_set.c b/gl/lib/gl_hash_set.c
new file mode 100644
index 00000000..303d1375
--- /dev/null
+++ b/gl/lib/gl_hash_set.c
@@ -0,0 +1,317 @@
+/* Set data type implemented by a hash table.
+ Copyright (C) 2006, 2008-2019 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2018.
+
+ 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 <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include "gl_hash_set.h"
+
+#include <stdint.h> /* for SIZE_MAX */
+#include <stdlib.h>
+
+#include "xsize.h"
+
+#ifndef uintptr_t
+# define uintptr_t unsigned long
+#endif
+
+/* --------------------------- gl_set_t Data Type --------------------------- */
+
+#include "gl_anyhash1.h"
+
+/* Concrete list node implementation, valid for this file only. */
+struct gl_list_node_impl
+{
+ struct gl_hash_entry h; /* hash table entry fields; must be first */
+ const void *value;
+};
+typedef struct gl_list_node_impl * gl_list_node_t;
+
+/* Concrete gl_set_impl type, valid for this file only. */
+struct gl_set_impl
+{
+ struct gl_set_impl_base base;
+ gl_setelement_hashcode_fn hashcode_fn;
+ /* A hash table: managed as an array of collision lists. */
+ struct gl_hash_entry **table;
+ size_t table_size;
+ /* Number of hash table entries. */
+ size_t count;
+};
+
+#define CONTAINER_T gl_set_t
+#define CONTAINER_COUNT(set) (set)->count
+#include "gl_anyhash2.h"
+
+/* --------------------------- gl_set_t Data Type --------------------------- */
+
+static gl_set_t
+gl_hash_nx_create_empty (gl_set_implementation_t implementation,
+ gl_setelement_equals_fn equals_fn,
+ gl_setelement_hashcode_fn hashcode_fn,
+ gl_setelement_dispose_fn dispose_fn)
+{
+ struct gl_set_impl *set =
+ (struct gl_set_impl *) malloc (sizeof (struct gl_set_impl));
+
+ if (set == NULL)
+ return NULL;
+
+ set->base.vtable = implementation;
+ set->base.equals_fn = equals_fn;
+ set->base.dispose_fn = dispose_fn;
+ set->hashcode_fn = hashcode_fn;
+ set->table_size = 11;
+ set->table =
+ (gl_hash_entry_t *) calloc (set->table_size, sizeof (gl_hash_entry_t));
+ if (set->table == NULL)
+ goto fail;
+ set->count = 0;
+
+ return set;
+
+ fail:
+ free (set);
+ return NULL;
+}
+
+static size_t _GL_ATTRIBUTE_PURE
+gl_hash_size (gl_set_t set)
+{
+ return set->count;
+}
+
+static bool _GL_ATTRIBUTE_PURE
+gl_hash_search (gl_set_t set, const void *elt)
+{
+ size_t hashcode =
+ (set->hashcode_fn != NULL
+ ? set->hashcode_fn (elt)
+ : (size_t)(uintptr_t) elt);
+ size_t bucket = hashcode % set->table_size;
+ gl_setelement_equals_fn equals = set->base.equals_fn;
+
+ /* Look for a match in the hash bucket. */
+ gl_list_node_t node;
+
+ for (node = (gl_list_node_t) set->table[bucket];
+ node != NULL;
+ node = (gl_list_node_t) node->h.hash_next)
+ if (node->h.hashcode == hashcode
+ && (equals != NULL
+ ? equals (elt, node->value)
+ : elt == node->value))
+ return true;
+ return false;
+}
+
+static int
+gl_hash_nx_add (gl_set_t set, const void *elt)
+{
+ size_t hashcode =
+ (set->hashcode_fn != NULL
+ ? set->hashcode_fn (elt)
+ : (size_t)(uintptr_t) elt);
+ size_t bucket = hashcode % set->table_size;
+ gl_setelement_equals_fn equals = set->base.equals_fn;
+
+ /* Look for a match in the hash bucket. */
+ {
+ gl_list_node_t node;
+
+ for (node = (gl_list_node_t) set->table[bucket];
+ node != NULL;
+ node = (gl_list_node_t) node->h.hash_next)
+ if (node->h.hashcode == hashcode
+ && (equals != NULL
+ ? equals (elt, node->value)
+ : elt == node->value))
+ return 0;
+ }
+
+ /* Allocate a new node. */
+ gl_list_node_t node =
+ (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl));
+
+ if (node == NULL)
+ return -1;
+
+ node->value = elt;
+ node->h.hashcode = hashcode;
+
+ /* Add node to the hash table. */
+ node->h.hash_next = set->table[bucket];
+ set->table[bucket] = &node->h;
+
+ /* Add node to the set. */
+ set->count++;
+
+ hash_resize_after_add (set);
+
+ return 1;
+}
+
+static bool
+gl_hash_remove (gl_set_t set, const void *elt)
+{
+ size_t hashcode =
+ (set->hashcode_fn != NULL
+ ? set->hashcode_fn (elt)
+ : (size_t)(uintptr_t) elt);
+ size_t bucket = hashcode % set->table_size;
+ gl_setelement_equals_fn equals = set->base.equals_fn;
+
+ /* Look for the first match in the hash bucket. */
+ gl_list_node_t *nodep;
+
+ for (nodep = (gl_list_node_t *) &set->table[bucket];
+ *nodep != NULL;
+ nodep = (gl_list_node_t *) &(*nodep)->h.hash_next)
+ {
+ gl_list_node_t node = *nodep;
+ if (node->h.hashcode == hashcode
+ && (equals != NULL
+ ? equals (elt, node->value)
+ : elt == node->value))
+ {
+ /* Remove node from the hash table. */
+ *nodep = (gl_list_node_t) node->h.hash_next;
+
+ /* Remove node from the set. */
+ set->count--;
+
+ if (set->base.dispose_fn != NULL)
+ set->base.dispose_fn (node->value);
+ free (node);
+ return true;
+ }
+ }
+
+ return false;
+}
+
+static void
+gl_hash_free (gl_set_t set)
+{
+ if (set->count > 0)
+ {
+ gl_setelement_dispose_fn dispose = set->base.dispose_fn;
+ struct gl_hash_entry **table = set->table;
+ size_t i;
+
+ for (i = set->table_size; i > 0; )
+ {
+ gl_hash_entry_t node = table[--i];
+
+ while (node != NULL)
+ {
+ gl_hash_entry_t next = node->hash_next;
+
+ /* Free the entry. */
+ if (dispose != NULL)
+ dispose (((gl_list_node_t) node)->value);
+ free (node);
+
+ node = next;
+ }
+ }
+ }
+
+ free (set->table);
+ free (set);
+}
+
+/* ---------------------- gl_set_iterator_t Data Type ---------------------- */
+
+/* Here we iterate through the hash buckets. Therefore the order in which the
+ elements are returned is unpredictable. */
+
+static gl_set_iterator_t
+gl_hash_iterator (gl_set_t set)
+{
+ gl_set_iterator_t result;
+
+ result.vtable = set->base.vtable;
+ result.set = set;
+ result.p = NULL; /* runs through the nodes of a bucket */
+ result.i = 0; /* index of the bucket that p points into + 1 */
+ result.j = set->table_size;
+#if defined GCC_LINT || defined lint
+ result.q = NULL;
+ result.count = 0;
+#endif
+
+ return result;
+}
+
+static bool
+gl_hash_iterator_next (gl_set_iterator_t *iterator, const void **eltp)
+{
+ if (iterator->p != NULL)
+ {
+ /* We're traversing a bucket. */
+ gl_list_node_t node = (gl_list_node_t) iterator->p;
+ *eltp = node->value;
+ iterator->p = (gl_list_node_t) node->h.hash_next;
+ return true;
+ }
+ else
+ {
+ /* Find the next bucket that is not empty. */
+ size_t j = iterator->j;
+ size_t i = iterator->i;
+
+ if (i < j)
+ {
+ gl_hash_entry_t *table = iterator->set->table;
+ do
+ {
+ gl_list_node_t node = (gl_list_node_t) table[i++];
+ if (node != NULL)
+ {
+ *eltp = node->value;
+ iterator->p = (gl_list_node_t) node->h.hash_next;
+ iterator->i = i;
+ return true;
+ }
+ }
+ while (i < j);
+ }
+ /* Here iterator->p is still NULL, and i == j. */
+ iterator->i = j;
+ return false;
+ }
+}
+
+static void
+gl_hash_iterator_free (gl_set_iterator_t *iterator)
+{
+}
+
+
+const struct gl_set_implementation gl_hash_set_implementation =
+ {
+ gl_hash_nx_create_empty,
+ gl_hash_size,
+ gl_hash_search,
+ gl_hash_nx_add,
+ gl_hash_remove,
+ gl_hash_free,
+ gl_hash_iterator,
+ gl_hash_iterator_next,
+ gl_hash_iterator_free
+ };
diff --git a/gl/lib/gl_hash_set.h b/gl/lib/gl_hash_set.h
new file mode 100644
index 00000000..b59aaa58
--- /dev/null
+++ b/gl/lib/gl_hash_set.h
@@ -0,0 +1,34 @@
+/* Set data type implemented by a hash table.
+ Copyright (C) 2006, 2009-2019 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2018.
+
+ 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 <https://www.gnu.org/licenses/>. */
+
+#ifndef _GL_HASH_SET_H
+#define _GL_HASH_SET_H
+
+#include "gl_set.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern const struct gl_set_implementation gl_hash_set_implementation;
+#define GL_HASH_SET &gl_hash_set_implementation
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _GL_HASH_SET_H */
diff --git a/gl/lib/gl_linkedhash_list.c b/gl/lib/gl_linkedhash_list.c
new file mode 100644
index 00000000..efe4996b
--- /dev/null
+++ b/gl/lib/gl_linkedhash_list.c
@@ -0,0 +1,116 @@
+/* Sequential list data type implemented by a hash table with a linked list.
+ Copyright (C) 2006, 2008-2019 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2006.
+
+ 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 <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include "gl_linkedhash_list.h"
+
+#include <stdint.h> /* for SIZE_MAX */
+#include <stdlib.h>
+
+#include "xsize.h"
+
+#ifndef uintptr_t
+# define uintptr_t unsigned long
+#endif
+
+#define WITH_HASHTABLE 1
+
+/* -------------------------- gl_list_t Data Type -------------------------- */
+
+/* Generic hash-table code. */
+#include "gl_anyhash1.h"
+
+/* Generic linked list code. */
+#include "gl_anylinked_list1.h"
+
+/* Generic hash-table code. */
+#define CONTAINER_T gl_list_t
+#define CONTAINER_COUNT(list) (list)->count
+#include "gl_anyhash2.h"
+
+/* Add a node to the hash table structure. */
+static void
+add_to_bucket (gl_list_t list, gl_list_node_t node)
+{
+ size_t bucket = node->h.hashcode % list->table_size;
+
+ node->h.hash_next = list->table[bucket];
+ list->table[bucket] = &node->h;
+}
+/* Tell all compilers that the return value is 0. */
+#define add_to_bucket(list,node) ((add_to_bucket) (list, node), 0)
+
+/* Remove a node from the hash table structure. */
+static void
+remove_from_bucket (gl_list_t list, gl_list_node_t node)
+{
+ size_t bucket = node->h.hashcode % list->table_size;
+ gl_hash_entry_t *p;
+
+ for (p = &list->table[bucket]; ; p = &(*p)->hash_next)
+ {
+ if (*p == &node->h)
+ {
+ *p = node->h.hash_next;
+ break;
+ }
+ if (*p == NULL)
+ /* node is not in the right bucket. Did the hash codes
+ change inadvertently? */
+ abort ();
+ }
+}
+
+/* Generic linked list code. */
+#include "gl_anylinked_list2.h"
+
+
+const struct gl_list_implementation gl_linkedhash_list_implementation =
+ {
+ gl_linked_nx_create_empty,
+ gl_linked_nx_create,
+ gl_linked_size,
+ gl_linked_node_value,
+ gl_linked_node_nx_set_value,
+ gl_linked_next_node,
+ gl_linked_previous_node,
+ gl_linked_get_at,
+ gl_linked_nx_set_at,
+ gl_linked_search_from_to,
+ gl_linked_indexof_from_to,
+ gl_linked_nx_add_first,
+ gl_linked_nx_add_last,
+ gl_linked_nx_add_before,
+ gl_linked_nx_add_after,
+ gl_linked_nx_add_at,
+ gl_linked_remove_node,
+ gl_linked_remove_at,
+ gl_linked_remove,
+ gl_linked_list_free,
+ gl_linked_iterator,
+ gl_linked_iterator_from_to,
+ gl_linked_iterator_next,
+ gl_linked_iterator_free,
+ gl_linked_sortedlist_search,
+ gl_linked_sortedlist_search_from_to,
+ gl_linked_sortedlist_indexof,
+ gl_linked_sortedlist_indexof_from_to,
+ gl_linked_sortedlist_nx_add,
+ gl_linked_sortedlist_remove
+ };
diff --git a/gl/lib/gl_linkedhash_list.h b/gl/lib/gl_linkedhash_list.h
new file mode 100644
index 00000000..3477f32b
--- /dev/null
+++ b/gl/lib/gl_linkedhash_list.h
@@ -0,0 +1,34 @@
+/* Sequential list data type implemented by a hash table with a linked list.
+ Copyright (C) 2006, 2009-2019 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2006.
+
+ 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 <https://www.gnu.org/licenses/>. */
+
+#ifndef _GL_LINKEDHASH_LIST_H
+#define _GL_LINKEDHASH_LIST_H
+
+#include "gl_list.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern const struct gl_list_implementation gl_linkedhash_list_implementation;
+#define GL_LINKEDHASH_LIST &gl_linkedhash_list_implementation
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _GL_LINKEDHASH_LIST_H */
diff --git a/gl/lib/gl_list.c b/gl/lib/gl_list.c
new file mode 100644
index 00000000..87932980
--- /dev/null
+++ b/gl/lib/gl_list.c
@@ -0,0 +1,3 @@
+#include <config.h>
+#define GL_LIST_INLINE _GL_EXTERN_INLINE
+#include "gl_list.h"
diff --git a/gl/lib/gl_list.h b/gl/lib/gl_list.h
new file mode 100644
index 00000000..5f2cade2
--- /dev/null
+++ b/gl/lib/gl_list.h
@@ -0,0 +1,843 @@
+/* Abstract sequential list data type. -*- coding: utf-8 -*-
+ Copyright (C) 2006-2019 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2006.
+
+ 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 <https://www.gnu.org/licenses/>. */
+
+#ifndef _GL_LIST_H
+#define _GL_LIST_H
+
+#include <stdbool.h>
+#include <stddef.h>
+
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
+_GL_INLINE_HEADER_BEGIN
+#ifndef GL_LIST_INLINE
+# define GL_LIST_INLINE _GL_INLINE
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* gl_list is an abstract list data type. It can contain any number of
+ objects ('void *' or 'const void *' pointers) in any given order.
+ Duplicates are allowed, but can optionally be forbidden.
+
+ There are several implementations of this list datatype, optimized for
+ different operations or for memory. You can start using the simplest list
+ implementation, GL_ARRAY_LIST, and switch to a different implementation
+ later, when you realize which operations are performed the most frequently.
+ The API of the different implementations is exactly the same; when
+ switching to a different implementation, you only have to change the
+ gl_list_create call.
+
+ The implementations are:
+ GL_ARRAY_LIST a growable array
+ GL_CARRAY_LIST a growable circular array
+ GL_LINKED_LIST a linked list
+ GL_AVLTREE_LIST a binary tree (AVL tree)
+ GL_RBTREE_LIST a binary tree (red-black tree)
+ GL_LINKEDHASH_LIST a hash table with a linked list
+ GL_AVLTREEHASH_LIST a hash table with a binary tree (AVL tree)
+ GL_RBTREEHASH_LIST a hash table with a binary tree (red-black tree)
+
+ The memory consumption is asymptotically the same: O(1) for every object
+ in the list. When looking more closely at the average memory consumed
+ for an object, GL_ARRAY_LIST is the most compact representation, and
+ GL_LINKEDHASH_LIST and GL_TREEHASH_LIST need more memory.
+
+ The guaranteed average performance of the operations is, for a list of
+ n elements:
+
+ Operation ARRAY LINKED TREE LINKEDHASH TREEHASH
+ CARRAY with|without with|without
+ duplicates duplicates
+
+ gl_list_size O(1) O(1) O(1) O(1) O(1)
+ gl_list_node_value O(1) O(1) O(1) O(1) O(1)
+ gl_list_node_set_value O(1) O(1) O(1) O(1) O((log n)²)/O(1)
+ gl_list_next_node O(1) O(1) O(log n) O(1) O(log n)
+ gl_list_previous_node O(1) O(1) O(log n) O(1) O(log n)
+ gl_list_get_at O(1) O(n) O(log n) O(n) O(log n)
+ gl_list_set_at O(1) O(n) O(log n) O(n) O((log n)²)/O(log n)
+ gl_list_search O(n) O(n) O(n) O(n)/O(1) O(log n)/O(1)
+ gl_list_search_from O(n) O(n) O(n) O(n)/O(1) O((log n)²)/O(log n)
+ gl_list_search_from_to O(n) O(n) O(n) O(n)/O(1) O((log n)²)/O(log n)
+ gl_list_indexof O(n) O(n) O(n) O(n) O(log n)
+ gl_list_indexof_from O(n) O(n) O(n) O(n) O((log n)²)/O(log n)
+ gl_list_indexof_from_to O(n) O(n) O(n) O(n) O((log n)²)/O(log n)
+ gl_list_add_first O(n)/O(1) O(1) O(log n) O(1) O((log n)²)/O(log n)
+ gl_list_add_last O(1) O(1) O(log n) O(1) O((log n)²)/O(log n)
+ gl_list_add_before O(n) O(1) O(log n) O(1) O((log n)²)/O(log n)
+ gl_list_add_after O(n) O(1) O(log n) O(1) O((log n)²)/O(log n)
+ gl_list_add_at O(n) O(n) O(log n) O(n) O((log n)²)/O(log n)
+ gl_list_remove_node O(n) O(1) O(log n) O(n)/O(1) O((log n)²)/O(log n)
+ gl_list_remove_at O(n) O(n) O(log n) O(n) O((log n)²)/O(log n)
+ gl_list_remove O(n) O(n) O(n) O(n)/O(1) O((log n)²)/O(log n)
+ gl_list_iterator O(1) O(1) O(log n) O(1) O(log n)
+ gl_list_iterator_from_to O(1) O(n) O(log n) O(n) O(log n)
+ gl_list_iterator_next O(1) O(1) O(log n) O(1) O(log n)
+ gl_sortedlist_search O(log n) O(n) O(log n) O(n) O(log n)
+ gl_sortedlist_search_from O(log n) O(n) O(log n) O(n) O(log n)
+ gl_sortedlist_indexof O(log n) O(n) O(log n) O(n) O(log n)
+ gl_sortedlist_indexof_fro O(log n) O(n) O(log n) O(n) O(log n)
+ gl_sortedlist_add O(n) O(n) O(log n) O(n) O((log n)²)/O(log n)
+ gl_sortedlist_remove O(n) O(n) O(log n) O(n) O((log n)²)/O(log n)
+ */
+
+/* -------------------------- gl_list_t Data Type -------------------------- */
+
+/* Type of function used to compare two elements.
+ NULL denotes pointer comparison. */
+typedef bool (*gl_listelement_equals_fn) (const void *elt1, const void *elt2);
+
+/* Type of function used to compute a hash code.
+ NULL denotes a function that depends only on the pointer itself. */
+typedef size_t (*gl_listelement_hashcode_fn) (const void *elt);
+
+/* Type of function used to dispose an element once it's removed from a list.
+ NULL denotes a no-op. */
+typedef void (*gl_listelement_dispose_fn) (const void *elt);
+
+struct gl_list_impl;
+/* Type representing an entire list. */
+typedef struct gl_list_impl * gl_list_t;
+
+struct gl_list_node_impl;
+/* Type representing the position of an element in the list, in a way that
+ is more adapted to the list implementation than a plain index.
+ Note: It is invalidated by insertions and removals! */
+typedef struct gl_list_node_impl * gl_list_node_t;
+
+struct gl_list_implementation;
+/* Type representing a list datatype implementation. */
+typedef const struct gl_list_implementation * gl_list_implementation_t;
+
+#if 0 /* Unless otherwise specified, these are defined inline below. */
+
+/* Create an empty list.
+ IMPLEMENTATION is one of GL_ARRAY_LIST, GL_CARRAY_LIST, GL_LINKED_LIST,
+ GL_AVLTREE_LIST, GL_RBTREE_LIST, GL_LINKEDHASH_LIST, GL_AVLTREEHASH_LIST,
+ GL_RBTREEHASH_LIST.
+ EQUALS_FN is an element comparison function or NULL.
+ HASHCODE_FN is an element hash code function or NULL.
+ DISPOSE_FN is an element disposal function or NULL.
+ ALLOW_DUPLICATES is false if duplicate elements shall not be allowed in
+ the list. The implementation may verify this at runtime. */
+/* declared in gl_xlist.h */
+extern gl_list_t gl_list_create_empty (gl_list_implementation_t implementation,
+ gl_listelement_equals_fn equals_fn,
+ gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
+ bool allow_duplicates);
+/* Likewise. Return NULL upon out-of-memory. */
+extern gl_list_t gl_list_nx_create_empty (gl_list_implementation_t implementation,
+ gl_listelement_equals_fn equals_fn,
+ gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
+ bool allow_duplicates);
+
+/* Create a list with given contents.
+ IMPLEMENTATION is one of GL_ARRAY_LIST, GL_CARRAY_LIST, GL_LINKED_LIST,
+ GL_AVLTREE_LIST, GL_RBTREE_LIST, GL_LINKEDHASH_LIST, GL_AVLTREEHASH_LIST,
+ GL_RBTREEHASH_LIST.
+ EQUALS_FN is an element comparison function or NULL.
+ HASHCODE_FN is an element hash code function or NULL.
+ DISPOSE_FN is an element disposal function or NULL.
+ ALLOW_DUPLICATES is false if duplicate elements shall not be allowed in
+ the list. The implementation may verify this at runtime.
+ COUNT is the number of initial elements.
+ CONTENTS[0..COUNT-1] is the initial contents. */
+/* declared in gl_xlist.h */
+extern gl_list_t gl_list_create (gl_list_implementation_t implementation,
+ gl_listelement_equals_fn equals_fn,
+ gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
+ bool allow_duplicates,
+ size_t count, const void **contents);
+/* Likewise. Return NULL upon out-of-memory. */
+extern gl_list_t gl_list_nx_create (gl_list_implementation_t implementation,
+ gl_listelement_equals_fn equals_fn,
+ gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
+ bool allow_duplicates,
+ size_t count, const void **contents);
+
+/* Return the current number of elements in a list. */
+extern size_t gl_list_size (gl_list_t list);
+
+/* Return the element value represented by a list node. */
+extern const void * gl_list_node_value (gl_list_t list, gl_list_node_t node);
+
+/* Replace the element value represented by a list node. */
+/* declared in gl_xlist.h */
+extern void gl_list_node_set_value (gl_list_t list, gl_list_node_t node,
+ const void *elt);
+/* Likewise. Return 0 upon success, -1 upon out-of-memory. */
+extern int gl_list_node_nx_set_value (gl_list_t list, gl_list_node_t node,
+ const void *elt)
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+ __attribute__ ((__warn_unused_result__))
+#endif
+ ;
+
+/* Return the node immediately after the given node in the list, or NULL
+ if the given node is the last (rightmost) one in the list. */
+extern gl_list_node_t gl_list_next_node (gl_list_t list, gl_list_node_t node);
+
+/* Return the node immediately before the given node in the list, or NULL
+ if the given node is the first (leftmost) one in the list. */
+extern gl_list_node_t gl_list_previous_node (gl_list_t list, gl_list_node_t node);
+
+/* Return the element at a given position in the list.
+ POSITION must be >= 0 and < gl_list_size (list). */
+extern const void * gl_list_get_at (gl_list_t list, size_t position);
+
+/* Replace the element at a given position in the list.
+ POSITION must be >= 0 and < gl_list_size (list).
+ Return its node. */
+/* declared in gl_xlist.h */
+extern gl_list_node_t gl_list_set_at (gl_list_t list, size_t position,
+ const void *elt);
+/* Likewise. Return NULL upon out-of-memory. */
+extern gl_list_node_t gl_list_nx_set_at (gl_list_t list, size_t position,
+ const void *elt)
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+ __attribute__ ((__warn_unused_result__))
+#endif
+ ;
+
+/* Search whether an element is already in the list.
+ Return its node if found, or NULL if not present in the list. */
+extern gl_list_node_t gl_list_search (gl_list_t list, const void *elt);
+
+/* Search whether an element is already in the list,
+ at a position >= START_INDEX.
+ Return its node if found, or NULL if not present in the list. */
+extern gl_list_node_t gl_list_search_from (gl_list_t list, size_t start_index,
+ const void *elt);
+
+/* Search whether an element is already in the list,
+ at a position >= START_INDEX and < END_INDEX.
+ Return its node if found, or NULL if not present in the list. */
+extern gl_list_node_t gl_list_search_from_to (gl_list_t list,
+ size_t start_index,
+ size_t end_index,
+ const void *elt);
+
+/* Search whether an element is already in the list.
+ Return its position if found, or (size_t)(-1) if not present in the list. */
+extern size_t gl_list_indexof (gl_list_t list, const void *elt);
+
+/* Search whether an element is already in the list,
+ at a position >= START_INDEX.
+ Return its position if found, or (size_t)(-1) if not present in the list. */
+extern size_t gl_list_indexof_from (gl_list_t list, size_t start_index,
+ const void *elt);
+
+/* Search whether an element is already in the list,
+ at a position >= START_INDEX and < END_INDEX.
+ Return its position if found, or (size_t)(-1) if not present in the list. */
+extern size_t gl_list_indexof_from_to (gl_list_t list,
+ size_t start_index, size_t end_index,
+ const void *elt);
+
+/* Add an element as the first element of the list.
+ Return its node. */
+/* declared in gl_xlist.h */
+extern gl_list_node_t gl_list_add_first (gl_list_t list, const void *elt);
+/* Likewise. Return NULL upon out-of-memory. */
+extern gl_list_node_t gl_list_nx_add_first (gl_list_t list, const void *elt)
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+ __attribute__ ((__warn_unused_result__))
+#endif
+ ;
+
+/* Add an element as the last element of the list.
+ Return its node. */
+/* declared in gl_xlist.h */
+extern gl_list_node_t gl_list_add_last (gl_list_t list, const void *elt);
+/* Likewise. Return NULL upon out-of-memory. */
+extern gl_list_node_t gl_list_nx_add_last (gl_list_t list, const void *elt)
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+ __attribute__ ((__warn_unused_result__))
+#endif
+ ;
+
+/* Add an element before a given element node of the list.
+ Return its node. */
+/* declared in gl_xlist.h */
+extern gl_list_node_t gl_list_add_before (gl_list_t list, gl_list_node_t node,
+ const void *elt);
+/* Likewise. Return NULL upon out-of-memory. */
+extern gl_list_node_t gl_list_nx_add_before (gl_list_t list,
+ gl_list_node_t node,
+ const void *elt)
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+ __attribute__ ((__warn_unused_result__))
+#endif
+ ;
+
+/* Add an element after a given element node of the list.
+ Return its node. */
+/* declared in gl_xlist.h */
+extern gl_list_node_t gl_list_add_after (gl_list_t list, gl_list_node_t node,
+ const void *elt);
+/* Likewise. Return NULL upon out-of-memory. */
+extern gl_list_node_t gl_list_nx_add_after (gl_list_t list, gl_list_node_t node,
+ const void *elt)
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+ __attribute__ ((__warn_unused_result__))
+#endif
+ ;
+
+/* Add an element at a given position in the list.
+ POSITION must be >= 0 and <= gl_list_size (list). */
+/* declared in gl_xlist.h */
+extern gl_list_node_t gl_list_add_at (gl_list_t list, size_t position,
+ const void *elt);
+/* Likewise. Return NULL upon out-of-memory. */
+extern gl_list_node_t gl_list_nx_add_at (gl_list_t list, size_t position,
+ const void *elt)
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+ __attribute__ ((__warn_unused_result__))
+#endif
+ ;
+
+/* Remove an element from the list.
+ Return true. */
+extern bool gl_list_remove_node (gl_list_t list, gl_list_node_t node);
+
+/* Remove an element at a given position from the list.
+ POSITION must be >= 0 and < gl_list_size (list).
+ Return true. */
+extern bool gl_list_remove_at (gl_list_t list, size_t position);
+
+/* Search and remove an element from the list.
+ Return true if it was found and removed. */
+extern bool gl_list_remove (gl_list_t list, const void *elt);
+
+/* Free an entire list.
+ (But this call does not free the elements of the list. It only invokes
+ the DISPOSE_FN on each of the elements of the list, and only if the list
+ is not a sublist.) */
+extern void gl_list_free (gl_list_t list);
+
+#endif /* End of inline and gl_xlist.h-defined functions. */
+
+/* --------------------- gl_list_iterator_t Data Type --------------------- */
+
+/* Functions for iterating through a list. */
+
+/* Type of an iterator that traverses a list.
+ This is a fixed-size struct, so that creation of an iterator doesn't need
+ memory allocation on the heap. */
+typedef struct
+{
+ /* For fast dispatch of gl_list_iterator_next. */
+ const struct gl_list_implementation *vtable;
+ /* For detecting whether the last returned element was removed. */
+ gl_list_t list;
+ size_t count;
+ /* Other, implementation-private fields. */
+ void *p; void *q;
+ size_t i; size_t j;
+} gl_list_iterator_t;
+
+#if 0 /* These are defined inline below. */
+
+/* Create an iterator traversing a list.
+ The list contents must not be modified while the iterator is in use,
+ except for replacing or removing the last returned element. */
+extern gl_list_iterator_t gl_list_iterator (gl_list_t list);
+
+/* Create an iterator traversing the element with indices i,
+ start_index <= i < end_index, of a list.
+ The list contents must not be modified while the iterator is in use,
+ except for replacing or removing the last returned element. */
+extern gl_list_iterator_t gl_list_iterator_from_to (gl_list_t list,
+ size_t start_index,
+ size_t end_index);
+
+/* If there is a next element, store the next element in *ELTP, store its
+ node in *NODEP if NODEP is non-NULL, advance the iterator and return true.
+ Otherwise, return false. */
+extern bool gl_list_iterator_next (gl_list_iterator_t *iterator,
+ const void **eltp, gl_list_node_t *nodep);
+
+/* Free an iterator. */
+extern void gl_list_iterator_free (gl_list_iterator_t *iterator);
+
+#endif /* End of inline functions. */
+
+/* ---------------------- Sorted gl_list_t Data Type ---------------------- */
+
+/* The following functions are for lists without duplicates where the
+ order is given by a sort criterion. */
+
+/* Type of function used to compare two elements. Same as for qsort().
+ NULL denotes pointer comparison. */
+typedef int (*gl_listelement_compar_fn) (const void *elt1, const void *elt2);
+
+#if 0 /* Unless otherwise specified, these are defined inline below. */
+
+/* Search whether an element is already in the list.
+ The list is assumed to be sorted with COMPAR.
+ Return its node if found, or NULL if not present in the list.
+ If the list contains several copies of ELT, the node of the leftmost one is
+ returned. */
+extern gl_list_node_t gl_sortedlist_search (gl_list_t list,
+ gl_listelement_compar_fn compar,
+ const void *elt);
+
+/* Search whether an element is already in the list.
+ The list is assumed to be sorted with COMPAR.
+ Only list elements with indices >= START_INDEX and < END_INDEX are
+ considered; the implementation uses these bounds to minimize the number
+ of COMPAR invocations.
+ Return its node if found, or NULL if not present in the list.
+ If the list contains several copies of ELT, the node of the leftmost one is
+ returned. */
+extern gl_list_node_t gl_sortedlist_search_from_to (gl_list_t list,
+ gl_listelement_compar_fn compar,
+ size_t start_index,
+ size_t end_index,
+ const void *elt);
+
+/* Search whether an element is already in the list.
+ The list is assumed to be sorted with COMPAR.
+ Return its position if found, or (size_t)(-1) if not present in the list.
+ If the list contains several copies of ELT, the position of the leftmost one
+ is returned. */
+extern size_t gl_sortedlist_indexof (gl_list_t list,
+ gl_listelement_compar_fn compar,
+ const void *elt);
+
+/* Search whether an element is already in the list.
+ The list is assumed to be sorted with COMPAR.
+ Only list elements with indices >= START_INDEX and < END_INDEX are
+ considered; the implementation uses these bounds to minimize the number
+ of COMPAR invocations.
+ Return its position if found, or (size_t)(-1) if not present in the list.
+ If the list contains several copies of ELT, the position of the leftmost one
+ is returned. */
+extern size_t gl_sortedlist_indexof_from_to (gl_list_t list,
+ gl_listelement_compar_fn compar,
+ size_t start_index,
+ size_t end_index,
+ const void *elt);
+
+/* Add an element at the appropriate position in the list.
+ The list is assumed to be sorted with COMPAR.
+ Return its node. */
+/* declared in gl_xlist.h */
+extern gl_list_node_t gl_sortedlist_add (gl_list_t list,
+ gl_listelement_compar_fn compar,
+ const void *elt);
+/* Likewise. Return NULL upon out-of-memory. */
+extern gl_list_node_t gl_sortedlist_nx_add (gl_list_t list,
+ gl_listelement_compar_fn compar,
+ const void *elt)
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+ __attribute__ ((__warn_unused_result__))
+#endif
+ ;
+
+/* Search and remove an element from the list.
+ The list is assumed to be sorted with COMPAR.
+ Return true if it was found and removed.
+ If the list contains several copies of ELT, only the leftmost one is
+ removed. */
+extern bool gl_sortedlist_remove (gl_list_t list,
+ gl_listelement_compar_fn compar,
+ const void *elt);
+
+#endif /* End of inline and gl_xlist.h-defined functions. */
+
+/* ------------------------ Implementation Details ------------------------ */
+
+struct gl_list_implementation
+{
+ /* gl_list_t functions. */
+ gl_list_t (*nx_create_empty) (gl_list_implementation_t implementation,
+ gl_listelement_equals_fn equals_fn,
+ gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
+ bool allow_duplicates);
+ gl_list_t (*nx_create) (gl_list_implementation_t implementation,
+ gl_listelement_equals_fn equals_fn,
+ gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
+ bool allow_duplicates,
+ size_t count, const void **contents);
+ size_t (*size) (gl_list_t list);
+ const void * (*node_value) (gl_list_t list, gl_list_node_t node);
+ int (*node_nx_set_value) (gl_list_t list, gl_list_node_t node,
+ const void *elt);
+ gl_list_node_t (*next_node) (gl_list_t list, gl_list_node_t node);
+ gl_list_node_t (*previous_node) (gl_list_t list, gl_list_node_t node);
+ const void * (*get_at) (gl_list_t list, size_t position);
+ gl_list_node_t (*nx_set_at) (gl_list_t list, size_t position,
+ const void *elt);
+ gl_list_node_t (*search_from_to) (gl_list_t list, size_t start_index,
+ size_t end_index, const void *elt);
+ size_t (*indexof_from_to) (gl_list_t list, size_t start_index,
+ size_t end_index, const void *elt);
+ gl_list_node_t (*nx_add_first) (gl_list_t list, const void *elt);
+ gl_list_node_t (*nx_add_last) (gl_list_t list, const void *elt);
+ gl_list_node_t (*nx_add_before) (gl_list_t list, gl_list_node_t node,
+ const void *elt);
+ gl_list_node_t (*nx_add_after) (gl_list_t list, gl_list_node_t node,
+ const void *elt);
+ gl_list_node_t (*nx_add_at) (gl_list_t list, size_t position,
+ const void *elt);
+ bool (*remove_node) (gl_list_t list, gl_list_node_t node);
+ bool (*remove_at) (gl_list_t list, size_t position);
+ bool (*remove_elt) (gl_list_t list, const void *elt);
+ void (*list_free) (gl_list_t list);
+ /* gl_list_iterator_t functions. */
+ gl_list_iterator_t (*iterator) (gl_list_t list);
+ gl_list_iterator_t (*iterator_from_to) (gl_list_t list,
+ size_t start_index,
+ size_t end_index);
+ bool (*iterator_next) (gl_list_iterator_t *iterator,
+ const void **eltp, gl_list_node_t *nodep);
+ void (*iterator_free) (gl_list_iterator_t *iterator);
+ /* Sorted gl_list_t functions. */
+ gl_list_node_t (*sortedlist_search) (gl_list_t list,
+ gl_listelement_compar_fn compar,
+ const void *elt);
+ gl_list_node_t (*sortedlist_search_from_to) (gl_list_t list,
+ gl_listelement_compar_fn compar,
+ size_t start_index,
+ size_t end_index,
+ const void *elt);
+ size_t (*sortedlist_indexof) (gl_list_t list,
+ gl_listelement_compar_fn compar,
+ const void *elt);
+ size_t (*sortedlist_indexof_from_to) (gl_list_t list,
+ gl_listelement_compar_fn compar,
+ size_t start_index, size_t end_index,
+ const void *elt);
+ gl_list_node_t (*sortedlist_nx_add) (gl_list_t list,
+ gl_listelement_compar_fn compar,
+ const void *elt);
+ bool (*sortedlist_remove) (gl_list_t list,
+ gl_listelement_compar_fn compar,
+ const void *elt);
+};
+
+struct gl_list_impl_base
+{
+ const struct gl_list_implementation *vtable;
+ gl_listelement_equals_fn equals_fn;
+ gl_listelement_hashcode_fn hashcode_fn;
+ gl_listelement_dispose_fn dispose_fn;
+ bool allow_duplicates;
+};
+
+/* Define all functions of this file as accesses to the
+ struct gl_list_implementation. */
+
+GL_LIST_INLINE gl_list_t
+gl_list_nx_create_empty (gl_list_implementation_t implementation,
+ gl_listelement_equals_fn equals_fn,
+ gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
+ bool allow_duplicates)
+{
+ return implementation->nx_create_empty (implementation, equals_fn,
+ hashcode_fn, dispose_fn,
+ allow_duplicates);
+}
+
+GL_LIST_INLINE gl_list_t
+gl_list_nx_create (gl_list_implementation_t implementation,
+ gl_listelement_equals_fn equals_fn,
+ gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
+ bool allow_duplicates,
+ size_t count, const void **contents)
+{
+ return implementation->nx_create (implementation, equals_fn, hashcode_fn,
+ dispose_fn, allow_duplicates, count,
+ contents);
+}
+
+GL_LIST_INLINE size_t
+gl_list_size (gl_list_t list)
+{
+ return ((const struct gl_list_impl_base *) list)->vtable
+ ->size (list);
+}
+
+GL_LIST_INLINE const void *
+gl_list_node_value (gl_list_t list, gl_list_node_t node)
+{
+ return ((const struct gl_list_impl_base *) list)->vtable
+ ->node_value (list, node);
+}
+
+GL_LIST_INLINE int
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+ __attribute__ ((__warn_unused_result__))
+#endif
+gl_list_node_nx_set_value (gl_list_t list, gl_list_node_t node,
+ const void *elt)
+{
+ return ((const struct gl_list_impl_base *) list)->vtable
+ ->node_nx_set_value (list, node, elt);
+}
+
+GL_LIST_INLINE gl_list_node_t
+gl_list_next_node (gl_list_t list, gl_list_node_t node)
+{
+ return ((const struct gl_list_impl_base *) list)->vtable
+ ->next_node (list, node);
+}
+
+GL_LIST_INLINE gl_list_node_t
+gl_list_previous_node (gl_list_t list, gl_list_node_t node)
+{
+ return ((const struct gl_list_impl_base *) list)->vtable
+ ->previous_node (list, node);
+}
+
+GL_LIST_INLINE const void *
+gl_list_get_at (gl_list_t list, size_t position)
+{
+ return ((const struct gl_list_impl_base *) list)->vtable
+ ->get_at (list, position);
+}
+
+GL_LIST_INLINE gl_list_node_t
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+ __attribute__ ((__warn_unused_result__))
+#endif
+gl_list_nx_set_at (gl_list_t list, size_t position, const void *elt)
+{
+ return ((const struct gl_list_impl_base *) list)->vtable
+ ->nx_set_at (list, position, elt);
+}
+
+GL_LIST_INLINE gl_list_node_t
+gl_list_search (gl_list_t list, const void *elt)
+{
+ size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list);
+ return ((const struct gl_list_impl_base *) list)->vtable
+ ->search_from_to (list, 0, size, elt);
+}
+
+GL_LIST_INLINE gl_list_node_t
+gl_list_search_from (gl_list_t list, size_t start_index, const void *elt)
+{
+ size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list);
+ return ((const struct gl_list_impl_base *) list)->vtable
+ ->search_from_to (list, start_index, size, elt);
+}
+
+GL_LIST_INLINE gl_list_node_t
+gl_list_search_from_to (gl_list_t list, size_t start_index, size_t end_index,
+ const void *elt)
+{
+ return ((const struct gl_list_impl_base *) list)->vtable
+ ->search_from_to (list, start_index, end_index, elt);
+}
+
+GL_LIST_INLINE size_t
+gl_list_indexof (gl_list_t list, const void *elt)
+{
+ size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list);
+ return ((const struct gl_list_impl_base *) list)->vtable
+ ->indexof_from_to (list, 0, size, elt);
+}
+
+GL_LIST_INLINE size_t
+gl_list_indexof_from (gl_list_t list, size_t start_index, const void *elt)
+{
+ size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list);
+ return ((const struct gl_list_impl_base *) list)->vtable
+ ->indexof_from_to (list, start_index, size, elt);
+}
+
+GL_LIST_INLINE size_t
+gl_list_indexof_from_to (gl_list_t list, size_t start_index, size_t end_index,
+ const void *elt)
+{
+ return ((const struct gl_list_impl_base *) list)->vtable
+ ->indexof_from_to (list, start_index, end_index, elt);
+}
+
+GL_LIST_INLINE gl_list_node_t
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+ __attribute__ ((__warn_unused_result__))
+#endif
+gl_list_nx_add_first (gl_list_t list, const void *elt)
+{
+ return ((const struct gl_list_impl_base *) list)->vtable
+ ->nx_add_first (list, elt);
+}
+
+GL_LIST_INLINE gl_list_node_t
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+ __attribute__ ((__warn_unused_result__))
+#endif
+gl_list_nx_add_last (gl_list_t list, const void *elt)
+{
+ return ((const struct gl_list_impl_base *) list)->vtable
+ ->nx_add_last (list, elt);
+}
+
+GL_LIST_INLINE gl_list_node_t
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+ __attribute__ ((__warn_unused_result__))
+#endif
+gl_list_nx_add_before (gl_list_t list, gl_list_node_t node, const void *elt)
+{
+ return ((const struct gl_list_impl_base *) list)->vtable
+ ->nx_add_before (list, node, elt);
+}
+
+GL_LIST_INLINE gl_list_node_t
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+ __attribute__ ((__warn_unused_result__))
+#endif
+gl_list_nx_add_after (gl_list_t list, gl_list_node_t node, const void *elt)
+{
+ return ((const struct gl_list_impl_base *) list)->vtable
+ ->nx_add_after (list, node, elt);
+}
+
+GL_LIST_INLINE gl_list_node_t
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+ __attribute__ ((__warn_unused_result__))
+#endif
+gl_list_nx_add_at (gl_list_t list, size_t position, const void *elt)
+{
+ return ((const struct gl_list_impl_base *) list)->vtable
+ ->nx_add_at (list, position, elt);
+}
+
+GL_LIST_INLINE bool
+gl_list_remove_node (gl_list_t list, gl_list_node_t node)
+{
+ return ((const struct gl_list_impl_base *) list)->vtable
+ ->remove_node (list, node);
+}
+
+GL_LIST_INLINE bool
+gl_list_remove_at (gl_list_t list, size_t position)
+{
+ return ((const struct gl_list_impl_base *) list)->vtable
+ ->remove_at (list, position);
+}
+
+GL_LIST_INLINE bool
+gl_list_remove (gl_list_t list, const void *elt)
+{
+ return ((const struct gl_list_impl_base *) list)->vtable
+ ->remove_elt (list, elt);
+}
+
+GL_LIST_INLINE void
+gl_list_free (gl_list_t list)
+{
+ ((const struct gl_list_impl_base *) list)->vtable->list_free (list);
+}
+
+GL_LIST_INLINE gl_list_iterator_t
+gl_list_iterator (gl_list_t list)
+{
+ return ((const struct gl_list_impl_base *) list)->vtable
+ ->iterator (list);
+}
+
+GL_LIST_INLINE gl_list_iterator_t
+gl_list_iterator_from_to (gl_list_t list, size_t start_index, size_t end_index)
+{
+ return ((const struct gl_list_impl_base *) list)->vtable
+ ->iterator_from_to (list, start_index, end_index);
+}
+
+GL_LIST_INLINE bool
+gl_list_iterator_next (gl_list_iterator_t *iterator,
+ const void **eltp, gl_list_node_t *nodep)
+{
+ return iterator->vtable->iterator_next (iterator, eltp, nodep);
+}
+
+GL_LIST_INLINE void
+gl_list_iterator_free (gl_list_iterator_t *iterator)
+{
+ iterator->vtable->iterator_free (iterator);
+}
+
+GL_LIST_INLINE gl_list_node_t
+gl_sortedlist_search (gl_list_t list, gl_listelement_compar_fn compar, const void *elt)
+{
+ return ((const struct gl_list_impl_base *) list)->vtable
+ ->sortedlist_search (list, compar, elt);
+}
+
+GL_LIST_INLINE gl_list_node_t
+gl_sortedlist_search_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t start_index, size_t end_index, const void *elt)
+{
+ return ((const struct gl_list_impl_base *) list)->vtable
+ ->sortedlist_search_from_to (list, compar, start_index, end_index,
+ elt);
+}
+
+GL_LIST_INLINE size_t
+gl_sortedlist_indexof (gl_list_t list, gl_listelement_compar_fn compar, const void *elt)
+{
+ return ((const struct gl_list_impl_base *) list)->vtable
+ ->sortedlist_indexof (list, compar, elt);
+}
+
+GL_LIST_INLINE size_t
+gl_sortedlist_indexof_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t start_index, size_t end_index, const void *elt)
+{
+ return ((const struct gl_list_impl_base *) list)->vtable
+ ->sortedlist_indexof_from_to (list, compar, start_index, end_index,
+ elt);
+}
+
+GL_LIST_INLINE gl_list_node_t
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+ __attribute__ ((__warn_unused_result__))
+#endif
+gl_sortedlist_nx_add (gl_list_t list, gl_listelement_compar_fn compar, const void *elt)
+{
+ return ((const struct gl_list_impl_base *) list)->vtable
+ ->sortedlist_nx_add (list, compar, elt);
+}
+
+GL_LIST_INLINE bool
+gl_sortedlist_remove (gl_list_t list, gl_listelement_compar_fn compar, const void *elt)
+{
+ return ((const struct gl_list_impl_base *) list)->vtable
+ ->sortedlist_remove (list, compar, elt);
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif /* _GL_LIST_H */
diff --git a/gl/lib/gl_map.c b/gl/lib/gl_map.c
new file mode 100644
index 00000000..758a65f3
--- /dev/null
+++ b/gl/lib/gl_map.c
@@ -0,0 +1,3 @@
+#include <config.h>
+#define GL_MAP_INLINE _GL_EXTERN_INLINE
+#include "gl_map.h"
diff --git a/gl/lib/gl_map.h b/gl/lib/gl_map.h
new file mode 100644
index 00000000..02a3ac37
--- /dev/null
+++ b/gl/lib/gl_map.h
@@ -0,0 +1,382 @@
+/* Abstract map data type.
+ Copyright (C) 2006-2007, 2009-2019 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2018.
+
+ 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 <https://www.gnu.org/licenses/>. */
+
+#ifndef _GL_MAP_H
+#define _GL_MAP_H
+
+#include <stdbool.h>
+#include <stddef.h>
+
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
+_GL_INLINE_HEADER_BEGIN
+#ifndef GL_MAP_INLINE
+# define GL_MAP_INLINE _GL_INLINE
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* gl_map is an abstract map data type. It can contain any number of
+ (key, value) pairs, where
+ - keys and values are objects ('void *' or 'const void *' pointers),
+ - There are no (key, value1) and (key, value2) pairs with the same key
+ (in the sense of a given comparator function).
+
+ There are several implementations of this map datatype, optimized for
+ different operations or for memory. You can start using the simplest map
+ implementation, GL_ARRAY_MAP, and switch to a different implementation
+ later, when you realize which operations are performed the most frequently.
+ The API of the different implementations is exactly the same; when switching
+ to a different implementation, you only have to change the gl_map_create
+ call.
+
+ The implementations are:
+ GL_ARRAY_MAP a growable array
+ GL_LINKEDHASH_MAP a hash table with a linked list
+ GL_HASH_MAP a hash table
+
+ The memory consumption is asymptotically the same: O(1) for every pair
+ in the map. When looking more closely at the average memory consumed
+ for an object, GL_ARRAY_MAP is the most compact representation, then comes
+ GL_HASH_MAP, and GL_LINKEDHASH_MAP needs the most memory.
+
+ The guaranteed average performance of the operations is, for a map of
+ n pairs:
+
+ Operation ARRAY LINKEDHASH
+ HASH
+
+ gl_map_size O(1) O(1)
+ gl_map_get O(n) O(1)
+ gl_map_put O(n) O(1)
+ gl_map_remove O(n) O(1)
+ gl_map_search O(n) O(1)
+ gl_map_iterator O(1) O(1)
+ gl_map_iterator_next O(1) O(1)
+ */
+
+/* --------------------------- gl_map_t Data Type --------------------------- */
+
+/* Type of function used to compare two keys.
+ NULL denotes pointer comparison. */
+typedef bool (*gl_mapkey_equals_fn) (const void *key1, const void *key2);
+
+/* Type of function used to compute a hash code.
+ NULL denotes a function that depends only on the pointer itself. */
+typedef size_t (*gl_mapkey_hashcode_fn) (const void *key);
+
+#ifndef _GL_MAP_DISPOSE_FNS_DEFINED
+
+/* Type of function used to dispose a key once a (key, value) pair is removed
+ from a map. NULL denotes a no-op. */
+typedef void (*gl_mapkey_dispose_fn) (const void *key);
+
+/* Type of function used to dispose a value once a (key, value) pair is removed
+ from a map. NULL denotes a no-op. */
+typedef void (*gl_mapvalue_dispose_fn) (const void *value);
+
+# define _GL_MAP_DISPOSE_FNS_DEFINED 1
+#endif
+
+struct gl_map_impl;
+/* Type representing an entire map. */
+typedef struct gl_map_impl * gl_map_t;
+
+struct gl_map_implementation;
+/* Type representing a map datatype implementation. */
+typedef const struct gl_map_implementation * gl_map_implementation_t;
+
+#if 0 /* Unless otherwise specified, these are defined inline below. */
+
+/* Create an empty map.
+ IMPLEMENTATION is one of GL_ARRAY_MAP, GL_LINKEDHASH_MAP, GL_HASH_MAP.
+ EQUALS_FN is a key comparison function or NULL.
+ HASHCODE_FN is a key hash code function or NULL.
+ KDISPOSE_FN is a key disposal function or NULL.
+ VDISPOSE_FN is a value disposal function or NULL. */
+/* declared in gl_xmap.h */
+extern gl_map_t gl_map_create_empty (gl_map_implementation_t implementation,
+ gl_mapkey_equals_fn equals_fn,
+ gl_mapkey_hashcode_fn hashcode_fn,
+ gl_mapkey_dispose_fn kdispose_fn,
+ gl_mapvalue_dispose_fn vdispose_fn);
+/* Likewise. Return NULL upon out-of-memory. */
+extern gl_map_t gl_map_nx_create_empty (gl_map_implementation_t implementation,
+ gl_mapkey_equals_fn equals_fn,
+ gl_mapkey_hashcode_fn hashcode_fn,
+ gl_mapkey_dispose_fn kdispose_fn,
+ gl_mapvalue_dispose_fn vdispose_fn);
+
+/* Return the current number of pairs in a map. */
+extern size_t gl_map_size (gl_map_t map);
+
+/* Search whether a pair with the given key is already in the map.
+ Return the value if found, or NULL if not present in the map. */
+extern const void * gl_map_get (gl_map_t map, const void *key);
+
+/* Search whether a pair with the given key is already in the map.
+ Return true and set *VALUEP to the value if found.
+ Return false if not present in the map. */
+extern bool gl_map_search (gl_map_t map, const void *key, const void **valuep);
+
+/* Add a pair to a map.
+ Return true if a pair with the given key was not already in the map and so
+ this pair was added.
+ Return false if a pair with the given key was already in the map and only
+ its value was replaced. */
+/* declared in gl_xmap.h */
+extern bool gl_map_put (gl_map_t map, const void *key, const void *value);
+/* Likewise. Return -1 upon out-of-memory. */
+extern int gl_map_nx_put (gl_map_t map, const void *key, const void *value)
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+ __attribute__ ((__warn_unused_result__))
+#endif
+ ;
+
+/* Add a pair to a map and retrieve the previous value.
+ Return true if a pair with the given key was not already in the map and so
+ this pair was added.
+ Return false and set *OLDVALUEP to the previous value, if a pair with the
+ given key was already in the map and only its value was replaced. */
+/* declared in gl_xmap.h */
+extern bool gl_map_getput (gl_map_t map, const void *key, const void *value,
+ const void **oldvaluep);
+/* Likewise. Return -1 upon out-of-memory. */
+extern int gl_map_nx_getput (gl_map_t map, const void *key, const void *value,
+ const void **oldvaluep)
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+ __attribute__ ((__warn_unused_result__))
+#endif
+ ;
+
+/* Remove a pair from a map.
+ Return true if the key was found and its pair removed.
+ Return false otherwise. */
+extern bool gl_map_remove (gl_map_t map, const void *key);
+
+/* Remove a pair from a map and retrieve the previous value.
+ Return true and set *OLDVALUEP to the previous value, if the key was found
+ and its pair removed.
+ Return false otherwise. */
+extern bool gl_map_getremove (gl_map_t map, const void *key,
+ const void **oldvaluep);
+
+/* Free an entire map.
+ (But this call does not free the keys and values of the pairs in the map.
+ It only invokes the KDISPOSE_FN on each key and the VDISPOSE_FN on each value
+ of the pairs in the map.) */
+extern void gl_map_free (gl_map_t map);
+
+#endif /* End of inline and gl_xmap.h-defined functions. */
+
+/* ---------------------- gl_map_iterator_t Data Type ---------------------- */
+
+/* Functions for iterating through a map.
+ Note: Iterating through a map of type GL_HASH_MAP returns the pairs in an
+ unpredictable order. If you need a predictable order, use GL_LINKEDHASH_MAP
+ instead of GL_HASH_MAP. */
+
+/* Type of an iterator that traverses a map.
+ This is a fixed-size struct, so that creation of an iterator doesn't need
+ memory allocation on the heap. */
+typedef struct
+{
+ /* For fast dispatch of gl_map_iterator_next. */
+ const struct gl_map_implementation *vtable;
+ /* For detecting whether the last returned pair was removed. */
+ gl_map_t map;
+ size_t count;
+ /* Other, implementation-private fields. */
+ void *p; void *q;
+ size_t i; size_t j;
+} gl_map_iterator_t;
+
+#if 0 /* These are defined inline below. */
+
+/* Create an iterator traversing a map.
+ The map's contents must not be modified while the iterator is in use,
+ except for modifying the value of the last returned key or removing the
+ last returned pair. */
+extern gl_map_iterator_t gl_map_iterator (gl_map_t map);
+
+/* If there is a next pair, store the next pair in *KEYP and *VALUEP, advance
+ the iterator, and return true. Otherwise, return false. */
+extern bool gl_map_iterator_next (gl_map_iterator_t *iterator,
+ const void **keyp, const void **valuep);
+
+/* Free an iterator. */
+extern void gl_map_iterator_free (gl_map_iterator_t *iterator);
+
+#endif /* End of inline functions. */
+
+/* ------------------------- Implementation Details ------------------------- */
+
+struct gl_map_implementation
+{
+ /* gl_map_t functions. */
+ gl_map_t (*nx_create_empty) (gl_map_implementation_t implementation,
+ gl_mapkey_equals_fn equals_fn,
+ gl_mapkey_hashcode_fn hashcode_fn,
+ gl_mapkey_dispose_fn kdispose_fn,
+ gl_mapvalue_dispose_fn vdispose_fn);
+ size_t (*size) (gl_map_t map);
+ bool (*search) (gl_map_t map, const void *key, const void **valuep);
+ int (*nx_getput) (gl_map_t map, const void *key, const void *value,
+ const void **oldvaluep);
+ bool (*getremove) (gl_map_t map, const void *key, const void **oldvaluep);
+ void (*map_free) (gl_map_t map);
+ /* gl_map_iterator_t functions. */
+ gl_map_iterator_t (*iterator) (gl_map_t map);
+ bool (*iterator_next) (gl_map_iterator_t *iterator,
+ const void **keyp, const void **valuep);
+ void (*iterator_free) (gl_map_iterator_t *iterator);
+};
+
+struct gl_map_impl_base
+{
+ const struct gl_map_implementation *vtable;
+ gl_mapkey_equals_fn equals_fn;
+ gl_mapkey_dispose_fn kdispose_fn;
+ gl_mapvalue_dispose_fn vdispose_fn;
+};
+
+/* Define most functions of this file as accesses to the
+ struct gl_map_implementation. */
+
+GL_MAP_INLINE gl_map_t
+gl_map_nx_create_empty (gl_map_implementation_t implementation,
+ gl_mapkey_equals_fn equals_fn,
+ gl_mapkey_hashcode_fn hashcode_fn,
+ gl_mapkey_dispose_fn kdispose_fn,
+ gl_mapvalue_dispose_fn vdispose_fn)
+{
+ return implementation->nx_create_empty (implementation,
+ equals_fn, hashcode_fn,
+ kdispose_fn, vdispose_fn);
+}
+
+GL_MAP_INLINE size_t
+gl_map_size (gl_map_t map)
+{
+ return ((const struct gl_map_impl_base *) map)->vtable->size (map);
+}
+
+GL_MAP_INLINE bool
+gl_map_search (gl_map_t map, const void *key, const void **valuep)
+{
+ return ((const struct gl_map_impl_base *) map)->vtable
+ ->search (map, key, valuep);
+}
+
+GL_MAP_INLINE int
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+ __attribute__ ((__warn_unused_result__))
+#endif
+gl_map_nx_getput (gl_map_t map, const void *key, const void *value,
+ const void **oldvaluep)
+{
+ return ((const struct gl_map_impl_base *) map)->vtable
+ ->nx_getput (map, key, value, oldvaluep);
+}
+
+GL_MAP_INLINE bool
+gl_map_getremove (gl_map_t map, const void *key, const void **oldvaluep)
+{
+ return ((const struct gl_map_impl_base *) map)->vtable
+ ->getremove (map, key, oldvaluep);
+}
+
+GL_MAP_INLINE void
+gl_map_free (gl_map_t map)
+{
+ ((const struct gl_map_impl_base *) map)->vtable->map_free (map);
+}
+
+GL_MAP_INLINE gl_map_iterator_t
+gl_map_iterator (gl_map_t map)
+{
+ return ((const struct gl_map_impl_base *) map)->vtable->iterator (map);
+}
+
+GL_MAP_INLINE bool
+gl_map_iterator_next (gl_map_iterator_t *iterator,
+ const void **keyp, const void **valuep)
+{
+ return iterator->vtable->iterator_next (iterator, keyp, valuep);
+}
+
+GL_MAP_INLINE void
+gl_map_iterator_free (gl_map_iterator_t *iterator)
+{
+ iterator->vtable->iterator_free (iterator);
+}
+
+/* Define the convenience functions, that is, the functions that are independent
+ of the implementation. */
+
+GL_MAP_INLINE const void *
+gl_map_get (gl_map_t map, const void *key)
+{
+ const void *value = NULL;
+ gl_map_search (map, key, &value);
+ return value;
+}
+
+GL_MAP_INLINE int
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+ __attribute__ ((__warn_unused_result__))
+#endif
+gl_map_nx_put (gl_map_t map, const void *key, const void *value)
+{
+ const void *oldvalue;
+ int result = gl_map_nx_getput (map, key, value, &oldvalue);
+ if (result == 0)
+ {
+ gl_mapvalue_dispose_fn vdispose_fn =
+ ((const struct gl_map_impl_base *) map)->vdispose_fn;
+ if (vdispose_fn != NULL)
+ vdispose_fn (oldvalue);
+ }
+ return result;
+}
+
+GL_MAP_INLINE bool
+gl_map_remove (gl_map_t map, const void *key)
+{
+ const void *oldvalue;
+ bool result = gl_map_getremove (map, key, &oldvalue);
+ if (result)
+ {
+ gl_mapvalue_dispose_fn vdispose_fn =
+ ((const struct gl_map_impl_base *) map)->vdispose_fn;
+ if (vdispose_fn != NULL)
+ vdispose_fn (oldvalue);
+ }
+ return result;
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif /* _GL_MAP_H */
diff --git a/gl/lib/gl_rbtree_list.c b/gl/lib/gl_rbtree_list.c
new file mode 100644
index 00000000..25d7c791
--- /dev/null
+++ b/gl/lib/gl_rbtree_list.c
@@ -0,0 +1,102 @@
+/* Sequential list data type implemented by a binary tree.
+ Copyright (C) 2006, 2008-2019 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2006.
+
+ 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 <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include "gl_rbtree_list.h"
+
+#include <stdlib.h>
+
+/* -------------------------- gl_list_t Data Type -------------------------- */
+
+/* Generic red-black tree code. */
+#include "gl_anyrbtree_list1.h"
+
+/* Generic binary tree code. */
+#include "gl_anytree_list1.h"
+
+/* Generic red-black tree code. */
+#include "gl_anyrbtree_list2.h"
+
+/* Generic binary tree code. */
+#include "gl_anytree_list2.h"
+
+/* For debugging. */
+static unsigned int
+check_invariants (gl_list_node_t node, gl_list_node_t parent)
+{
+ unsigned int left_blackheight =
+ (node->left != NULL ? check_invariants (node->left, node) : 0);
+ unsigned int right_blackheight =
+ (node->right != NULL ? check_invariants (node->right, node) : 0);
+
+ if (!(node->parent == parent))
+ abort ();
+ if (!(node->branch_size
+ == (node->left != NULL ? node->left->branch_size : 0)
+ + 1 + (node->right != NULL ? node->right->branch_size : 0)))
+ abort ();
+ if (!(node->color == BLACK || node->color == RED))
+ abort ();
+ if (parent == NULL && !(node->color == BLACK))
+ abort ();
+ if (!(left_blackheight == right_blackheight))
+ abort ();
+
+ return left_blackheight + (node->color == BLACK ? 1 : 0);
+}
+void
+gl_rbtree_list_check_invariants (gl_list_t list)
+{
+ if (list->root != NULL)
+ check_invariants (list->root, NULL);
+}
+
+const struct gl_list_implementation gl_rbtree_list_implementation =
+ {
+ gl_tree_nx_create_empty,
+ gl_tree_nx_create,
+ gl_tree_size,
+ gl_tree_node_value,
+ gl_tree_node_nx_set_value,
+ gl_tree_next_node,
+ gl_tree_previous_node,
+ gl_tree_get_at,
+ gl_tree_nx_set_at,
+ gl_tree_search_from_to,
+ gl_tree_indexof_from_to,
+ gl_tree_nx_add_first,
+ gl_tree_nx_add_last,
+ gl_tree_nx_add_before,
+ gl_tree_nx_add_after,
+ gl_tree_nx_add_at,
+ gl_tree_remove_node,
+ gl_tree_remove_at,
+ gl_tree_remove,
+ gl_tree_list_free,
+ gl_tree_iterator,
+ gl_tree_iterator_from_to,
+ gl_tree_iterator_next,
+ gl_tree_iterator_free,
+ gl_tree_sortedlist_search,
+ gl_tree_sortedlist_search_from_to,
+ gl_tree_sortedlist_indexof,
+ gl_tree_sortedlist_indexof_from_to,
+ gl_tree_sortedlist_nx_add,
+ gl_tree_sortedlist_remove
+ };
diff --git a/gl/lib/gl_rbtree_list.h b/gl/lib/gl_rbtree_list.h
new file mode 100644
index 00000000..a1d7d880
--- /dev/null
+++ b/gl/lib/gl_rbtree_list.h
@@ -0,0 +1,34 @@
+/* Sequential list data type implemented by a binary tree.
+ Copyright (C) 2006, 2009-2019 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2006.
+
+ 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 <https://www.gnu.org/licenses/>. */
+
+#ifndef _GL_RBTREE_LIST_H
+#define _GL_RBTREE_LIST_H
+
+#include "gl_list.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern const struct gl_list_implementation gl_rbtree_list_implementation;
+#define GL_RBTREE_LIST &gl_rbtree_list_implementation
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _GL_RBTREE_LIST_H */
diff --git a/gl/lib/gl_set.c b/gl/lib/gl_set.c
new file mode 100644
index 00000000..e00d2026
--- /dev/null
+++ b/gl/lib/gl_set.c
@@ -0,0 +1,3 @@
+#include <config.h>
+#define GL_SET_INLINE _GL_EXTERN_INLINE
+#include "gl_set.h"
diff --git a/gl/lib/gl_set.h b/gl/lib/gl_set.h
new file mode 100644
index 00000000..52a6cf2d
--- /dev/null
+++ b/gl/lib/gl_set.h
@@ -0,0 +1,281 @@
+/* Abstract set data type.
+ Copyright (C) 2006-2007, 2009-2019 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2018.
+
+ 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 <https://www.gnu.org/licenses/>. */
+
+#ifndef _GL_SET_H
+#define _GL_SET_H
+
+#include <stdbool.h>
+#include <stddef.h>
+
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
+_GL_INLINE_HEADER_BEGIN
+#ifndef GL_SET_INLINE
+# define GL_SET_INLINE _GL_INLINE
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* gl_set is an abstract set data type. It can contain any number of objects
+ ('void *' or 'const void *' pointers); the order does not matter.
+ Duplicates (in the sense of the comparator) are forbidden.
+
+ There are several implementations of this set datatype, optimized for
+ different operations or for memory. You can start using the simplest set
+ implementation, GL_ARRAY_SET, and switch to a different implementation
+ later, when you realize which operations are performed the most frequently.
+ The API of the different implementations is exactly the same; when switching
+ to a different implementation, you only have to change the gl_set_create
+ call.
+
+ The implementations are:
+ GL_ARRAY_SET a growable array
+ GL_LINKEDHASH_SET a hash table with a linked list
+ GL_HASH_SET a hash table
+
+ The memory consumption is asymptotically the same: O(1) for every object
+ in the set. When looking more closely at the average memory consumed
+ for an object, GL_ARRAY_SET is the most compact representation, then comes
+ GL_HASH_SET, and GL_LINKEDHASH_SET needs the most memory.
+
+ The guaranteed average performance of the operations is, for a set of
+ n elements:
+
+ Operation ARRAY LINKEDHASH
+ HASH
+
+ gl_set_size O(1) O(1)
+ gl_set_add O(n) O(1)
+ gl_set_remove O(n) O(1)
+ gl_set_search O(n) O(1)
+ gl_set_iterator O(1) O(1)
+ gl_set_iterator_next O(1) O(1)
+ */
+
+/* --------------------------- gl_set_t Data Type --------------------------- */
+
+/* Type of function used to compare two elements.
+ NULL denotes pointer comparison. */
+typedef bool (*gl_setelement_equals_fn) (const void *elt1, const void *elt2);
+
+/* Type of function used to compute a hash code.
+ NULL denotes a function that depends only on the pointer itself. */
+typedef size_t (*gl_setelement_hashcode_fn) (const void *elt);
+
+#ifndef _GL_SETELEMENT_DISPOSE_FN_DEFINED
+/* Type of function used to dispose an element once it's removed from a set.
+ NULL denotes a no-op. */
+typedef void (*gl_setelement_dispose_fn) (const void *elt);
+# define _GL_SETELEMENT_DISPOSE_FN_DEFINED 1
+#endif
+
+struct gl_set_impl;
+/* Type representing an entire set. */
+typedef struct gl_set_impl * gl_set_t;
+
+struct gl_set_implementation;
+/* Type representing a set datatype implementation. */
+typedef const struct gl_set_implementation * gl_set_implementation_t;
+
+#if 0 /* Unless otherwise specified, these are defined inline below. */
+
+/* Create an empty set.
+ IMPLEMENTATION is one of GL_ARRAY_SET, GL_LINKEDHASH_SET, GL_HASH_SET.
+ EQUALS_FN is an element comparison function or NULL.
+ HASHCODE_FN is an element hash code function or NULL.
+ DISPOSE_FN is an element disposal function or NULL. */
+/* declared in gl_xset.h */
+extern gl_set_t gl_set_create_empty (gl_set_implementation_t implementation,
+ gl_setelement_equals_fn equals_fn,
+ gl_setelement_hashcode_fn hashcode_fn,
+ gl_setelement_dispose_fn dispose_fn);
+/* Likewise. Return NULL upon out-of-memory. */
+extern gl_set_t gl_set_nx_create_empty (gl_set_implementation_t implementation,
+ gl_setelement_equals_fn equals_fn,
+ gl_setelement_hashcode_fn hashcode_fn,
+ gl_setelement_dispose_fn dispose_fn);
+
+/* Return the current number of elements in a set. */
+extern size_t gl_set_size (gl_set_t set);
+
+/* Search whether an element is already in the set.
+ Return true if found, or false if not present in the set. */
+extern bool gl_set_search (gl_set_t set, const void *elt);
+
+/* Add an element to a set.
+ Return true if it was not already in the set and added, false otherwise. */
+/* declared in gl_xset.h */
+extern bool gl_set_add (gl_set_t set, const void *elt);
+/* Likewise. Return -1 upon out-of-memory. */
+extern int gl_set_nx_add (gl_set_t set, const void *elt)
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+ __attribute__ ((__warn_unused_result__))
+#endif
+ ;
+
+/* Remove an element from a set.
+ Return true if it was found and removed. */
+extern bool gl_set_remove (gl_set_t set, const void *elt);
+
+/* Free an entire set.
+ (But this call does not free the elements of the set. It only invokes
+ the DISPOSE_FN on each of the elements of the set.) */
+extern void gl_set_free (gl_set_t set);
+
+#endif /* End of inline and gl_xset.h-defined functions. */
+
+/* ---------------------- gl_set_iterator_t Data Type ---------------------- */
+
+/* Functions for iterating through a set.
+ Note: Iterating through a set of type GL_HASH_SET returns the elements in an
+ unpredictable order. If you need a predictable order, use GL_LINKEDHASH_SET
+ instead of GL_HASH_SET. */
+
+/* Type of an iterator that traverses a set.
+ This is a fixed-size struct, so that creation of an iterator doesn't need
+ memory allocation on the heap. */
+typedef struct
+{
+ /* For fast dispatch of gl_set_iterator_next. */
+ const struct gl_set_implementation *vtable;
+ /* For detecting whether the last returned element was removed. */
+ gl_set_t set;
+ size_t count;
+ /* Other, implementation-private fields. */
+ void *p; void *q;
+ size_t i; size_t j;
+} gl_set_iterator_t;
+
+#if 0 /* These are defined inline below. */
+
+/* Create an iterator traversing a set.
+ The set's contents must not be modified while the iterator is in use,
+ except for removing the last returned element. */
+extern gl_set_iterator_t gl_set_iterator (gl_set_t set);
+
+/* If there is a next element, store the next element in *ELTP, advance the
+ iterator and return true. Otherwise, return false. */
+extern bool gl_set_iterator_next (gl_set_iterator_t *iterator,
+ const void **eltp);
+
+/* Free an iterator. */
+extern void gl_set_iterator_free (gl_set_iterator_t *iterator);
+
+#endif /* End of inline functions. */
+
+/* ------------------------ Implementation Details ------------------------ */
+
+struct gl_set_implementation
+{
+ /* gl_set_t functions. */
+ gl_set_t (*nx_create_empty) (gl_set_implementation_t implementation,
+ gl_setelement_equals_fn equals_fn,
+ gl_setelement_hashcode_fn hashcode_fn,
+ gl_setelement_dispose_fn dispose_fn);
+ size_t (*size) (gl_set_t set);
+ bool (*search) (gl_set_t set, const void *elt);
+ int (*nx_add) (gl_set_t set, const void *elt);
+ bool (*remove_elt) (gl_set_t set, const void *elt);
+ void (*set_free) (gl_set_t set);
+ /* gl_set_iterator_t functions. */
+ gl_set_iterator_t (*iterator) (gl_set_t set);
+ bool (*iterator_next) (gl_set_iterator_t *iterator, const void **eltp);
+ void (*iterator_free) (gl_set_iterator_t *iterator);
+};
+
+struct gl_set_impl_base
+{
+ const struct gl_set_implementation *vtable;
+ gl_setelement_equals_fn equals_fn;
+ gl_setelement_dispose_fn dispose_fn;
+};
+
+/* Define all functions of this file as accesses to the
+ struct gl_set_implementation. */
+
+GL_SET_INLINE gl_set_t
+gl_set_nx_create_empty (gl_set_implementation_t implementation,
+ gl_setelement_equals_fn equals_fn,
+ gl_setelement_hashcode_fn hashcode_fn,
+ gl_setelement_dispose_fn dispose_fn)
+{
+ return implementation->nx_create_empty (implementation, equals_fn,
+ hashcode_fn, dispose_fn);
+}
+
+GL_SET_INLINE size_t
+gl_set_size (gl_set_t set)
+{
+ return ((const struct gl_set_impl_base *) set)->vtable->size (set);
+}
+
+GL_SET_INLINE bool
+gl_set_search (gl_set_t set, const void *elt)
+{
+ return ((const struct gl_set_impl_base *) set)->vtable->search (set, elt);
+}
+
+GL_SET_INLINE int
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+ __attribute__ ((__warn_unused_result__))
+#endif
+gl_set_nx_add (gl_set_t set, const void *elt)
+{
+ return ((const struct gl_set_impl_base *) set)->vtable->nx_add (set, elt);
+}
+
+GL_SET_INLINE bool
+gl_set_remove (gl_set_t set, const void *elt)
+{
+ return ((const struct gl_set_impl_base *) set)->vtable->remove_elt (set, elt);
+}
+
+GL_SET_INLINE void
+gl_set_free (gl_set_t set)
+{
+ ((const struct gl_set_impl_base *) set)->vtable->set_free (set);
+}
+
+GL_SET_INLINE gl_set_iterator_t
+gl_set_iterator (gl_set_t set)
+{
+ return ((const struct gl_set_impl_base *) set)->vtable->iterator (set);
+}
+
+GL_SET_INLINE bool
+gl_set_iterator_next (gl_set_iterator_t *iterator, const void **eltp)
+{
+ return iterator->vtable->iterator_next (iterator, eltp);
+}
+
+GL_SET_INLINE void
+gl_set_iterator_free (gl_set_iterator_t *iterator)
+{
+ iterator->vtable->iterator_free (iterator);
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif /* _GL_SET_H */
diff --git a/gl/lib/gl_xlist.c b/gl/lib/gl_xlist.c
new file mode 100644
index 00000000..fe3c8933
--- /dev/null
+++ b/gl/lib/gl_xlist.c
@@ -0,0 +1,3 @@
+#include <config.h>
+#define GL_XLIST_INLINE _GL_EXTERN_INLINE
+#include "gl_xlist.h"
diff --git a/gl/lib/gl_xlist.h b/gl/lib/gl_xlist.h
new file mode 100644
index 00000000..87885c33
--- /dev/null
+++ b/gl/lib/gl_xlist.h
@@ -0,0 +1,177 @@
+/* Abstract sequential list data type, with out-of-memory checking.
+ Copyright (C) 2009-2019 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2009.
+
+ 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 <https://www.gnu.org/licenses/>. */
+
+#ifndef _GL_XLIST_H
+#define _GL_XLIST_H
+
+#include "gl_list.h"
+#include "xalloc.h"
+
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
+_GL_INLINE_HEADER_BEGIN
+#ifndef GL_XLIST_INLINE
+# define GL_XLIST_INLINE _GL_INLINE
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* These functions are thin wrappers around the corresponding functions with
+ _nx_ infix from gl_list.h. Upon out-of-memory, they invoke xalloc_die (),
+ instead of returning an error indicator. */
+#if 0 /* These are defined inline below. */
+extern gl_list_t gl_list_create_empty (gl_list_implementation_t implementation,
+ gl_listelement_equals_fn equals_fn,
+ gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
+ bool allow_duplicates);
+extern gl_list_t gl_list_create (gl_list_implementation_t implementation,
+ gl_listelement_equals_fn equals_fn,
+ gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
+ bool allow_duplicates,
+ size_t count, const void **contents);
+extern void gl_list_node_set_value (gl_list_t list, gl_list_node_t node,
+ const void *elt);
+extern gl_list_node_t gl_list_set_at (gl_list_t list, size_t position,
+ const void *elt);
+extern gl_list_node_t gl_list_add_first (gl_list_t list, const void *elt);
+extern gl_list_node_t gl_list_add_last (gl_list_t list, const void *elt);
+extern gl_list_node_t gl_list_add_before (gl_list_t list, gl_list_node_t node,
+ const void *elt);
+extern gl_list_node_t gl_list_add_after (gl_list_t list, gl_list_node_t node,
+ const void *elt);
+extern gl_list_node_t gl_list_add_at (gl_list_t list, size_t position,
+ const void *elt);
+extern gl_list_node_t gl_sortedlist_add (gl_list_t list,
+ gl_listelement_compar_fn compar,
+ const void *elt);
+#endif
+
+GL_XLIST_INLINE gl_list_t
+gl_list_create_empty (gl_list_implementation_t implementation,
+ gl_listelement_equals_fn equals_fn,
+ gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
+ bool allow_duplicates)
+{
+ gl_list_t result =
+ gl_list_nx_create_empty (implementation, equals_fn, hashcode_fn, dispose_fn,
+ allow_duplicates);
+ if (result == NULL)
+ xalloc_die ();
+ return result;
+}
+
+GL_XLIST_INLINE gl_list_t
+gl_list_create (gl_list_implementation_t implementation,
+ gl_listelement_equals_fn equals_fn,
+ gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
+ bool allow_duplicates,
+ size_t count, const void **contents)
+{
+ gl_list_t result =
+ gl_list_nx_create (implementation, equals_fn, hashcode_fn, dispose_fn,
+ allow_duplicates, count, contents);
+ if (result == NULL)
+ xalloc_die ();
+ return result;
+}
+
+GL_XLIST_INLINE void
+gl_list_node_set_value (gl_list_t list, gl_list_node_t node, const void *elt)
+{
+ int result = gl_list_node_nx_set_value (list, node, elt);
+ if (result < 0)
+ xalloc_die ();
+}
+
+GL_XLIST_INLINE gl_list_node_t
+gl_list_set_at (gl_list_t list, size_t position, const void *elt)
+{
+ gl_list_node_t result = gl_list_nx_set_at (list, position, elt);
+ if (result == NULL)
+ xalloc_die ();
+ return result;
+}
+
+GL_XLIST_INLINE gl_list_node_t
+gl_list_add_first (gl_list_t list, const void *elt)
+{
+ gl_list_node_t result = gl_list_nx_add_first (list, elt);
+ if (result == NULL)
+ xalloc_die ();
+ return result;
+}
+
+GL_XLIST_INLINE gl_list_node_t
+gl_list_add_last (gl_list_t list, const void *elt)
+{
+ gl_list_node_t result = gl_list_nx_add_last (list, elt);
+ if (result == NULL)
+ xalloc_die ();
+ return result;
+}
+
+GL_XLIST_INLINE gl_list_node_t
+gl_list_add_before (gl_list_t list, gl_list_node_t node, const void *elt)
+{
+ gl_list_node_t result = gl_list_nx_add_before (list, node, elt);
+ if (result == NULL)
+ xalloc_die ();
+ return result;
+}
+
+GL_XLIST_INLINE gl_list_node_t
+gl_list_add_after (gl_list_t list, gl_list_node_t node, const void *elt)
+{
+ gl_list_node_t result = gl_list_nx_add_after (list, node, elt);
+ if (result == NULL)
+ xalloc_die ();
+ return result;
+}
+
+GL_XLIST_INLINE gl_list_node_t
+gl_list_add_at (gl_list_t list, size_t position, const void *elt)
+{
+ gl_list_node_t result = gl_list_nx_add_at (list, position, elt);
+ if (result == NULL)
+ xalloc_die ();
+ return result;
+}
+
+GL_XLIST_INLINE gl_list_node_t
+gl_sortedlist_add (gl_list_t list, gl_listelement_compar_fn compar,
+ const void *elt)
+{
+ gl_list_node_t result = gl_sortedlist_nx_add (list, compar, elt);
+ if (result == NULL)
+ xalloc_die ();
+ return result;
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif /* _GL_XLIST_H */
diff --git a/gl/lib/gl_xmap.c b/gl/lib/gl_xmap.c
new file mode 100644
index 00000000..3d39fdba
--- /dev/null
+++ b/gl/lib/gl_xmap.c
@@ -0,0 +1,3 @@
+#include <config.h>
+#define GL_XMAP_INLINE _GL_EXTERN_INLINE
+#include "gl_xmap.h"
diff --git a/gl/lib/gl_xmap.h b/gl/lib/gl_xmap.h
new file mode 100644
index 00000000..fb97bc3c
--- /dev/null
+++ b/gl/lib/gl_xmap.h
@@ -0,0 +1,91 @@
+/* Abstract map data type, with out-of-memory checking.
+ Copyright (C) 2009-2019 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2018.
+
+ 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 <https://www.gnu.org/licenses/>. */
+
+#ifndef _GL_XMAP_H
+#define _GL_XMAP_H
+
+#include "gl_map.h"
+#include "xalloc.h"
+
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
+_GL_INLINE_HEADER_BEGIN
+#ifndef GL_XMAP_INLINE
+# define GL_XMAP_INLINE _GL_INLINE
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* These functions are thin wrappers around the corresponding functions with
+ _nx_ infix from gl_map.h. Upon out-of-memory, they invoke xalloc_die (),
+ instead of returning an error indicator. */
+#if 0 /* These are defined inline below. */
+extern gl_map_t gl_map_create_empty (gl_map_implementation_t implementation,
+ gl_mapkey_equals_fn equals_fn,
+ gl_mapkey_hashcode_fn hashcode_fn,
+ gl_mapkey_dispose_fn kdispose_fn,
+ gl_mapvalue_dispose_fn vdispose_fn);
+extern bool gl_map_put (gl_map_t map, const void *key, const void *value);
+extern bool gl_map_getput (gl_map_t map, const void *key, const void *value,
+ const void **oldvaluep);
+#endif
+
+GL_XMAP_INLINE gl_map_t
+gl_map_create_empty (gl_map_implementation_t implementation,
+ gl_mapkey_equals_fn equals_fn,
+ gl_mapkey_hashcode_fn hashcode_fn,
+ gl_mapkey_dispose_fn kdispose_fn,
+ gl_mapvalue_dispose_fn vdispose_fn)
+{
+ gl_map_t result =
+ gl_map_nx_create_empty (implementation, equals_fn, hashcode_fn,
+ kdispose_fn, vdispose_fn);
+ if (result == NULL)
+ xalloc_die ();
+ return result;
+}
+
+GL_XMAP_INLINE bool
+gl_map_put (gl_map_t map, const void *key, const void *value)
+{
+ int result = gl_map_nx_put (map, key, value);
+ if (result < 0)
+ xalloc_die ();
+ return result;
+}
+
+GL_XMAP_INLINE bool
+gl_map_getput (gl_map_t map, const void *key, const void *value,
+ const void **oldvaluep)
+{
+ int result = gl_map_nx_getput (map, key, value, oldvaluep);
+ if (result < 0)
+ xalloc_die ();
+ return result;
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif /* _GL_XMAP_H */
diff --git a/gl/lib/gl_xset.c b/gl/lib/gl_xset.c
new file mode 100644
index 00000000..83557c04
--- /dev/null
+++ b/gl/lib/gl_xset.c
@@ -0,0 +1,3 @@
+#include <config.h>
+#define GL_XSET_INLINE _GL_EXTERN_INLINE
+#include "gl_xset.h"
diff --git a/gl/lib/gl_xset.h b/gl/lib/gl_xset.h
new file mode 100644
index 00000000..23496dc4
--- /dev/null
+++ b/gl/lib/gl_xset.h
@@ -0,0 +1,76 @@
+/* Abstract set data type, with out-of-memory checking.
+ Copyright (C) 2009-2019 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2009.
+
+ 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 <https://www.gnu.org/licenses/>. */
+
+#ifndef _GL_XSET_H
+#define _GL_XSET_H
+
+#include "gl_set.h"
+#include "xalloc.h"
+
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
+_GL_INLINE_HEADER_BEGIN
+#ifndef GL_XSET_INLINE
+# define GL_XSET_INLINE _GL_INLINE
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* These functions are thin wrappers around the corresponding functions with
+ _nx_ infix from gl_set.h. Upon out-of-memory, they invoke xalloc_die (),
+ instead of returning an error indicator. */
+#if 0 /* These are defined inline below. */
+extern gl_set_t gl_set_create_empty (gl_set_implementation_t implementation,
+ gl_setelement_equals_fn equals_fn,
+ gl_setelement_hashcode_fn hashcode_fn,
+ gl_setelement_dispose_fn dispose_fn);
+extern bool gl_set_add (gl_set_t set, const void *elt);
+#endif
+
+GL_XSET_INLINE gl_set_t
+gl_set_create_empty (gl_set_implementation_t implementation,
+ gl_setelement_equals_fn equals_fn,
+ gl_setelement_hashcode_fn hashcode_fn,
+ gl_setelement_dispose_fn dispose_fn)
+{
+ gl_set_t result =
+ gl_set_nx_create_empty (implementation, equals_fn, hashcode_fn, dispose_fn);
+ if (result == NULL)
+ xalloc_die ();
+ return result;
+}
+
+GL_XSET_INLINE bool
+gl_set_add (gl_set_t set, const void *elt)
+{
+ int result = gl_set_nx_add (set, elt);
+ if (result < 0)
+ xalloc_die ();
+ return result;
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif /* _GL_XSET_H */
diff --git a/gl/lib/hash-pjw-bare.c b/gl/lib/hash-pjw-bare.c
new file mode 100644
index 00000000..1b6f26bf
--- /dev/null
+++ b/gl/lib/hash-pjw-bare.c
@@ -0,0 +1,42 @@
+/* hash-pjw-bare.c -- compute a hash value from a provided buffer.
+
+ Copyright (C) 2012-2019 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 <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+#include "hash-pjw-bare.h"
+
+#include <limits.h>
+
+#define SIZE_BITS (sizeof (size_t) * CHAR_BIT)
+
+/* Return a hash of the N bytes of X using the method described by
+ Bruno Haible in https://www.haible.de/bruno/hashfunc.html.
+ Note that while many hash functions reduce their result via modulo
+ to a 0..table_size-1 range, this function does not do that. */
+
+size_t
+hash_pjw_bare (const void *x, size_t n)
+{
+ const unsigned char *s = x;
+ size_t h = 0;
+ unsigned i;
+
+ for (i = 0; i < n; i++)
+ h = s[i] + ((h << 9) | (h >> (SIZE_BITS - 9)));
+
+ return h;
+}
diff --git a/gl/lib/hash-pjw-bare.h b/gl/lib/hash-pjw-bare.h
new file mode 100644
index 00000000..8fd8d9fb
--- /dev/null
+++ b/gl/lib/hash-pjw-bare.h
@@ -0,0 +1,24 @@
+/* hash-pjw-bare.h -- declaration for a simple hash function
+ Copyright (C) 2012-2019 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 <https://www.gnu.org/licenses/>. */
+
+#include <stddef.h>
+
+/* Compute a hash code for a buffer starting at X and of size N,
+ and return the hash code. Note that unlike hash_pjw(), it does not
+ return it modulo a table size.
+ The result is platform dependent: it depends on the size of the 'size_t'
+ type. */
+extern size_t hash_pjw_bare (const void *x, size_t n) _GL_ATTRIBUTE_PURE;
diff --git a/gl/lib/lchown.c b/gl/lib/lchown.c
new file mode 100644
index 00000000..03138c29
--- /dev/null
+++ b/gl/lib/lchown.c
@@ -0,0 +1,117 @@
+/* Provide a stub lchown function for systems that lack it.
+
+ Copyright (C) 1998-1999, 2002, 2004, 2006-2007, 2009-2019 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 <https://www.gnu.org/licenses/>. */
+
+/* written by Jim Meyering */
+
+#include <config.h>
+
+#include <unistd.h>
+
+#include <errno.h>
+#include <stdbool.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#if !HAVE_LCHOWN
+
+/* If the system chown does not follow symlinks, we don't want it
+ replaced by gnulib's chown, which does follow symlinks. */
+# if CHOWN_MODIFIES_SYMLINK
+# undef chown
+# endif
+
+/* Work just like chown, except when FILE is a symbolic link.
+ In that case, set errno to EOPNOTSUPP and return -1.
+ But if autoconf tests determined that chown modifies
+ symlinks, then just call chown. */
+
+int
+lchown (const char *file, uid_t uid, gid_t gid)
+{
+# if HAVE_CHOWN
+# if ! CHOWN_MODIFIES_SYMLINK
+ struct stat stats;
+
+ if (lstat (file, &stats) == 0 && S_ISLNK (stats.st_mode))
+ {
+ errno = EOPNOTSUPP;
+ return -1;
+ }
+# endif
+
+ return chown (file, uid, gid);
+
+# else /* !HAVE_CHOWN */
+ errno = ENOSYS;
+ return -1;
+# endif
+}
+
+#else /* HAVE_LCHOWN */
+
+# undef lchown
+
+/* Work around trailing slash bugs in lchown. */
+int
+rpl_lchown (const char *file, uid_t uid, gid_t gid)
+{
+ bool stat_valid = false;
+ int result;
+
+# if CHOWN_CHANGE_TIME_BUG
+ struct stat st;
+
+ if (gid != (gid_t) -1 || uid != (uid_t) -1)
+ {
+ if (lstat (file, &st))
+ return -1;
+ stat_valid = true;
+ if (!S_ISLNK (st.st_mode))
+ return chown (file, uid, gid);
+ }
+# endif
+
+# if CHOWN_TRAILING_SLASH_BUG
+ if (!stat_valid)
+ {
+ size_t len = strlen (file);
+ if (len && file[len - 1] == '/')
+ return chown (file, uid, gid);
+ }
+# endif
+
+ result = lchown (file, uid, gid);
+
+# if CHOWN_CHANGE_TIME_BUG && HAVE_LCHMOD
+ if (result == 0 && stat_valid
+ && (uid == st.st_uid || uid == (uid_t) -1)
+ && (gid == st.st_gid || gid == (gid_t) -1))
+ {
+ /* No change in ownership, but at least one argument was not -1,
+ so we are required to update ctime. Since lchown succeeded,
+ we assume that lchmod will do likewise. But if the system
+ lacks lchmod and lutimes, we are out of luck. Oh well. */
+ result = lchmod (file, st.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO
+ | S_ISUID | S_ISGID | S_ISVTX));
+ }
+# endif
+
+ return result;
+}
+
+#endif /* HAVE_LCHOWN */
diff --git a/gl/lib/regexec.c b/gl/lib/regexec.c
index 21cf7915..2f7cb5dc 100644
--- a/gl/lib/regexec.c
+++ b/gl/lib/regexec.c
@@ -2207,7 +2207,7 @@ sift_states_iter_mb (const re_match_context_t *mctx, re_sift_context_t *sctx,
dfa->nexts[node_idx]))
/* The node can't accept the "multi byte", or the
destination was already thrown away, then the node
- could't accept the current input "multi byte". */
+ couldn't accept the current input "multi byte". */
naccepted = 0;
/* Otherwise, it is sure that the node could accept
'naccepted' bytes input. */
diff --git a/gl/lib/stdopen.c b/gl/lib/stdopen.c
new file mode 100644
index 00000000..29350d1b
--- /dev/null
+++ b/gl/lib/stdopen.c
@@ -0,0 +1,66 @@
+/* stdopen.c - ensure that the three standard file descriptors are in use
+
+ Copyright (C) 2005-2006, 2019 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 and Jim Meyering. */
+
+#include <config.h>
+
+#include "stdopen.h"
+
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <errno.h>
+
+/* Try to ensure that all of the standard file numbers (0, 1, 2)
+ are in use. Without this, each application would have to guard
+ every call to open, dup, fopen, etc. with tests to ensure they
+ don't use one of the special file numbers when opening a file.
+ Return zero if successful, an errno value if at least one of
+ the file descriptors is initially closed and could not be opened. */
+
+int
+stdopen (void)
+{
+ int fd;
+ for (fd = STDIN_FILENO; fd <= STDERR_FILENO; fd++)
+ {
+ if (fcntl (fd, F_GETFD) < 0)
+ {
+ /* Open /dev/null with the contrary mode so that the typical
+ read (stdin) or write (stdout, stderr) operation will fail.
+ With descriptor 0, we can do even better on systems that
+ have /dev/full, by opening that write-only instead of
+ /dev/null. The only drawback is that a write-provoked
+ failure comes with a misleading errno value, ENOSPC. */
+ int mode = fd == STDIN_FILENO ? O_WRONLY : O_RDONLY;
+ int full_fd = fd == STDIN_FILENO ? open ("/dev/full", mode) : -1;
+ int new_fd = full_fd < 0 ? open ("/dev/null", mode) : full_fd;
+ if (new_fd < 0)
+ return errno;
+ if (STDERR_FILENO < new_fd)
+ {
+ /* 0, 1, and 2 are already open somehow.
+ Our is not to reason why. */
+ close (new_fd);
+ return 0;
+ }
+ }
+ }
+
+ return 0;
+}
diff --git a/gl/lib/stdopen.h b/gl/lib/stdopen.h
new file mode 100644
index 00000000..27901d39
--- /dev/null
+++ b/gl/lib/stdopen.h
@@ -0,0 +1,14 @@
+#ifndef STDOPEN_H
+# define STDOPEN_H 1
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+int stdopen (void);
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif
diff --git a/gl/lib/sys_stat.in.h b/gl/lib/sys_stat.in.h
index 58fa93fd..9ddd1a8d 100644
--- a/gl/lib/sys_stat.in.h
+++ b/gl/lib/sys_stat.in.h
@@ -54,9 +54,16 @@
/* The definition of _GL_WARN_ON_USE is copied here. */
+/* Before doing "#define mknod rpl_mknod" below, we need to include all
+ headers that may declare mknod(). OS/2 kLIBC declares mknod() in
+ <unistd.h>, not in <sys/stat.h>. */
+#ifdef __KLIBC__
+# include <unistd.h>
+#endif
+
/* Before doing "#define mkdir rpl_mkdir" below, we need to include all
headers that may declare mkdir(). Native Windows platforms declare mkdir
- in <io.h> and/or <direct.h>, not in <unistd.h>. */
+ in <io.h> and/or <direct.h>, not in <sys/stat.h>. */
#if defined _WIN32 && ! defined __CYGWIN__
# include <io.h> /* mingw32, mingw64 */
# include <direct.h> /* mingw64, MSVC 9 */
diff --git a/gl/lib/vasnprintf.c b/gl/lib/vasnprintf.c
index c4759037..f1f47f0d 100644
--- a/gl/lib/vasnprintf.c
+++ b/gl/lib/vasnprintf.c
@@ -4874,6 +4874,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
# if ! (((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) \
&& !defined __UCLIBC__) \
|| (defined __APPLE__ && defined __MACH__) \
+ || defined __ANDROID__ \
|| (defined _WIN32 && ! defined __CYGWIN__))
fbp[1] = '%';
fbp[2] = 'n';
@@ -4895,6 +4896,14 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
On Mac OS X 10.13 or newer, the use of %n in format strings
in writable memory by default crashes the program, so we
should avoid it in this situation. */
+ /* On Android, 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.
+ Starting on 2018-03-07, the use of %n in format strings
+ produces a fatal error (see
+ <https://android.googlesource.com/platform/bionic/+/41398d03b7e8e0dfb951660ae713e682e9fc0336>),
+ so we should avoid it. */
/* On native Windows systems (such as mingw), we can avoid using
%n because:
- Although the gl_SNPRINTF_TRUNCATION_C99 test fails,
diff --git a/gl/lib/verify.h b/gl/lib/verify.h
index b2e5f644..6930645a 100644
--- a/gl/lib/verify.h
+++ b/gl/lib/verify.h
@@ -26,7 +26,7 @@
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.
+ This is supported by GCC 6.1.0 and later, 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
@@ -36,9 +36,7 @@
&& !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
+#if (6 <= __GNUC__) && defined __cplusplus
# define _GL_HAVE_STATIC_ASSERT 1
#endif
diff --git a/gl/lib/xstdopen.c b/gl/lib/xstdopen.c
new file mode 100644
index 00000000..677a2801
--- /dev/null
+++ b/gl/lib/xstdopen.c
@@ -0,0 +1,35 @@
+/* Ensure that stdin, stdout, stderr are open.
+ Copyright (C) 2019 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 <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include "xstdopen.h"
+
+#include "stdopen.h"
+#include "error.h"
+#include "exitfail.h"
+
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+
+void
+xstdopen (void)
+{
+ int stdopen_errno = stdopen ();
+ if (stdopen_errno != 0)
+ error (exit_failure, stdopen_errno, _("standard file descriptors"));
+}
diff --git a/gl/lib/xstdopen.h b/gl/lib/xstdopen.h
new file mode 100644
index 00000000..08a8a042
--- /dev/null
+++ b/gl/lib/xstdopen.h
@@ -0,0 +1,28 @@
+/* Ensure that stdin, stdout, stderr are open.
+ Copyright (C) 2019 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 <https://www.gnu.org/licenses/>. */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Ensures that the file descriptors of stdin, stdout, stderr (0, 1, 2) are
+ open. Exits the program with an error message upon failure; the error
+ message may not appear if stderr is closed. */
+extern void xstdopen (void);
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/gl/m4/chown.m4 b/gl/m4/chown.m4
new file mode 100644
index 00000000..d92fd1c1
--- /dev/null
+++ b/gl/m4/chown.m4
@@ -0,0 +1,208 @@
+# serial 30
+# Determine whether we need the chown wrapper.
+
+dnl Copyright (C) 1997-2001, 2003-2005, 2007, 2009-2019 Free Software
+dnl 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.
+
+# chown should accept arguments of -1 for uid and gid, and it should
+# dereference symlinks. If it doesn't, arrange to use the replacement
+# function.
+
+# From Jim Meyering.
+
+# This is taken from the following Autoconf patch:
+# https://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=7fbb553727ed7e0e689a17594b58559ecf3ea6e9
+AC_DEFUN([AC_FUNC_CHOWN],
+[
+ AC_REQUIRE([AC_TYPE_UID_T])dnl
+ AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles
+ AC_CHECK_HEADERS([unistd.h])
+ AC_CACHE_CHECK([for working chown],
+ [ac_cv_func_chown_works],
+ [AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [AC_INCLUDES_DEFAULT
+ [#include <fcntl.h>
+ ]],
+ [[
+ char *f = "conftest.chown";
+ struct stat before, after;
+
+ if (creat (f, 0600) < 0)
+ return 1;
+ if (stat (f, &before) < 0)
+ return 1;
+ if (chown (f, (uid_t) -1, (gid_t) -1) == -1)
+ return 1;
+ if (stat (f, &after) < 0)
+ return 1;
+ return ! (before.st_uid == after.st_uid && before.st_gid == after.st_gid);
+ ]])
+ ],
+ [ac_cv_func_chown_works=yes],
+ [ac_cv_func_chown_works=no],
+ [case "$host_os" in # ((
+ # Guess yes on Linux systems.
+ linux-* | linux) ac_cv_func_chown_works="guessing yes" ;;
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) ac_cv_func_chown_works="guessing yes" ;;
+ # Guess no on native Windows.
+ mingw*) ac_cv_func_chown_works="guessing no" ;;
+ # If we don't know, assume the worst.
+ *) ac_cv_func_chown_works="guessing no" ;;
+ esac
+ ])
+ rm -f conftest.chown
+ ])
+ case "$ac_cv_func_chown_works" in
+ *yes)
+ AC_DEFINE([HAVE_CHOWN], [1],
+ [Define to 1 if your system has a working `chown' function.])
+ ;;
+ esac
+])# AC_FUNC_CHOWN
+
+AC_DEFUN_ONCE([gl_FUNC_CHOWN],
+[
+ AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+ AC_REQUIRE([AC_TYPE_UID_T])
+ AC_REQUIRE([AC_FUNC_CHOWN])
+ AC_REQUIRE([gl_FUNC_CHOWN_FOLLOWS_SYMLINK])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_CHECK_FUNCS_ONCE([chown fchown])
+
+ dnl mingw lacks chown altogether.
+ if test $ac_cv_func_chown = no; then
+ HAVE_CHOWN=0
+ else
+ dnl Some old systems treated chown like lchown.
+ if test $gl_cv_func_chown_follows_symlink = no; then
+ REPLACE_CHOWN=1
+ fi
+
+ dnl Some old systems tried to use uid/gid -1 literally.
+ case "$ac_cv_func_chown_works" in
+ *no)
+ AC_DEFINE([CHOWN_FAILS_TO_HONOR_ID_OF_NEGATIVE_ONE], [1],
+ [Define if chown is not POSIX compliant regarding IDs of -1.])
+ REPLACE_CHOWN=1
+ ;;
+ esac
+
+ dnl Solaris 9 ignores trailing slash.
+ dnl FreeBSD 7.2 mishandles trailing slash on symlinks.
+ dnl Likewise for AIX 7.1.
+ AC_CACHE_CHECK([whether chown honors trailing slash],
+ [gl_cv_func_chown_slash_works],
+ [touch conftest.file && rm -f conftest.link
+ AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <unistd.h>
+#include <stdlib.h>
+#include <errno.h>
+]], [[ if (symlink ("conftest.file", "conftest.link")) return 1;
+ if (chown ("conftest.link/", getuid (), getgid ()) == 0) return 2;
+ ]])],
+ [gl_cv_func_chown_slash_works=yes],
+ [gl_cv_func_chown_slash_works=no],
+ [case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu*) gl_cv_func_chown_slash_works="guessing yes" ;;
+ # If we don't know, assume the worst.
+ *) gl_cv_func_chown_slash_works="guessing no" ;;
+ esac
+ ])
+ rm -f conftest.link conftest.file])
+ case "$gl_cv_func_chown_slash_works" in
+ *yes) ;;
+ *)
+ AC_DEFINE([CHOWN_TRAILING_SLASH_BUG], [1],
+ [Define to 1 if chown mishandles trailing slash.])
+ REPLACE_CHOWN=1
+ ;;
+ esac
+
+ dnl OpenBSD fails to update ctime if ownership does not change.
+ AC_CACHE_CHECK([whether chown always updates ctime],
+ [gl_cv_func_chown_ctime_works],
+ [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <unistd.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+]], [[ struct stat st1, st2;
+ if (close (creat ("conftest.file", 0600))) return 1;
+ if (stat ("conftest.file", &st1)) return 2;
+ sleep (1);
+ if (chown ("conftest.file", st1.st_uid, st1.st_gid)) return 3;
+ if (stat ("conftest.file", &st2)) return 4;
+ if (st2.st_ctime <= st1.st_ctime) return 5;
+ ]])],
+ [gl_cv_func_chown_ctime_works=yes],
+ [gl_cv_func_chown_ctime_works=no],
+ [case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu*) gl_cv_func_chown_ctime_works="guessing yes" ;;
+ # If we don't know, assume the worst.
+ *) gl_cv_func_chown_ctime_works="guessing no" ;;
+ esac
+ ])
+ rm -f conftest.file])
+ case "$gl_cv_func_chown_ctime_works" in
+ *yes) ;;
+ *)
+ AC_DEFINE([CHOWN_CHANGE_TIME_BUG], [1], [Define to 1 if chown fails
+ to change ctime when at least one argument was not -1.])
+ REPLACE_CHOWN=1
+ ;;
+ esac
+ fi
+])
+
+# Determine whether chown follows symlinks (it should).
+AC_DEFUN_ONCE([gl_FUNC_CHOWN_FOLLOWS_SYMLINK],
+[
+ AC_CACHE_CHECK(
+ [whether chown dereferences symlinks],
+ [gl_cv_func_chown_follows_symlink],
+ [
+ AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#include <unistd.h>
+#include <stdlib.h>
+#include <errno.h>
+
+ int
+ main ()
+ {
+ int result = 0;
+ char const *dangling_symlink = "conftest.dangle";
+
+ unlink (dangling_symlink);
+ if (symlink ("conftest.no-such", dangling_symlink))
+ abort ();
+
+ /* Exit successfully on a conforming system,
+ i.e., where chown must fail with ENOENT. */
+ if (chown (dangling_symlink, getuid (), getgid ()) == 0)
+ result |= 1;
+ if (errno != ENOENT)
+ result |= 2;
+ return result;
+ }
+ ]])],
+ [gl_cv_func_chown_follows_symlink=yes],
+ [gl_cv_func_chown_follows_symlink=no],
+ [gl_cv_func_chown_follows_symlink=yes]
+ )
+ ]
+ )
+
+ if test $gl_cv_func_chown_follows_symlink = no; then
+ AC_DEFINE([CHOWN_MODIFIES_SYMLINK], [1],
+ [Define if chown modifies symlinks.])
+ fi
+])
diff --git a/gl/m4/getcwd-path-max.m4 b/gl/m4/getcwd-path-max.m4
index 2cefc00a..0ae3e1e8 100644
--- a/gl/m4/getcwd-path-max.m4
+++ b/gl/m4/getcwd-path-max.m4
@@ -1,4 +1,4 @@
-# serial 21
+# serial 22
# Check for several getcwd bugs with long file names.
# If so, arrange to compile the wrapper function.
@@ -111,12 +111,20 @@ main ()
/* If mkdir or chdir fails, it could be that this system cannot create
any file with an absolute name longer than PATH_MAX, such as cygwin.
If so, leave fail as 0, because the current working directory can't
- be too long for getcwd if it can't even be created. For other
- errors, be pessimistic and consider that as a failure, too. */
+ be too long for getcwd if it can't even be created. On Linux with
+ the 9p file system, mkdir fails with error EINVAL when cwd_len gets
+ too long; ignore this failure because the getcwd() system call
+ produces good results whereas the gnulib substitute calls getdents64
+ which fails with error EPROTO.
+ For other errors, be pessimistic and consider that as a failure,
+ too. */
if (mkdir (DIR_NAME, S_IRWXU) < 0 || chdir (DIR_NAME) < 0)
{
if (! (errno == ERANGE || is_ENAMETOOLONG (errno)))
- fail = 20;
+ #ifdef __linux__
+ if (! (errno == EINVAL))
+ #endif
+ fail = 20;
break;
}
diff --git a/gl/m4/gnulib-comp.m4 b/gl/m4/gnulib-comp.m4
index d4e06db1..1e73baac 100644
--- a/gl/m4/gnulib-comp.m4
+++ b/gl/m4/gnulib-comp.m4
@@ -48,6 +48,7 @@ AC_DEFUN([gl_EARLY],
# Code from module alloca-opt:
# Code from module areadlink-with-size:
# Code from module argp:
+ # Code from module array-list:
# Code from module assure:
# Code from module at-internal:
# Code from module bitrotate:
@@ -58,6 +59,7 @@ AC_DEFUN([gl_EARLY],
# Code from module canonicalize-lgpl:
# Code from module chdir:
# Code from module chdir-long:
+ # Code from module chown:
# Code from module clock-time:
# Code from module cloexec:
# Code from module close:
@@ -114,7 +116,10 @@ AC_DEFUN([gl_EARLY],
# Code from module gnupload:
# Code from module hard-locale:
# Code from module hash:
+ # Code from module hash-map:
# Code from module hash-pjw:
+ # Code from module hash-pjw-bare:
+ # Code from module hash-set:
# Code from module hash-triple:
# Code from module havelib:
# Code from module idpriv-drop:
@@ -125,9 +130,12 @@ AC_DEFUN([gl_EARLY],
# Code from module langinfo:
# Code from module largefile:
AC_REQUIRE([AC_SYS_LARGEFILE])
+ # Code from module lchown:
# Code from module lib-ignore:
# Code from module libc-config:
# Code from module limits-h:
+ # Code from module linkedhash-list:
+ # Code from module list:
# Code from module localcharset:
# Code from module locale:
# Code from module localeconv:
@@ -137,6 +145,7 @@ AC_DEFUN([gl_EARLY],
# Code from module malloc-gnu:
# Code from module malloc-posix:
# Code from module malloca:
+ # Code from module map:
# Code from module mbrtowc:
# Code from module mbsinit:
# Code from module mbsrtowcs:
@@ -166,6 +175,7 @@ AC_DEFUN([gl_EARLY],
# Code from module progname:
# Code from module raise:
# Code from module rawmemchr:
+ # Code from module rbtree-list:
# Code from module readdir:
# Code from module readlink:
# Code from module realloc-posix:
@@ -178,6 +188,7 @@ AC_DEFUN([gl_EARLY],
# Code from module save-cwd:
# Code from module scratch_buffer:
# Code from module select:
+ # Code from module set:
# Code from module setenv:
# Code from module sigaction:
# Code from module signal:
@@ -206,6 +217,7 @@ AC_DEFUN([gl_EARLY],
# Code from module stdint:
# Code from module stdio:
# Code from module stdlib:
+ # Code from module stdopen:
# Code from module strcase:
# Code from module strcasestr:
# Code from module strcasestr-simple:
@@ -252,7 +264,11 @@ AC_DEFUN([gl_EARLY],
# Code from module xalloc-die:
# Code from module xalloc-oversized:
# Code from module xgetcwd:
+ # Code from module xlist:
+ # Code from module xmap:
+ # Code from module xset:
# Code from module xsize:
+ # Code from module xstdopen:
# Code from module xstrndup:
# Code from module xvasprintf:
])
@@ -305,6 +321,14 @@ AC_SUBST([LTALLOCA])
AC_LIBOBJ([chdir-long])
gl_PREREQ_CHDIR_LONG
fi
+ gl_FUNC_CHOWN
+ if test $HAVE_CHOWN = 0 || test $REPLACE_CHOWN = 1; then
+ AC_LIBOBJ([chown])
+ fi
+ if test $REPLACE_CHOWN = 1 && test $ac_cv_func_fchown = no; then
+ AC_LIBOBJ([fchown-stub])
+ fi
+ gl_UNISTD_MODULE_INDICATOR([chown])
gl_CLOCK_TIME
gl_MODULE_INDICATOR_FOR_TESTS([cloexec])
gl_FUNC_CLOSE
@@ -498,6 +522,11 @@ AC_SUBST([LTALLOCA])
gl_SYS_IOCTL_MODULE_INDICATOR([ioctl])
gl_LANGINFO_H
AC_REQUIRE([gl_LARGEFILE])
+ gl_FUNC_LCHOWN
+ if test $HAVE_LCHOWN = 0 || test $REPLACE_LCHOWN = 1; then
+ AC_LIBOBJ([lchown])
+ fi
+ gl_UNISTD_MODULE_INDICATOR([lchown])
gl_IGNORE_UNUSED_LIBRARIES
gl___INLINE
gl_LIMITS_H
@@ -1055,6 +1084,7 @@ AC_DEFUN([gl_FILE_LIST], [
lib/cdefs.h
lib/chdir-long.c
lib/chdir-long.h
+ lib/chown.c
lib/cloexec.c
lib/cloexec.h
lib/close.c
@@ -1076,6 +1106,7 @@ AC_DEFUN([gl_FILE_LIST], [
lib/exitfail.c
lib/exitfail.h
lib/fchdir.c
+ lib/fchown-stub.c
lib/fcntl.c
lib/fcntl.in.h
lib/fd-hook.c
@@ -1119,6 +1150,37 @@ AC_DEFUN([gl_FILE_LIST], [
lib/gettext.h
lib/gettime.c
lib/gettimeofday.c
+ lib/gl_anyhash1.h
+ lib/gl_anyhash2.h
+ lib/gl_anyhash_primes.h
+ lib/gl_anylinked_list1.h
+ lib/gl_anylinked_list2.h
+ lib/gl_anyrbtree_list1.h
+ lib/gl_anyrbtree_list2.h
+ lib/gl_anytree_list1.h
+ lib/gl_anytree_list2.h
+ lib/gl_array_list.c
+ lib/gl_array_list.h
+ lib/gl_hash_map.c
+ lib/gl_hash_map.h
+ lib/gl_hash_set.c
+ lib/gl_hash_set.h
+ lib/gl_linkedhash_list.c
+ lib/gl_linkedhash_list.h
+ lib/gl_list.c
+ lib/gl_list.h
+ lib/gl_map.c
+ lib/gl_map.h
+ lib/gl_rbtree_list.c
+ lib/gl_rbtree_list.h
+ lib/gl_set.c
+ lib/gl_set.h
+ lib/gl_xlist.c
+ lib/gl_xlist.h
+ lib/gl_xmap.c
+ lib/gl_xmap.h
+ lib/gl_xset.c
+ lib/gl_xset.h
lib/glob-libc.h
lib/glob.c
lib/glob.in.h
@@ -1130,6 +1192,8 @@ AC_DEFUN([gl_FILE_LIST], [
lib/glthread/threadlib.c
lib/hard-locale.c
lib/hard-locale.h
+ lib/hash-pjw-bare.c
+ lib/hash-pjw-bare.h
lib/hash-pjw.c
lib/hash-pjw.h
lib/hash-triple.c
@@ -1143,6 +1207,7 @@ AC_DEFUN([gl_FILE_LIST], [
lib/ioctl.c
lib/itold.c
lib/langinfo.in.h
+ lib/lchown.c
lib/libc-config.h
lib/limits.in.h
lib/localcharset.c
@@ -1244,6 +1309,8 @@ AC_DEFUN([gl_FILE_LIST], [
lib/stdio-write.c
lib/stdio.in.h
lib/stdlib.in.h
+ lib/stdopen.c
+ lib/stdopen.h
lib/str-two-way.h
lib/strcasecmp.c
lib/strcasestr.c
@@ -1307,6 +1374,8 @@ AC_DEFUN([gl_FILE_LIST], [
lib/xmalloc.c
lib/xsize.c
lib/xsize.h
+ lib/xstdopen.c
+ lib/xstdopen.h
lib/xstrndup.c
lib/xstrndup.h
lib/xvasprintf.c
@@ -1321,6 +1390,7 @@ AC_DEFUN([gl_FILE_LIST], [
m4/builtin-expect.m4
m4/canonicalize.m4
m4/chdir-long.m4
+ m4/chown.m4
m4/clock_time.m4
m4/close.m4
m4/closedir.m4
@@ -1379,6 +1449,7 @@ AC_DEFUN([gl_FILE_LIST], [
m4/ioctl.m4
m4/langinfo_h.m4
m4/largefile.m4
+ m4/lchown.m4
m4/lib-ignore.m4
m4/lib-ld.m4
m4/lib-link.m4
diff --git a/gl/m4/lchown.m4 b/gl/m4/lchown.m4
new file mode 100644
index 00000000..3d524199
--- /dev/null
+++ b/gl/m4/lchown.m4
@@ -0,0 +1,38 @@
+# serial 17
+# Determine whether we need the lchown wrapper.
+
+dnl Copyright (C) 1998, 2001, 2003-2007, 2009-2019 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 Jim Meyering.
+dnl Provide lchown on systems that lack it, and work around bugs
+dnl on systems that have it.
+
+AC_DEFUN([gl_FUNC_LCHOWN],
+[
+ AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+ AC_REQUIRE([gl_FUNC_CHOWN])
+ AC_CHECK_FUNCS_ONCE([lchmod])
+ AC_CHECK_FUNCS([lchown])
+ if test $ac_cv_func_lchown = no; then
+ HAVE_LCHOWN=0
+ else
+ dnl Trailing slash and ctime bugs in chown also occur in lchown.
+ case "$gl_cv_func_chown_slash_works" in
+ *yes) ;;
+ *)
+ REPLACE_LCHOWN=1
+ ;;
+ esac
+ case "$gl_cv_func_chown_ctime_works" in
+ *yes) ;;
+ *)
+ REPLACE_LCHOWN=1
+ ;;
+ esac
+ fi
+])
diff --git a/gl/m4/math_h.m4 b/gl/m4/math_h.m4
index 7e798314..3d5af84f 100644
--- a/gl/m4/math_h.m4
+++ b/gl/m4/math_h.m4
@@ -1,4 +1,4 @@
-# math_h.m4 serial 116
+# math_h.m4 serial 119
dnl Copyright (C) 2007-2019 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -268,8 +268,10 @@ AC_DEFUN([gl_MATH_H_DEFAULTS],
REPLACE_COSF=0; AC_SUBST([REPLACE_COSF])
REPLACE_COSHF=0; AC_SUBST([REPLACE_COSHF])
REPLACE_EXPF=0; AC_SUBST([REPLACE_EXPF])
+ REPLACE_EXPL=0; AC_SUBST([REPLACE_EXPL])
REPLACE_EXPM1=0; AC_SUBST([REPLACE_EXPM1])
REPLACE_EXPM1F=0; AC_SUBST([REPLACE_EXPM1F])
+ REPLACE_EXPM1L=0; AC_SUBST([REPLACE_EXPM1L])
REPLACE_EXP2=0; AC_SUBST([REPLACE_EXP2])
REPLACE_EXP2L=0; AC_SUBST([REPLACE_EXP2L])
REPLACE_FABSL=0; AC_SUBST([REPLACE_FABSL])
@@ -318,6 +320,7 @@ AC_DEFUN([gl_MATH_H_DEFAULTS],
REPLACE_REMAINDER=0; AC_SUBST([REPLACE_REMAINDER])
REPLACE_REMAINDERF=0; AC_SUBST([REPLACE_REMAINDERF])
REPLACE_REMAINDERL=0; AC_SUBST([REPLACE_REMAINDERL])
+ REPLACE_RINTL=0; AC_SUBST([REPLACE_RINTL])
REPLACE_ROUND=0; AC_SUBST([REPLACE_ROUND])
REPLACE_ROUNDF=0; AC_SUBST([REPLACE_ROUNDF])
REPLACE_ROUNDL=0; AC_SUBST([REPLACE_ROUNDL])
diff --git a/gl/m4/printf.m4 b/gl/m4/printf.m4
index 1db13bf8..cbf6ae48 100644
--- a/gl/m4/printf.m4
+++ b/gl/m4/printf.m4
@@ -1,4 +1,4 @@
-# printf.m4 serial 59
+# printf.m4 serial 60
dnl Copyright (C) 2003, 2007-2019 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -79,6 +79,8 @@ changequote(,)dnl
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";;
+ # Guess yes on Android.
+ linux*-android*) gl_cv_func_printf_sizes_c99="guessing yes";;
changequote([,])dnl
# Guess yes on MSVC, no on mingw.
mingw*) AC_EGREP_CPP([Known], [
@@ -132,17 +134,20 @@ int main ()
[gl_cv_func_printf_long_double=yes],
[gl_cv_func_printf_long_double=no],
[case "$host_os" in
- beos*) gl_cv_func_printf_long_double="guessing no";;
- # Guess yes on MSVC, no on mingw.
- mingw*) AC_EGREP_CPP([Known], [
+ # Guess no on BeOS.
+ beos*) gl_cv_func_printf_long_double="guessing no";;
+ # Guess yes on Android.
+ linux*-android*) gl_cv_func_printf_long_double="guessing yes";;
+ # Guess yes on MSVC, no on mingw.
+ mingw*) AC_EGREP_CPP([Known], [
#ifdef _MSC_VER
Known
#endif
- ],
- [gl_cv_func_printf_long_double="guessing yes"],
- [gl_cv_func_printf_long_double="guessing no"])
- ;;
- *) gl_cv_func_printf_long_double="guessing yes";;
+ ],
+ [gl_cv_func_printf_long_double="guessing yes"],
+ [gl_cv_func_printf_long_double="guessing no"])
+ ;;
+ *) gl_cv_func_printf_long_double="guessing yes";;
esac
])
])
@@ -250,6 +255,8 @@ changequote(,)dnl
netbsd*) gl_cv_func_printf_infinite="guessing yes";;
# Guess yes on BeOS.
beos*) gl_cv_func_printf_infinite="guessing yes";;
+ # Guess no on Android.
+ linux*-android*) gl_cv_func_printf_infinite="guessing no";;
changequote([,])dnl
# Guess yes on MSVC, no on mingw.
mingw*) AC_EGREP_CPP([Known], [
@@ -456,6 +463,8 @@ changequote(,)dnl
# 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";;
+ # Guess no on Android.
+ linux*-android*) gl_cv_func_printf_infinite_long_double="guessing no";;
changequote([,])dnl
# Guess yes on MSVC, no on mingw.
mingw*) AC_EGREP_CPP([Known], [
@@ -566,6 +575,8 @@ int main ()
[gl_cv_func_printf_directive_a="guessing yes"],
[gl_cv_func_printf_directive_a="guessing no"])
;;
+ # Guess no on Android.
+ linux*-android*) gl_cv_func_printf_directive_a="guessing no";;
# Guess no on native Windows.
mingw*) gl_cv_func_printf_directive_a="guessing no";;
# If we don't know, assume the worst.
@@ -623,6 +634,8 @@ changequote(,)dnl
# Guess yes on Solaris >= 2.10.
solaris2.[1-9][0-9]*) gl_cv_func_printf_directive_f="guessing yes";;
solaris*) gl_cv_func_printf_directive_f="guessing no";;
+ # Guess no on Android.
+ linux*-android*) gl_cv_func_printf_directive_f="guessing no";;
changequote([,])dnl
# Guess yes on MSVC, no on mingw.
mingw*) AC_EGREP_CPP([Known], [
@@ -688,9 +701,11 @@ int main ()
[gl_cv_func_printf_directive_n=yes],
[gl_cv_func_printf_directive_n=no],
[case "$host_os" in
- # Guess no on native Windows.
- mingw*) gl_cv_func_printf_directive_n="guessing no";;
- *) gl_cv_func_printf_directive_n="guessing yes";;
+ # Guess no on Android.
+ linux*-android*) gl_cv_func_printf_directive_n="guessing no";;
+ # Guess no on native Windows.
+ mingw*) gl_cv_func_printf_directive_n="guessing no";;
+ *) gl_cv_func_printf_directive_n="guessing yes";;
esac
])
])
@@ -766,14 +781,16 @@ int main ()
[
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";;
- # Guess yes on native Windows.
- mingw*) gl_cv_func_printf_directive_ls="guessing yes";;
- *) gl_cv_func_printf_directive_ls="guessing yes";;
+ 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";;
+ # Guess no on Android.
+ linux*-android*) gl_cv_func_printf_directive_ls="guessing no";;
+ # Guess yes on native Windows.
+ mingw*) gl_cv_func_printf_directive_ls="guessing yes";;
+ *) gl_cv_func_printf_directive_ls="guessing yes";;
esac
changequote([,])dnl
])
@@ -810,11 +827,13 @@ int main ()
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";;
- # Guess no on native Windows.
- mingw* | pw*) gl_cv_func_printf_positions="guessing no";;
- *) gl_cv_func_printf_positions="guessing yes";;
+ gl_cv_func_printf_positions="guessing no";;
+ beos*) gl_cv_func_printf_positions="guessing no";;
+ # Guess yes on Android.
+ linux*-android*) gl_cv_func_printf_positions="guessing yes";;
+ # Guess no on native Windows.
+ mingw* | pw*) gl_cv_func_printf_positions="guessing no";;
+ *) gl_cv_func_printf_positions="guessing yes";;
esac
changequote([,])dnl
])
@@ -849,11 +868,13 @@ int main ()
[
changequote(,)dnl
case "$host_os" in
- cygwin*) gl_cv_func_printf_flag_grouping="guessing no";;
- netbsd*) gl_cv_func_printf_flag_grouping="guessing no";;
- # Guess no on native Windows.
- mingw* | pw*) gl_cv_func_printf_flag_grouping="guessing no";;
- *) gl_cv_func_printf_flag_grouping="guessing yes";;
+ cygwin*) gl_cv_func_printf_flag_grouping="guessing no";;
+ netbsd*) gl_cv_func_printf_flag_grouping="guessing no";;
+ # Guess no on Android.
+ linux*-android*) gl_cv_func_printf_flag_grouping="guessing no";;
+ # Guess no on native Windows.
+ mingw* | pw*) gl_cv_func_printf_flag_grouping="guessing no";;
+ *) gl_cv_func_printf_flag_grouping="guessing yes";;
esac
changequote([,])dnl
])
@@ -890,14 +911,16 @@ int main ()
[
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 on native Windows.
- mingw*) gl_cv_func_printf_flag_leftadjust="guessing yes";;
- # Guess yes otherwise.
- *) gl_cv_func_printf_flag_leftadjust="guessing yes";;
+ # 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 on Android.
+ linux*-android*) gl_cv_func_printf_flag_leftadjust="guessing yes";;
+ # Guess yes on native Windows.
+ mingw*) gl_cv_func_printf_flag_leftadjust="guessing yes";;
+ # Guess yes otherwise.
+ *) gl_cv_func_printf_flag_leftadjust="guessing yes";;
esac
changequote([,])dnl
])
@@ -935,14 +958,16 @@ int main ()
[
changequote(,)dnl
case "$host_os" in
- # Guess yes on glibc systems.
- *-gnu* | gnu*) gl_cv_func_printf_flag_zero="guessing yes";;
- # Guess yes on BeOS.
- beos*) gl_cv_func_printf_flag_zero="guessing yes";;
- # Guess no on native Windows.
- mingw*) gl_cv_func_printf_flag_zero="guessing no";;
- # If we don't know, assume the worst.
- *) gl_cv_func_printf_flag_zero="guessing no";;
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_printf_flag_zero="guessing yes";;
+ # Guess yes on BeOS.
+ beos*) gl_cv_func_printf_flag_zero="guessing yes";;
+ # Guess no on Android.
+ linux*-android*) gl_cv_func_printf_flag_zero="guessing no";;
+ # Guess no on native Windows.
+ mingw*) gl_cv_func_printf_flag_zero="guessing no";;
+ # If we don't know, assume the worst.
+ *) gl_cv_func_printf_flag_zero="guessing no";;
esac
changequote([,])dnl
])
@@ -995,10 +1020,12 @@ int main ()
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" ;;
+ 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" ;;
+ # Guess yes on Android.
+ linux*-android*) gl_cv_func_printf_precision="guessing yes" ;;
+ *) gl_cv_func_printf_precision="guessing yes" ;;
esac
changequote([,])dnl
])
@@ -1095,28 +1122,30 @@ changequote([,])dnl
if test "$gl_cv_func_printf_enomem" = "guessing no"; then
changequote(,)dnl
case "$host_os" in
- # Guess yes on glibc systems.
- *-gnu* | 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";;
+ # Guess yes on glibc systems.
+ *-gnu* | 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";;
+ # Guess no on Android.
+ linux*-android*) gl_cv_func_printf_enomem="guessing no";;
+ # If we don't know, assume the worst.
+ *) gl_cv_func_printf_enomem="guessing no";;
esac
changequote([,])dnl
fi
@@ -1208,6 +1237,8 @@ changequote(,)dnl
netbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
# Guess yes on BeOS.
beos*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
+ # Guess yes on Android.
+ linux*-android*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
# Guess no on native Windows.
mingw*) gl_cv_func_snprintf_truncation_c99="guessing no";;
# If we don't know, assume the worst.
@@ -1299,6 +1330,8 @@ changequote(,)dnl
netbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";;
# Guess yes on BeOS.
beos*) gl_cv_func_snprintf_retval_c99="guessing yes";;
+ # Guess yes on Android.
+ linux*-android*) gl_cv_func_snprintf_retval_c99="guessing yes";;
changequote([,])dnl
# Guess yes on MSVC, no on mingw.
mingw*) AC_EGREP_CPP([Known], [
@@ -1391,6 +1424,8 @@ changequote(,)dnl
netbsd*) gl_cv_func_snprintf_directive_n="guessing yes";;
# Guess yes on BeOS.
beos*) gl_cv_func_snprintf_directive_n="guessing yes";;
+ # Guess no on Android.
+ linux*-android*) gl_cv_func_snprintf_directive_n="guessing no";;
# Guess no on native Windows.
mingw*) gl_cv_func_snprintf_directive_n="guessing no";;
# If we don't know, assume the worst.
@@ -1440,9 +1475,11 @@ int main()
[gl_cv_func_snprintf_size1=yes],
[gl_cv_func_snprintf_size1=no],
[case "$host_os" in
- # Guess yes on native Windows.
- mingw*) gl_cv_func_snprintf_size1="guessing yes" ;;
- *) gl_cv_func_snprintf_size1="guessing yes" ;;
+ # Guess yes on Android.
+ linux*-android*) gl_cv_func_snprintf_size1="guessing yes" ;;
+ # Guess yes on native Windows.
+ mingw*) gl_cv_func_snprintf_size1="guessing yes" ;;
+ *) gl_cv_func_snprintf_size1="guessing yes" ;;
esac
])
])
@@ -1540,6 +1577,8 @@ changequote(,)dnl
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 Android.
+ linux*-android*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
# Guess yes on native Windows.
mingw* | pw*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
# If we don't know, assume the worst.
@@ -1626,6 +1665,7 @@ dnl NetBSD 4.0 . ? ? ? ? ? . ? . ? ? ? ? ? .
dnl NetBSD 3.0 . . . . # # . ? # # ? # . # . . . . . .
dnl Haiku . . . # # # . # . . . . . ? . . ? . . .
dnl BeOS # # . # # # . ? # . ? . # ? . . ? . . .
+dnl Android 4.3 . . # # # # # # . # . # . # . . . # . .
dnl old mingw / msvcrt # # # # # # . . # # . # # ? . # # # . .
dnl MSVC 9 # # # # # # # . # # . # # ? # # # # . .
dnl mingw 2009-2011 . # . # . . . . # # . . . ? . . . . . .
diff --git a/gl/m4/threadlib.m4 b/gl/m4/threadlib.m4
index f7841b60..bfc3bac8 100644
--- a/gl/m4/threadlib.m4
+++ b/gl/m4/threadlib.m4
@@ -1,4 +1,4 @@
-# threadlib.m4 serial 15
+# threadlib.m4 serial 16
dnl Copyright (C) 2005-2019 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -151,36 +151,6 @@ int main ()
*" -static "*) gl_cv_have_weak=no ;;
esac
])
- dnl Check whether the linker supports the --as-needed/--no-as-needed options.
- dnl Assume GCC, so that we can use the -Wl option.
- AC_CACHE_CHECK([whether the linker supports --as-needed],
- [gl_cv_linker_have_as_needed],
- [if test -n "$GCC"; then
- gl_saved_ldflags="$LDFLAGS"
- LDFLAGS="$gl_saved_ldflags -Wl,--as-needed -Wl,--no-as-needed"
- AC_LINK_IFELSE([AC_LANG_PROGRAM()],
- [gl_cv_linker_have_as_needed=yes],
- [gl_cv_linker_have_as_needed=no])
- LDFLAGS="$gl_saved_ldflags"
- else
- gl_cv_linker_have_as_needed=no
- fi
- ])
- dnl Check whether the linker supports the --push-state/--pop-state options.
- dnl Assume GCC, so that we can use the -Wl option.
- AC_CACHE_CHECK([whether the linker supports --push-state],
- [gl_cv_linker_have_push_state],
- [if test -n "$GCC"; then
- gl_saved_ldflags="$LDFLAGS"
- LDFLAGS="$gl_saved_ldflags -Wl,--push-state -Wl,--pop-state"
- AC_LINK_IFELSE([AC_LANG_PROGRAM()],
- [gl_cv_linker_have_push_state=yes],
- [gl_cv_linker_have_push_state=no])
- LDFLAGS="$gl_saved_ldflags"
- else
- gl_cv_linker_have_push_state=no
- fi
- ])
if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then
# On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that
# it groks <pthread.h>. It's added above, in gl_THREADLIB_EARLY_BODY.
@@ -259,32 +229,6 @@ int main ()
[Define if references to the POSIX multithreading library should be made weak.])
LIBTHREAD=
LTLIBTHREAD=
- dnl On platforms where GCC enables --as-needed by default, attempt
- dnl to make sure that LIBMULTITHREAD really links with -lpthread.
- dnl Otherwise linking with LIBMULTITHREAD has no effect; then
- dnl the weak symbols are not defined and thus evaluate to NULL.
- case "$LIBMULTITHREAD" in
- "") ;;
- -pthread)
- if test $gl_cv_linker_have_as_needed = yes; then
- if test $gl_cv_linker_have_push_state = yes; then
- LIBMULTITHREAD="$LIBMULTITHREAD -Wl,--push-state -Wl,--no-as-needed -lpthread -Wl,--pop-state"
- else
- LIBMULTITHREAD="$LIBMULTITHREAD -Wl,--no-as-needed -lpthread"
- fi
- fi
- ;;
- *)
- if test $gl_cv_linker_have_as_needed = yes; then
- if test $gl_cv_linker_have_push_state = yes; then
- LIBMULTITHREAD="-Wl,--push-state -Wl,--no-as-needed $LIBMULTITHREAD -Wl,--pop-state"
- else
- LIBMULTITHREAD="-Wl,--no-as-needed $LIBMULTITHREAD"
- fi
- fi
- ;;
- esac
- # TODO: May need to modify LTLIBMULTITHREAD similarly.
fi
fi
fi
@@ -317,18 +261,6 @@ int main ()
[Define if references to the old Solaris multithreading library should be made weak.])
LIBTHREAD=
LTLIBTHREAD=
- dnl On platforms where GCC enables --as-needed by default, attempt
- dnl to make sure that LIBMULTITHREAD really links with -lthread.
- dnl Otherwise linking with LIBMULTITHREAD has no effect; then
- dnl the weak symbols are not defined and thus evaluate to NULL.
- if test $gl_cv_linker_have_as_needed = yes; then
- if test $gl_cv_linker_have_push_state = yes; then
- LIBMULTITHREAD="-Wl,--push-state -Wl,--no-as-needed $LIBMULTITHREAD -Wl,--pop-state"
- else
- LIBMULTITHREAD="-Wl,--no-as-needed $LIBMULTITHREAD"
- fi
- fi
- # TODO: May need to modify LTLIBMULTITHREAD similarly.
fi
fi
fi
@@ -357,18 +289,6 @@ int main ()
[Define if references to the GNU Pth multithreading library should be made weak.])
LIBTHREAD=
LTLIBTHREAD=
- dnl On platforms where GCC enables --as-needed by default, attempt
- dnl to make sure that LIBMULTITHREAD really links with -lpth.
- dnl Otherwise linking with LIBMULTITHREAD has no effect; then
- dnl the weak symbols are not defined and thus evaluate to NULL.
- if test $gl_cv_linker_have_as_needed = yes; then
- if test $gl_cv_linker_have_push_state = yes; then
- LIBMULTITHREAD="-Wl,--push-state -Wl,--no-as-needed $LIBMULTITHREAD -Wl,--pop-state"
- else
- LIBMULTITHREAD="-Wl,--no-as-needed $LIBMULTITHREAD"
- fi
- fi
- # TODO: May need to modify LTLIBMULTITHREAD similarly.
fi
fi
else
diff --git a/gl/po/POTFILES.in b/gl/po/POTFILES.in
index 64bd989e..91ff8514 100644
--- a/gl/po/POTFILES.in
+++ b/gl/po/POTFILES.in
@@ -57,6 +57,7 @@ gl/lib/canonicalize.h
gl/lib/cdefs.h
gl/lib/chdir-long.c
gl/lib/chdir-long.h
+gl/lib/chown.c
gl/lib/cloexec.c
gl/lib/cloexec.h
gl/lib/close.c
@@ -78,6 +79,7 @@ gl/lib/error.h
gl/lib/exitfail.c
gl/lib/exitfail.h
gl/lib/fchdir.c
+gl/lib/fchown-stub.c
gl/lib/fcntl.c
gl/lib/fcntl.in.h
gl/lib/fd-hook.c
@@ -121,6 +123,37 @@ gl/lib/getprogname.h
gl/lib/gettext.h
gl/lib/gettime.c
gl/lib/gettimeofday.c
+gl/lib/gl_anyhash1.h
+gl/lib/gl_anyhash2.h
+gl/lib/gl_anyhash_primes.h
+gl/lib/gl_anylinked_list1.h
+gl/lib/gl_anylinked_list2.h
+gl/lib/gl_anyrbtree_list1.h
+gl/lib/gl_anyrbtree_list2.h
+gl/lib/gl_anytree_list1.h
+gl/lib/gl_anytree_list2.h
+gl/lib/gl_array_list.c
+gl/lib/gl_array_list.h
+gl/lib/gl_hash_map.c
+gl/lib/gl_hash_map.h
+gl/lib/gl_hash_set.c
+gl/lib/gl_hash_set.h
+gl/lib/gl_linkedhash_list.c
+gl/lib/gl_linkedhash_list.h
+gl/lib/gl_list.c
+gl/lib/gl_list.h
+gl/lib/gl_map.c
+gl/lib/gl_map.h
+gl/lib/gl_rbtree_list.c
+gl/lib/gl_rbtree_list.h
+gl/lib/gl_set.c
+gl/lib/gl_set.h
+gl/lib/gl_xlist.c
+gl/lib/gl_xlist.h
+gl/lib/gl_xmap.c
+gl/lib/gl_xmap.h
+gl/lib/gl_xset.c
+gl/lib/gl_xset.h
gl/lib/glob-libc.h
gl/lib/glob.c
gl/lib/glob.in.h
@@ -132,6 +165,8 @@ gl/lib/glthread/lock.h
gl/lib/glthread/threadlib.c
gl/lib/hard-locale.c
gl/lib/hard-locale.h
+gl/lib/hash-pjw-bare.c
+gl/lib/hash-pjw-bare.h
gl/lib/hash-pjw.c
gl/lib/hash-pjw.h
gl/lib/hash-triple.c
@@ -145,6 +180,7 @@ gl/lib/intprops.h
gl/lib/ioctl.c
gl/lib/itold.c
gl/lib/langinfo.in.h
+gl/lib/lchown.c
gl/lib/libc-config.h
gl/lib/limits.in.h
gl/lib/localcharset.c
@@ -246,6 +282,8 @@ gl/lib/stdio-read.c
gl/lib/stdio-write.c
gl/lib/stdio.in.h
gl/lib/stdlib.in.h
+gl/lib/stdopen.c
+gl/lib/stdopen.h
gl/lib/str-two-way.h
gl/lib/strcasecmp.c
gl/lib/strcasestr.c
@@ -309,6 +347,8 @@ gl/lib/xgetcwd.h
gl/lib/xmalloc.c
gl/lib/xsize.c
gl/lib/xsize.h
+gl/lib/xstdopen.c
+gl/lib/xstdopen.h
gl/lib/xstrndup.c
gl/lib/xstrndup.h
gl/lib/xvasprintf.c
diff --git a/gl/po/af.po b/gl/po/af.po
index 83d582e8..153c9a1d 100644
--- a/gl/po/af.po
+++ b/gl/po/af.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils 5.2.1\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\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"
@@ -46,32 +46,32 @@ msgstr ""
"Verpligte parameters vir langformaat opsies is ook verpligtend vir "
"kortformaat opsies.\n"
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr ""
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr ""
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
#, fuzzy
msgid " [OPTION...]"
msgstr "Gebruik so: %s [OPSIE]...\n"
-#: gl/lib/argp-help.c:1668
+#: gl/lib/argp-help.c:1670
#, fuzzy, c-format
msgid "Try '%s --help' or '%s --usage' for more information.\n"
msgstr "Probeer `%s --help' vir meer inligting.\n"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, fuzzy, c-format
msgid "Report bugs to %s.\n"
msgstr ""
"\n"
"Rapporteer foute aan <%s>.\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Onbekende stelselfout"
@@ -247,6 +247,11 @@ msgstr "fout in soektog met relmatige uitdrukking"
msgid "memory exhausted"
msgstr "geheue uitgeput"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr ""
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "ongeldige parameter %s vir %s"
diff --git a/gl/po/be.po b/gl/po/be.po
index 6ba2f1fb..bb57fcb6 100644
--- a/gl/po/be.po
+++ b/gl/po/be.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils 5.0.91\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\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"
@@ -47,32 +47,32 @@ msgid ""
"optional for any corresponding short options."
msgstr "Довады, абавязковыя для доўгіх выбараў, абавязковыя й для кароткіх.\n"
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr ""
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr ""
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
#, fuzzy
msgid " [OPTION...]"
msgstr "Выкарыстаньне: %s [ВЫБАР]...\n"
-#: gl/lib/argp-help.c:1668
+#: gl/lib/argp-help.c:1670
#, fuzzy, c-format
msgid "Try '%s --help' or '%s --usage' for more information.\n"
msgstr "Паспрабуйце \"%s --help\" для больш падрабязных зьвестак.\n"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, fuzzy, c-format
msgid "Report bugs to %s.\n"
msgstr ""
"\n"
"Паведамляйце пра памылкі на <%s>.\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Невядомая сыстэмная памылка"
@@ -248,6 +248,11 @@ msgstr "памылка ў пошуку звычайнага выразу"
msgid "memory exhausted"
msgstr "памяць вычарпана"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr ""
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "нерэчаісны довад %s для %s"
diff --git a/gl/po/bg.gmo b/gl/po/bg.gmo
index ca402813..f8852fe3 100644
--- a/gl/po/bg.gmo
+++ b/gl/po/bg.gmo
Binary files differ
diff --git a/gl/po/bg.po b/gl/po/bg.po
index 06c78cb4..41b5b159 100644
--- a/gl/po/bg.po
+++ b/gl/po/bg.po
@@ -1,88 +1,85 @@
-# 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.
-#
+# Bulgarian translation of GNU gnulib po-file.
+# Copyright (C) 2019 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnulib package.
+# Alexander Shopov <ash@kambanaria.org>, 2019.
msgid ""
msgstr ""
-"Project-Id-Version: coreutils 5.90\n"
+"Project-Id-Version: gnulib 4.0.0.2567\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\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"
+"POT-Creation-Date: 2019-08-03 11:23+0100\n"
+"PO-Revision-Date: 2019-05-19 18:14+0200\n"
+"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
+"Language-Team: Bulgarian <dict@ludost.net>\n"
"Language: bg\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
#: gl/lib/argp-help.c:158
#, c-format
msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
-msgstr ""
+msgstr "„ARGP_HELP_FMT“: стойността %s е по-малка или равна на %s"
#: gl/lib/argp-help.c:234
#, c-format
msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
-msgstr ""
+msgstr "%.*s: параметърът „ARGP_HELP_FMT“ изисква стойност"
#: gl/lib/argp-help.c:244
#, c-format
msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
-msgstr ""
+msgstr "%.*s: непознат параметър „ARGP_HELP_FMT“"
#: gl/lib/argp-help.c:257
#, c-format
msgid "Garbage in ARGP_HELP_FMT: %s"
-msgstr ""
+msgstr "Грешки в „ARGP_HELP_FMT“: %s"
#: gl/lib/argp-help.c:1238
-#, fuzzy
msgid ""
"Mandatory or optional arguments to long options are also mandatory or "
"optional for any corresponding short options."
msgstr ""
-"Аргументите, задължителни за дългите опции, са задължителни и за късите.\n"
+"Аргументите, задължителните или незадължителни за дългите опции, са "
+"съответно задължителни или незадължителни и за кратките опции."
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
-msgstr ""
+msgstr "Използване:"
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
-msgstr ""
+msgstr " или: "
-#: gl/lib/argp-help.c:1641
-#, fuzzy
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
-msgstr "Използване: %s [ОПЦИЯ]...\n"
+msgstr " [ОПЦИЯ…]"
-#: gl/lib/argp-help.c:1668
-#, fuzzy, c-format
+#: gl/lib/argp-help.c:1670
+#, c-format
msgid "Try '%s --help' or '%s --usage' for more information.\n"
-msgstr "Използвайте \"%s --help\" за повече информация.\n"
+msgstr "За повече информация използвайте „%s --help“ или „%s --usage“.\n"
-#: gl/lib/argp-help.c:1696
-#, fuzzy, c-format
+#: gl/lib/argp-help.c:1698
+#, c-format
msgid "Report bugs to %s.\n"
msgstr ""
-"\n"
-"Съобщавайте за програмни грешки на <%s>.\n"
+"Съобщавайте за програмни грешки на %s.\n"
+"За грешки в българския превод на <dict@fsa-bg.org>.\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
-msgstr "Непозната системна грешка"
+msgstr "Неизвестна системна грешка"
#: gl/lib/argp-parse.c:91
msgid "give this help list"
-msgstr ""
+msgstr "извеждане на тази справка"
#: gl/lib/argp-parse.c:92
msgid "give a short usage message"
-msgstr ""
+msgstr "извеждане на кратко съобщение за използването"
#: gl/lib/argp-parse.c:93
msgid "NAME"
@@ -90,258 +87,383 @@ msgstr "ИМЕ"
#: gl/lib/argp-parse.c:94
msgid "set the program name"
-msgstr ""
+msgstr "задаване на името на програмата"
#: gl/lib/argp-parse.c:95
msgid "SECS"
-msgstr ""
+msgstr "СЕКУНДИ"
#: gl/lib/argp-parse.c:96
msgid "hang for SECS seconds (default 3600)"
-msgstr ""
+msgstr "спиране за толкова СЕКУНДИ (стандартно е 3600)"
#: gl/lib/argp-parse.c:154
-#, fuzzy
msgid "print program version"
-msgstr "грешка при четене"
+msgstr "извеждане на версията на програмата"
#: gl/lib/argp-parse.c:171
msgid "(PROGRAM ERROR) No version known!?"
-msgstr ""
+msgstr "ГРЕШКА: Неизвестна версия!"
#: gl/lib/argp-parse.c:624
-#, fuzzy, c-format
+#, c-format
msgid "%s: Too many arguments\n"
-msgstr "%s: твърде много редове с контролни суми"
+msgstr "%s: Твърде много аргументи\n"
#: gl/lib/argp-parse.c:770
msgid "(PROGRAM ERROR) Option should have been recognized!?"
-msgstr ""
+msgstr "ГРЕШКА: Непозната опция, а трябва да се разпознава!"
#: gl/lib/getopt.c:278
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' is ambiguous\n"
-msgstr "%s: опцията \"%s\" е двусмислена\n"
+msgstr "%s: опцията „%s%s“ не е еднозначна\n"
#: gl/lib/getopt.c:284
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' is ambiguous; possibilities:"
-msgstr "%s: опцията \"%s\" е двусмислена\n"
+msgstr "%s: опцията „%s%s“ не е еднозначна. Възможности:"
#: gl/lib/getopt.c:319
-#, fuzzy, c-format
+#, c-format
msgid "%s: unrecognized option '%s%s'\n"
-msgstr "%s: непозната опция \"%c%s\"\n"
+msgstr "%s: непозната опция „%s%s“\n"
#: gl/lib/getopt.c:345
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' doesn't allow an argument\n"
-msgstr "%s: опцията \"%c%s\" не допуска аргумент\n"
+msgstr "%s: опцията „%s%s“ се използва без аргументи\n"
#: gl/lib/getopt.c:360
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' requires an argument\n"
-msgstr "%s: опцията \"%s\" изисква аргумент\n"
+msgstr "%s: опцията „%s%s“ изисква аргумент\n"
#: gl/lib/getopt.c:621
-#, fuzzy, c-format
+#, c-format
msgid "%s: invalid option -- '%c'\n"
-msgstr "%s: неправилна опция -- %c\n"
+msgstr "%s: неправилна опция — „%c“\n"
#: gl/lib/getopt.c:636 gl/lib/getopt.c:682
-#, fuzzy, c-format
+#, c-format
msgid "%s: option requires an argument -- '%c'\n"
-msgstr "%s: опция изисква аргумент -- %c\n"
+msgstr "%s: опцията изисква аргумент — „%c“\n"
#: gl/lib/openat-die.c:38
#, c-format
msgid "unable to record current working directory"
-msgstr "не може да се запомни текущият работен каталог"
+msgstr "текущата работна директория не може да се запише"
#: gl/lib/openat-die.c:57
#, c-format
msgid "failed to return to initial working directory"
-msgstr "невъзможно връщане в първоначалния работен каталог"
+msgstr "не може да се върне към първоначалната работна директория"
#: gl/lib/regcomp.c:135
msgid "Success"
-msgstr ""
+msgstr "Успех"
#: gl/lib/regcomp.c:138
msgid "No match"
-msgstr ""
+msgstr "Няма съвпадения"
#: gl/lib/regcomp.c:141
-#, fuzzy
msgid "Invalid regular expression"
-msgstr "%s: неправилен регулярен израз: %s"
+msgstr "Неправилен регулярен израз"
#: gl/lib/regcomp.c:144
-#, fuzzy
msgid "Invalid collation character"
-msgstr "неправилен клас от символи %s"
+msgstr "Неправилен знак за подредба"
#: gl/lib/regcomp.c:147
-#, fuzzy
msgid "Invalid character class name"
-msgstr "неправилен клас от символи %s"
+msgstr "Неправилно име на клас знаци"
#: gl/lib/regcomp.c:150
msgid "Trailing backslash"
-msgstr ""
+msgstr "Самотна „\\“ накрая"
#: gl/lib/regcomp.c:153
-#, fuzzy
msgid "Invalid back reference"
-msgstr "Неправилен диапазон от страници %s"
+msgstr "Неправилна препратка към съвпадение"
#: gl/lib/regcomp.c:156
msgid "Unmatched [, [^, [:, [., or [="
-msgstr ""
+msgstr "„[“, „[^“, „[:“, „[.“ или „[=“ без еш"
#: gl/lib/regcomp.c:159
msgid "Unmatched ( or \\("
-msgstr ""
+msgstr "„(“ или „\\(“ без еш"
#: gl/lib/regcomp.c:162
msgid "Unmatched \\{"
-msgstr ""
+msgstr "„\\{“ без еш"
#: gl/lib/regcomp.c:165
msgid "Invalid content of \\{\\}"
-msgstr ""
+msgstr "Неправилно съдържание в „\\{\\}“"
#: gl/lib/regcomp.c:168
-#, fuzzy
msgid "Invalid range end"
-msgstr "Неправилен диапазон от страници %s"
+msgstr "Неправилен край на диапазон"
#: gl/lib/regcomp.c:171
-#, fuzzy
msgid "Memory exhausted"
-msgstr "паметта е изчерпана"
+msgstr "Паметта свърши"
#: gl/lib/regcomp.c:174
-#, fuzzy
msgid "Invalid preceding regular expression"
-msgstr "%s: неправилен регулярен израз: %s"
+msgstr "Предхождащият регулярен израз е неправилен"
#: gl/lib/regcomp.c:177
-#, fuzzy
msgid "Premature end of regular expression"
-msgstr "грешка при търсене на регулярен израз"
+msgstr "Ранен край на регулярен израз"
#: gl/lib/regcomp.c:180
-#, fuzzy
msgid "Regular expression too big"
-msgstr "грешка при пасването на регулярния израз"
+msgstr "Регулярният израз е прекалено голям"
#: gl/lib/regcomp.c:183
msgid "Unmatched ) or \\)"
-msgstr ""
+msgstr "„)“ или „\\)“ без еш"
#: gl/lib/regcomp.c:676
-#, fuzzy
msgid "No previous regular expression"
-msgstr "грешка при търсене на регулярен израз"
+msgstr "Няма предхождащ регулярен израз"
#: gl/lib/xalloc-die.c:34
msgid "memory exhausted"
msgstr "паметта е изчерпана"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr "стандартни файлови дескриптори"
+
#~ msgid "invalid argument %s for %s"
-#~ msgstr "недопустим аргумент %s за %s"
+#~ msgstr "аргументът „%s“ на опцията „%s“ е неправилен"
#~ msgid "ambiguous argument %s for %s"
-#~ msgstr "двусмислен аргумент %s за %s"
+#~ msgstr "аргументът „%s“ на опцията „%s“ не е еднозначен"
#~ msgid "Valid arguments are:"
-#~ msgstr "Допустими аргументи са:"
+#~ msgstr "Възможните аргументи са:"
+
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u побитови заделяния, освободени са %u (%.2f%%).\n"
+
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u побитови задавания, кеширани са %u (%.2f%%)\n"
+
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u побитови изчиствания, кеширани са %u (%.2f%%)\n"
+
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u побитови проби, кеширани са %u (%.2f%%)\n"
+
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u побитови извеждания\n"
+
+#~ msgid "count log histogram\n"
+#~ msgstr "логаритмична хистограма по брой\n"
+
+#~ msgid "size log histogram\n"
+#~ msgstr "логаритмична хистограма по размер\n"
+
+#~ msgid "density histogram\n"
+#~ msgstr "хистограма по плътност\n"
+
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Побитова статистика:\n"
+#~ "\n"
+
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Натрупани изпълнения = %u\n"
+
+#~ msgid "cannot read stats file"
+#~ msgstr "файлът със статистиките не може да се прочете"
+
+#~ msgid "bad stats file size\n"
+#~ msgstr "неправилен размер на файла със статистиките\n"
+
+#~ msgid "cannot write stats file"
+#~ msgstr "файлът със статистиките не може да се запише"
+
+#~ msgid "cannot open stats file for writing"
+#~ 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 "грешка при запис"
-#, fuzzy
-#~ msgid "error while opening \"%s\" for reading"
-#~ msgstr "не може да се отвори %s за четене"
+#~ msgid "preserving permissions for %s"
+#~ msgstr "запазване на правата за „%s“"
+
+#~ msgid "error while opening %s for reading"
+#~ msgstr "„%s“ не може да се отвори за четене"
-#, fuzzy
-#~ msgid "cannot open backup file \"%s\" for writing"
-#~ msgstr "не може да се отвори %s за запис"
+#~ msgid "cannot open backup file %s for writing"
+#~ msgstr "резервният файл „%s“ не може да се отвори за запис"
-#, fuzzy
-#~ msgid "error reading \"%s\""
-#~ msgstr "грешка при четене на %s"
+#~ msgid "error reading %s"
+#~ msgstr "грешка при четене на „%s“"
-#, fuzzy
-#~ msgid "error writing \"%s\""
-#~ msgstr "грешка при запис в %s"
+#~ msgid "error writing %s"
+#~ msgstr "грешка при записа на „%s“"
-#, fuzzy
-#~ msgid "error after reading \"%s\""
-#~ msgstr "грешка при четене на %s"
+#~ msgid "error after reading %s"
+#~ msgstr "грешка след четене на „%s“"
-#, fuzzy
#~ msgid "fdopen() failed"
-#~ msgstr "неуспешно отваряне на файл"
+#~ msgstr "неуспешно отваряне с „fdopen()“"
+
+#~ msgid "C# compiler not found, try installing mono"
+#~ msgstr "Липсва компилатор за C#, инсталирайте „mono“"
+
+#~ msgid "C# virtual machine not found, try installing mono"
+#~ msgstr "Липсва виртуална машина за C#, инсталирайте „mono“"
+
+#~ msgid "unbalanced ["
+#~ msgstr "„[“ без еш"
+
+#~ msgid "invalid character class"
+#~ msgstr "неправилен клас знаци"
+
+#~ msgid "character class syntax is [[:space:]], not [:space:]"
+#~ msgstr "клас знаци се указва чрез „[[:ИМЕ:]]“, а не „[:ИМЕ:]“"
+
+#~ msgid "unfinished \\ escape"
+#~ msgstr "незавършена екранираща последователност чрез „\\“"
+
+#~ msgid "invalid content of \\{\\}"
+#~ msgstr "неправилно съдържание в „\\{\\}“"
+
+#~ msgid "regular expression too big"
+#~ msgstr "прекалено голям регулярен израз"
+
+#~ msgid "unbalanced ("
+#~ msgstr "„(“ без еш"
+
+#~ msgid "no syntax specified"
+#~ msgstr "не е зададен синтаксис"
+
+#~ msgid "unbalanced )"
+#~ msgstr "„)“ без еш"
-#, fuzzy
#~ msgid "%s subprocess failed"
-#~ msgstr "%s: неуспешно позициониране (seek) във файл"
+#~ msgstr "дъщерният процес „%s“ завърши неуспешно"
#~ msgid "regular empty file"
-#~ msgstr "обикновеният празен файл"
+#~ msgstr "празен, обикновен файл"
#~ msgid "regular file"
-#~ msgstr "обикновеният файл"
+#~ msgstr "обикновен файл"
#~ msgid "directory"
-#~ msgstr "каталогът"
+#~ msgstr "директория"
+
+#~ msgid "symbolic link"
+#~ msgstr "символна връзка"
+
+#~ msgid "message queue"
+#~ msgstr "опашка за съобщения"
+
+#~ msgid "semaphore"
+#~ msgstr "семафор"
+
+#~ msgid "shared memory object"
+#~ msgstr "споделен обект в паметта"
+
+#~ msgid "typed memory object"
+#~ msgstr "типов обект в паметта"
#~ msgid "block special file"
-#~ msgstr "специалният блоков файл"
+#~ msgstr "блоков специален файл"
#~ msgid "character special file"
-#~ msgstr "специалният символен файл"
+#~ msgstr "знаков специален сайт"
+
+#~ msgid "contiguous data"
+#~ msgstr "последователни данни"
#~ msgid "fifo"
-#~ msgstr "именуваният канал"
+#~ msgstr "програмен канал"
-#~ msgid "symbolic link"
-#~ msgstr "символната връзка"
+#~ msgid "door"
+#~ msgstr "порта"
-#~ msgid "socket"
-#~ msgstr "гнездото"
+#~ msgid "multiplexed block special file"
+#~ msgstr "мултиплексиран блоков специален файл"
-#~ msgid "message queue"
-#~ msgstr "опашката със съобщения"
+#~ msgid "multiplexed character special file"
+#~ msgstr "мултиплексиран знаков специален файл"
-#~ msgid "semaphore"
-#~ msgstr "семафорът"
+#~ msgid "multiplexed file"
+#~ msgstr "мултиплексиран файл"
-#~ msgid "shared memory object"
-#~ msgstr "споделеният обект в паметта"
+#~ msgid "named file"
+#~ msgstr "именован файл"
-#~ msgid "typed memory object"
-#~ msgstr "типизираният обект в паметта"
+#~ msgid "network special file"
+#~ msgstr "мрежов специален файл"
+
+#~ msgid "migrated file with data"
+#~ msgstr "мигриран файл с данни"
+
+#~ msgid "migrated file without data"
+#~ msgstr "мигриран файл без данни"
+
+#~ msgid "port"
+#~ msgstr "порт"
+
+#~ msgid "socket"
+#~ msgstr "гнездо"
+
+#~ msgid "whiteout"
+#~ msgstr "припокриващо изтриване"
#~ msgid "weird file"
-#~ msgstr "странният файл"
+#~ msgstr "странен файл"
#~ msgid "Address family for hostname not supported"
-#~ msgstr "Този тип адреси не се поддържа за името на хоста"
+#~ msgstr "Този вид адреси за името на хоста не се поддържат"
#~ msgid "Temporary failure in name resolution"
-#~ msgstr "Временен проблем при намиране IP-адреса на хост"
+#~ msgstr "Временен проблем при намиране на IP-адреса на хост"
#~ msgid "Bad value for ai_flags"
-#~ msgstr "Неправил на стойност за ai_flags"
+#~ msgstr "Неправилна стойност за „ai_flags“"
#~ msgid "Non-recoverable failure in name resolution"
-#~ msgstr "Окончателен неуспех при намиране IP-адреса на хост"
+#~ msgstr "Окончателен неуспех при намиране на IP-адреса на хост"
#~ msgid "ai_family not supported"
-#~ msgstr "не се поддържа посочването на тип адреси (ai_family)"
+#~ msgstr "посочването на вид адреси („ai_family“) не се поддържа"
#~ msgid "Memory allocation failure"
#~ msgstr "Неуспешно заделяне на памет"
@@ -354,13 +476,16 @@ msgstr "паметта е изчерпана"
#~ msgid "Servname not supported for ai_socktype"
#~ msgstr ""
-#~ "Името на услугата не се поддържа за използваното тип гнездо (ai_socktype)"
+#~ "Името на услугата не се поддържа за използвания вид гнездо („ai_socktype“)"
#~ msgid "ai_socktype not supported"
-#~ msgstr "не се поддържа посочването на тип гнездо (ai_socktype)"
+#~ msgstr "посочването на вид гнездо („ai_socktype“) не се поддържа"
#~ msgid "System error"
-#~ msgstr "грешка в системата"
+#~ msgstr "Системна грешка"
+
+#~ msgid "Argument buffer too small"
+#~ msgstr "Буферът за аргументите е твърде малък"
#~ msgid "Processing request in progress"
#~ msgstr "Заявката е в процес на изпълнение"
@@ -381,77 +506,230 @@ msgstr "паметта е изчерпана"
#~ msgstr "Неправилно кодиран низ на аргумент"
#~ msgid "Unknown error"
-#~ msgstr "Непозната грешка"
+#~ msgstr "Неизвестна грешка"
-#~ msgid "%s: option `--%s' doesn't allow an argument\n"
-#~ msgstr "%s: опцията \"--%s\" не допуска аргумент\n"
+#~ 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 "%s: unrecognized option `--%s'\n"
-#~ msgstr "%s: непозната опция \"--%s\"\n"
+#~ msgid "failed to create \"%s\""
+#~ msgstr "„%s“ не може да се създаде"
-#~ msgid "%s: illegal option -- %c\n"
-#~ msgstr "%s: неправилна опция -- %c\n"
+#~ msgid "error while writing \"%s\" file"
+#~ msgstr "грешка при записа на „%s“"
-#~ msgid "%s: option `-W %s' is ambiguous\n"
-#~ msgstr "%s: опцията \"-W %s\" е двусмислена\n"
+#~ msgid "Java compiler not found, try installing gcj or set $JAVAC"
+#~ msgstr ""
+#~ "Липсва компилатор за Java, инсталирайте „gcj“ или задайте такъв с "
+#~ "променливата „JAVAC“"
-#~ msgid "%s: option `-W %s' doesn't allow an argument\n"
-#~ msgstr "%s: опцията \"-W %s\" не допуска аргумент\n"
+#~ msgid "Java virtual machine not found, try installing gij or set $JAVA"
+#~ msgstr ""
+#~ "Липсва виртуална машина за Java, инсталирайте „gcj“ или задайте такава с "
+#~ "променливата „JAVA“"
-#~ msgid "block size"
-#~ msgstr "блоковият размер"
+#~ msgid "%s subprocess I/O error"
+#~ msgstr "%s: вх./изх. грешка в дъщерен процес"
-#~ msgid "%s exists but is not a directory"
-#~ msgstr "%s съществува, но не е каталог"
+#~ msgid "cannot stat %s"
+#~ msgstr "не може да се получи информация със „stat“ за „%s“"
-#~ msgid "cannot change owner and/or group of %s"
-#~ msgstr "не може да се смени собственика и/или групата на %s"
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "правата за достъп до „%s“ не може да се сменят"
#~ msgid "cannot create directory %s"
-#~ msgstr "не може да се създаде каталог %s"
+#~ msgstr "директорията „%s“ не може да се създаде"
-#~ msgid "cannot chdir to directory %s"
-#~ msgstr "не може да се влезе в каталога %s"
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "„/dev/zero“ не може да се отвори за запис"
-#~ msgid "cannot change permissions of %s"
-#~ msgstr "не може да се сменят правата за достъп до %s"
+#~ msgid "creation of reading thread failed"
+#~ msgstr "неуспешно създаване на четяща нишка"
-#, fuzzy
-#~ msgid "Failed to open /dev/zero for read"
-#~ msgstr "%s: не може да се отвори в режим за писане"
+#~ msgid "cannot set up nonblocking I/O to %s subprocess"
+#~ msgstr "не може да се зададе вх./изх. без блокиране за подпроцеса „%s“"
-#, fuzzy
-#~ msgid "cannot create pipe"
-#~ 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 "`"
-#~ msgstr "\""
+#~ msgstr "„"
#~ msgid "'"
-#~ msgstr "\""
+#~ msgstr "“"
-# Клавишът О (латинско) генерира "Д" според подредбата по БДС
+# RECHECK
#~ msgid "^[yY]"
-#~ msgstr "^[дДoOyY]"
+#~ msgstr "^[yYдДщЩ]"
-# Клавишът K (латинско) генерира "Н" според подредбата по БДС
+# RECHECK
#~ msgid "^[nN]"
-#~ msgstr "^[нНkKnN]"
+#~ 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 "Спиране (вход от tty)"
+
+#~ msgid "Stopped (tty output)"
+#~ msgstr "Спиране (изход към tty)"
+
+#~ 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 "Емулирана инструкция"
+
+#~ 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 "Execution times (seconds)"
+#~ msgstr "Време за изпълнение [секунди]"
+
+#~ msgid "CPU user"
+#~ msgstr "потребителско време"
+
+#~ msgid "CPU system"
+#~ msgstr "системно време"
+
+#~ msgid "wall clock"
+#~ msgstr "общо време"
#~ msgid "iconv function not usable"
-#~ msgstr "функцията iconv не е използваема"
+#~ msgstr "функцията „iconv“ е неизползваема"
#~ msgid "iconv function not available"
-#~ msgstr "функцията iconv е недостъпна"
+#~ msgstr "функцията „iconv“ е недостъпна"
#~ msgid "character out of range"
#~ msgstr "знак извън диапазона"
#~ msgid "cannot convert U+%04X to local character set"
-#~ msgstr "не може да се конвертира U+%04X в локалното кодиране"
+#~ msgstr "„U+%04X“ не може да се конвертира в локалното кодиране"
#~ msgid "cannot convert U+%04X to local character set: %s"
-#~ msgstr "не може да се конвертира U+%04X в локалното кодиране: %s"
+#~ msgstr "„U+%04X“ не може да се конвертира в локалното кодиране: %s"
#~ msgid "invalid user"
#~ msgstr "несъществуващ потребител"
@@ -459,62 +737,71 @@ msgstr "паметта е изчерпана"
#~ msgid "invalid group"
#~ msgstr "несъществуваща група"
-#~ msgid "cannot get the login group of a numeric UID"
-#~ 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"
-#~ "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"
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
-#~ "Това е свободен софтуер. Можете да разпространявате негови копия "
-#~ "съгласно\n"
-#~ "условията на Основната общодостъпна лицензия на ГНУ\n"
-#~ " <http://www.gnu.org/licenses/gpl.html>.\n"
-#~ "Не се дават НИКАКВИ ГАРАНЦИИ до степента, позволявана от закона.\n"
+#~ "Лиценз — Общ публичен лиценз на GNU (GNU GPL), както е публикуван от "
+#~ "Фондацията\n"
+#~ "за свободен софтуер — версия 3 на лиценза или (по ваше решение) по-късна "
+#~ "версия.\n"
+#~ "<%s>\n"
+#~ "Тази програма е свободен софтуер. Можете да я разпространявате и/или "
+#~ "променяте.\n"
+#~ "Тя се разпространява БЕЗ НИКАКВИ ГАРАНЦИИ доколкото е позволено от "
+#~ "закона.\n"
#~ msgid "Written by %s.\n"
-#~ msgstr "Написан от %s.\n"
+#~ msgstr "Създадено от %s.\n"
#~ msgid "Written by %s and %s.\n"
-#~ msgstr "Написан от %s и %s.\n"
+#~ msgstr "Създадено от %s и %s.\n"
#~ msgid "Written by %s, %s, and %s.\n"
-#~ msgstr "Написан от %s, %s и %s.\n"
+#~ msgstr "Създадено от %s, %s и %s.\n"
#~ msgid ""
#~ "Written by %s, %s, %s,\n"
#~ "and %s.\n"
#~ msgstr ""
-#~ "Написан от %s, %s, %s\n"
+#~ "Създадено от %s, %s, %s\n"
#~ "и %s.\n"
#~ msgid ""
#~ "Written by %s, %s, %s,\n"
#~ "%s, and %s.\n"
#~ msgstr ""
-#~ "Написан от %s, %s, %s,\n"
+#~ "Създадено от %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"
#~ "%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,\n"
#~ "%s, %s, %s и %s.\n"
#~ msgid ""
@@ -522,7 +809,7 @@ msgstr "паметта е изчерпана"
#~ "%s, %s, %s, %s,\n"
#~ "and %s.\n"
#~ msgstr ""
-#~ "Написан от %s, %s, %s,\n"
+#~ "Създадено от %s, %s, %s,\n"
#~ "%s, %s, %s, %s\n"
#~ "и %s.\n"
@@ -531,7 +818,7 @@ msgstr "паметта е изчерпана"
#~ "%s, %s, %s, %s,\n"
#~ "%s, and %s.\n"
#~ msgstr ""
-#~ "Написан от %s, %s, %s,\n"
+#~ "Създадено от %s, %s, %s,\n"
#~ "%s, %s, %s, %s,\n"
#~ "%s и %s.\n"
@@ -540,15 +827,73 @@ msgstr "паметта е изчерпана"
#~ "%s, %s, %s, %s,\n"
#~ "%s, %s, and others.\n"
#~ msgstr ""
-#~ "Написан от %s, %s, %s,\n"
+#~ "Създадено от %s, %s, %s,\n"
#~ "%s, %s, %s, %s,\n"
-#~ "%s, %s и други.\n"
+#~ "%s, %s и др.\n"
+
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "Докладвайте грешки в програмата на адрес: %s\n"
+#~ "Докладвайте грешки в превода на адрес: <dict@ludost.net>\n"
+
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr "Докладвайте грешки в „%s“ на адрес: %s\n"
+
+#~ msgid "%s home page: <%s>\n"
+#~ msgstr "Уеб страница на „%s“: <%s>\n"
+
+#~ msgid "General help using GNU software: <%s>\n"
+#~ msgstr "Обща помощ за програмите на GNU: <%s>\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 "failed to set file descriptor text/binary mode"
+#~ msgstr "неуспешно задаване на вид на файла като текстов/двоичен"
+
+#~ 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 "сравнението на низове не успя"
+#~ msgstr "неуспешно сравнение на низове"
#~ msgid "Set LC_ALL='C' to work around the problem."
-#~ msgstr "Използвайте LC_ALL='C', за да заобиколите този проблем."
+#~ 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“"
diff --git a/gl/po/ca.po b/gl/po/ca.po
index 476d190b..162dc128 100644
--- a/gl/po/ca.po
+++ b/gl/po/ca.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: mailutils 0.6.90\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\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"
@@ -47,29 +47,29 @@ msgstr ""
"Els arguments necessaris o opcionals per a les opcions llargues també són "
"necessaris o opcionals per a qualsevol opció curta corresponent."
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr "Forma d'ús:"
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr " ó: "
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
msgstr " [OPCIÓ...]"
-#: gl/lib/argp-help.c:1668
+#: gl/lib/argp-help.c:1670
#, 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"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, c-format
msgid "Report bugs to %s.\n"
msgstr "Informeu dels errors a %s.\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "S'ha produït un error desconegut del sistema"
@@ -252,6 +252,11 @@ msgstr "error en la recerca de l'expressió regular"
msgid "memory exhausted"
msgstr "la memòria s'ha exhaurit"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr ""
+
# Usa quote() en els 2 args. ivb
#~ msgid "invalid argument %s for %s"
#~ msgstr "l'argument %s no és vàlid per %s"
diff --git a/gl/po/cs.po b/gl/po/cs.po
index 2898c098..2794d88b 100644
--- a/gl/po/cs.po
+++ b/gl/po/cs.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\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"
@@ -48,29 +48,29 @@ 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."
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr "Použití:"
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr " nebo:"
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
msgstr " [PŘEPÍNAČ…]"
-#: gl/lib/argp-help.c:1668
+#: gl/lib/argp-help.c:1670
#, 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"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, c-format
msgid "Report bugs to %s.\n"
msgstr "Chyby hlaste na %s.\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Neznámá chyba systému"
@@ -237,6 +237,11 @@ msgstr "Žádný předchozí regulární výraz"
msgid "memory exhausted"
msgstr "paměť byla vyčerpána"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr ""
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "argument %s je pro %s neplatný"
diff --git a/gl/po/da.po b/gl/po/da.po
index fb5bd45e..6bede308 100644
--- a/gl/po/da.po
+++ b/gl/po/da.po
@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnulib 2.0.0.3462.e9796\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\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"
@@ -52,31 +52,31 @@ msgstr ""
"Obligatoriske eller valgfrie argumenter til lange flag er ogs obligatoriske "
"eller valgfrie for tilsvarende korte flag."
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr "Brug:"
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr " eller: "
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
msgstr " [FLAG...]"
-#: gl/lib/argp-help.c:1668
+#: gl/lib/argp-help.c:1670
#, 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"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, c-format
msgid "Report bugs to %s.\n"
msgstr ""
"Rapportr fejl til %s.\n"
"Send synspunkter p oversttelsen til <dansk@dansk-gruppen.dk>\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Ukendt systemfejl"
@@ -243,6 +243,11 @@ msgstr "Intet foregende regulrt udtryk"
msgid "memory exhausted"
msgstr "hukommelsen opbrugt"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr ""
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "Ugyldigt argument %s til %s"
diff --git a/gl/po/de.gmo b/gl/po/de.gmo
index 35348b90..20e9216d 100644
--- a/gl/po/de.gmo
+++ b/gl/po/de.gmo
Binary files differ
diff --git a/gl/po/de.po b/gl/po/de.po
index 35a2269e..b7ba8c33 100644
--- a/gl/po/de.po
+++ b/gl/po/de.po
@@ -6,7 +6,8 @@
# 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
+# Arun Persaud <arun@nubati.net>, 2012.
+# Roland Illig <roland.illig@gmx.de>, 2019.
#
# TAB: spell it out („Tabulatoren“). -ke-
# Don't use obscure abbreviations, please. -ke-
@@ -32,11 +33,11 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: GNU gnulib-3.0.0.6062.a6b16\n"
+"Project-Id-Version: GNU gnulib-4.0.0.2567\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
-"PO-Revision-Date: 2012-06-03 12:41-0700\n"
-"Last-Translator: Arun Persaud <arun@nubati.net>\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\n"
+"PO-Revision-Date: 2019-05-22 20:00+0200\n"
+"Last-Translator: Roland Illig <roland.illig@gmx.de>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
@@ -44,6 +45,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 2.2.3\n"
#: gl/lib/argp-help.c:158
#, c-format
@@ -58,7 +60,7 @@ msgstr "%.*s: ARGP_HELP_FMT Parameter benötigt einen Wert"
#: gl/lib/argp-help.c:244
#, c-format
msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
-msgstr "%.*s: Unbekannter ARGP_HELP_FMT Parameter"
+msgstr "%.*s: Unbekannter Parameter für ARGP_HELP_FMT"
#: gl/lib/argp-help.c:257
#, c-format
@@ -73,39 +75,39 @@ msgstr ""
"Erforderliche oder optionale Argumente für lange Optionen sind auch für "
"kurze erforderlich bzw. optional."
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr "Aufruf:"
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
-msgstr " oder: "
+msgstr " oder: "
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
-msgstr " [OPTIONEN] "
+msgstr " [OPTION…]"
-#: gl/lib/argp-help.c:1668
-#, fuzzy, c-format
+#: gl/lib/argp-help.c:1670
+#, c-format
msgid "Try '%s --help' or '%s --usage' for more information.\n"
msgstr "»%s --help« oder »%s --usage« liefert weitere Informationen.\n"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, c-format
msgid "Report bugs to %s.\n"
msgstr "Melden Sie Fehler (auf Englisch, mit LC_ALL=C) an <%s>.\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Unbekannter Systemfehler"
#: gl/lib/argp-parse.c:91
msgid "give this help list"
-msgstr "zeigt diese Hilfeliste"
+msgstr "diese Hilfeliste anzeigen"
#: gl/lib/argp-parse.c:92
msgid "give a short usage message"
-msgstr "zeigt eine Kurzfassung des Aufrufs"
+msgstr "eine Kurzfassung des Aufrufs anzeigen"
#: gl/lib/argp-parse.c:93
msgid "NAME"
@@ -113,7 +115,7 @@ msgstr "NAME"
#: gl/lib/argp-parse.c:94
msgid "set the program name"
-msgstr "den Programmnamen setzen"
+msgstr "den Programmnamen festlegen"
#: gl/lib/argp-parse.c:95
msgid "SECS"
@@ -121,15 +123,15 @@ msgstr "SEK"
#: gl/lib/argp-parse.c:96
msgid "hang for SECS seconds (default 3600)"
-msgstr "warte für SEK Sekunden (Standardwert 3600)"
+msgstr "SEK Sekunden warten (Standardwert 3600)"
#: gl/lib/argp-parse.c:154
msgid "print program version"
-msgstr "zeige Programmversion an"
+msgstr "Programmversion anzeigen"
#: gl/lib/argp-parse.c:171
msgid "(PROGRAM ERROR) No version known!?"
-msgstr "(PROGRAMM FEHLER) Keine Version bekannt!?"
+msgstr "(PROGRAMMFEHLER) Keine Version bekannt!?"
#: gl/lib/argp-parse.c:624
#, c-format
@@ -138,32 +140,32 @@ msgstr "%s: zu viele Argumente\n"
#: gl/lib/argp-parse.c:770
msgid "(PROGRAM ERROR) Option should have been recognized!?"
-msgstr "(PROGRAMM FEHLER) Option hätte erkannt werden müssen!?"
+msgstr "(PROGRAMMFEHLER) Option hätte erkannt werden müssen!?"
#: gl/lib/getopt.c:278
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' is ambiguous\n"
-msgstr "%s: Option »-W %s« ist mehrdeutig\n"
+msgstr "%s: Option »%s%s« ist mehrdeutig\n"
#: gl/lib/getopt.c:284
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' is ambiguous; possibilities:"
-msgstr "%s: Option »%s« ist mehrdeutig; Möglichkeiten:"
+msgstr "%s: Option »%s%s« ist mehrdeutig; Möglichkeiten:"
#: gl/lib/getopt.c:319
-#, fuzzy, c-format
+#, c-format
msgid "%s: unrecognized option '%s%s'\n"
-msgstr "%s: unbekannte Option »%c%s«\n"
+msgstr "%s: unbekannte Option »%s%s«\n"
#: gl/lib/getopt.c:345
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' doesn't allow an argument\n"
-msgstr "%s: Option »%c%s« erlaubt kein Argument\n"
+msgstr "%s: Option »%s%s« erlaubt kein Argument\n"
#: gl/lib/getopt.c:360
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' requires an argument\n"
-msgstr "%s: Option »--%s« erfordert ein Argument\n"
+msgstr "%s: Option »%s%s« erfordert ein Argument\n"
#: gl/lib/getopt.c:621
#, c-format
@@ -178,7 +180,7 @@ msgstr "%s: Option erfordert ein Argument -- »%c«\n"
#: gl/lib/openat-die.c:38
#, c-format
msgid "unable to record current working directory"
-msgstr "aktuelles Arbeitsverzeichnisses kann nicht aufgezeichnet werden"
+msgstr "aktuelles Arbeitsverzeichnis konnte nicht bestimmt werden"
#: gl/lib/openat-die.c:57
#, c-format
@@ -196,36 +198,35 @@ msgstr "Keine Übereinstimmung"
#: gl/lib/regcomp.c:141
msgid "Invalid regular expression"
-msgstr "ungültiger regulärer Ausdruck"
+msgstr "Ungültiger regulärer Ausdruck"
#: gl/lib/regcomp.c:144
msgid "Invalid collation character"
-msgstr "Ungültige Zeichenklasse"
+msgstr "Ungültiges Sortierungszeichen"
#: gl/lib/regcomp.c:147
msgid "Invalid character class name"
-msgstr "Ungültiger Zeichenklassenname"
+msgstr "Ungültiger Name für Zeichenklasse"
#: gl/lib/regcomp.c:150
msgid "Trailing backslash"
-msgstr "abschließender Backslash"
+msgstr "Unerwarteter Backslash am Ende"
#: gl/lib/regcomp.c:153
msgid "Invalid back reference"
msgstr "Ungültige Rückreferenz"
#: gl/lib/regcomp.c:156
-#, fuzzy
msgid "Unmatched [, [^, [:, [., or [="
-msgstr "Keine Übereinstimmung für [ oder [^"
+msgstr "Gegenstück zu [, [^, [:, [. oder [= fehlt"
#: gl/lib/regcomp.c:159
msgid "Unmatched ( or \\("
-msgstr "Keine Übereinstimmung für ( oder \\("
+msgstr "Gegenstück zu ( oder \\( fehlt"
#: gl/lib/regcomp.c:162
msgid "Unmatched \\{"
-msgstr "Keine Übereinstimmung für \\{"
+msgstr "Gegenstück zu \\{ fehlt"
#: gl/lib/regcomp.c:165
msgid "Invalid content of \\{\\}"
@@ -237,11 +238,11 @@ msgstr "Ungültiges Bereichsende"
#: gl/lib/regcomp.c:171
msgid "Memory exhausted"
-msgstr "Speicher ausgeschöpft"
+msgstr "Zu wenig Speicher vorhanden"
#: gl/lib/regcomp.c:174
msgid "Invalid preceding regular expression"
-msgstr "ungültiger vorhergehender regulärer Ausdruck"
+msgstr "Ungültiger vorhergehender regulärer Ausdruck"
#: gl/lib/regcomp.c:177
msgid "Premature end of regular expression"
@@ -253,7 +254,7 @@ msgstr "Der reguläre Ausdruck ist zu groß"
#: gl/lib/regcomp.c:183
msgid "Unmatched ) or \\)"
-msgstr "Keine Übereinstimmung für ) oder \\)"
+msgstr "Gegenstück zu ) oder \\) fehlt"
#: gl/lib/regcomp.c:676
msgid "No previous regular expression"
@@ -261,7 +262,12 @@ msgstr "Kein vorhergehender regulärer Ausdruck"
#: gl/lib/xalloc-die.c:34
msgid "memory exhausted"
-msgstr "Speicher ausgeschöpft"
+msgstr "Zu wenig Speicher vorhanden"
+
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr "Standarddateideskriptoren"
#~ msgid "invalid argument %s for %s"
#~ msgstr "ungültiges Argument %s für %s"
@@ -272,8 +278,51 @@ msgstr "Speicher ausgeschöpft"
#~ msgid "Valid arguments are:"
#~ msgstr "Gültige Argumente sind:"
-#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
-#~ msgstr "%.*s: ARGP_HELP_FMT Parameter muss positiv sein"
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs, %u freigegeben (%.2f%%).\n"
+
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets, %u gecacht (%.2f%%)\n"
+
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets, %u gecacht (%.2f%%)\n"
+
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests, %u gecacht (%.2f%%)\n"
+
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
+
+#~ msgid "count log histogram\n"
+#~ msgstr "logarithmisches Anzahlhistogramm\n"
+
+#~ msgid "size log histogram\n"
+#~ msgstr "logarithmisches Größenhistogramm\n"
+
+#~ msgid "density histogram\n"
+#~ msgstr "Dichtehistogramm\n"
+
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bitmengen-Statistik:\n"
+#~ "\n"
+
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Aufsummierte Durchläufe = %u\n"
+
+#~ msgid "cannot read stats file"
+#~ msgstr "Statistikdatei konnte nicht gelesen werden"
+
+#~ msgid "bad stats file size\n"
+#~ msgstr "Statistikdatei hat falsche Größe\n"
+
+#~ msgid "cannot write stats file"
+#~ msgstr "Statistikdatei konnte nicht angelegt werden"
+
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "Statistikdatei konnte nicht zum Schreiben geöffnet werden"
#~ msgid "program error"
#~ msgstr "Programmfehler"
@@ -283,49 +332,82 @@ msgstr "Speicher ausgeschöpft"
#~ msgid "cannot find a temporary directory, try setting $TMPDIR"
#~ msgstr ""
-#~ "kann kein temporäres Verzeichnis finden, versuchen Sie, $TMPDIR zu setzen"
+#~ "kein temporäres Verzeichnis gefunden, 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"
+#~ msgstr ""
+#~ "temporäres Verzeichnis mit der Schablone »%s« konnte nicht angelegt werden"
#~ msgid "cannot remove temporary file %s"
-#~ msgstr "kann temporäre Datei %s nicht entfernen"
+#~ msgstr "temporäre Datei »%s« konnte nicht entfernt werden"
#~ msgid "cannot remove temporary directory %s"
-#~ msgstr "kann temporäres Verzeichnis %s nicht entfernen"
+#~ msgstr "temporäres Verzeichnis »%s« konnte nicht entfernt werden"
#~ msgid "error closing file"
#~ msgstr "Fehler beim Schließen der Datei"
#~ msgid "write error"
-#~ msgstr "Schreibfehler"
+#~ msgstr "Fehler beim Schreiben der Datei"
#~ msgid "preserving permissions for %s"
-#~ msgstr "erhalte Zugriffsrechte von %s"
+#~ msgstr "Zugriffsberechtigungen von »%s« werden beibehalten"
-#~ msgid "error while opening \"%s\" for reading"
-#~ msgstr "Fehler beim Versuch, „%s“ zum Lesen zu öffnen"
+#~ msgid "error while opening %s for reading"
+#~ msgstr "die Datei »%s« konnte nicht zum Lesen geöffnet werden"
-#~ msgid "cannot open backup file \"%s\" for writing"
-#~ msgstr "kann Sicherungsdatei „%s“ nicht zum Schreiben öffnen"
+#~ msgid "cannot open backup file %s for writing"
+#~ msgstr "die Sicherungsdatei »%s« konnte nicht zum Schreiben geöffnet werden"
-#~ msgid "error reading \"%s\""
-#~ msgstr "Fehler beim Lesen von „%s“"
+#~ msgid "error reading %s"
+#~ msgstr "Fehler beim Lesen von »%s«"
-#~ msgid "error writing \"%s\""
-#~ msgstr "Fehler beim Schreiben 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 "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# compiler not found, try installing mono"
+#~ msgstr ""
+#~ "C#-Compiler nicht gefunden, versuchen Sie, das Paket »mono« zu "
+#~ "installieren"
+
+#~ msgid "C# virtual machine not found, try installing mono"
+#~ msgstr ""
+#~ "Virtuelle Maschine für C# nicht gefunden, versuchen Sie, das Paket »mono« "
+#~ "zu installieren"
+
+#~ msgid "unbalanced ["
+#~ msgstr "öffnende eckige Klammer »[« ohne Gegenstück"
+
+#~ msgid "invalid character class"
+#~ msgstr "ungültige Zeichenklasse"
-#~ msgid "C# virtual machine not found, try installing pnet"
-#~ msgstr "C#-VM nicht gefunden, versuchen Sie, pnet zu installieren"
+#~ msgid "character class syntax is [[:space:]], not [:space:]"
+#~ msgstr ""
+#~ "Die Schreibweise für Zeichenklassen ist [[:space:]], nicht [:space:]"
+
+#~ msgid "unfinished \\ escape"
+#~ msgstr "unvollendete \\-Escapesequenz"
+
+#~ msgid "invalid content of \\{\\}"
+#~ msgstr "Ungültiger Inhalt in \\{\\}"
+
+#~ msgid "regular expression too big"
+#~ msgstr "der reguläre Ausdruck ist zu groß"
+
+#~ msgid "unbalanced ("
+#~ msgstr "öffnende Klammer »(« ohne Gegenstück"
+
+#~ msgid "no syntax specified"
+#~ msgstr "keine Syntax angegeben"
+
+#~ msgid "unbalanced )"
+#~ msgstr "schließende Klammer »)« ohne Gegenstück"
#~ msgid "%s subprocess failed"
#~ msgstr "%s: Unterprozess fehlgeschlagen"
@@ -339,21 +421,9 @@ msgstr "Speicher ausgeschöpft"
#~ 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"
@@ -366,6 +436,51 @@ msgstr "Speicher ausgeschöpft"
#~ msgid "typed memory object"
#~ msgstr "Objekt getypten Speichers"
+#~ msgid "block special file"
+#~ msgstr "blockorientierte Spezialdatei"
+
+#~ msgid "character special file"
+#~ msgstr "zeichenorientierte Spezialdatei"
+
+#~ msgid "contiguous data"
+#~ msgstr "zusammenhängende Daten"
+
+#~ msgid "fifo"
+#~ msgstr "FIFO"
+
+#~ msgid "door"
+#~ msgstr "Tür"
+
+#~ msgid "multiplexed block special file"
+#~ msgstr "gemultiplexte blockorientierte Spezialdatei"
+
+#~ msgid "multiplexed character special file"
+#~ msgstr "gemultiplexte zeichenorientierte Spezialdatei"
+
+#~ msgid "multiplexed file"
+#~ msgstr "gemultiplexte Datei"
+
+#~ msgid "named file"
+#~ msgstr "benannte Datei"
+
+#~ msgid "network special file"
+#~ msgstr "netzwerkbezogene Spezialdatei"
+
+#~ msgid "migrated file with data"
+#~ msgstr "migrierte Datei mit Daten"
+
+#~ msgid "migrated file without data"
+#~ msgstr "migrierte Datei ohne Daten"
+
+#~ msgid "port"
+#~ msgstr "Anschluss"
+
+#~ msgid "socket"
+#~ msgstr "Socket"
+
+#~ msgid "whiteout"
+#~ msgstr "Überblendung"
+
#~ msgid "weird file"
#~ msgstr "merkwürdige Datei"
@@ -426,85 +541,74 @@ msgstr "Speicher ausgeschöpft"
#~ msgid "Unknown error"
#~ msgstr "Unbekannter Fehler"
-#~ msgid "%s: option '--%s' doesn't allow an argument\n"
-#~ msgstr "%s: Option »--%s« erlaubt kein Argument\n"
-
-#~ msgid "%s: unrecognized option '--%s'\n"
-#~ msgstr "%s: unbekannte Option »--%s«\n"
-
-#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
-#~ msgstr "%s: Option »-W %s« erlaubt kein Argument\n"
-
-#~ msgid "%s: option '-W %s' requires an argument\n"
-#~ msgstr "%s: Option »-W %s« erfordert ein Argument\n"
-
#~ msgid "invalid source_version argument to compile_java_class"
-#~ msgstr "ungültiges Argument source_version für 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"
+#~ msgstr "ungültiges Argument »target_version« für »compile_java_class«"
#~ msgid "failed to create \"%s\""
-#~ msgstr "konnte „%s“ nicht erzeugen"
+#~ msgstr "Datei »%s« konnte nicht erzeugt werden"
#~ msgid "error while writing \"%s\" file"
-#~ msgstr "Fehler beim Schreiben von der Datei „%s“"
+#~ msgstr "Fehler beim Schreiben 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"
+#~ "Java-Compiler nicht gefunden, versuchen Sie, das Paket »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"
+#~ "Virtuelle Maschine für Java nicht gefunden, versuchen Sie, das Paket "
+#~ "»gij« zu installieren oder setzen Sie $JAVA"
#~ msgid "%s subprocess I/O error"
#~ msgstr "%s-Unterprozess-E/A-Fehler"
+#~ msgid "cannot stat %s"
+#~ msgstr "Dateieigenschaften für »%s« konnten nicht bestimmt werden"
+
#~ msgid "cannot change permissions of %s"
-#~ msgstr "kann Zugriffsrechte von %s nicht ändern"
+#~ msgstr "Zugriffsrechte von »%s« konnten nicht geändert werden"
#~ msgid "cannot create directory %s"
-#~ msgstr "kann Verzeichnis %s nicht anlegen"
+#~ msgstr "Verzeichnis »%s« konnte nicht angelegt werden"
#~ msgid "Failed to open /dev/zero for read"
-#~ msgstr "Konnte /dev/zero nicht zum Lesen öffnen"
+#~ msgstr "Das Gerät »/dev/zero« konnte nicht zum Lesen geöffnet werden"
#~ 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"
+#~ "Nicht-blockierendes I/O zu Teilprozess »%s« konnte nicht hergestellt "
+#~ "werden"
#~ msgid "communication with %s subprocess failed"
-#~ msgstr "Kommunikation mit Teilprozess %s fehlgeschlagen"
+#~ msgstr "Kommunikation mit Teilprozess »%s« fehlgeschlagen"
#~ msgid "write to %s subprocess failed"
-#~ msgstr "Schreiben zu Teilprozess %s fehlgeschlagen"
+#~ msgstr "Schreiben zu Teilprozess »%s« fehlgeschlagen"
#~ msgid "read from %s subprocess failed"
-#~ msgstr "Lesen von Teilprozess %s fehlgeschlagen"
+#~ msgstr "Lesen von Teilprozess »%s« fehlgeschlagen"
#~ msgid "subprocess %s terminated with exit code %d"
-#~ msgstr "Teilprozess %s beendet mit Exitcode %d"
+#~ msgstr "Teilprozess »%s« beendet mit Code %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"
+#~ msgstr "Teilprozess »%s« wurde mit Code %d beendet"
#~ msgid "`"
-#~ msgstr "„"
+#~ msgstr "»"
#~ msgid "'"
-#~ msgstr "“"
+#~ msgstr "«"
#~ msgid "^[yY]"
#~ msgstr "^[jJyY]"
@@ -513,10 +617,10 @@ msgstr "Speicher ausgeschöpft"
#~ msgstr "^[nN]"
#~ msgid "setting permissions for %s"
-#~ msgstr "setze Zugriffsrechte von %s"
+#~ msgstr "Zugriffsberechtigungen von »%s« werden festgelegt"
#~ msgid "Hangup"
-#~ msgstr "Aufgehängt"
+#~ msgstr "Aufhängen"
#~ msgid "Interrupt"
#~ msgstr "Unterbrechung"
@@ -525,7 +629,7 @@ msgstr "Speicher ausgeschöpft"
#~ msgstr "Beendet"
#~ msgid "Illegal instruction"
-#~ msgstr "Ungültige Anweisung"
+#~ msgstr "Ungültiger Maschinenbefehl"
#~ msgid "Trace/breakpoint trap"
#~ msgstr "Trace-/Breakpoint-Falle"
@@ -534,7 +638,7 @@ msgstr "Speicher ausgeschöpft"
#~ msgstr "Abgebrochen"
#~ msgid "Floating point exception"
-#~ msgstr "Fließkomma-Ausnahme"
+#~ msgstr "Gleitkomma-Ausnahme"
#~ msgid "Killed"
#~ msgstr "Getötet"
@@ -543,13 +647,13 @@ msgstr "Speicher ausgeschöpft"
#~ msgstr "Busfehler"
#~ msgid "Segmentation fault"
-#~ msgstr "Speicheraufteilungsfehler"
+#~ msgstr "Speicherzugriffsfehler"
#~ msgid "Broken pipe"
#~ msgstr "Unterbrochene Weiterleitung"
#~ msgid "Alarm clock"
-#~ msgstr "Alarmuhr"
+#~ msgstr "Wecker"
#~ msgid "Terminated"
#~ msgstr "Terminiert"
@@ -567,7 +671,7 @@ msgstr "Speicher ausgeschöpft"
#~ msgstr "Fortgesetzt"
#~ msgid "Child exited"
-#~ msgstr "Kind verlassen"
+#~ msgstr "Kindprozess beendet"
#~ msgid "Stopped (tty input)"
#~ msgstr "Gestoppt (tty-Eingabe)"
@@ -621,7 +725,7 @@ msgstr "Speicher ausgeschöpft"
#~ msgstr "Fehler beim Schreiben in geschlossene Pipe oder Socket"
#~ msgid "cannot create pipe"
-#~ msgstr "kann Pipe nicht erzeugen"
+#~ msgstr "Pipe konnte nicht erzeugt werden"
#~ msgid "Real-time signal %d"
#~ msgstr "Echtzeitsignal %d"
@@ -629,6 +733,18 @@ msgstr "Speicher ausgeschöpft"
#~ msgid "Unknown signal %d"
#~ msgstr "Unbekanntes Signal %d"
+#~ msgid "Execution times (seconds)"
+#~ msgstr "Ausführungszeiten (in Sekunden)"
+
+#~ msgid "CPU user"
+#~ msgstr "CPU Anwendung"
+
+#~ msgid "CPU system"
+#~ msgstr "CPU System"
+
+#~ msgid "wall clock"
+#~ msgstr "Vergangene Zeit"
+
#~ msgid "iconv function not usable"
#~ msgstr "iconv-Funktion nicht benutzbar"
@@ -639,22 +755,25 @@ msgstr "Speicher ausgeschöpft"
#~ msgstr "Zeichen außerhalb erlaubter Grenzen"
#~ msgid "cannot convert U+%04X to local character set"
-#~ msgstr "kann U+%04X nicht in lokalen Zeichensatz konvertieren"
+#~ msgstr ""
+#~ "das Zeichen U+%04X konnte nicht in lokalen Zeichensatz konvertiert werden"
#~ msgid "cannot convert U+%04X to local character set: %s"
-#~ msgstr "kann U+%04X nicht in lokalen Zeichensatz konvertieren: %s"
+#~ msgstr ""
+#~ "das Zeichen U+%04X konnte nicht in lokalen Zeichensatz konvertiert "
+#~ "werden: %s"
#~ msgid "invalid user"
-#~ msgstr "ungültiger Benutzer"
+#~ msgstr "ungültiger Benutzername"
#~ msgid "invalid group"
-#~ msgstr "ungültige Gruppe"
+#~ msgstr "ungültiger Gruppenname"
#~ msgid "invalid spec"
-#~ msgstr "ungültige Spec"
+#~ msgstr "ungültige Angabe"
#~ msgid "unable to display error message"
-#~ msgstr "kann Fehlermeldung nicht anzeigen"
+#~ msgstr "Fehlermeldung konnte nicht angezeigt werden"
#~ msgid "Packaged by %s (%s)\n"
#~ msgstr "Paket erstellt von %s (%s)\n"
@@ -666,19 +785,13 @@ msgstr "Speicher ausgeschöpft"
#~ msgstr "©"
#~ msgid ""
-#~ "\n"
-#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
-#~ "html>.\n"
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ "Lizenz GPLv3+: GNU GPL Version 3 oder höher <%s>.\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"
+#~ "Es gibt keinerlei Garantien, soweit es das Gesetz erlaubt.\n"
#~ msgid "Written by %s.\n"
#~ msgstr "Geschrieben von %s.\n"
@@ -744,34 +857,28 @@ msgstr "Speicher ausgeschöpft"
#~ "%s, %s, %s, %s,\n"
#~ "%s, %s und anderen.\n"
-#~ msgid ""
-#~ "\n"
-#~ "Report bugs to: %s\n"
+#~ msgid "Report bugs to: %s\n"
#~ msgstr ""
-#~ "\n"
-#~ "Melden Sie Fehler im Program (auf Englisch, mit LC_ALL=C) an <%s>.\n"
+#~ "Melden Sie Fehler im Programm (auf Englisch) 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"
+#~ msgstr "Melden Sie %s-Fehler an »%s«\n"
#~ msgid "%s home page: <%s>\n"
-#~ msgstr "%s Homepage: <%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 "General help using GNU software: <%s>\n"
+#~ msgstr "Allgemeine Hilfe zur Benutzung von GNU-Software: %s\n"
#~ msgid "_open_osfhandle failed"
#~ msgstr "_open_osfhandle fehlgeschlagen"
#~ msgid "cannot restore fd %d: dup2 failed"
-#~ msgstr "Kann Fd %d nicht wiederherstellen: dup2 fehlgeschlagen"
+#~ msgstr ""
+#~ "Dateideskriptor %d konnte nicht wiederhergestellt werden: dup2 "
+#~ "fehlgeschlagen"
#~ msgid "%s subprocess"
#~ msgstr "%s-Unterprozess"
@@ -779,6 +886,10 @@ msgstr "Speicher ausgeschöpft"
#~ msgid "%s subprocess got fatal signal %d"
#~ msgstr "%s-Unterprozess bekam tödliches Signal %d"
+#~ msgid "failed to set file descriptor text/binary mode"
+#~ msgstr ""
+#~ "Dateideskriptor konnte nicht zwischen Text und Binär umgeschaltet werden"
+
#~ msgid "stdin"
#~ msgstr "Standardeingabe (stdin)"
@@ -792,28 +903,49 @@ msgstr "Speicher ausgeschöpft"
#~ msgstr "Unbekannter Datenstrom"
#~ msgid "failed to reopen %s with mode %s"
-#~ msgstr "Erneutes Öffnen von %s mit Mode %s fehlgeschlagen"
+#~ msgstr "Erneutes Öffnen von %s mit Modus %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."
+#~ 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."
+#~ msgstr "Die verglichenen Zeichenketten waren »%s« und »%s«."
#~ msgid "cannot perform formatted output"
-#~ msgstr "kann keine formatierte Ausgabe durchführen"
+#~ msgstr "formatierte Ausgabe konnte nicht durchgeführt werden"
+
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "ungültiges %s%s-Argument »%s«"
-#~ msgid "invalid %s%s argument `%s'"
-#~ msgstr "ungültiges %s%s-Argument „%s“"
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "ungültige Endung in %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%s argument `%s' too large"
-#~ msgstr "%s%s-Argument „%s“ zu groß"
+#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
+#~ msgstr "%.*s: ARGP_HELP_FMT Parameter muss positiv sein"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: Option »--%s« erlaubt kein Argument\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: unbekannte Option »--%s«\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: Option »-W %s« erlaubt kein Argument\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: Option »-W %s« erfordert ein Argument\n"
+
+#~ msgid "Franc,ois Pinard"
+#~ msgstr "François Pinard"
+
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "Heimatseite von %s: <http://www.gnu.org/software/%s/>.\n"
#~ msgid "%s: illegal option -- %c\n"
#~ msgstr "%s: ungültige Option -- %c\n"
diff --git a/gl/po/el.po b/gl/po/el.po
index 4014416c..b8c7142d 100644
--- a/gl/po/el.po
+++ b/gl/po/el.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\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"
@@ -43,27 +43,27 @@ msgid ""
"optional for any corresponding short options."
msgstr ""
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr ""
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr ""
#
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
msgstr " [ΕΠΙΛΟΓΗ...]"
#
-#: gl/lib/argp-help.c:1668
+#: gl/lib/argp-help.c:1670
#, fuzzy, c-format
msgid "Try '%s --help' or '%s --usage' for more information.\n"
msgstr "Δοκιμάστε `%s --help' για περισσότερη βοήθεια.\n"
#
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, fuzzy, c-format
msgid "Report bugs to %s.\n"
msgstr ""
@@ -71,7 +71,7 @@ msgstr ""
"Αναφέρατε σφάλματα στο <%s>.\n"
#
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Άγνωστο σφάλμα συστήματος"
@@ -268,6 +268,11 @@ msgstr "σφάλμα στην ανεύρεση μέσω κανονικής έκ
msgid "memory exhausted"
msgstr "η μνήμη εξαντλήθηκε"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr ""
+
#
#~ msgid "invalid argument %s for %s"
#~ msgstr "μη έγκυρο όρισμα %s για %s"
diff --git a/gl/po/eo.gmo b/gl/po/eo.gmo
index 9d9a7e57..d08ffb1d 100644
--- a/gl/po/eo.gmo
+++ b/gl/po/eo.gmo
Binary files differ
diff --git a/gl/po/eo.po b/gl/po/eo.po
index 76c90fe9..876e7f67 100644
--- a/gl/po/eo.po
+++ b/gl/po/eo.po
@@ -1,14 +1,14 @@
-# translation of gnubiff-2.0.2.po to Esperanto
-# Copyright (C) 2013 Free Software Foundation, Inc.
+# translation of gnulib to Esperanto
+# Copyright (C) 2013, 2019 Free Software Foundation, Inc.
# This file is distributed under the same license as the gnulib package.
-# Felipe Castro <fefcas@gmail.com>, 2013.
+# Felipe Castro <fefcas@gmail.com>, 2013, 2019.
#
msgid ""
msgstr ""
-"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n"
+"Project-Id-Version: gnulib 4.0.0.2567\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
-"PO-Revision-Date: 2013-02-06 15:17-0300\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\n"
+"PO-Revision-Date: 2019-05-19 18:26-0300\n"
"Last-Translator: Felipe Castro <fefcas@gmail.com>\n"
"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
"Language: eo\n"
@@ -16,6 +16,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 1.8.11\n"
#: gl/lib/argp-help.c:158
#, c-format
@@ -45,29 +46,29 @@ msgstr ""
"Devigaj aŭ nedevigaj argumentoj por longaj modifiloj ankaŭ estas devigaj aŭ "
"nedevigaj por iu ajn korespondanta mallonga modifilo."
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr "Uzmaniero:"
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr " aŭ: "
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
msgstr " [MODIFILO...]"
-#: gl/lib/argp-help.c:1668
-#, fuzzy, c-format
+#: gl/lib/argp-help.c:1670
+#, 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"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, c-format
msgid "Report bugs to %s.\n"
msgstr "Raportu program-misojn al %s.\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Nekonata sistem-eraro"
@@ -113,29 +114,29 @@ msgid "(PROGRAM ERROR) Option should have been recognized!?"
msgstr "(PROGRAM-ERARO) Modifilo devus esti rekonita!?"
#: gl/lib/getopt.c:278
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' is ambiguous\n"
-msgstr "%s: la modifilo '-W %s' estas plursenca\n"
+msgstr "%s: la modifilo '%s%s' estas plursenca\n"
#: gl/lib/getopt.c:284
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' is ambiguous; possibilities:"
-msgstr "%s: la modifilo '%s' estas plursenca; eblecoj:"
+msgstr "%s: la modifilo '%s%s' estas plursenca; eblecoj:"
#: gl/lib/getopt.c:319
-#, fuzzy, c-format
+#, c-format
msgid "%s: unrecognized option '%s%s'\n"
-msgstr "%s: nerekonata modifilo '%c%s'\n"
+msgstr "%s: nerekonata modifilo '%s%s'\n"
#: gl/lib/getopt.c:345
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' doesn't allow an argument\n"
-msgstr "%s: la modifilo '%c%s' ne permesas argumenton\n"
+msgstr "%s: la modifilo '%s%s' ne permesas argumenton\n"
#: gl/lib/getopt.c:360
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' requires an argument\n"
-msgstr "%s: la modifilo '--%s' postulas argumenton\n"
+msgstr "%s: la modifilo '%s%s' postulas argumenton\n"
#: gl/lib/getopt.c:621
#, c-format
@@ -186,9 +187,8 @@ msgid "Invalid back reference"
msgstr "Malvalida retroreferenco"
#: gl/lib/regcomp.c:156
-#, fuzzy
msgid "Unmatched [, [^, [:, [., or [="
-msgstr "Senpara [ aŭ [^"
+msgstr "Senpara [, [^, [:, [., aŭ [="
#: gl/lib/regcomp.c:159
msgid "Unmatched ( or \\("
@@ -234,6 +234,11 @@ msgstr "Neniu antaŭa regulesprimo"
msgid "memory exhausted"
msgstr "memoro estas plenigita"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr "laŭnormaj dosier-priaĵoj"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "malvalida argumento %s por %s"
@@ -243,8 +248,51 @@ msgstr "memoro estas plenigita"
#~ msgid "Valid arguments are:"
#~ msgstr "Validaj argumentoj estas:"
-#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
-#~ msgstr "%.*s: parametro ARGP_HELP_FMT devas esti pozitiva"
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs, %u liberitaj (%.2f%%).\n"
+
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets, %u kaŝmem (%.2f%%)\n"
+
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets, %u kaŝmem (%.2f%%)\n"
+
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests, %u kaŝmem (%.2f%%)\n"
+
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
+
+#~ msgid "count log histogram\n"
+#~ msgstr "histogramo pri nombro-protokolado\n"
+
+#~ msgid "size log histogram\n"
+#~ msgstr "histogramo pri grando-protokolado\n"
+
+#~ msgid "density histogram\n"
+#~ msgstr "histogramo pri denso\n"
+
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bitset statistikoj:\n"
+#~ "\n"
+
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Akumulitaj funkciadoj = %u\n"
+
+#~ msgid "cannot read stats file"
+#~ msgstr "ne eblas legi dosieron stats"
+
+#~ msgid "bad stats file size\n"
+#~ msgstr "malĝusta dosier-grando de stats\n"
+
+#~ msgid "cannot write stats file"
+#~ msgstr "ne eblas skibi en dosiero stats"
+
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "ne eblas malfermi dosieron stats por skribi"
#~ msgid "program error"
#~ msgstr "programeraro"
@@ -273,29 +321,56 @@ msgstr "memoro estas plenigita"
#~ 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 "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 "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 reading %s"
+#~ msgstr "eraro dum lego de %s"
-#~ msgid "error writing \"%s\""
-#~ msgstr "eraro skribante \"%s\""
+#~ msgid "error writing %s"
+#~ msgstr "eraro dum skribo de %s"
-#~ msgid "error after reading \"%s\""
-#~ msgstr "eraro post legi \"%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# compiler not found, try installing mono"
+#~ msgstr "Kompililo C# ne estis trovata, ni provas instali mono"
+
+#~ msgid "C# virtual machine not found, try installing mono"
+#~ msgstr "Virtuala maŝino C# ne estis trovata, ni provas instali mono"
+
+#~ msgid "unbalanced ["
+#~ msgstr "nekongruita ["
+
+#~ msgid "invalid character class"
+#~ msgstr "malvalida signa klaso"
+
+#~ msgid "character class syntax is [[:space:]], not [:space:]"
+#~ msgstr "sintakso de signa klaso estas [[:space:]], ne [:space:]"
-#~ msgid "C# virtual machine not found, try installing pnet"
-#~ msgstr "Virtuala maŝino C# ne estis trovata, ni provas instali pnet"
+#~ msgid "unfinished \\ escape"
+#~ msgstr "nefinigita eskapo \\"
+
+#~ msgid "invalid content of \\{\\}"
+#~ msgstr "malvalida enhavo de \\{\\}"
+
+#~ msgid "regular expression too big"
+#~ msgstr "regulesprimo tro grandas"
+
+#~ msgid "unbalanced ("
+#~ msgstr "nekongruita ("
+
+#~ msgid "no syntax specified"
+#~ msgstr "neniu sintakso estas indikita"
+
+#~ msgid "unbalanced )"
+#~ msgstr "nekongruita )"
#~ msgid "%s subprocess failed"
#~ msgstr "subprocezo de %s fiaskis"
@@ -309,21 +384,9 @@ msgstr "memoro estas plenigita"
#~ 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"
@@ -336,6 +399,51 @@ msgstr "memoro estas plenigita"
#~ msgid "typed memory object"
#~ msgstr "tipita memorbjekto"
+#~ msgid "block special file"
+#~ msgstr "bloka speciala dosiero"
+
+#~ msgid "character special file"
+#~ msgstr "bajta speciala dosiero"
+
+#~ msgid "contiguous data"
+#~ msgstr "kontinua datumaro"
+
+#~ msgid "fifo"
+#~ msgstr "fifo"
+
+#~ msgid "door"
+#~ msgstr "enirejo"
+
+#~ msgid "multiplexed block special file"
+#~ msgstr "multplektita bloka speciala dosiero"
+
+#~ msgid "multiplexed character special file"
+#~ msgstr "bajta multplektita speciala dosiero"
+
+#~ msgid "multiplexed file"
+#~ msgstr "multplektita dosiero"
+
+#~ msgid "named file"
+#~ msgstr "nomigita dosiero"
+
+#~ msgid "network special file"
+#~ msgstr "reta speciala dosiero"
+
+#~ msgid "migrated file with data"
+#~ msgstr "transmetis dosieron kun datumaro"
+
+#~ msgid "migrated file without data"
+#~ msgstr "transmetis dosieron sen datumaro"
+
+#~ msgid "port"
+#~ msgstr "pordo"
+
+#~ msgid "socket"
+#~ msgstr "konektingo"
+
+#~ msgid "whiteout"
+#~ msgstr "'whiteout'"
+
#~ msgid "weird file"
#~ msgstr "stranga dosiero"
@@ -396,18 +504,6 @@ msgstr "memoro estas plenigita"
#~ msgid "Unknown error"
#~ msgstr "Nekonata eraro"
-#~ msgid "%s: option '--%s' doesn't allow an argument\n"
-#~ msgstr "%s: la modifilo '--%s' ne permesas argumenton\n"
-
-#~ msgid "%s: unrecognized option '--%s'\n"
-#~ msgstr "%s: nerekonata modifilo '--%s'\n"
-
-#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
-#~ msgstr "%s: la modifilo '-W %s' ne permesas argumenton\n"
-
-#~ msgid "%s: option '-W %s' requires an argument\n"
-#~ msgstr "%s: la modifilo '-W %s' postulas argumenton\n"
-
#~ msgid "invalid source_version argument to compile_java_class"
#~ msgstr "malvalida argumento source_version por compile_java_class"
@@ -430,6 +526,9 @@ msgstr "memoro estas plenigita"
#~ msgid "%s subprocess I/O error"
#~ msgstr "%s subproceza eraro de en/eligo"
+#~ msgid "cannot stat %s"
+#~ msgstr "ne eblas stat %s"
+
#~ msgid "cannot change permissions of %s"
#~ msgstr "ne eblas ŝanĝi permesojn de %s"
@@ -463,9 +562,6 @@ msgstr "memoro estas plenigita"
#~ 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 "‘"
@@ -566,7 +662,7 @@ msgstr "memoro estas plenigita"
#~ msgstr "Signalo 2 difinita de uzanto"
#~ msgid "EMT trap"
-#~ msgstr "kaptilo EMT"
+#~ msgstr "EMT-kaptilo"
#~ msgid "Bad system call"
#~ msgstr "Malĝusta sistemvoko"
@@ -595,6 +691,18 @@ msgstr "memoro estas plenigita"
#~ msgid "Unknown signal %d"
#~ msgstr "Nekonata signalo %d"
+#~ msgid "Execution times (seconds)"
+#~ msgstr "Tempo de funkciado (sekundoj)"
+
+#~ msgid "CPU user"
+#~ msgstr "CPU uzanto"
+
+#~ msgid "CPU system"
+#~ msgstr "CPU sistemo"
+
+#~ msgid "wall clock"
+#~ msgstr "mur-horloĝo"
+
#~ msgid "iconv function not usable"
#~ msgstr "funkcio iconv ne uzeblas"
@@ -632,20 +740,14 @@ msgstr "memoro estas plenigita"
#~ msgstr "©"
#~ msgid ""
-#~ "\n"
-#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
-#~ "html>.\n"
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ "Permeso GPLv3+: GNU GPL versio 3 aŭ posta <%s>.\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"
@@ -711,12 +813,8 @@ msgstr "memoro estas plenigita"
#~ "%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 bugs to: %s\n"
+#~ msgstr "Raportu program-misojn al: %s\n"
#~ msgid "Report %s bugs to: %s\n"
#~ msgstr "Raportu %s misojn al: %s\n"
@@ -724,12 +822,8 @@ msgstr "memoro estas plenigita"
#~ 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 "General help using GNU software: <%s>\n"
+#~ msgstr "Ĝenerala helpo por uzi programaron GNU: <%s>\n"
#~ msgid "_open_osfhandle failed"
#~ msgstr "_open_osfhandle fiaskis"
@@ -743,6 +837,9 @@ msgstr "memoro estas plenigita"
#~ msgid "%s subprocess got fatal signal %d"
#~ msgstr "subprocezo %s ricevis neripareblan signalon %d"
+#~ msgid "failed to set file descriptor text/binary mode"
+#~ msgstr "ni fiaskis difini la dosieran priaĵon teksta/cifereca reĝimo"
+
#~ msgid "stdin"
#~ msgstr "ĉefenigujo"
@@ -770,11 +867,32 @@ msgstr "memoro estas plenigita"
#~ msgid "cannot perform formatted output"
#~ msgstr "ne eblas efektivigi formatitan eligon"
-#~ msgid "invalid %s%s argument `%s'"
+#~ msgid "invalid %s%s argument '%s'"
#~ msgstr "malvalida %s%s-argumento '%s'"
-#~ msgid "invalid suffix in %s%s argument `%s'"
+#~ msgid "invalid suffix in %s%s argument '%s'"
#~ msgstr "malvalida sufikso en %s%s-argumento '%s'"
-#~ msgid "%s%s argument `%s' too large"
+#~ msgid "%s%s argument '%s' too large"
#~ msgstr "%s%s-argumento '%s' tro larĝas"
+
+#~ msgid "%s home page: <https://www.gnu.org/software/%s/>\n"
+#~ msgstr "%s hejm-paĝo: <https://www.gnu.org/software/%s/>\n"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
+#~ msgstr "%.*s: parametro ARGP_HELP_FMT devas esti pozitiva"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: la modifilo '--%s' ne permesas argumenton\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: nerekonata modifilo '--%s'\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: la modifilo '-W %s' ne permesas argumenton\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: la modifilo '-W %s' postulas argumenton\n"
+
+#~ msgid "Franc,ois Pinard"
+#~ msgstr "François Pinard"
diff --git a/gl/po/es.po b/gl/po/es.po
index 708e9a33..107103cb 100644
--- a/gl/po/es.po
+++ b/gl/po/es.po
@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\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"
@@ -52,29 +52,29 @@ msgstr ""
"Los argumentos obligatorios u opcionales para las opciones largas también "
"son obligatorios u opcionales para cualquier opción corta correspondiente."
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr "Modo de empleo:"
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr " o:"
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
msgstr " [OPCIÓN...]"
-#: gl/lib/argp-help.c:1668
+#: gl/lib/argp-help.c:1670
#, 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"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, c-format
msgid "Report bugs to %s.\n"
msgstr "Reporte bichos a %s.\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Error desconocido de sistema"
@@ -241,6 +241,11 @@ msgstr "No hay una expresión regular previa"
msgid "memory exhausted"
msgstr "memoria agotada"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr ""
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "argumento %s inválido para %s"
diff --git a/gl/po/et.po b/gl/po/et.po
index 69f6c66a..3f2bff8e 100644
--- a/gl/po/et.po
+++ b/gl/po/et.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnulib 2.0.0.3462.e9796\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\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"
@@ -45,29 +45,29 @@ msgid ""
msgstr ""
"Kohustuslikud argumendid pikkadele vtmetele on kohustuslikud ka lhikestele."
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr "Kasutamine:"
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr " vi: "
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
msgstr " [VTI]..."
-#: gl/lib/argp-help.c:1668
+#: gl/lib/argp-help.c:1670
#, fuzzy, c-format
msgid "Try '%s --help' or '%s --usage' for more information.\n"
msgstr "Lisainfo saamiseks proovige `%s --help' vi `%s --usage'.\n"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, c-format
msgid "Report bugs to %s.\n"
msgstr "Vigadest teatage palun aadressil %s.\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Tundmatu ssteemne viga"
@@ -233,6 +233,11 @@ msgstr "Eelmist regulaaravaldist pole"
msgid "memory exhausted"
msgstr "mlu on otsas"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr ""
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "vigane argument %s vtmel `%s'"
diff --git a/gl/po/eu.po b/gl/po/eu.po
index de3c57c9..8b9bd879 100644
--- a/gl/po/eu.po
+++ b/gl/po/eu.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils-5.2.1\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\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"
@@ -48,32 +48,32 @@ msgstr ""
"Beharrezkoak diren argumentuak aukera luzeetan, beharrezkoak dira aukera "
"txikietan ere.\n"
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr ""
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr ""
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
#, fuzzy
msgid " [OPTION...]"
msgstr "Erabilera: %s [AUKERA]...\n"
-#: gl/lib/argp-help.c:1668
+#: gl/lib/argp-help.c:1670
#, fuzzy, c-format
msgid "Try '%s --help' or '%s --usage' for more information.\n"
msgstr "Saiatu `%s --help' erabiltzen informazio gehiagorako.\n"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, fuzzy, c-format
msgid "Report bugs to %s.\n"
msgstr ""
"\n"
"Programa-erroreen berri emateko idatzi hona: <%s>.\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Sistema-errore ezezaguna"
@@ -249,6 +249,11 @@ msgstr "in bilatu"
msgid "memory exhausted"
msgstr "memoria agortuta"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr ""
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "%s baliogabeko argumentua da %s-(r)entzat"
diff --git a/gl/po/fi.po b/gl/po/fi.po
index 3ce28fb4..3b769230 100644
--- a/gl/po/fi.po
+++ b/gl/po/fi.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\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"
@@ -48,29 +48,29 @@ msgstr ""
"Pitkien valitsimien pakolliset tai valinnaiset argumentit ovat pakollisia "
"tai valinnaisia myös lyhyille valitsimille."
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr "Käyttö:"
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr " tai: "
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
msgstr " [VALITSIN...]"
-#: gl/lib/argp-help.c:1668
+#: gl/lib/argp-help.c:1670
#, 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"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, c-format
msgid "Report bugs to %s.\n"
msgstr "Lähetä raportit ohjelmistovioista (englanniksi) osoitteeseen %s.\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Tuntematon järjestelmävirhe"
@@ -237,6 +237,11 @@ msgstr "Ei edellistä säännöllistä lauseketta"
msgid "memory exhausted"
msgstr "muisti loppui"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr ""
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "virheellinen argumentti %s kohteelle %s"
diff --git a/gl/po/fr.gmo b/gl/po/fr.gmo
index 67246f3c..b51d6ae1 100644
--- a/gl/po/fr.gmo
+++ b/gl/po/fr.gmo
Binary files differ
diff --git a/gl/po/fr.po b/gl/po/fr.po
index b8895b83..41554b85 100644
--- a/gl/po/fr.po
+++ b/gl/po/fr.po
@@ -5,13 +5,15 @@
# Michel Robitaille <robitail@IRO.UMontreal.CA>, 1996-.
# Nicolas Provost <nprovost@quadriv.com>, 2008.
# David Prévot <david@tilapin.org>, 2011.
+# Stéphane Aulery <lkppo@free.fr>, 2019.
+#
msgid ""
msgstr ""
-"Project-Id-Version: gnulib-3.0.0.6062.a6b16\n"
+"Project-Id-Version: gnulib-4.0.0.2567\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
-"PO-Revision-Date: 2011-12-07 20:41-0400\n"
-"Last-Translator: David Prévot <david@tilapin.org>\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\n"
+"PO-Revision-Date: 2019-05-21 20:15+0200\n"
+"Last-Translator: Stéphane Aulery <lkppo@free.fr>\n"
"Language-Team: French <traduc@traduc.org>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
@@ -49,31 +51,31 @@ msgstr ""
"Les arguments obligatoires pour la forme longue des options le sont aussi "
"pour les formes courtes associées."
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr "Utilisation :"
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr " ou : "
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
msgstr " [OPTION...]"
-#: gl/lib/argp-help.c:1668
-#, fuzzy, c-format
+#: gl/lib/argp-help.c:1670
+#, 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"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, c-format
msgid "Report bugs to %s.\n"
msgstr "Signalez toute anomalie à %s.\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Erreur système inconnue"
@@ -119,29 +121,29 @@ msgid "(PROGRAM ERROR) Option should have been recognized!?"
msgstr "(Erreur du programme) l'option aurait dû être reconnue !"
#: gl/lib/getopt.c:278
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' is ambiguous\n"
-msgstr "%s : l'option « -W %s » est ambiguë\n"
+msgstr "%s : l'option « %s%s » est ambiguë\n"
#: gl/lib/getopt.c:284
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' is ambiguous; possibilities:"
-msgstr "%s : l'option « %s » est ambiguë, possibilités :"
+msgstr "%s : l'option « %s%s » est ambiguë, possibilités :"
#: gl/lib/getopt.c:319
-#, fuzzy, c-format
+#, c-format
msgid "%s: unrecognized option '%s%s'\n"
-msgstr "%s : option « %c%s » non reconnue\n"
+msgstr "%s : option « %s%s » non reconnue\n"
#: gl/lib/getopt.c:345
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' doesn't allow an argument\n"
-msgstr "%s : l'option « %c%s » ne prend pas d'argument\n"
+msgstr "%s : l'option « %s%s » ne prend pas d'argument\n"
#: gl/lib/getopt.c:360
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' requires an argument\n"
-msgstr "%s : l'option « --%s » nécessite un argument\n"
+msgstr "%s : l'option « %s%s » nécessite un argument\n"
#: gl/lib/getopt.c:621
#, c-format
@@ -192,9 +194,8 @@ msgid "Invalid back reference"
msgstr "Référence antérieure non valable"
#: gl/lib/regcomp.c:156
-#, fuzzy
msgid "Unmatched [, [^, [:, [., or [="
-msgstr "[ ou [^ non appairé"
+msgstr "[, [^, [:, [. ou [= non appairé"
#: gl/lib/regcomp.c:159
msgid "Unmatched ( or \\("
@@ -240,6 +241,11 @@ msgstr "Pas d'expression rationnelle précédente"
msgid "memory exhausted"
msgstr "mémoire épuisée"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr "descripteurs de fichier standards"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "argument %s non valable pour %s"
@@ -249,8 +255,51 @@ msgstr "mémoire épuisée"
#~ msgid "Valid arguments are:"
#~ msgstr "Les arguments valables sont :"
-#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
-#~ msgstr "%.*s : le paramètre ARGP_HELP_FMT doit être positif"
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs, %u libérés (%.2f%%).\n"
+
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets, %u cachés (%.2f%%).\n"
+
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets, %u cachés (%.2f%%)\n"
+
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests, %u cachés (%.2f%%)\n"
+
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
+
+#~ msgid "count log histogram\n"
+#~ msgstr "histogramme par comptage\n"
+
+#~ msgid "size log histogram\n"
+#~ msgstr "histogramme par taille\n"
+
+#~ msgid "density histogram\n"
+#~ msgstr "histogramme par densité\n"
+
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Statistiques de bitset :\n"
+#~ "\n"
+
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Lancement cumulés = %u\n"
+
+#~ msgid "cannot read stats file"
+#~ msgstr "impossible de lire les permissions du fichier"
+
+#~ msgid "bad stats file size\n"
+#~ msgstr "taille du fichier de permission erroné\n"
+
+#~ msgid "cannot write stats file"
+#~ msgstr "impossible d'écrire les permissions du fichier"
+
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "impossible d'ouvrir les permissions du fichier en écriture"
#~ msgid "program error"
#~ msgstr "erreur du programme"
@@ -282,29 +331,57 @@ msgstr "mémoire épuisée"
#~ 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 "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 "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 reading %s"
+#~ msgstr "erreur de lecture de %s"
-#~ msgid "error writing \"%s\""
-#~ msgstr "erreur d'écriture 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 "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# compiler not found, try installing mono"
+#~ msgstr "compilateur C# non trouvé, essayez d'installer mono"
+
+#~ msgid "C# virtual machine not found, try installing mono"
+#~ msgstr "machine virtuelle C# non trouvée, essayez d'installer mono"
+
+#~ msgid "unbalanced ["
+#~ msgstr "[ non appairée"
-#~ msgid "C# virtual machine not found, try installing pnet"
-#~ msgstr "machine virtuelle C# non trouvée, essayez d'installer pnet"
+#~ msgid "invalid character class"
+#~ msgstr "nom de classe de caractères non valable"
+
+#~ msgid "character class syntax is [[:space:]], not [:space:]"
+#~ msgstr ""
+#~ "la syntaxe de la classe de caractères est [[:space:]], et non [:space:]"
+
+#~ msgid "unfinished \\ escape"
+#~ msgstr "espace \\ non terminé"
+
+#~ msgid "invalid content of \\{\\}"
+#~ msgstr "le contenu de \\{\\} n'est pas valable"
+
+#~ msgid "regular expression too big"
+#~ msgstr "expression rationnelle trop grande"
+
+#~ msgid "unbalanced ("
+#~ msgstr "( non appairée"
+
+#~ msgid "no syntax specified"
+#~ msgstr "pas de syntaxe spécifiée"
+
+#~ msgid "unbalanced )"
+#~ msgstr ") non appairée"
#~ msgid "%s subprocess failed"
#~ msgstr "échec de sous-processus %s"
@@ -318,21 +395,9 @@ msgstr "mémoire épuisée"
#~ 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"
@@ -345,6 +410,51 @@ msgstr "mémoire épuisée"
#~ msgid "typed memory object"
#~ msgstr "objet mémoire typé"
+#~ msgid "block special file"
+#~ msgstr "fichier spécial de blocs"
+
+#~ msgid "character special file"
+#~ msgstr "fichier spécial de caractères"
+
+#~ msgid "contiguous data"
+#~ msgstr "données contiguës"
+
+#~ msgid "fifo"
+#~ msgstr "PEPS (FIFO)"
+
+#~ msgid "door"
+#~ msgstr "porte"
+
+#~ msgid "multiplexed block special file"
+#~ msgstr "fichier spécial de blocs multipléxé"
+
+#~ msgid "multiplexed character special file"
+#~ msgstr "fichier spécial de caractères mulipléxé"
+
+#~ msgid "multiplexed file"
+#~ msgstr "fichier multipléxé"
+
+#~ msgid "named file"
+#~ msgstr "fichier nommé"
+
+#~ msgid "network special file"
+#~ msgstr "fichier spécial de réseau"
+
+#~ msgid "migrated file with data"
+#~ msgstr "fichier migré avec ses données"
+
+#~ msgid "migrated file without data"
+#~ msgstr "fichier migré sans ses données"
+
+#~ msgid "port"
+#~ msgstr "port"
+
+#~ msgid "socket"
+#~ msgstr "socket"
+
+#~ msgid "whiteout"
+#~ msgstr "sans"
+
#~ msgid "weird file"
#~ msgstr "fichier bizarre"
@@ -405,18 +515,6 @@ msgstr "mémoire épuisée"
#~ msgid "Unknown error"
#~ msgstr "Erreur inconnue"
-#~ msgid "%s: option '--%s' doesn't allow an argument\n"
-#~ msgstr "%s : l'option « --%s » ne prend pas d'argument\n"
-
-#~ msgid "%s: unrecognized option '--%s'\n"
-#~ msgstr "%s : option « --%s » non reconnue\n"
-
-#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
-#~ msgstr "%s : l'option « -W %s » ne prend pas d'argument\n"
-
-#~ msgid "%s: option '-W %s' requires an argument\n"
-#~ msgstr "%s : l'option « -W %s » nécessite un argument\n"
-
#~ msgid "invalid source_version argument to compile_java_class"
#~ msgstr "argument source_version non valable pour compile_java_class"
@@ -441,6 +539,9 @@ msgstr "mémoire épuisée"
#~ msgid "%s subprocess I/O error"
#~ msgstr "erreur d'entrée sortie du sous-processus %s"
+#~ msgid "cannot stat %s"
+#~ msgstr "impossible de lire les permissions de %s"
+
#~ msgid "cannot change permissions of %s"
#~ msgstr "impossible de modifier les permissions de %s"
@@ -476,9 +577,6 @@ msgstr "mémoire épuisée"
#~ 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 "« "
@@ -608,6 +706,18 @@ msgstr "mémoire épuisée"
#~ msgid "Unknown signal %d"
#~ msgstr "Signal %d inconnu"
+#~ msgid "Execution times (seconds)"
+#~ msgstr "Temps d'exécution (s)"
+
+#~ msgid "CPU user"
+#~ msgstr "Temps utilisateur"
+
+#~ msgid "CPU system"
+#~ msgstr "Temps système"
+
+#~ msgid "wall clock"
+#~ msgstr "horloge murale"
+
#~ msgid "iconv function not usable"
#~ msgstr "fonction iconv non utilisable"
@@ -645,19 +755,13 @@ msgstr "mémoire épuisée"
#~ msgstr "©"
#~ msgid ""
-#~ "\n"
-#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
-#~ "html>.\n"
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ "Licence GPLv3+ : GNU GPL version 3 ou ultérieure <%s>\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"
@@ -723,12 +827,8 @@ msgstr "mémoire épuisée"
#~ "%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 bugs to: %s\n"
+#~ msgstr "Signalez toute anomalie à : %s\n"
#~ msgid "Report %s bugs to: %s\n"
#~ msgstr "Signalez les anomalies de %s à : %s\n"
@@ -736,12 +836,8 @@ msgstr "mémoire épuisée"
#~ 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 "General help using GNU software: <%s>\n"
+#~ msgstr "Aide globale sur les logiciels GNU : <%s>\n"
#~ msgid "_open_osfhandle failed"
#~ msgstr "échec de _open_osfhandle"
@@ -756,6 +852,10 @@ msgstr "mémoire épuisée"
#~ msgid "%s subprocess got fatal signal %d"
#~ msgstr "le sous-processus %s a reçu un signal fatal %d"
+#~ msgid "failed to set file descriptor text/binary mode"
+#~ msgstr ""
+#~ "impossible de définir le mode texte/binaire du descripteur de fichier"
+
#~ msgid "stdin"
#~ msgstr "entrée standard (stdin)"
@@ -783,53 +883,14 @@ msgstr "mémoire épuisée"
#~ msgid "cannot perform formatted output"
#~ msgstr "impossible mettre en forme la sortie formatée"
-#~ msgid "invalid %s%s argument `%s'"
+#~ msgid "invalid %s%s argument '%s'"
#~ msgstr "argument %s%s non valable « %s »"
-#~ msgid "invalid suffix in %s%s argument `%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"
+#~ 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"
+#~ msgid "%s home page: <https://www.gnu.org/software/%s/>\n"
+#~ msgstr "page d'accueil de %s : <https://www.gnu.org/software/%s/>\n"
diff --git a/gl/po/ga.po b/gl/po/ga.po
index 77acd1ba..541d3903 100644
--- a/gl/po/ga.po
+++ b/gl/po/ga.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnulib 1.1\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\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"
@@ -47,30 +47,30 @@ msgstr ""
"Is riachtanach/roghnach le rogha ghearr aon argint at riachtanach/roghnach "
"leis an rogha fhada."
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr "sid:"
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr " n: "
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
msgstr " [ROGHA...]"
-#: gl/lib/argp-help.c:1668
+#: gl/lib/argp-help.c:1670
#, 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"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, c-format
msgid "Report bugs to %s.\n"
msgstr "Seol tuairisc fabhtanna chuig %s.\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Earrid chrais anaithnid"
@@ -237,6 +237,11 @@ msgstr "Nl aon slonn ionadaochta roimhe seo"
msgid "memory exhausted"
msgstr "cuimhne dithe"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr ""
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "argint neamhbhail %s chun %s"
diff --git a/gl/po/gl.po b/gl/po/gl.po
index 3ac68562..295c8198 100644
--- a/gl/po/gl.po
+++ b/gl/po/gl.po
@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\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"
@@ -52,29 +52,29 @@ msgstr ""
"Os argumentos obrigatorios ou opcionais das opcións longas son tamén "
"obrigatorios ou opcionais para calquera opción curta que se corresponda."
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr "Uso:"
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr " ou: "
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
msgstr " [OPCIÓN...]"
-#: gl/lib/argp-help.c:1668
+#: gl/lib/argp-help.c:1670
#, 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"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, c-format
msgid "Report bugs to %s.\n"
msgstr "Envíe os informes de fallo a %s.\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Erro do sistema descoñecido"
@@ -241,6 +241,11 @@ msgstr "Non hai ningunha expresión regular anterior"
msgid "memory exhausted"
msgstr "memoria esgotada"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr ""
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "argumento incorrecto %s para %s"
diff --git a/gl/po/hu.po b/gl/po/hu.po
index 9520d030..9d057d1b 100644
--- a/gl/po/hu.po
+++ b/gl/po/hu.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\n"
"PO-Revision-Date: 2014-06-25 19:51+0200\n"
"Last-Translator: Balázs Úr <urbalazs@gmail.com>\n"
"Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
@@ -49,30 +49,30 @@ 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."
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr "Használat:"
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr " vagy: "
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
msgstr " [KAPCSOLÓ…]"
-#: gl/lib/argp-help.c:1668
+#: gl/lib/argp-help.c:1670
#, 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"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, c-format
msgid "Report bugs to %s.\n"
msgstr "A hibák itt jelenthetők: %s.\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Ismeretlen rendszerhiba"
@@ -239,6 +239,11 @@ msgstr "Nincs megelőző szabályos kifejezés"
msgid "memory exhausted"
msgstr "elfogyott a memória"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr ""
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "a(z) „%s” argumentum érvénytelen a következőhöz: %s"
diff --git a/gl/po/it.gmo b/gl/po/it.gmo
index 04903cb2..7f098688 100644
--- a/gl/po/it.gmo
+++ b/gl/po/it.gmo
Binary files differ
diff --git a/gl/po/it.po b/gl/po/it.po
index 9e7649fe..defc261c 100644
--- a/gl/po/it.po
+++ b/gl/po/it.po
@@ -1,24 +1,25 @@
# Italian translation of gnulib
-# Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+# Copyright (C) 2008, 2009, 2010, 2011, 2019 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.
+# Milo Casagrande <milo@milo.name>, 2008, 2009, 2010, 2011, 2019.
#
msgid ""
msgstr ""
-"Project-Id-Version: gnulib-3.0.0.6062.a6b16\n"
+"Project-Id-Version: gnulib-4.0.0.2567\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
-"PO-Revision-Date: 2011-08-22 21:58+0200\n"
-"Last-Translator: Milo Casagrande <milo@casagrande.name>\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\n"
+"PO-Revision-Date: 2019-05-21 14:07+0200\n"
+"Last-Translator: Milo Casagrande <milo@milo.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"
+"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 2.2.1\n"
#: gl/lib/argp-help.c:158
#, c-format
@@ -48,29 +49,29 @@ msgstr ""
"Gli argomenti obbligatori o facoltativi per le opzioni estese lo sono anche "
"per le corrispondenti opzioni brevi."
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr "Uso:"
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr " o: "
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
msgstr " [OPZIONE...]"
-#: gl/lib/argp-help.c:1668
-#, fuzzy, c-format
+#: gl/lib/argp-help.c:1670
+#, c-format
msgid "Try '%s --help' or '%s --usage' for more information.\n"
-msgstr "Usare \"%s --help\" o \"%s --usage\" per ulteriori informazioni.\n"
+msgstr "Provare «%s --help» o «%s --usage» per ulteriori informazioni.\n"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, c-format
msgid "Report bugs to %s.\n"
msgstr "Segnalare i bug a %s.\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Errore di sistema sconosciuto"
@@ -116,29 +117,29 @@ msgid "(PROGRAM ERROR) Option should have been recognized!?"
msgstr "(ERRORE DEL PROGRAMMA) L'opzione dovrebbe essere stata riconosciuta."
#: gl/lib/getopt.c:278
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' is ambiguous\n"
-msgstr "%s: l'opzione \"-W %s\" è ambigua\n"
+msgstr "%s: l'opzione «%s%s» è ambigua\n"
#: gl/lib/getopt.c:284
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' is ambiguous; possibilities:"
-msgstr "%s: l'opzione \"%s\" è ambigua. Possibilità:"
+msgstr "%s: l'opzione «%s%s» è ambigua. Possibilità:"
#: gl/lib/getopt.c:319
-#, fuzzy, c-format
+#, c-format
msgid "%s: unrecognized option '%s%s'\n"
-msgstr "%s: opzione \"%c%s\" non riconosciuta\n"
+msgstr "%s: opzione «%s%s» non riconosciuta\n"
#: gl/lib/getopt.c:345
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' doesn't allow an argument\n"
-msgstr "%s: l'opzione \"%c%s\" non accetta un argomento\n"
+msgstr "%s: l'opzione «%s%s» non accetta un argomento\n"
#: gl/lib/getopt.c:360
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' requires an argument\n"
-msgstr "%s: l'opzione \"--%s\" richiede un argomento\n"
+msgstr "%s: l'opzione «%s%s» richiede un argomento\n"
#: gl/lib/getopt.c:621
#, c-format
@@ -190,9 +191,8 @@ msgid "Invalid back reference"
msgstr "Riferimento all'indietro non valido"
#: gl/lib/regcomp.c:156
-#, fuzzy
msgid "Unmatched [, [^, [:, [., or [="
-msgstr "[ o [^ senza corrispondenza"
+msgstr "[, [^, [:, [. o [= senza corrispondenza"
#: gl/lib/regcomp.c:159
msgid "Unmatched ( or \\("
@@ -238,6 +238,11 @@ msgstr "Nessuna espressione regolare precedente"
msgid "memory exhausted"
msgstr "memoria esaurita"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr "descrittori file standard"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "argomento %s non valido per %s"
@@ -247,8 +252,51 @@ msgstr "memoria esaurita"
#~ msgid "Valid arguments are:"
#~ msgstr "Sono argomenti validi:"
-#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
-#~ msgstr "%.*s: il parametro ARGP_HELP_FMT deve essere positivo"
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs, %u liberati (%.2f%%).\n"
+
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets, %u nella cache (%.2f%%)\n"
+
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets, %u nella cache (%.2f%%)\n"
+
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests, %u nella cache (%.2f%%)\n"
+
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
+
+#~ msgid "count log histogram\n"
+#~ msgstr "istogramma registro del conteggio\n"
+
+#~ msgid "size log histogram\n"
+#~ msgstr "istogramma registro delle dimensioni\n"
+
+#~ msgid "density histogram\n"
+#~ msgstr "istogramma densità\n"
+
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Statistiche bitset:\n"
+#~ "\n"
+
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Esecuzioni accumulate = %u\n"
+
+#~ msgid "cannot read stats file"
+#~ msgstr "impossibile leggere il file delle statistiche"
+
+#~ msgid "bad stats file size\n"
+#~ msgstr "dimensione file delle statistiche errata\n"
+
+#~ msgid "cannot write stats file"
+#~ msgstr "impossibile scrivere il file delle statistiche"
+
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "impossibile aprire il file delle statistiche in scrittura"
#~ msgid "program error"
#~ msgstr "errore del programma"
@@ -261,8 +309,7 @@ msgstr "memoria esaurita"
#~ "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\""
+#~ msgstr "impossibile creare una directory temporanea usando il modello «%s»"
#~ msgid "cannot remove temporary file %s"
#~ msgstr "impossibile rimuovere il file temporaneo %s"
@@ -279,29 +326,56 @@ msgstr "memoria esaurita"
#~ 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 "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 "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 reading %s"
+#~ msgstr "errore nel leggere %s"
-#~ msgid "error writing \"%s\""
-#~ msgstr "errore nello scrivere \"%s\""
+#~ msgid "error writing %s"
+#~ msgstr "errore nello scrivere %s"
-#~ msgid "error after reading \"%s\""
-#~ msgstr "errore dopo la lettura di \"%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# compiler not found, try installing mono"
+#~ msgstr "compilatore C# non trovato, provare a installare mono"
+
+#~ msgid "C# virtual machine not found, try installing mono"
+#~ msgstr "macchina virtuale C# non trovata, provare a installare mono"
+
+#~ msgid "unbalanced ["
+#~ msgstr "[ non bilanciata"
+
+#~ msgid "invalid character class"
+#~ msgstr "classe carattere non valida"
+
+#~ msgid "character class syntax is [[:space:]], not [:space:]"
+#~ msgstr "la sintassi per la classe carattere è [[:space:]], non [:space:]"
+
+#~ msgid "unfinished \\ escape"
+#~ msgstr "escape \\ incompleto"
+
+#~ msgid "invalid content of \\{\\}"
+#~ msgstr "contenuto di \\{\\} non valido"
+
+#~ msgid "regular expression too big"
+#~ msgstr "espressione regolare troppo grande"
+
+#~ msgid "unbalanced ("
+#~ msgstr "( non bilanciata"
+
+#~ msgid "no syntax specified"
+#~ msgstr "nessuna sintassi specificata"
-#~ msgid "C# virtual machine not found, try installing pnet"
-#~ msgstr "macchina virtuale C# non trovata, provare a installare pnet"
+#~ msgid "unbalanced )"
+#~ msgstr ") non bilanciata"
#~ msgid "%s subprocess failed"
#~ msgstr "%s: sottoprocesso non riuscito"
@@ -315,21 +389,9 @@ msgstr "memoria esaurita"
#~ 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"
@@ -346,6 +408,51 @@ msgstr "memoria esaurita"
#~ msgid "typed memory object"
#~ msgstr "oggetto di memoria con nome"
+#~ msgid "block special file"
+#~ msgstr "file speciale a blocchi"
+
+#~ msgid "character special file"
+#~ msgstr "file speciale a caratteri"
+
+#~ msgid "contiguous data"
+#~ msgstr "dati contigui"
+
+#~ msgid "fifo"
+#~ msgstr "fifo"
+
+#~ msgid "door"
+#~ msgstr "door"
+
+#~ msgid "multiplexed block special file"
+#~ msgstr "file speciale a blocchi multiplex"
+
+#~ msgid "multiplexed character special file"
+#~ msgstr "file speciale a caratteri multiplex"
+
+#~ msgid "multiplexed file"
+#~ msgstr "file multiplex"
+
+#~ msgid "named file"
+#~ msgstr "file con nome"
+
+#~ msgid "network special file"
+#~ msgstr "file speciale di rete"
+
+#~ msgid "migrated file with data"
+#~ msgstr "file migrato con dati"
+
+#~ msgid "migrated file without data"
+#~ msgstr "file migrato senza dati"
+
+#~ msgid "port"
+#~ msgstr "porta"
+
+#~ msgid "socket"
+#~ msgstr "socket"
+
+#~ msgid "whiteout"
+#~ msgstr "whiteout"
+
#~ msgid "weird file"
#~ msgstr "file strano"
@@ -409,18 +516,6 @@ msgstr "memoria esaurita"
#~ msgid "Unknown error"
#~ msgstr "Errore sconosciuto"
-#~ msgid "%s: option '--%s' doesn't allow an argument\n"
-#~ msgstr "%s: l'opzione \"--%s\" non accetta un argomento\n"
-
-#~ msgid "%s: unrecognized option '--%s'\n"
-#~ msgstr "%s: opzione \"--%s\" non riconosciuta\n"
-
-#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
-#~ msgstr "%s: l'opzione \"-W %s\" non accetta un argomento\n"
-
-#~ msgid "%s: option '-W %s' requires an argument\n"
-#~ msgstr "%s: l'opzione \"-W %s\" richiede un argomento\n"
-
#~ msgid "invalid source_version argument to compile_java_class"
#~ msgstr "argomento source_version in compile_java_class non valido"
@@ -445,6 +540,9 @@ msgstr "memoria esaurita"
#~ msgid "%s subprocess I/O error"
#~ msgstr "errore di I/O nel sottoprocesso %s"
+#~ msgid "cannot stat %s"
+#~ msgstr "impossibile eseguire stat di %s"
+
#~ msgid "cannot change permissions of %s"
#~ msgstr "impossibile cambiare i permessi di %s"
@@ -478,14 +576,11 @@ msgstr "memoria esaurita"
#~ 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 "\""
+#~ msgstr "«"
#~ msgid "'"
-#~ msgstr "\""
+#~ msgstr "»"
#~ msgid "^[yY]"
#~ msgstr "^[sSyY]"
@@ -648,6 +743,18 @@ msgstr "memoria esaurita"
#~ msgid "Unknown signal %d"
#~ msgstr "Segnale %d sconosciuto"
+#~ msgid "Execution times (seconds)"
+#~ msgstr "Tempi di esecuzione (secondi)"
+
+#~ msgid "CPU user"
+#~ msgstr "CPU utente"
+
+#~ msgid "CPU system"
+#~ msgstr "CPU sistema"
+
+#~ msgid "wall clock"
+#~ msgstr "tempo reale"
+
#~ msgid "iconv function not usable"
#~ msgstr "funzione iconv non utilizzabile"
@@ -691,20 +798,14 @@ msgstr "memoria esaurita"
#~ msgstr "©"
#~ msgid ""
-#~ "\n"
-#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
-#~ "html>.\n"
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ "Licenza GPLv3+: GNU GPL versione 3 o successiva <%s>.\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"
@@ -770,13 +871,10 @@ msgstr "memoria esaurita"
#~ "%s, %s, %s, %s,\n"
#~ "%s, %s e altri.\n"
-#~ msgid ""
-#~ "\n"
-#~ "Report bugs to: %s\n"
+#~ msgid "Report bugs to: %s\n"
#~ msgstr ""
-#~ "\n"
#~ "Segnalare i bug a: %s\n"
-#~ "Segnalare i bug di traduzione a: <tp@lists.linux.it>\n"
+#~ "\n"
#~ msgid "Report %s bugs to: %s\n"
#~ msgstr "Segnalare i bug di %s a: %s.\n"
@@ -784,12 +882,8 @@ msgstr "memoria esaurita"
#~ 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 "General help using GNU software: <%s>\n"
+#~ msgstr "Aiuto per l'utilizzo di software GNU: <%s>\n"
#~ msgid "_open_osfhandle failed"
#~ msgstr "_open_osfhandle non riuscita"
@@ -803,6 +897,10 @@ msgstr "memoria esaurita"
#~ msgid "%s subprocess got fatal signal %d"
#~ msgstr "il sottoprocesso %s ha ricevuto un segnale %d fatale"
+#~ msgid "failed to set file descriptor text/binary mode"
+#~ msgstr ""
+#~ "impostazione del descrittore file in modalità testo/binario non riuscita"
+
#~ msgid "stdin"
#~ msgstr "stdin"
@@ -839,11 +937,11 @@ msgstr "memoria esaurita"
# 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 %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 "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"
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "l'argomento «%3$s» di %1$s%2$s è troppo grande"
diff --git a/gl/po/ja.po b/gl/po/ja.po
index 83a52723..88bba72d 100644
--- a/gl/po/ja.po
+++ b/gl/po/ja.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\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"
@@ -50,24 +50,24 @@ msgstr ""
"長い形式のオプションで必須または任意の引数は、それに対応する短い形式のオプ"
"ションでも同様に必須または任意です。"
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr "使用法:"
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr "または: "
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
msgstr " [OPTION...]"
-#: gl/lib/argp-help.c:1668
+#: gl/lib/argp-help.c:1670
#, fuzzy, c-format
msgid "Try '%s --help' or '%s --usage' for more information.\n"
msgstr "詳細は `%s --help' または `%s --usage' を実行して下さい。\n"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, c-format
msgid "Report bugs to %s.\n"
msgstr ""
@@ -75,7 +75,7 @@ msgstr ""
"翻訳に関するバグは<translation-team-ja@lists.sourceforge.net>に報告してくださ"
"い。\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "不明なシステムエラー"
@@ -242,6 +242,11 @@ msgstr "以前に正規表現がありません"
msgid "memory exhausted"
msgstr "メモリを使い果たしました"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr ""
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "%2$s に対する引数 %1$s が間違っています"
diff --git a/gl/po/ko.po b/gl/po/ko.po
index 7f27bcaf..cd39d953 100644
--- a/gl/po/ko.po
+++ b/gl/po/ko.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU textutils 2.0.22\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\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"
@@ -44,32 +44,32 @@ msgid ""
"optional for any corresponding short options."
msgstr " ɼǿ ʿ μ ª ɼǿ ʿմϴ.\n"
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr ""
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr ""
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
#, fuzzy
msgid " [OPTION...]"
msgstr ": %s [<ɼ>] [<>]...\n"
-#: gl/lib/argp-help.c:1668
+#: gl/lib/argp-help.c:1670
#, fuzzy, c-format
msgid "Try '%s --help' or '%s --usage' for more information.\n"
msgstr " `%s --help' Ͻʽÿ.\n"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, fuzzy, c-format
msgid "Report bugs to %s.\n"
msgstr ""
"\n"
"<%s>() ׸ ˷ ֽʽÿ.\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr " ý "
@@ -245,6 +245,11 @@ msgstr "Խ Ž ߻"
msgid "memory exhausted"
msgstr "޸𸮰 ٴڳ"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr ""
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "%2$s %1$s"
diff --git a/gl/po/man-db-gnulib.pot b/gl/po/man-db-gnulib.pot
index d4a0a175..f04eab3c 100644
--- a/gl/po/man-db-gnulib.pot
+++ b/gl/po/man-db-gnulib.pot
@@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: man-db 2.8.5\n"
+"Project-Id-Version: man-db 2.8.6\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -43,29 +43,29 @@ msgid ""
"optional for any corresponding short options."
msgstr ""
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr ""
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr ""
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
msgstr ""
-#: gl/lib/argp-help.c:1668
+#: gl/lib/argp-help.c:1670
#, c-format
msgid "Try '%s --help' or '%s --usage' for more information.\n"
msgstr ""
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, c-format
msgid "Report bugs to %s.\n"
msgstr ""
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr ""
@@ -230,3 +230,8 @@ msgstr ""
#: gl/lib/xalloc-die.c:34
msgid "memory exhausted"
msgstr ""
+
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr ""
diff --git a/gl/po/ms.po b/gl/po/ms.po
index a432f7d4..6527af88 100644
--- a/gl/po/ms.po
+++ b/gl/po/ms.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils 5.0.90\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\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"
@@ -45,32 +45,32 @@ msgstr ""
"Hujah mandatori kepada opsyen panjang andalah mandatori bagi opsyen pendek "
"juga.\n"
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr ""
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr ""
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
#, fuzzy
msgid " [OPTION...]"
msgstr "Pengunaan: %s [OPSYEN]...\n"
-#: gl/lib/argp-help.c:1668
+#: gl/lib/argp-help.c:1670
#, fuzzy, c-format
msgid "Try '%s --help' or '%s --usage' for more information.\n"
msgstr "Cuba `%s --help' untuk maklumat lanjut .\n"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, fuzzy, c-format
msgid "Report bugs to %s.\n"
msgstr ""
"\n"
"Lapor pepijat ke <%s>.\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Ralat sistem yang tidak diketahui"
@@ -246,6 +246,11 @@ msgstr "ralat pada carian ungkapan biasa (regexp)"
msgid "memory exhausted"
msgstr "memori keletihan"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr ""
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "hujah tidak sah %s bagi %s"
diff --git a/gl/po/nb.po b/gl/po/nb.po
index f59f273a..f81235ff 100644
--- a/gl/po/nb.po
+++ b/gl/po/nb.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU textutils 2.0.20\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\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"
@@ -44,32 +44,32 @@ msgid ""
msgstr ""
"Obligatoriske argmenter til lange flagg er obligatoriske ogs for korte.\n"
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr ""
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr ""
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
#, fuzzy
msgid " [OPTION...]"
msgstr "Bruk: %s [FLAGG] [FIL]...\n"
-#: gl/lib/argp-help.c:1668
+#: gl/lib/argp-help.c:1670
#, fuzzy, c-format
msgid "Try '%s --help' or '%s --usage' for more information.\n"
msgstr "Prv med %s --help for mer informasjon.\n"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, fuzzy, c-format
msgid "Report bugs to %s.\n"
msgstr ""
"\n"
"Rapportr feil til <bug-textutils@gnu.org>."
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Ukjent systemfeil"
@@ -245,6 +245,11 @@ msgstr "feil i sk med regulrt uttrykk"
msgid "memory exhausted"
msgstr "virtuelt minne oppbrukt"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr ""
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "ugyldig argument %s for %s"
diff --git a/gl/po/nl.gmo b/gl/po/nl.gmo
index 45cd10e0..045aeed9 100644
--- a/gl/po/nl.gmo
+++ b/gl/po/nl.gmo
Binary files differ
diff --git a/gl/po/nl.po b/gl/po/nl.po
index 768797a0..4c19d28a 100644
--- a/gl/po/nl.po
+++ b/gl/po/nl.po
@@ -1,26 +1,25 @@
# Dutch translations for gnulib.
-# Copyright (C) 2011 Free Software Foundation, Inc.
+# Copyright (C) 2019 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.
+# Benno Schulenberg <benno@vertaalt.nl>, 2007, 2008, 2010, 2011, 2019.
msgid ""
msgstr ""
-"Project-Id-Version: gnulib-3.0.0.6062.a6b16\n"
+"Project-Id-Version: gnulib-4.0.0.2567\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
-"PO-Revision-Date: 2011-08-22 20:37+0200\n"
-"Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\n"
+"PO-Revision-Date: 2019-05-29 13:31+0200\n"
+"Last-Translator: Benno Schulenberg <vertaling@coevern.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-Bugs: Report translation errors to the Language-Team address.\n"
-"X-Generator: Lokalize 1.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: gl/lib/argp-help.c:158
@@ -51,31 +50,31 @@ msgstr ""
"Een argument dat verplicht of optioneel is voor een lange optie, is dat\n"
"ook voor de overeenkomstige korte optie."
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr "Gebruik: "
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr " of: "
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
msgstr " [OPTIE...]"
-#: gl/lib/argp-help.c:1668
-#, fuzzy, c-format
+#: gl/lib/argp-help.c:1670
+#, c-format
msgid "Try '%s --help' or '%s --usage' for more information.\n"
msgstr "Typ '%s --help' of '%s --usage' voor meer informatie.\n"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, 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"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Onbekende systeemfout"
@@ -121,29 +120,29 @@ msgid "(PROGRAM ERROR) Option should have been recognized!?"
msgstr "**Interne programmafout**: optie had herkend moeten worden!?"
#: gl/lib/getopt.c:278
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' is ambiguous\n"
-msgstr "%s: optie '-W %s' is niet eenduidig\n"
+msgstr "%s: optie '%s%s' is niet eenduidig\n"
#: gl/lib/getopt.c:284
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' is ambiguous; possibilities:"
-msgstr "%s: optie '%s' is niet eenduidig; mogelijkheden zijn:"
+msgstr "%s: optie '%s%s' is niet eenduidig; mogelijkheden zijn:"
#: gl/lib/getopt.c:319
-#, fuzzy, c-format
+#, c-format
msgid "%s: unrecognized option '%s%s'\n"
-msgstr "%s: onbekende optie '%c%s'\n"
+msgstr "%s: onbekende optie '%s%s'\n"
#: gl/lib/getopt.c:345
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' doesn't allow an argument\n"
-msgstr "%s: optie '%c%s' staat geen argument toe\n"
+msgstr "%s: optie '%s%s' staat geen argument toe\n"
#: gl/lib/getopt.c:360
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' requires an argument\n"
-msgstr "%s: optie '--%s' vereist een argument\n"
+msgstr "%s: optie '%s%s' vereist een argument\n"
#: gl/lib/getopt.c:621
#, c-format
@@ -194,9 +193,8 @@ msgid "Invalid back reference"
msgstr "Ongeldige terugverwijzing"
#: gl/lib/regcomp.c:156
-#, fuzzy
msgid "Unmatched [, [^, [:, [., or [="
-msgstr "Ongepaarde [ of [^"
+msgstr "Ongepaarde [, [^, [:, [., of [="
#: gl/lib/regcomp.c:159
msgid "Unmatched ( or \\("
@@ -242,6 +240,11 @@ msgstr "Geen eerdere reguliere expressie"
msgid "memory exhausted"
msgstr "onvoldoende geheugen beschikbaar"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr "standaard bestandsdescriptors"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "ongeldig argument %s van %s"
@@ -251,8 +254,51 @@ msgstr "onvoldoende geheugen beschikbaar"
#~ msgid "Valid arguments are:"
#~ msgstr "Geldige argumenten zijn:"
-#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
-#~ msgstr "%.*s: Parameter in ARGP_HELP_FMT moet positief zijn"
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs, %u vrijgegeven (%.2f%%).\n"
+
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets, %u gecached (%.2f%%)\n"
+
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets, %u gecached (%.2f%%)\n"
+
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests, %u gecached (%.2f%%)\n"
+
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
+
+#~ msgid "count log histogram\n"
+#~ msgstr "histogram van aantal gezette bits\n"
+
+#~ msgid "size log histogram\n"
+#~ msgstr "histogram van bitset-groottes\n"
+
+#~ msgid "density histogram\n"
+#~ msgstr "histogram van dichtheid aan gezette bits\n"
+
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bitset-statistieken:\n"
+#~ "\n"
+
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Aantal uitvoeringen = %u\n"
+
+#~ msgid "cannot read stats file"
+#~ msgstr "kan statistiekenbestand niet lezen"
+
+#~ msgid "bad stats file size\n"
+#~ msgstr "statistiekenbestand heeft een verkeerde grootte\n"
+
+#~ msgid "cannot write stats file"
+#~ msgstr "kan statistiekenbestand niet schrijven"
+
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "kan statistiekenbestand niet openen voor schrijven"
#~ msgid "program error"
#~ msgstr "programmafout"
@@ -281,29 +327,56 @@ msgstr "onvoldoende geheugen beschikbaar"
#~ 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 "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 "cannot open backup file %s for writing"
+#~ msgstr "kan reservekopiebestand %s niet openen voor schrijven"
-#~ msgid "error reading \"%s\""
-#~ msgstr "fout bij lezen van '%s'"
+#~ msgid "error reading %s"
+#~ msgstr "fout bij lezen van %s"
-#~ msgid "error writing \"%s\""
-#~ msgstr "fout bij schrijven van '%s'"
+#~ msgid "error writing %s"
+#~ msgstr "fout bij schrijven van %s"
-#~ msgid "error after reading \"%s\""
-#~ msgstr "fout na lezen 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# compiler not found, try installing mono"
+#~ msgstr "C#-compiler is niet gevonden; installeer 'mono'"
+
+#~ msgid "C# virtual machine not found, try installing mono"
+#~ msgstr "virtuele C#-machine is niet gevonden; installeer 'mono'"
+
+#~ msgid "unbalanced ["
+#~ msgstr "ongepaarde ["
+
+#~ msgid "invalid character class"
+#~ msgstr "ongeldige tekenklasse"
+
+#~ msgid "character class syntax is [[:space:]], not [:space:]"
+#~ msgstr "syntax van tekenklasse is [[:space:]], niet [:space:]"
-#~ msgid "C# virtual machine not found, try installing pnet"
-#~ msgstr "virtuele C#-machine is niet gevonden; installeer 'pnet'"
+#~ msgid "unfinished \\ escape"
+#~ msgstr "onafgemaakte \\-stuurcode"
+
+#~ msgid "invalid content of \\{\\}"
+#~ msgstr "ongeldige inhoud van \\{\\}"
+
+#~ msgid "regular expression too big"
+#~ msgstr "reguliere expressie is te groot"
+
+#~ msgid "unbalanced ("
+#~ msgstr "ongepaarde ("
+
+#~ msgid "no syntax specified"
+#~ msgstr "geen syntax opgegeven"
+
+#~ msgid "unbalanced )"
+#~ msgstr "ongepaarde )"
#~ msgid "%s subprocess failed"
#~ msgstr "subproces %s is mislukt"
@@ -317,21 +390,9 @@ msgstr "onvoldoende geheugen beschikbaar"
#~ 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"
@@ -344,6 +405,51 @@ msgstr "onvoldoende geheugen beschikbaar"
#~ msgid "typed memory object"
#~ msgstr "zelfstandig geheugenobject"
+#~ msgid "block special file"
+#~ msgstr "blok-apparaat"
+
+#~ msgid "character special file"
+#~ msgstr "byte-apparaat"
+
+#~ msgid "contiguous data"
+#~ msgstr "aaneengesloten gegevens"
+
+#~ msgid "fifo"
+#~ msgstr "fifo"
+
+#~ msgid "door"
+#~ msgstr "door"
+
+#~ msgid "multiplexed block special file"
+#~ msgstr "gemultiplexed blok-apparaat"
+
+#~ msgid "multiplexed character special file"
+#~ msgstr "gemultiplexed byte-apparaat"
+
+#~ msgid "multiplexed file"
+#~ msgstr "gemultiplexed bestand"
+
+#~ msgid "named file"
+#~ msgstr "benoemd bestand"
+
+#~ msgid "network special file"
+#~ msgstr "netwerkapparaat"
+
+#~ msgid "migrated file with data"
+#~ msgstr "gemigreerd bestand met gegevens"
+
+#~ msgid "migrated file without data"
+#~ msgstr "gemigreerd bestand zonder gegevens"
+
+#~ msgid "port"
+#~ msgstr "poort"
+
+#~ msgid "socket"
+#~ msgstr "socket"
+
+#~ msgid "whiteout"
+#~ msgstr "whiteout"
+
#~ msgid "weird file"
#~ msgstr "merkwaardig bestand"
@@ -404,18 +510,6 @@ msgstr "onvoldoende geheugen beschikbaar"
#~ msgid "Unknown error"
#~ msgstr "Onbekende fout"
-#~ msgid "%s: option '--%s' doesn't allow an argument\n"
-#~ msgstr "%s: optie '--%s' staat geen argument toe\n"
-
-#~ msgid "%s: unrecognized option '--%s'\n"
-#~ msgstr "%s: onbekende optie '--%s'\n"
-
-#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
-#~ msgstr "%s: optie '-W %s' staat geen argument toe\n"
-
-#~ msgid "%s: option '-W %s' requires an argument\n"
-#~ msgstr "%s: optie '-W %s' vereist een argument\n"
-
#~ msgid "invalid source_version argument to compile_java_class"
#~ msgstr "ongeldige waarde voor 'source_version' in compile_java_class()"
@@ -438,6 +532,9 @@ msgstr "onvoldoende geheugen beschikbaar"
#~ msgid "%s subprocess I/O error"
#~ msgstr "In-/uitvoerfout in subproces %s"
+#~ msgid "cannot stat %s"
+#~ msgstr "kan status van '%s' niet opvragen"
+
#~ msgid "cannot change permissions of %s"
#~ msgstr "kan de toegangsrechten van %s niet veranderen"
@@ -471,9 +568,6 @@ msgstr "onvoldoende geheugen beschikbaar"
#~ 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 "‘"
@@ -606,6 +700,18 @@ msgstr "onvoldoende geheugen beschikbaar"
#~ msgid "Unknown signal %d"
#~ msgstr "Onbekend signaal %d"
+#~ msgid "Execution times (seconds)"
+#~ msgstr "Uitvoeringstijden (in seconden)"
+
+#~ msgid "CPU user"
+#~ msgstr "CPU (gebruiker)"
+
+#~ msgid "CPU system"
+#~ msgstr "CPU (systeem)"
+
+#~ msgid "wall clock"
+#~ msgstr "kloktijd"
+
#~ msgid "iconv function not usable"
#~ msgstr "de functie iconv() is onbruikbaar"
@@ -643,19 +749,15 @@ msgstr "onvoldoende geheugen beschikbaar"
#~ msgstr "©"
#~ msgid ""
-#~ "\n"
-#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
-#~ "html>.\n"
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ "Zie <%s> voor de volledige (Engelse) tekst.\n"
#~ "Deze software kent GEEN GARANTIE, voor zover de wet dit toestaat.\n"
#~ "\n"
@@ -723,11 +825,8 @@ msgstr "onvoldoende geheugen beschikbaar"
#~ "%s, %s, %s, %s,\n"
#~ "%s, %s en anderen.\n"
-#~ msgid ""
-#~ "\n"
-#~ "Report bugs to: %s\n"
+#~ msgid "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"
@@ -739,13 +838,8 @@ msgstr "onvoldoende geheugen beschikbaar"
#~ 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 "General help using GNU software: <%s>\n"
+#~ msgstr "Algemene hulp bij gebruik van GNU-software: <%s>\n"
#~ msgid "_open_osfhandle failed"
#~ msgstr "_open_osfhandle() is mislukt"
@@ -759,6 +853,9 @@ msgstr "onvoldoende geheugen beschikbaar"
#~ msgid "%s subprocess got fatal signal %d"
#~ msgstr "subproces %s ontving het fatale signaal %d"
+#~ msgid "failed to set file descriptor text/binary mode"
+#~ msgstr "kan modus van bestandsdescriptor niet instellen op tekst of binair"
+
#~ msgid "stdin"
#~ msgstr "standaardinvoer"
@@ -786,11 +883,32 @@ msgstr "onvoldoende geheugen beschikbaar"
#~ msgid "cannot perform formatted output"
#~ msgstr "kan geen opgemaakte uitvoer aanmaken"
-#~ msgid "invalid %s%s argument `%s'"
+#~ msgid "invalid %s%s argument '%s'"
#~ msgstr "ongeldig argument '%3$s' van %1$s%2$s"
-#~ msgid "invalid suffix in %s%s argument `%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"
+#~ msgid "%s%s argument '%s' too large"
#~ msgstr "argument '%3$s' van %1$s%2$s is te groot"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
+#~ msgstr "%.*s: Parameter in ARGP_HELP_FMT moet positief zijn"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: optie '--%s' staat geen argument toe\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: onbekende optie '--%s'\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: optie '-W %s' staat geen argument toe\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: optie '-W %s' vereist een argument\n"
+
+#~ msgid "Franc,ois Pinard"
+#~ msgstr "François Pinard"
+
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "Webpagina van %s: <http://www.gnu.org/software/%s/>\n"
diff --git a/gl/po/pl.gmo b/gl/po/pl.gmo
index 849c43c9..e65ecb7c 100644
--- a/gl/po/pl.gmo
+++ b/gl/po/pl.gmo
Binary files differ
diff --git a/gl/po/pl.po b/gl/po/pl.po
index 06420766..f462b422 100644
--- a/gl/po/pl.po
+++ b/gl/po/pl.po
@@ -1,18 +1,18 @@
# Polish messages for gnulib
-# Copyright (C) 2005, 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
+# Copyright (C) 2005, 2007, 2009, 2010, 2011, 2019 Free Software Foundation, Inc.
# This file is distributed under the same license as the gnulib package.
#
-# Jakub Bogusz <qboosh@pld-linux.org>, 2007-2014.
+# Jakub Bogusz <qboosh@pld-linux.org>, 2007-2019.
# 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"
+"Project-Id-Version: gnulib 4.0.0.2567\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
-"PO-Revision-Date: 2014-07-17 18:00+0200\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\n"
+"PO-Revision-Date: 2019-05-19 20:02+0200\n"
"Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
"Language: pl\n"
@@ -51,30 +51,30 @@ msgstr ""
"Argumenty obowiązkowe lub opcjonalne dla długich opcji są również "
"obowiązkowe lub opcjonalne dla odpowiednich krótkich opcji."
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr "Składnia:"
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr " lub: "
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
msgstr " [OPCJA...]"
-#: gl/lib/argp-help.c:1668
-#, fuzzy, c-format
+#: gl/lib/argp-help.c:1670
+#, 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"
+"Polecenie '%s --help' lub '%s --usage' pozwoli uzyskać więcej informacji.\n"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, c-format
msgid "Report bugs to %s.\n"
msgstr "Prosimy zgłaszać błędy na adres %s.\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Nieznany błąd systemowy"
@@ -120,29 +120,29 @@ msgid "(PROGRAM ERROR) Option should have been recognized!?"
msgstr "(BŁĄD PROGRAMU) Opcja powinna zostać rozpoznana!?"
#: gl/lib/getopt.c:278
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' is ambiguous\n"
-msgstr "%s: opcja '-W %s' jest niejednoznaczna\n"
+msgstr "%s: opcja '%s%s' jest niejednoznaczna\n"
#: gl/lib/getopt.c:284
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' is ambiguous; possibilities:"
-msgstr "%s: opcja '%s' jest niejednoznaczna; możliwości:"
+msgstr "%s: opcja '%s%s' jest niejednoznaczna; możliwości:"
#: gl/lib/getopt.c:319
-#, fuzzy, c-format
+#, c-format
msgid "%s: unrecognized option '%s%s'\n"
-msgstr "%s: nieznana opcja '%c%s'\n"
+msgstr "%s: nieznana opcja '%s%s'\n"
#: gl/lib/getopt.c:345
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' doesn't allow an argument\n"
-msgstr "%s: opcja '%c%s' nie może mieć argumentów\n"
+msgstr "%s: opcja '%s%s' nie może mieć argumentów\n"
#: gl/lib/getopt.c:360
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' requires an argument\n"
-msgstr "%s: opcja '--%s' musi mieć argument\n"
+msgstr "%s: opcja '%s%s' musi mieć argument\n"
#: gl/lib/getopt.c:621
#, c-format
@@ -193,9 +193,8 @@ msgid "Invalid back reference"
msgstr "Błędne odniesienie wstecz"
#: gl/lib/regcomp.c:156
-#, fuzzy
msgid "Unmatched [, [^, [:, [., or [="
-msgstr "Niesparowane [ lub [^"
+msgstr "Niesparowane [, [^, [:, [. lub [="
#: gl/lib/regcomp.c:159
msgid "Unmatched ( or \\("
@@ -241,6 +240,11 @@ msgstr "Brak poprzedniego wyrażenia regularnego"
msgid "memory exhausted"
msgstr "pamięć wyczerpana"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr "standardowe deskryptory plików"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "błędny argument %s opcji %s"
@@ -250,8 +254,51 @@ msgstr "pamięć wyczerpana"
#~ msgid "Valid arguments are:"
#~ msgstr "Prawidłowe argumenty to:"
-#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
-#~ msgstr "%.*s: Parametr ARGP_HELP_FMT musi być dodatni"
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs, %u zwolniono (%.2f%%).\n"
+
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets, %u w pamięci podręcznej (%.2f%%)\n"
+
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets, %u w pamięci podręcznej (%.2f%%)\n"
+
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests, %u w pamięci podręcznej (%.2f%%)\n"
+
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
+
+#~ msgid "count log histogram\n"
+#~ msgstr "histogram liczników\n"
+
+#~ msgid "size log histogram\n"
+#~ msgstr "histogram rozmiarów\n"
+
+#~ msgid "density histogram\n"
+#~ msgstr "histogram gęstości\n"
+
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Statystyki operacji bitset:\n"
+#~ "\n"
+
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Uruchomień łącznie = %u\n"
+
+#~ msgid "cannot read stats file"
+#~ msgstr "nie można odczytać pliku statystyk"
+
+#~ msgid "bad stats file size\n"
+#~ msgstr "błędny rozmiar pliku statystyk\n"
+
+#~ msgid "cannot write stats file"
+#~ msgstr "nie można zapisać pliku statystyk"
+
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "nie można otworzyć pliku statystyk do zapisu"
#~ msgid "program error"
#~ msgstr "błąd programu"
@@ -281,30 +328,57 @@ msgstr "pamięć wyczerpana"
#~ 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 "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 "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 reading %s"
+#~ msgstr "błąd odczytu %s"
-#~ msgid "error writing \"%s\""
-#~ msgstr "błąd zapisu \"%s\""
+#~ msgid "error writing %s"
+#~ msgstr "błąd zapisu %s"
-#~ msgid "error after reading \"%s\""
-#~ msgstr "błąd po odczycie \"%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# compiler not found, try installing mono"
+#~ msgstr "Nie znaleziono kompilatora C#, proszę spróbować zainstalować mono"
-#~ msgid "C# virtual machine not found, try installing pnet"
+#~ msgid "C# virtual machine not found, try installing mono"
#~ msgstr ""
-#~ "Nie znaleziono maszyny wirtualnej C#, proszę spróbować zainstalować pnet"
+#~ "Nie znaleziono maszyny wirtualnej C#, proszę spróbować zainstalować mono"
+
+#~ msgid "unbalanced ["
+#~ msgstr "niesparowany ["
+
+#~ msgid "invalid character class"
+#~ msgstr "błędna klasa znaków"
+
+#~ msgid "character class syntax is [[:space:]], not [:space:]"
+#~ msgstr "składnia klasy znaków to [[:space:]], nie [:space:]"
+
+#~ msgid "unfinished \\ escape"
+#~ msgstr "niedokończona sekwencja \\"
+
+#~ msgid "invalid content of \\{\\}"
+#~ msgstr "błędna zawartość \\{\\}"
+
+#~ msgid "regular expression too big"
+#~ msgstr "wyrażenie regularne zbyt duże"
+
+#~ msgid "unbalanced ("
+#~ msgstr "niesparowany ("
+
+#~ msgid "no syntax specified"
+#~ msgstr "nie określono składni"
+
+#~ msgid "unbalanced )"
+#~ msgstr "niesparowany )"
#~ msgid "%s subprocess failed"
#~ msgstr "podproces %s zawiódł"
@@ -318,21 +392,9 @@ msgstr "pamięć wyczerpana"
#~ 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"
@@ -345,6 +407,51 @@ msgstr "pamięć wyczerpana"
#~ msgid "typed memory object"
#~ msgstr "obiekt z typem w pamięci"
+#~ msgid "block special file"
+#~ msgstr "blokowy plik specjalny"
+
+#~ msgid "character special file"
+#~ msgstr "znakowy plik specjalny"
+
+#~ msgid "contiguous data"
+#~ msgstr "dane ciągłe"
+
+#~ msgid "fifo"
+#~ msgstr "potok"
+
+#~ msgid "door"
+#~ msgstr "plik door"
+
+#~ msgid "multiplexed block special file"
+#~ msgstr "multipleksowany blokowy plik specjalny"
+
+#~ msgid "multiplexed character special file"
+#~ msgstr "multipleksowany znakowy plik specjalny"
+
+#~ msgid "multiplexed file"
+#~ msgstr "plik multipleksowany"
+
+#~ msgid "named file"
+#~ msgstr "plik nazwany"
+
+#~ msgid "network special file"
+#~ msgstr "sieciowy plik specjalny"
+
+#~ msgid "migrated file with data"
+#~ msgstr "zmigrowany plik z danymi"
+
+#~ msgid "migrated file without data"
+#~ msgstr "zmigrowany plik bez danych"
+
+#~ msgid "port"
+#~ msgstr "port"
+
+#~ msgid "socket"
+#~ msgstr "gniazdo"
+
+#~ msgid "whiteout"
+#~ msgstr "plik whiteout"
+
#~ msgid "weird file"
#~ msgstr "dziwny plik"
@@ -405,18 +512,6 @@ msgstr "pamięć wyczerpana"
#~ msgid "Unknown error"
#~ msgstr "Nieznany błąd"
-#~ msgid "%s: option '--%s' doesn't allow an argument\n"
-#~ msgstr "%s: opcja '--%s' nie może mieć argumentów\n"
-
-#~ msgid "%s: unrecognized option '--%s'\n"
-#~ msgstr "%s: nieznana opcja '--%s'\n"
-
-#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
-#~ msgstr "%s: opcja '-W %s' nie może mieć argumentów\n"
-
-#~ msgid "%s: option '-W %s' requires an argument\n"
-#~ msgstr "%s: opcja '-W %s' musi mieć argument\n"
-
#~ msgid "invalid source_version argument to compile_java_class"
#~ msgstr "błędny argument source_version dla compile_java_class"
@@ -442,6 +537,9 @@ msgstr "pamięć wyczerpana"
#~ msgid "%s subprocess I/O error"
#~ msgstr "błąd we/wy podprocesu %s"
+#~ msgid "cannot stat %s"
+#~ msgstr "nie można wykonać stat na %s"
+
#~ msgid "cannot change permissions of %s"
#~ msgstr "nie można zmienić uprawnień do %s"
@@ -475,9 +573,6 @@ msgstr "pamięć wyczerpana"
#~ 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 "`"
@@ -607,6 +702,18 @@ msgstr "pamięć wyczerpana"
#~ msgid "Unknown signal %d"
#~ msgstr "Nieznany sygnał %d"
+#~ msgid "Execution times (seconds)"
+#~ msgstr "Czasy wykonywania (w sekundach)"
+
+#~ msgid "CPU user"
+#~ msgstr "CPU użytkownika"
+
+#~ msgid "CPU system"
+#~ msgstr "CPU systemu"
+
+#~ msgid "wall clock"
+#~ msgstr "zegarowo"
+
#~ msgid "iconv function not usable"
#~ msgstr "nie można użyć funkcji iconv"
@@ -644,16 +751,12 @@ msgstr "pamięć wyczerpana"
#~ msgstr "(C)"
#~ msgid ""
-#~ "\n"
-#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
-#~ "html>.\n"
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ "<%s>.\n"
#~ "To jest oprogramowanie wolnodostępne: można je modyfikować i "
#~ "rozpowszechniać.\n"
#~ "Nie ma ŻADNEJ GWARANCJI w zakresie dopuszczalnym przez prawo.\n"
@@ -722,11 +825,8 @@ msgstr "pamięć wyczerpana"
#~ "%s, %s, %s, %s,\n"
#~ "%s, %s i inni.\n"
-#~ msgid ""
-#~ "\n"
-#~ "Report bugs to: %s\n"
+#~ msgid "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"
@@ -737,13 +837,8 @@ msgstr "pamięć wyczerpana"
#~ 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 "General help using GNU software: <%s>\n"
+#~ msgstr "Ogólna pomoc przy używaniu oprogramowania GNU: <%s>.\n"
#~ msgid "_open_osfhandle failed"
#~ msgstr "_open_osfhandle nie powiodło się"
@@ -757,6 +852,9 @@ msgstr "pamięć wyczerpana"
#~ msgid "%s subprocess got fatal signal %d"
#~ msgstr "podproces %s dostał krytyczny sygnał %d"
+#~ msgid "failed to set file descriptor text/binary mode"
+#~ msgstr "nie udało się ustawić deskryptora pliku w tryb tekstowy/binarny"
+
#~ msgid "stdin"
#~ msgstr "standardowego wejścia"
@@ -784,11 +882,11 @@ msgstr "pamięć wyczerpana"
#~ msgid "cannot perform formatted output"
#~ msgstr "nie można sformatować wyjścia"
-#~ msgid "invalid %s%s argument `%s'"
-#~ msgstr "błędny argument opcji %s%s `%s'"
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "błędny argument opcji %s%s '%s'"
-#~ msgid "invalid suffix in %s%s argument `%s'"
-#~ msgstr "błędny przyrostek argumentu opcji %s%s `%s'"
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "błędny przyrostek argumentu opcji %s%s '%s'"
-#~ msgid "%s%s argument `%s' too large"
-#~ msgstr "argument opcji %s%s `%s' zbyt duży"
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "argument opcji %s%s '%s' zbyt duży"
diff --git a/gl/po/pt.gmo b/gl/po/pt.gmo
index 9448afa5..bc00ead4 100644
--- a/gl/po/pt.gmo
+++ b/gl/po/pt.gmo
Binary files differ
diff --git a/gl/po/pt.po b/gl/po/pt.po
index 1f4d8f67..d40ab2de 100644
--- a/gl/po/pt.po
+++ b/gl/po/pt.po
@@ -1,39 +1,38 @@
-# Translation of gnulib messages to Portuguese
-# Copyright (C) 1996, 2014 Free Software Foundation, Inc.
+# Portuguese (Portugal) Translation for the gnulib Package.
+# Copyright (C) 2019 Free Software Foundation, Inc.
# This file is distributed under the same license as the gnulib package.
+# Pedro Albuquerque <palbuquerque73@gmail.com>, 2019.
#
-# António João Serras Rendas <arendas@mail.telepac.pt>, 1996.
-# Américo Monteiro <a_monteiro@netcabo.pt>, 2010.
msgid ""
msgstr ""
-"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n"
+"Project-Id-Version: gnulib 4.0.0.2567\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
-"PO-Revision-Date: 2014-11-29 14:28-0000\n"
-"Last-Translator: Luís Oliveira <luismbo@gmail.com>\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\n"
+"PO-Revision-Date: 2019-05-26 10:40+0100\n"
+"Last-Translator: Pedro Albuquerque <palbuquerque73@gmail.com>\n"
"Language-Team: Portuguese <translation-team-pt@lists.sourceforge.net>\n"
"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
-"X-Generator: Poedit 1.6.10\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Gtranslator 2.91.7\n"
#: gl/lib/argp-help.c:158
#, c-format
msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
-msgstr "ARGP_HELP_FMT: valor %s é menos que ou igual a %s"
+msgstr "ARGP_HELP_FMT: valor %s é menor ou igual que %s"
#: gl/lib/argp-help.c:234
#, c-format
msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
-msgstr "%.*s: ARGP_HELP_FMT parâmetro requer um valor"
+msgstr "%.*s: o parâmetro ARGP_HELP_FMT requer um valor"
#: gl/lib/argp-help.c:244
#, c-format
msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
-msgstr "%.*s: ARGP_HELP_FMT parâmetro desconhecido"
+msgstr "%.*s: parâmetro ARGP_HELP_FMT desconhecido"
#: gl/lib/argp-help.c:257
#, c-format
@@ -45,42 +44,42 @@ msgid ""
"Mandatory or optional arguments to long options are also mandatory or "
"optional for any corresponding short options."
msgstr ""
-"Os argumentos obrigatórios ou opcionais para as opções longas são também "
-"obrigatórios ou opcionais para qualquer opção curta correspondente."
+"Argumentos obrigatórios ou opcionais para opções longas são igualmente "
+"obrigatórios ou opcionais para opções curtas correspondentes."
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
-msgstr "Utilização:"
+msgstr "Uso:"
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr " ou: "
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
msgstr " [OPÇÃO...]"
-#: gl/lib/argp-help.c:1668
-#, fuzzy, c-format
+#: gl/lib/argp-help.c:1670
+#, c-format
msgid "Try '%s --help' or '%s --usage' for more information.\n"
-msgstr "Tente '%s --help' ou '%s --usage' para mais informação.\n"
+msgstr "Tente \"%s --help\" ou \"%s --usage\" para mais informação.\n"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, c-format
msgid "Report bugs to %s.\n"
-msgstr "Reporte bugs para %s.\n"
+msgstr "Reportar erros a %s.\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Erro de sistema desconhecido"
#: gl/lib/argp-parse.c:91
msgid "give this help list"
-msgstr "dá esta lista de ajuda"
+msgstr "mostra esta lista de ajuda"
#: gl/lib/argp-parse.c:92
msgid "give a short usage message"
-msgstr "dá uma mensagem curta de utilização"
+msgstr "mostrar mensagem curta de uso"
#: gl/lib/argp-parse.c:93
msgid "NAME"
@@ -96,77 +95,77 @@ msgstr "SEGS"
#: gl/lib/argp-parse.c:96
msgid "hang for SECS seconds (default 3600)"
-msgstr "pára por SEGS segundos (predefinição 3600)"
+msgstr "espera SEGS segundos (predefinição 3600)"
#: gl/lib/argp-parse.c:154
msgid "print program version"
-msgstr "escreve a versão do programa"
+msgstr "mostra versão do programa"
#: gl/lib/argp-parse.c:171
msgid "(PROGRAM ERROR) No version known!?"
-msgstr "(ERRO DO PROGRAMA) Nenhuma versão conhecida!?"
+msgstr "(ERRO DO PROGRAMA) Sem versão conhecida!?"
#: gl/lib/argp-parse.c:624
#, c-format
msgid "%s: Too many arguments\n"
-msgstr "%s: Demasiados argumentos\n"
+msgstr "%s: demasiados argumentos\n"
#: gl/lib/argp-parse.c:770
msgid "(PROGRAM ERROR) Option should have been recognized!?"
-msgstr "(ERRO DO PROGRAMA) A opção deveria ter sido reconhecida!?"
+msgstr "(ERRO DO PROGRAMA) A opção devia ter sido reconhecida!?"
#: gl/lib/getopt.c:278
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' is ambiguous\n"
-msgstr "%s: opção '-W %s' é ambígua\n"
+msgstr "%s: a opção \"%s%s\" é ambígua\n"
#: gl/lib/getopt.c:284
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' is ambiguous; possibilities:"
-msgstr "%s: opção '%s' é ambígua; possibilidades:"
+msgstr "%s: a opção \"%s%s\" é ambígua; possibilidades:"
#: gl/lib/getopt.c:319
-#, fuzzy, c-format
+#, c-format
msgid "%s: unrecognized option '%s%s'\n"
-msgstr "%s: opção não reconhecida '%c%s'\n"
+msgstr "%s: opção não reconhecida \"%s%s\"\n"
#: gl/lib/getopt.c:345
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' doesn't allow an argument\n"
-msgstr "%s: opção '%c%s' não permite um argumento\n"
+msgstr "%s: a opção \"%s%s\" não permite um argumento\n"
#: gl/lib/getopt.c:360
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' requires an argument\n"
-msgstr "%s: opção '--%s' requer um argumento\n"
+msgstr "\"%s: a opção \"%s%s\" requer um argumento\n"
#: gl/lib/getopt.c:621
#, c-format
msgid "%s: invalid option -- '%c'\n"
-msgstr "%s: opção inválida -- '%c'\n"
+msgstr "%s: opção inválida -- \"%c\"\n"
#: gl/lib/getopt.c:636 gl/lib/getopt.c:682
#, c-format
msgid "%s: option requires an argument -- '%c'\n"
-msgstr "%s: opção requer um argumento -- %c\n"
+msgstr "%s: a opção requer um argumento -- \"%c\"\n"
#: gl/lib/openat-die.c:38
#, c-format
msgid "unable to record current working directory"
-msgstr "incapaz de registar o directório de trabalho actual"
+msgstr "impossível gravar a pasta de trabalho actual"
#: gl/lib/openat-die.c:57
#, c-format
msgid "failed to return to initial working directory"
-msgstr "falha ao regressar ao directório de trabalho inicial"
+msgstr "falha ao voltar à pasta de trabalho inicial"
#: gl/lib/regcomp.c:135
msgid "Success"
-msgstr "Com sucesso"
+msgstr "Sucesso"
#: gl/lib/regcomp.c:138
msgid "No match"
-msgstr "Nenhuma equivalência"
+msgstr "Sem correspondência"
#: gl/lib/regcomp.c:141
msgid "Invalid regular expression"
@@ -174,32 +173,31 @@ msgstr "Expressão regular inválida"
#: gl/lib/regcomp.c:144
msgid "Invalid collation character"
-msgstr "Caractere de colação inválido"
+msgstr "Carácter de agrupamento inválido"
#: gl/lib/regcomp.c:147
msgid "Invalid character class name"
-msgstr "Nome de classe de caracteres inválido"
+msgstr "Nome de classe de carácter inválido"
#: gl/lib/regcomp.c:150
msgid "Trailing backslash"
-msgstr "Backslash de arrasto"
+msgstr "Barra invertida final"
#: gl/lib/regcomp.c:153
msgid "Invalid back reference"
-msgstr "Referência de retorno inválida"
+msgstr "Referência de recuo inválida"
#: gl/lib/regcomp.c:156
-#, fuzzy
msgid "Unmatched [, [^, [:, [., or [="
-msgstr "[ ou [^ não equivalente"
+msgstr "[, [^, [:, [., ou [= sem par"
#: gl/lib/regcomp.c:159
msgid "Unmatched ( or \\("
-msgstr "( ou \\( não equivalente"
+msgstr "( ou \\( sem par"
#: gl/lib/regcomp.c:162
msgid "Unmatched \\{"
-msgstr "\\{ não equivalente"
+msgstr "\\{ sem par"
#: gl/lib/regcomp.c:165
msgid "Invalid content of \\{\\}"
@@ -207,7 +205,7 @@ msgstr "Conteúdo de \\{\\} inválido"
#: gl/lib/regcomp.c:168
msgid "Invalid range end"
-msgstr "Final de alcance inválido"
+msgstr "Fim de intervalo inválido"
#: gl/lib/regcomp.c:171
msgid "Memory exhausted"
@@ -219,7 +217,7 @@ msgstr "Expressão regular precedente inválida"
#: gl/lib/regcomp.c:177
msgid "Premature end of regular expression"
-msgstr "Final prematuro da expressão regular"
+msgstr "Fim prematuro de expressão regular"
#: gl/lib/regcomp.c:180
msgid "Regular expression too big"
@@ -227,45 +225,361 @@ msgstr "Expressão regular muito grande"
#: gl/lib/regcomp.c:183
msgid "Unmatched ) or \\)"
-msgstr ") ou \\) não emparelhado"
+msgstr ") ou \\) sem par"
#: gl/lib/regcomp.c:676
msgid "No previous regular expression"
-msgstr "Nenhuma expressão regular prévia"
+msgstr "Sem expressão regular anterior"
#: gl/lib/xalloc-die.c:34
msgid "memory exhausted"
msgstr "memória esgotada"
-#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
-#~ msgstr "%.*s: ARGP_HELP_FMT parâmetro deve ser positivo"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr "descritores de ficheiro padrão"
+
+#~ msgid "invalid argument %s for %s"
+#~ msgstr "argumento %s inválido para %s"
+
+#~ msgid "ambiguous argument %s for %s"
+#~ msgstr "argumento %s ambíguo para %s"
+
+#~ msgid "Valid arguments are:"
+#~ msgstr "Os argumentos válidos são:"
+
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs, %u libertados (%.2f%%).\n"
+
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets, %u em cache (%.2f%%)\n"
+
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets, %u em cache (%.2f%%)\n"
+
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests, %u em cache (%.2f%%)\n"
+
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
+
+#~ msgid "count log histogram\n"
+#~ msgstr "histograma de diário total\n"
+
+#~ msgid "size log histogram\n"
+#~ msgstr "histograma de diário de tamanho\n"
+
+#~ msgid "density histogram\n"
+#~ msgstr "histograma de densidade\n"
+
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Estatísticas de bitset:\n"
+#~ "\n"
+
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Execuções acumuladas = %u\n"
+
+#~ msgid "cannot read stats file"
+#~ msgstr "impossível ler ficheiro de estatísticas"
+
+#~ msgid "bad stats file size\n"
+#~ msgstr "mau tamanho de ficheiro de estatísticas\n"
+
+#~ msgid "cannot write stats file"
+#~ msgstr "impossível escrever ficheiro de estatísticas"
+
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "impossível abrir ficheiro de estatísticas para escrita"
#~ msgid "program error"
#~ msgstr "erro de programa"
+#~ msgid "stack overflow"
+#~ msgstr "transporte da pilha"
+
+#~ msgid "cannot find a temporary directory, try setting $TMPDIR"
+#~ msgstr "impossível encontrar uma pasta temporária, tente definir $TMPDIR"
+
+#~ msgid "cannot create a temporary directory using template \"%s\""
+#~ msgstr "impossível criar uma pasta temporária usando o modelo \"%s\""
+
+#~ msgid "cannot remove temporary file %s"
+#~ msgstr "impossível remover o ficheiro temporário %s"
+
+#~ msgid "cannot remove temporary directory %s"
+#~ msgstr "impossível remover a pasta temporária %s"
+
+#~ msgid "error closing file"
+#~ msgstr "erro ao fechar o ficheiro"
+
#~ msgid "write error"
#~ msgstr "erro de escrita"
+#~ msgid "preserving permissions for %s"
+#~ msgstr "preservar permissões para %s"
+
+#~ msgid "error while opening %s for reading"
+#~ msgstr "erro ao abrir %s para leitura"
+
+#~ msgid "cannot open backup file %s for writing"
+#~ msgstr "impossível abrir a segurança %s para escrita"
+
+#~ msgid "error reading %s"
+#~ msgstr "erro ao ler %s"
+
+#~ msgid "error writing %s"
+#~ msgstr "erro ao escrever %s"
+
+#~ msgid "error after reading %s"
+#~ msgstr "erro após ler %s"
+
+#~ msgid "fdopen() failed"
+#~ msgstr "fdopen() falhou"
+
+#~ msgid "C# compiler not found, try installing mono"
+#~ msgstr "Compilador C# não encontrado, tente instalar mono"
+
+#~ msgid "C# virtual machine not found, try installing mono"
+#~ msgstr "Máquina virtual C# não encontrada, tente instalar mono"
+
+#~ msgid "unbalanced ["
+#~ msgstr "[ sem par"
+
+#~ msgid "invalid character class"
+#~ msgstr "classe de carácter inválida"
+
+#~ msgid "character class syntax is [[:space:]], not [:space:]"
+#~ msgstr "a sintaxe da classe de carácter é [[:espaço:]], não [:espaço:]"
+
+#~ msgid "unfinished \\ escape"
+#~ msgstr "escape \\ não terminado"
+
+#~ msgid "invalid content of \\{\\}"
+#~ msgstr "Conteúdo de \\{\\} inválido"
+
+#~ msgid "regular expression too big"
+#~ msgstr "expressão regular muito grande"
+
+#~ msgid "unbalanced ("
+#~ msgstr "( sem par"
+
+#~ msgid "no syntax specified"
+#~ msgstr "sem sintaxe especificada"
+
+#~ msgid "unbalanced )"
+#~ msgstr ") sem par"
+
+#~ msgid "%s subprocess failed"
+#~ msgstr "sub-processo %s falhou"
+
+#~ msgid "regular empty file"
+#~ msgstr "ficheiro normal vazio"
+
+#~ msgid "regular file"
+#~ msgstr "ficheiro normal"
+
+#~ msgid "directory"
+#~ msgstr "pasta"
+
+#~ msgid "symbolic link"
+#~ msgstr "ligação simbólica"
+
+#~ msgid "message queue"
+#~ msgstr "fila de mensagens"
+
+#~ msgid "semaphore"
+#~ msgstr "semáforo"
+
+#~ msgid "shared memory object"
+#~ msgstr "objecto de memória partilhado"
+
+#~ msgid "typed memory object"
+#~ msgstr "objecto de memória tipificado"
+
+#~ msgid "block special file"
+#~ msgstr "ficheiro especial de blocos"
+
+#~ msgid "character special file"
+#~ msgstr "ficheiro especial de caracteres"
+
+#~ msgid "contiguous data"
+#~ msgstr "dados contíguos"
+
+#~ msgid "fifo"
+#~ msgstr "fifo"
+
+#~ msgid "door"
+#~ msgstr "porta"
+
+#~ msgid "multiplexed block special file"
+#~ msgstr "ficheiro especial de blocos multiplexado"
+
+#~ msgid "multiplexed character special file"
+#~ msgstr "ficheiro especial de caracteres multiplexado"
+
+#~ msgid "multiplexed file"
+#~ msgstr "ficheiro multiplexado"
+
+#~ msgid "named file"
+#~ msgstr "ficheiro com nome"
+
+#~ msgid "network special file"
+#~ msgstr "ficheiro especial de rede"
+
+#~ msgid "migrated file with data"
+#~ msgstr "ficheiro migrado com dados"
+
+#~ msgid "migrated file without data"
+#~ msgstr "ficheiro migrado sem dados"
+
+#~ msgid "port"
+#~ msgstr "porta"
+
+#~ msgid "socket"
+#~ msgstr "socket"
+
+#~ msgid "whiteout"
+#~ msgstr "whiteout"
+
+#~ msgid "weird file"
+#~ msgstr "ficheiro estranho"
+
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "Família de endereço para nome de servidor não suportado"
+
+#~ msgid "Temporary failure in name resolution"
+#~ msgstr "Falha temporária na resolução de nome"
+
+#~ msgid "Bad value for ai_flags"
+#~ msgstr "Valor errado para ai_flags"
+
+#~ msgid "Non-recoverable failure in name resolution"
+#~ msgstr "Falha irrecuperável na resolução de nome"
+
+#~ msgid "ai_family not supported"
+#~ msgstr "ai_family não suportada"
+
+#~ msgid "Memory allocation failure"
+#~ msgstr "Falha de alocação de memória"
+
+#~ msgid "No address associated with hostname"
+#~ msgstr "Sem endereço associado ao nome de anfitrião"
+
+#~ msgid "Name or service not known"
+#~ msgstr "Nome ou serviço desconhecido"
+
+#~ msgid "Servname not supported for ai_socktype"
+#~ msgstr "Nome de servidor não suportado para ai_socktype"
+
+#~ msgid "ai_socktype not supported"
+#~ msgstr "ai_socktype não suportado"
+
#~ msgid "System error"
#~ msgstr "Erro de sistema"
+#~ msgid "Argument buffer too small"
+#~ msgstr "Buffer de argumentos muito pequeno"
+
+#~ msgid "Processing request in progress"
+#~ msgstr "A processar pedido em curso"
+
+#~ msgid "Request canceled"
+#~ msgstr "Pedido cancelado"
+
+#~ msgid "Request not canceled"
+#~ msgstr "Pedido não cancelado"
+
+#~ msgid "All requests done"
+#~ msgstr "Todos os pedidos feitos"
+
+#~ msgid "Interrupted by a signal"
+#~ msgstr "Interrompido por um sinal"
+
+#~ msgid "Parameter string not correctly encoded"
+#~ msgstr "Cadeia de parâmetros incorrectamente codificada"
+
#~ msgid "Unknown error"
#~ msgstr "Erro desconhecido"
-#~ msgid "%s: option '--%s' doesn't allow an argument\n"
-#~ msgstr "%s: opção '--%s' não permite um argumento\n"
+#~ 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 "falha ao criar \"%s\""
+
+#~ msgid "error while writing \"%s\" file"
+#~ msgstr "erro ao escrever o ficheiro \"%s\""
+
+#~ msgid "Java compiler not found, try installing gcj or set $JAVAC"
+#~ msgstr "Compilador Java não encontrado, tente instalar gcj ou defina $JAVAC"
+
+#~ msgid "Java virtual machine not found, try installing gij or set $JAVA"
+#~ msgstr ""
+#~ "Máquina virtual Java não encontrada, tente instalar gij ou defina $JAVA"
+
+#~ msgid "%s subprocess I/O error"
+#~ msgstr "erro E/S no sub-processo %s"
+
+#~ msgid "cannot stat %s"
+#~ msgstr "impossível obter informação para %s"
+
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "impossível alterar as permissões de %s"
+
+#~ msgid "cannot create directory %s"
+#~ msgstr "impossível criar a pasta %s"
+
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "Falha ao abrir /dev/zero para leitura"
+
+#~ msgid "creation of reading thread failed"
+#~ msgstr "falha ao criar tópico de leitura"
+
+#~ msgid "cannot set up nonblocking I/O to %s subprocess"
+#~ msgstr "impossível configurar E/S não-bloqueadora para sub-pocesso %s"
+
+#~ msgid "communication with %s subprocess failed"
+#~ msgstr "falha ao comunicar com o sub-processo %s"
+
+#~ msgid "write to %s subprocess failed"
+#~ msgstr "falha ao escrever no sub-processo %s"
+
+#~ msgid "read from %s subprocess failed"
+#~ msgstr "falha ao ler do sub-processo %s"
+
+#~ msgid "subprocess %s terminated with exit code %d"
+#~ msgstr "sub-processo %s terminou com código de saída %d"
-#~ msgid "%s: unrecognized option '--%s'\n"
-#~ msgstr "%s: opção não reconhecida '--%s'\n"
+#~ msgid "creation of threads failed"
+#~ msgstr "falha ao criar tópicos"
-#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
-#~ msgstr "%s: opção '-W %s' não permite um argumento\n"
+#~ msgid "%s subprocess terminated with exit code %d"
+#~ msgstr "sub-processo %s terminou com código de saída %d"
-#~ msgid "%s: option '-W %s' requires an argument\n"
-#~ msgstr "%s: opção '-W %s' requer um argumento\n"
+#~ msgid "`"
+#~ msgstr "\""
+
+#~ msgid "'"
+#~ msgstr "\""
+
+#~ msgid "^[yY]"
+#~ msgstr "^[Ss]"
+
+#~ msgid "^[nN]"
+#~ msgstr "^[nN]"
+
+#~ msgid "setting permissions for %s"
+#~ msgstr "a definir permissões para %s"
#~ msgid "Hangup"
-#~ msgstr "Pendurar"
+#~ msgstr "Desligar"
#~ msgid "Interrupt"
#~ msgstr "Interromper"
@@ -277,7 +591,7 @@ msgstr "memória esgotada"
#~ msgstr "Instrução ilegal"
#~ msgid "Trace/breakpoint trap"
-#~ msgstr "Acompanhar/armadilha de ponto de ruptura"
+#~ msgstr "Armadilha de rastreio/ponto de quebra"
#~ msgid "Aborted"
#~ msgstr "Abortado"
@@ -289,22 +603,22 @@ msgstr "memória esgotada"
#~ msgstr "Morto"
#~ msgid "Bus error"
-#~ msgstr "Erro do bus"
+#~ msgstr "Erro de bus"
#~ msgid "Segmentation fault"
#~ msgstr "Falha de segmentação"
#~ msgid "Broken pipe"
-#~ msgstr "Pipe quebrado"
+#~ msgstr "Túnel quebrado"
#~ msgid "Alarm clock"
-#~ msgstr "Despertador"
+#~ msgstr "Alarme"
#~ msgid "Terminated"
#~ msgstr "Terminado"
#~ msgid "Urgent I/O condition"
-#~ msgstr "Condição I/O urgente"
+#~ msgstr "Condição E/S urgente"
#~ msgid "Stopped (signal)"
#~ msgstr "Parado (sinal)"
@@ -316,7 +630,7 @@ msgstr "memória esgotada"
#~ msgstr "Continuado"
#~ msgid "Child exited"
-#~ msgstr "Processo filho terminado"
+#~ msgstr "Filho saiu"
#~ msgid "Stopped (tty input)"
#~ msgstr "Parado (entrada tty)"
@@ -325,13 +639,13 @@ msgstr "memória esgotada"
#~ msgstr "Parado (saída tty)"
#~ msgid "I/O possible"
-#~ msgstr "Possível I/O"
+#~ msgstr "Possível E/S"
#~ msgid "CPU time limit exceeded"
-#~ msgstr "Limite de tempo de CPU excedido"
+#~ msgstr "Excedido limite de tempo da CPU"
#~ msgid "File size limit exceeded"
-#~ msgstr "Limite de tamanho de ficheiro excedido"
+#~ msgstr "Excedido limite de tamanho do ficheiro"
#~ msgid "Virtual timer expired"
#~ msgstr "Temporizador virtual expirado"
@@ -352,13 +666,13 @@ msgstr "memória esgotada"
#~ msgstr "Armadilha EMT"
#~ msgid "Bad system call"
-#~ msgstr "Má chamada do sistema"
+#~ msgstr "Má chamada de sistema"
#~ msgid "Stack fault"
-#~ msgstr "Falha do Stack"
+#~ msgstr "Falha de pilha"
#~ msgid "Information request"
-#~ msgstr "Requisito de informação"
+#~ msgstr "Pedido de informação"
#~ msgid "Power failure"
#~ msgstr "Falha de energia"
@@ -366,24 +680,198 @@ msgstr "memória esgotada"
#~ msgid "Resource lost"
#~ msgstr "Recurso perdido"
+#~ msgid "error writing to a closed pipe or socket"
+#~ msgstr "Erro ao escrever num túnel ou socket fechado"
+
+#~ msgid "cannot create pipe"
+#~ msgstr "impossível criar túnel"
+
#~ msgid "Real-time signal %d"
-#~ msgstr "Sinal de tempo real %d"
+#~ msgstr "Sinal %d de tempo real"
#~ msgid "Unknown signal %d"
-#~ msgstr "Sinal desconhecido %d"
+#~ msgstr "Sinal %d desconhecido"
+
+#~ msgid "Execution times (seconds)"
+#~ msgstr "Tempos de execução (segundos)"
+
+#~ msgid "CPU user"
+#~ msgstr "utilizador de CPU"
+
+#~ msgid "CPU system"
+#~ msgstr "Sistema de CPU"
+
+#~ msgid "wall clock"
+#~ msgstr "relógio de parede"
+
+#~ msgid "iconv function not usable"
+#~ msgstr "função iconv inutilizável"
+
+#~ msgid "iconv function not available"
+#~ msgstr "função iconv indisponível"
+
+#~ msgid "character out of range"
+#~ msgstr "carácter fora do intervalo"
+
+#~ msgid "cannot convert U+%04X to local character set"
+#~ msgstr "impossível converter U+%04X para conjunto de caracteres local"
+
+#~ msgid "cannot convert U+%04X to local character set: %s"
+#~ msgstr "impossível converter U+%04X para conjunto de caracteres local: %s"
+
+#~ msgid "invalid user"
+#~ msgstr "utilizador inválido"
+
+#~ msgid "invalid group"
+#~ msgstr "grupo inválido"
+
+#~ msgid "invalid spec"
+#~ msgstr "especificação inválida"
+
+#~ msgid "unable to display error message"
+#~ msgstr "impossível mostrar mensagem de erro"
+
+#~ msgid "Packaged by %s (%s)\n"
+#~ msgstr "Empacotado por %s (%s)\n"
+
+#~ msgid "Packaged by %s\n"
+#~ msgstr "Empacotado por %s\n"
+
+#~ msgid "(C)"
+#~ msgstr "(©)"
#~ msgid ""
-#~ "\n"
-#~ "Report bugs to: %s\n"
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
#~ msgstr ""
-#~ "\n"
-#~ "Reporte problemas para: %s\n"
+#~ "Licença GPLv3+: GNU GPL versão 3 ou posterior <%s>\n"
+#~ "Este é um programa grátis: pode alterá-lo e redistribuí-lo.\n"
+#~ "Não há QUALQUER GARANTIA, até ao limite da Lei.\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 "Report bugs to: %s\n"
+#~ msgstr "Reportar erros a: %s\n"
#~ msgid "Report %s bugs to: %s\n"
-#~ msgstr "Reporte problemas com %s para: %s\n"
+#~ msgstr "Reportar erros %s a: %s\n"
+
+#~ msgid "%s home page: <%s>\n"
+#~ msgstr "Página inicial %s: <%s>\n"
+
+#~ msgid "General help using GNU software: <%s>\n"
+#~ msgstr "Ajuda geral para utilizar programas GNU: <%s>\n"
+
+#~ msgid "_open_osfhandle failed"
+#~ msgstr "_open_osfhandle falhou"
+
+#~ msgid "cannot restore fd %d: dup2 failed"
+#~ msgstr "impossível restaurar fd %d: dup2 falhou"
+
+#~ msgid "%s subprocess"
+#~ msgstr "sub-processo %s"
+
+#~ msgid "%s subprocess got fatal signal %d"
+#~ msgstr "sub-processo %s obteve sinal fatal %d"
+
+#~ msgid "failed to set file descriptor text/binary mode"
+#~ msgstr "falha ao definir modo texto/binário do descritor de ficheiro"
+
+#~ msgid "stdin"
+#~ msgstr "stdin"
+
+#~ msgid "stdout"
+#~ msgstr "stdout"
+
+#~ msgid "stderr"
+#~ msgstr "stderr"
#~ msgid "unknown stream"
#~ msgstr "fluxo desconhecido"
-#~ msgid "%s: illegal option -- %c\n"
-#~ msgstr "%s: opção ilegal -- %c\n"
+#~ msgid "failed to reopen %s with mode %s"
+#~ msgstr "falha ao reabrir %s com modo %s"
+
+#~ msgid "string comparison failed"
+#~ msgstr "erro na comparação da cadeia"
+
+#~ msgid "Set LC_ALL='C' to work around the problem."
+#~ msgstr "Defina LC_ALL=\"C\" para contornar o problema."
+
+#~ msgid "The strings compared were %s and %s."
+#~ msgstr "As cadeias comparadas foram %s e %s."
+
+#~ msgid "cannot perform formatted output"
+#~ msgstr "impossível formatar o resultado de saída"
+
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "argumento %s%s \"%s\" inválido"
+
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "sufixo inválido em %s%s, argumento \"%s\""
+
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "argumento %s%s \"%s\" muito grande"
diff --git a/gl/po/pt_BR.gmo b/gl/po/pt_BR.gmo
index 22bbca16..0cbf6aeb 100644
--- a/gl/po/pt_BR.gmo
+++ b/gl/po/pt_BR.gmo
Binary files differ
diff --git a/gl/po/pt_BR.po b/gl/po/pt_BR.po
index 47d02221..0900955c 100644
--- a/gl/po/pt_BR.po
+++ b/gl/po/pt_BR.po
@@ -1,17 +1,17 @@
# Brazilian Portuguese translations for gnulib package
# Traduções em português brasileiro para o pacote gnulib
-# Copyright (C) 2017 Free Software Foundation, Inc.
+# Copyright (C) 2019 Free Software Foundation, Inc.
# This file is distributed under the same license as the gnulib package.
# 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.
-# Rafael Fontenelle <rafaelff@gnome.org>, 2013, 2017.
+# Rafael Fontenelle <rafaelff@gnome.org>, 2013, 2017, 2019.
msgid ""
msgstr ""
-"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n"
+"Project-Id-Version: gnulib 4.0.0.2567\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
-"PO-Revision-Date: 2017-01-19 06:00-0200\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\n"
+"PO-Revision-Date: 2019-05-19 09:10-0200\n"
"Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n"
"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge."
"net>\n"
@@ -51,31 +51,31 @@ msgstr ""
"Argumentos obrigatórios ou opcionais para opções longas também o são para "
"quaisquer opções curtas correspondentes."
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr "Uso:"
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr " ou: "
# , c-format
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
msgstr " [OPÇÃO...]"
# , c-format
-#: gl/lib/argp-help.c:1668
-#, fuzzy, c-format
+#: gl/lib/argp-help.c:1670
+#, c-format
msgid "Try '%s --help' or '%s --usage' for more information.\n"
msgstr "Tente \"%s --help\" ou \"%s --usage\" para mais informação.\n"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, c-format
msgid "Report bugs to %s.\n"
msgstr "Relate erros para %s.\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Erro desconhecido de sistema"
@@ -121,30 +121,30 @@ msgid "(PROGRAM ERROR) Option should have been recognized!?"
msgstr "(ERRO NO PROGRAMA) A opção deveria ter sido reconhecida!?"
#: gl/lib/getopt.c:278
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' is ambiguous\n"
-msgstr "%s: a opção \"-W %s\" é ambígua\n"
+msgstr "%s: a opção \"%s%s\" é ambígua\n"
#: gl/lib/getopt.c:284
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' is ambiguous; possibilities:"
-msgstr "%s: a opção \"%s\" é ambígua; possibilidades:"
+msgstr "%s: a opção \"%s%s\" é ambígua; possibilidades:"
# , c-format
#: gl/lib/getopt.c:319
-#, fuzzy, c-format
+#, c-format
msgid "%s: unrecognized option '%s%s'\n"
-msgstr "%s: opção desconhecida \"%c%s\"\n"
+msgstr "%s: opção desconhecida \"%s%s\"\n"
#: gl/lib/getopt.c:345
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' doesn't allow an argument\n"
-msgstr "%s: a opção \"%c%s\" não permite um argumento\n"
+msgstr "%s: a opção \"%s%s\" não permite um argumento\n"
#: gl/lib/getopt.c:360
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' requires an argument\n"
-msgstr "%s: a opção \"--%s\" exige um argumento\n"
+msgstr "%s: a opção \"%s%s\" exige um argumento\n"
# , c-format
#: gl/lib/getopt.c:621
@@ -201,9 +201,8 @@ msgid "Invalid back reference"
msgstr "Retrorreferência inválida"
#: gl/lib/regcomp.c:156
-#, fuzzy
msgid "Unmatched [, [^, [:, [., or [="
-msgstr "[ ou [^ sem correspondente"
+msgstr "[, [^, [:, [., ou [= sem correspondente"
#: gl/lib/regcomp.c:159
msgid "Unmatched ( or \\("
@@ -252,6 +251,11 @@ msgstr "Nenhuma expressão regular anterior"
msgid "memory exhausted"
msgstr "memória esgotada"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr "descritores de arquivo padrão"
+
# , c-format
#~ msgid "invalid argument %s for %s"
#~ msgstr "argumento inválido %s para %s"
@@ -262,8 +266,53 @@ msgstr "memória esgotada"
#~ msgid "Valid arguments are:"
#~ msgstr "Argumentos válidos são:"
-#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
-#~ msgstr "%.*s: O parâmetro ARGP_HELP_FMT deve ser positivo"
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs, %u liberados (%.2f%%).\n"
+
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets, %u em cache (%.2f%%)\n"
+
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets, %u em cache (%.2f%%)\n"
+
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests, %u em cache (%.2f%%)\n"
+
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
+
+#~ msgid "count log histogram\n"
+#~ msgstr "histograma de log de contagem\n"
+
+#~ msgid "size log histogram\n"
+#~ msgstr "histograma de log de tamanho\n"
+
+#~ msgid "density histogram\n"
+#~ msgstr "histograma de densidade\n"
+
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Estatística de bitset:\n"
+#~ "\n"
+
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Execuções acumuladas = %u\n"
+
+# , c-format
+#~ msgid "cannot read stats file"
+#~ msgstr "não foi possível ler o arquivo de estado"
+
+#~ msgid "bad stats file size\n"
+#~ msgstr "tamanho inválido de arquivo de estado\n"
+
+# , c-format
+#~ msgid "cannot write stats file"
+#~ msgstr "não foi possível escrever o arquivo de estado"
+
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "não foi possível abrir o arquivo de estado para escrita"
#~ msgid "program error"
#~ msgstr "erro do programa"
@@ -298,32 +347,61 @@ msgstr "memória esgotada"
#~ msgid "preserving permissions for %s"
#~ msgstr "preservando permissões de %s"
-#~ msgid "error while opening \"%s\" for reading"
-#~ msgstr "erro ao abrir \"%s\" para leitura"
+#~ msgid "error while opening %s for reading"
+#~ msgstr "erro ao abrir %s para leitura"
-#~ msgid "cannot open backup file \"%s\" for writing"
-#~ msgstr "não foi possível abrir o arquivo backup \"%s\" para escrita"
+#~ msgid "cannot open backup file %s for writing"
+#~ msgstr "não foi possível abrir o arquivo backup %s para escrita"
# , c-format
-#~ msgid "error reading \"%s\""
-#~ msgstr "erro ao ler \"%s\""
+#~ msgid "error reading %s"
+#~ msgstr "erro ao ler %s"
# , c-format
-#~ msgid "error writing \"%s\""
-#~ msgstr "erro ao escrever \"%s\""
+#~ msgid "error writing %s"
+#~ msgstr "erro ao escrever %s"
# , c-format
-#~ msgid "error after reading \"%s\""
-#~ msgstr "erro após leitura de \"%s\""
+#~ msgid "error after reading %s"
+#~ msgstr "erro após leitura de %s"
#~ msgid "fdopen() failed"
#~ msgstr "fdopen() falhou"
-#~ msgid "C# compiler not found, try installing pnet"
-#~ msgstr "O compilador C# não foi localizado, tente instalar pnet"
+#~ msgid "C# compiler not found, try installing mono"
+#~ msgstr "O compilador C# não foi localizado, tente instalar mono"
+
+#~ msgid "C# virtual machine not found, try installing mono"
+#~ msgstr "A máquina virtual C# não foi localizada, tente instalar mono"
+
+#~ msgid "unbalanced ["
+#~ msgstr "[ não balanceado"
-#~ msgid "C# virtual machine not found, try installing pnet"
-#~ msgstr "A máquina virtual C# não foi localizada, tente instalar pnet"
+# , c-format
+#~ msgid "invalid character class"
+#~ msgstr "classe de caracteres inválida"
+
+#~ msgid "character class syntax is [[:space:]], not [:space:]"
+#~ msgstr "a sintaxe da classe de caracteres é [[:space:]], não [:space:]"
+
+#~ msgid "unfinished \\ escape"
+#~ msgstr "escape \\ não finalizado"
+
+#~ msgid "invalid content of \\{\\}"
+#~ msgstr "conteúdo inválido de \\{\\}"
+
+# , c-format
+#~ msgid "regular expression too big"
+#~ msgstr "expressão regular grande demais"
+
+#~ msgid "unbalanced ("
+#~ msgstr "( não balanceado"
+
+#~ msgid "no syntax specified"
+#~ msgstr "nenhuma sintaxe especificada"
+
+#~ msgid "unbalanced )"
+#~ msgstr ") não balanceado"
# , c-format
#~ msgid "%s subprocess failed"
@@ -338,33 +416,68 @@ msgstr "memória esgotada"
#~ msgid "directory"
#~ msgstr "diretório"
+#~ msgid "symbolic link"
+#~ msgstr "link simbólico"
+
+#~ msgid "message queue"
+#~ msgstr "fila de mensagem"
+
+#~ msgid "semaphore"
+#~ msgstr "semáforo"
+
+#~ msgid "shared memory object"
+#~ msgstr "objeto de memória compartilhada"
+
+#~ msgid "typed memory object"
+#~ msgstr "objeto de memória tipificada"
+
#~ msgid "block special file"
#~ msgstr "arquivo especial de bloco"
#~ msgid "character special file"
#~ msgstr "arquivo especial de caractere"
+#~ msgid "contiguous data"
+#~ msgstr "dados contíguos"
+
# first-in, first-out; abreviação muito usada no meio computacional em português -- Rafael
#~ msgid "fifo"
#~ msgstr "fifo"
-#~ msgid "symbolic link"
-#~ msgstr "link simbólico"
+# https://en.wikipedia.org/wiki/Unix_file_types#Door
+# Não traduzir para porta para evitar confusão com "port"
+#~ msgid "door"
+#~ msgstr "door"
-#~ msgid "socket"
-#~ msgstr "soquete"
+#~ msgid "multiplexed block special file"
+#~ msgstr "arquivo multiplexado especial de bloco"
-#~ msgid "message queue"
-#~ msgstr "fila de mensagem"
+#~ msgid "multiplexed character special file"
+#~ msgstr "arquivo multiplexado especial de caractere"
-#~ msgid "semaphore"
-#~ msgstr "semáforo"
+#~ msgid "multiplexed file"
+#~ msgstr "arquivo multiplexado"
-#~ msgid "shared memory object"
-#~ msgstr "objeto de memória compartilhada"
+#~ msgid "named file"
+#~ msgstr "arquivo nomeado"
-#~ msgid "typed memory object"
-#~ msgstr "objeto de memória tipificada"
+#~ msgid "network special file"
+#~ msgstr "arquivo especial de rede"
+
+#~ msgid "migrated file with data"
+#~ msgstr "arquivo migrado com dados"
+
+#~ msgid "migrated file without data"
+#~ msgstr "arquivo migrado sem dados"
+
+#~ msgid "port"
+#~ msgstr "porta"
+
+#~ msgid "socket"
+#~ msgstr "soquete"
+
+#~ msgid "whiteout"
+#~ msgstr "whiteout"
#~ msgid "weird file"
#~ msgstr "arquivo estranho"
@@ -426,19 +539,6 @@ msgstr "memória esgotada"
#~ msgid "Unknown error"
#~ msgstr "Erro desconhecido"
-#~ msgid "%s: option '--%s' doesn't allow an argument\n"
-#~ msgstr "%s: a opção \"--%s\" não permite um argumento\n"
-
-# , c-format
-#~ msgid "%s: unrecognized option '--%s'\n"
-#~ msgstr "%s: opção desconhecida \"--%s\"\n"
-
-#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
-#~ msgstr "%s: a opção \"-W %s\" não permite um argumento\n"
-
-#~ msgid "%s: option '-W %s' requires an argument\n"
-#~ msgstr "%s: a opção \"-W %s\" exige um argumento\n"
-
#~ msgid "invalid source_version argument to compile_java_class"
#~ msgstr "argumento source_version inválido para compile_java_class"
@@ -467,6 +567,10 @@ msgstr "memória esgotada"
#~ msgstr "erro de E/S no subprocesso %s"
# , c-format
+#~ msgid "cannot stat %s"
+#~ msgstr "não foi possível obter estado de %s"
+
+# , c-format
#~ msgid "cannot change permissions of %s"
#~ msgstr "não foi possível mudar permissões de %s"
@@ -505,9 +609,6 @@ msgstr "memória esgotada"
#~ msgid "%s subprocess terminated with exit code %d"
#~ msgstr "subprocesso %s terminado com código de saída %d"
-#~ msgid "Franc,ois Pinard"
-#~ msgstr "François Pinard"
-
#~ msgid "`"
#~ msgstr "“"
@@ -667,6 +768,19 @@ msgstr "memória esgotada"
#~ msgid "Unknown signal %d"
#~ msgstr "Sinal desconhecido %d"
+#~ msgid "Execution times (seconds)"
+#~ msgstr "Tempos de execução (segundos)"
+
+#~ msgid "CPU user"
+#~ msgstr "CPU usuário"
+
+#~ msgid "CPU system"
+#~ msgstr "CPU sistema"
+
+# Sinal SIGALRM
+#~ msgid "wall clock"
+#~ msgstr "relógio de parede"
+
#~ msgid "iconv function not usable"
#~ msgstr "função iconv não utilizável"
@@ -707,19 +821,13 @@ msgstr "memória esgotada"
#~ msgstr "(C)"
#~ msgid ""
-#~ "\n"
-#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
-#~ "html>.\n"
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
-#~ "Licença GPLv3+: GNU GPL versão 3 ou posterior <http://gnu.org/licenses/"
-#~ "gpl.html>\n"
+#~ "Licença GPLv3+: GNU GPL versão 3 ou posterior <%s>\n"
#~ "Este é um software livre: você é livre para alterá-lo e redistribuí-lo.\n"
#~ "NÃO HÁ QUALQUER GARANTIA, na máxima extensão permitida em lei.\n"
-#~ "\n"
#~ msgid "Written by %s.\n"
#~ msgstr "Escrito por %s.\n"
@@ -786,11 +894,8 @@ msgstr "memória esgotada"
#~ "%s, %s e outros.\n"
# Adicionado endereço de email da equipe, conforme solicitação do desenvolvedor -- Rafael
-#~ msgid ""
-#~ "\n"
-#~ "Report bugs to: %s\n"
+#~ msgid "Report bugs to: %s\n"
#~ msgstr ""
-#~ "\n"
#~ "Relate erros para: %s\n"
#~ "Relate erros de tradução para <http://ldpbr-translation@lists.sourceforge."
#~ "net>\n"
@@ -801,11 +906,8 @@ msgstr "memória esgotada"
#~ msgid "%s home page: <%s>\n"
#~ msgstr "Página do %s: <%s>\n"
-#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
-#~ msgstr "Página do %s: <http://www.gnu.org/software/%s/>\n"
-
-#~ msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
-#~ msgstr "Ajuda para uso de softwares GNU: <http://www.gnu.org/gethelp/>\n"
+#~ msgid "General help using GNU software: <%s>\n"
+#~ msgstr "Ajuda para uso de softwares GNU: <%s>\n"
#~ msgid "_open_osfhandle failed"
#~ msgstr "_open_osfhandle falhou"
@@ -821,6 +923,9 @@ msgstr "memória esgotada"
#~ msgid "%s subprocess got fatal signal %d"
#~ msgstr "o subprocesso %s recebeu sinal fatal %d"
+#~ msgid "failed to set file descriptor text/binary mode"
+#~ msgstr "falha ao definir modo texto/binário do descritor de arquivo"
+
#~ msgid "stdin"
#~ msgstr "entrada padrão (stdin)"
@@ -850,17 +955,39 @@ msgstr "memória esgotada"
# %s%s é hífen e opção, `%s' é o argumento da opção
# , c-format
-#~ msgid "invalid %s%s argument `%s'"
+#~ msgid "invalid %s%s argument '%s'"
#~ msgstr "argumento inválido para %s%s: \"%s\""
# %s%s é hífen e opção, `%s' é o argumento da opção
# , c-format
-#~ msgid "invalid suffix in %s%s argument `%s'"
-#~ msgstr "sufixo inválido no argumento para %s%s: \"%s\""
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "sufixo inválido no argumento para %s%s \"%s\""
# %s%s é hífen e opção, `%s' é o argumento da opção
-#~ msgid "%s%s argument `%s' too large"
-#~ msgstr "argumento grande demais para %s%s: \"%s\""
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "argumento para %s%s \"%s\" é grande demais"
+
+#~ msgid "%s home page: <https://www.gnu.org/software/%s/>\n"
+#~ msgstr "Página do %s: <https://www.gnu.org/software/%s/>\n"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
+#~ msgstr "%.*s: O parâmetro ARGP_HELP_FMT deve ser positivo"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: a opção \"--%s\" não permite um argumento\n"
+
+# , c-format
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: opção desconhecida \"--%s\"\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: a opção \"-W %s\" não permite um argumento\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: a opção \"-W %s\" exige um argumento\n"
+
+#~ msgid "Franc,ois Pinard"
+#~ msgstr "François Pinard"
# , c-format
#~ msgid "%s: illegal option -- %c\n"
diff --git a/gl/po/ro.po b/gl/po/ro.po
index 88a5f734..c77a5306 100644
--- a/gl/po/ro.po
+++ b/gl/po/ro.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: mailutils 0.4\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\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"
@@ -46,29 +46,29 @@ msgstr ""
"asemenea obligatorii sau opionale pentru toate opiunile scurte "
"corespunztoare."
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr "Folosire:"
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr " sau: "
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
msgstr " [OPIUNE...]"
-#: gl/lib/argp-help.c:1668
+#: gl/lib/argp-help.c:1670
#, 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"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, c-format
msgid "Report bugs to %s.\n"
msgstr "Raportai bug-urile la %s.\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
#, fuzzy
msgid "Unknown system error"
msgstr "tip de mesaj necunoscut"
@@ -249,6 +249,11 @@ msgstr "Nu exist fiier anterior"
msgid "memory exhausted"
msgstr "Memorie plin"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr ""
+
#, fuzzy
#~ msgid "invalid argument %s for %s"
#~ msgstr "nume etichet(tag) invalid `%s' pentru `%s'"
diff --git a/gl/po/ru.gmo b/gl/po/ru.gmo
index 9973fdd3..a244dfe7 100644
--- a/gl/po/ru.gmo
+++ b/gl/po/ru.gmo
Binary files differ
diff --git a/gl/po/ru.po b/gl/po/ru.po
index 9f51ee9f..01679920 100644
--- a/gl/po/ru.po
+++ b/gl/po/ru.po
@@ -3,15 +3,15 @@
# 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.
+# Yuri Kozlov <yuray@komyakino.ru>, 2010, 2011, 2019.
msgid ""
msgstr ""
-"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n"
+"Project-Id-Version: gnulib 4.0.0.2567\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
-"PO-Revision-Date: 2011-08-22 21:05+0400\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\n"
+"PO-Revision-Date: 2019-05-21 18:46+0300\n"
"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
-"Language-Team: Russian <gnu@mx.ru>\n"
+"Language-Team: Russian <gnu@d07.ru>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,7 +19,7 @@ msgstr ""
"X-Bugs: Report translation errors to the Language-Team address.\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"
+"X-Generator: Lokalize 2.0\n"
#: gl/lib/argp-help.c:158
#, c-format
@@ -49,31 +49,31 @@ msgstr ""
"Обязательные или необязательные аргументы к длинным именам параметров "
"остаются таковыми и к соответствующим коротким параметрам."
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr "Использование:"
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr " или: "
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
msgstr " [ПАРАМЕТР...]"
-#: gl/lib/argp-help.c:1668
-#, fuzzy, c-format
+#: gl/lib/argp-help.c:1670
+#, c-format
msgid "Try '%s --help' or '%s --usage' for more information.\n"
msgstr ""
"Попробуйте «%s --help» или «%s --usage» для получения более подробного "
"описания.\n"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, c-format
msgid "Report bugs to %s.\n"
msgstr "Об ошибках сообщай по адресу %s.\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Неизвестная системная ошибка"
@@ -119,29 +119,29 @@ msgid "(PROGRAM ERROR) Option should have been recognized!?"
msgstr "(ОШИБКА ПРОГРАММЫ) Параметр должен был быть распознан!?"
#: gl/lib/getopt.c:278
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' is ambiguous\n"
-msgstr "%s: двусмысленный параметр «-W %s»\n"
+msgstr "%s: двусмысленный параметр «%s%s»\n"
#: gl/lib/getopt.c:284
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' is ambiguous; possibilities:"
-msgstr "%s: двусмысленный параметр «%s»; возможные варианты:"
+msgstr "%s: двусмысленный параметр «%s%s»; возможные варианты:"
#: gl/lib/getopt.c:319
-#, fuzzy, c-format
+#, c-format
msgid "%s: unrecognized option '%s%s'\n"
-msgstr "%s: нераспознанный параметр «%c%s»\n"
+msgstr "%s: нераспознанный параметр «%s%s»\n"
#: gl/lib/getopt.c:345
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' doesn't allow an argument\n"
-msgstr "%s: для параметра «%c%s» аргумент не разрешён\n"
+msgstr "%s: для параметра «%s%s» нельзя использовать аргумент\n"
#: gl/lib/getopt.c:360
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' requires an argument\n"
-msgstr "%s: для параметра «--%s» требуется аргумент\n"
+msgstr "%s: для параметра «%s%s» требуется аргумент\n"
#: gl/lib/getopt.c:621
#, c-format
@@ -192,9 +192,8 @@ msgid "Invalid back reference"
msgstr "Неверная обратная ссылка"
#: gl/lib/regcomp.c:156
-#, fuzzy
msgid "Unmatched [, [^, [:, [., or [="
-msgstr "Непарная [ или [^"
+msgstr "Непарная [, [^, [:, [. или [="
#: gl/lib/regcomp.c:159
msgid "Unmatched ( or \\("
@@ -240,6 +239,11 @@ msgstr "Отсутствует предыдущее регулярное выр
msgid "memory exhausted"
msgstr "закончилась память"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr "стандартные файловые дескрипторы"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "неверный аргумент %s для %s"
@@ -249,8 +253,51 @@ msgstr "закончилась память"
#~ msgid "Valid arguments are:"
#~ msgstr "Верные аргументы:"
-#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
-#~ msgstr "%.*s: значение параметра ARGP_HELP_FMT должно быть положительным"
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs, %u освобождено (%.2f%%).\n"
+
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets, %u кэшировано (%.2f%%)\n"
+
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets, %u кэшировано (%.2f%%)\n"
+
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests, %u кэшировано (%.2f%%)\n"
+
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
+
+#~ msgid "count log histogram\n"
+#~ msgstr "количественная логарифмическая гистограмма\n"
+
+#~ msgid "size log histogram\n"
+#~ msgstr "размерная логарифмическая гистограмма\n"
+
+#~ msgid "density histogram\n"
+#~ msgstr "гистограмма плотности\n"
+
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Статистика bitset:\n"
+#~ "\n"
+
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Накопленных запусков = %u\n"
+
+#~ msgid "cannot read stats file"
+#~ msgstr "невозможно прочитать файл stats"
+
+#~ msgid "bad stats file size\n"
+#~ msgstr "некорректный размер файла stats\n"
+
+#~ msgid "cannot write stats file"
+#~ msgstr "невозможно записать файл stats"
+
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "невозможно открыть файл stats для записи"
#~ msgid "program error"
#~ msgstr "программная ошибка"
@@ -279,29 +326,56 @@ msgstr "закончилась память"
#~ msgid "preserving permissions for %s"
#~ msgstr "сохраняются права доступа для %s"
-#~ msgid "error while opening \"%s\" for reading"
-#~ msgstr "ошибка при открытии «%s» для чтения"
+#~ msgid "error while opening %s for reading"
+#~ msgstr "ошибка при открытии файла %s для чтения"
-#~ msgid "cannot open backup file \"%s\" for writing"
-#~ msgstr "не удалось открыть файл резервной копии «%s» для записи"
+#~ msgid "cannot open backup file %s for writing"
+#~ msgstr "не удалось открыть файл резервной копии %s для записи"
-#~ msgid "error reading \"%s\""
-#~ msgstr "ошибка чтения «%s»"
+#~ msgid "error reading %s"
+#~ msgstr "ошибка чтения %s"
-#~ msgid "error writing \"%s\""
-#~ msgstr "ошибка записи «%s»"
+#~ msgid "error writing %s"
+#~ msgstr "ошибка записи %s"
-#~ msgid "error after reading \"%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# compiler not found, try installing mono"
+#~ msgstr "Не найден компилятор C#, попробуйте установить mono"
+
+#~ msgid "C# virtual machine not found, try installing mono"
+#~ msgstr "Не найдена виртуальная машина C#, попробуйте установить mono"
+
+#~ msgid "unbalanced ["
+#~ msgstr "несбалансированная ["
+
+#~ msgid "invalid character class"
+#~ msgstr "неправильный класс символов"
+
+#~ msgid "character class syntax is [[:space:]], not [:space:]"
+#~ msgstr "синтаксис класса символов: [[:space:]], а не [:space:]"
-#~ msgid "C# virtual machine not found, try installing pnet"
-#~ msgstr "Не найдена виртуальная машина C#, попробуйте установить pnet"
+#~ msgid "unfinished \\ escape"
+#~ msgstr "незавершённая \\ экранирующая последовательность"
+
+#~ msgid "invalid content of \\{\\}"
+#~ msgstr "неправильное содержимое в \\{\\}"
+
+#~ msgid "regular expression too big"
+#~ msgstr "регулярное выражение слишком большое"
+
+#~ msgid "unbalanced ("
+#~ msgstr "несбалансированная ("
+
+#~ msgid "no syntax specified"
+#~ msgstr "не указан синтаксис"
+
+#~ msgid "unbalanced )"
+#~ msgstr "несбалансированная )"
#~ msgid "%s subprocess failed"
#~ msgstr "подпроцесс %s завершился с ошибкой"
@@ -315,21 +389,9 @@ 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 "очередь сообщений"
@@ -342,6 +404,51 @@ msgstr "закончилась память"
#~ msgid "typed memory object"
#~ msgstr "объект типизированной памяти"
+#~ msgid "block special file"
+#~ msgstr "блочный специальный файл"
+
+#~ msgid "character special file"
+#~ msgstr "символьный специальный файл"
+
+#~ msgid "contiguous data"
+#~ msgstr "непрерывные данные"
+
+#~ msgid "fifo"
+#~ msgstr "файл-очередь"
+
+#~ msgid "door"
+#~ msgstr "дверь"
+
+#~ msgid "multiplexed block special file"
+#~ msgstr "мультиплексный блочный специальный файл"
+
+#~ msgid "multiplexed character special file"
+#~ msgstr "мультиплексный символьный специальный файл"
+
+#~ msgid "multiplexed file"
+#~ msgstr "мультиплексный файл"
+
+#~ msgid "named file"
+#~ msgstr "именованный файл"
+
+#~ msgid "network special file"
+#~ msgstr "сетевой специальный файл"
+
+#~ msgid "migrated file with data"
+#~ msgstr "переносной файл с данными"
+
+#~ msgid "migrated file without data"
+#~ msgstr "переносной файл без данных"
+
+#~ msgid "port"
+#~ msgstr "порт"
+
+#~ msgid "socket"
+#~ msgstr "сокет"
+
+#~ msgid "whiteout"
+#~ msgstr "замазка"
+
#~ msgid "weird file"
#~ msgstr "странный файл"
@@ -402,18 +509,6 @@ msgstr "закончилась память"
#~ msgid "Unknown error"
#~ msgstr "Неизвестная ошибка"
-#~ msgid "%s: option '--%s' doesn't allow an argument\n"
-#~ msgstr "%s: для параметра «--%s» аргумент не разрешён\n"
-
-#~ msgid "%s: unrecognized option '--%s'\n"
-#~ msgstr "%s: нераспознанный параметр «--%s»\n"
-
-#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
-#~ msgstr "%s: у параметра «-W %s» не может быть аргумента\n"
-
-#~ msgid "%s: option '-W %s' requires an argument\n"
-#~ msgstr "%s: для параметра «-W %s» требуется аргумент\n"
-
#~ msgid "invalid source_version argument to compile_java_class"
#~ msgstr "неверный аргумент source_version для compile_java_class"
@@ -438,6 +533,9 @@ msgstr "закончилась память"
#~ msgid "%s subprocess I/O error"
#~ msgstr "ошибка вв/вывода подпроцесса %s"
+#~ msgid "cannot stat %s"
+#~ msgstr "не удалось выполнить stat для %s"
+
#~ msgid "cannot change permissions of %s"
#~ msgstr "невозможно изменить права доступа %s"
@@ -471,9 +569,6 @@ msgstr "закончилась память"
#~ msgid "%s subprocess terminated with exit code %d"
#~ msgstr "подпроцесс %s завершился с кодом выхода %d"
-#~ msgid "Franc,ois Pinard"
-#~ msgstr "Френсис Пинард (Franc,ois Pinard)"
-
#~ msgid "`"
#~ msgstr "«"
@@ -603,6 +698,18 @@ msgstr "закончилась память"
#~ msgid "Unknown signal %d"
#~ msgstr "Неизвестный сигнал %d"
+#~ msgid "Execution times (seconds)"
+#~ msgstr "Время выполнения (секунд)"
+
+#~ msgid "CPU user"
+#~ msgstr "пользовательское время на ЦП"
+
+#~ msgid "CPU system"
+#~ msgstr "системное время на ЦП"
+
+#~ msgid "wall clock"
+#~ msgstr "настенные часы"
+
#~ msgid "iconv function not usable"
#~ msgstr "функция iconv неприменима"
@@ -640,19 +747,13 @@ msgstr "закончилась память"
#~ msgstr "©"
#~ msgid ""
-#~ "\n"
-#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
-#~ "html>.\n"
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ "Лицензия GPLv3+: GNU GPL версии 3 или новее <%s>.\n"
+#~ "Это свободное ПО: вы можете изменять и распространять его.\n"
+#~ "Нет НИКАКИХ ГАРАНТИЙ в пределах действующего законодательства.\n"
#~ msgid "Written by %s.\n"
#~ msgstr "Автор программы: %s.\n"
@@ -718,12 +819,8 @@ msgstr "закончилась память"
#~ "%s, %s, %s, %s,\n"
#~ "%s, %s и другие.\n"
-#~ msgid ""
-#~ "\n"
-#~ "Report bugs to: %s\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Об ошибках сообщайте по адресу: %s\n"
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr "Об ошибках сообщайте по адресу: %s\n"
#~ msgid "Report %s bugs to: %s\n"
#~ msgstr "Об ошибках в %s сообщайте по адресу: %s\n"
@@ -731,11 +828,8 @@ msgstr "закончилась память"
#~ 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 "General help using GNU software: <%s>\n"
+#~ msgstr "Справка по работе с программами GNU: <%s>\n"
#~ msgid "_open_osfhandle failed"
#~ msgstr "_open_osfhandle завершилась неудачно"
@@ -749,6 +843,10 @@ msgstr "закончилась память"
#~ msgid "%s subprocess got fatal signal %d"
#~ msgstr "подпроцесс %s получил сигнал завершения %d"
+#~ msgid "failed to set file descriptor text/binary mode"
+#~ msgstr ""
+#~ "не удалось изменить текстовый/двоичный режим у файлового дескриптора"
+
#~ msgid "stdin"
#~ msgstr "stdin"
@@ -776,11 +874,32 @@ msgstr "закончилась память"
#~ msgid "cannot perform formatted output"
#~ msgstr "невозможно выполнить форматированный вывод"
-#~ msgid "invalid %s%s argument `%s'"
-#~ msgstr "неверный аргумент %s%s для «%s»"
+#~ 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 home page: <https://www.gnu.org/software/%s/>\n"
+#~ msgstr "Домашняя страница %s: <https://www.gnu.org/software/%s/>\n"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
+#~ msgstr "%.*s: значение параметра ARGP_HELP_FMT должно быть положительным"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: для параметра «--%s» аргумент не разрешён\n"
-#~ msgid "invalid suffix in %s%s argument `%s'"
-#~ msgstr "неверный суффикс %s%s в аргументе «%s»"
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: нераспознанный параметр «--%s»\n"
-#~ msgid "%s%s argument `%s' too large"
-#~ msgstr "значение %s%s аргумента «%s» слишком велико"
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: у параметра «-W %s» не может быть аргумента\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: для параметра «-W %s» требуется аргумент\n"
+
+#~ msgid "Franc,ois Pinard"
+#~ msgstr "Френсис Пинард (Franc,ois Pinard)"
diff --git a/gl/po/rw.po b/gl/po/rw.po
index c69e5c79..047ca657 100644
--- a/gl/po/rw.po
+++ b/gl/po/rw.po
@@ -16,7 +16,7 @@ msgid ""
msgstr ""
"Project-Id-Version: mailutils 0.6\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\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"
@@ -72,30 +72,30 @@ msgstr ""
"Cyangwa Bitari ngombwa ingingo Kuri Amahitamo Cyangwa Bitari ngombwa "
"kugirango Amahitamo"
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr "Ikoresha:"
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
#, fuzzy
msgid " or: "
msgstr "Cyangwa"
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
msgstr ""
-#: gl/lib/argp-help.c:1668
+#: gl/lib/argp-help.c:1670
#, fuzzy, c-format
msgid "Try '%s --help' or '%s --usage' for more information.\n"
msgstr "Cyangwa kugirango Birenzeho Ibisobanuro"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, fuzzy, c-format
msgid "Report bugs to %s.\n"
msgstr "Kuri"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
#, fuzzy
msgid "Unknown system error"
msgstr "Sisitemu Ikosa"
@@ -283,6 +283,11 @@ msgstr "Ikosa in Ibisanzwe imvugo Gushaka"
msgid "memory exhausted"
msgstr "Ububiko"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr ""
+
#, fuzzy
#~ msgid "invalid argument %s for %s"
#~ msgstr "Sibyo kugirango"
diff --git a/gl/po/sk.po b/gl/po/sk.po
index 052408e0..64f043be 100644
--- a/gl/po/sk.po
+++ b/gl/po/sk.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: textutils 2.0.14\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\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"
@@ -42,25 +42,25 @@ msgid ""
"optional for any corresponding short options."
msgstr ""
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr ""
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr ""
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
#, fuzzy
msgid " [OPTION...]"
msgstr "Pouitie: %s [PREPNA] [SBOR]...\n"
-#: gl/lib/argp-help.c:1668
+#: gl/lib/argp-help.c:1670
#, fuzzy, c-format
msgid "Try '%s --help' or '%s --usage' for more information.\n"
msgstr "Viac informci zskate prkazom `%s --help'.\n"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, fuzzy, c-format
msgid "Report bugs to %s.\n"
msgstr ""
@@ -69,7 +69,7 @@ msgstr ""
"anglicky), pripomienky k prekladu zasielajte na adresu <sk@li.org> "
"(slovensky)."
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Neznma systmov chyba"
@@ -245,6 +245,11 @@ msgstr "chyba pri vyhadvan pomocou regulrneho vrazu"
msgid "memory exhausted"
msgstr "vyerpan pam"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr ""
+
#, fuzzy
#~ msgid "invalid argument %s for %s"
#~ msgstr "chybn argument %s pre `%s'"
diff --git a/gl/po/sl.po b/gl/po/sl.po
index 8c891f9f..c3366a2d 100644
--- a/gl/po/sl.po
+++ b/gl/po/sl.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\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"
@@ -48,29 +48,29 @@ msgstr ""
"Argumenti, navedeni kot obvezni ali neobvezni pri dolgi obliki izbire, so "
"obvezni ali neobvezni tudi pri vseh odgovarjajočih kratkih oblikah."
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr "Uporaba:"
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr " ali: "
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
msgstr " [IZBIRA...]"
-#: gl/lib/argp-help.c:1668
+#: gl/lib/argp-help.c:1670
#, 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"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, c-format
msgid "Report bugs to %s.\n"
msgstr "Poročila o napakah: %s\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Neznana sistemska napaka"
@@ -239,6 +239,11 @@ msgstr "Prejšnjega regularnega izraza ni"
msgid "memory exhausted"
msgstr "zmanjkalo pomnilnika"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr ""
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "neveljavni argument %s za %s"
diff --git a/gl/po/sr.po b/gl/po/sr.po
index 118e786e..5fb921ae 100644
--- a/gl/po/sr.po
+++ b/gl/po/sr.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnulib-3.0.0.6062.a6b16\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\n"
"PO-Revision-Date: 2013-11-17 16:47+0200\n"
"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian <(nothing)>\n"
@@ -46,29 +46,29 @@ msgstr ""
"Обавезни или опционални аргументи за дуге опције су такође обавезни или "
"опционални за све одговарајуће кратке опције."
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr "Употреба:"
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr " или: "
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
msgstr " [ОПЦИЈА...]"
-#: gl/lib/argp-help.c:1668
+#: gl/lib/argp-help.c:1670
#, fuzzy, c-format
msgid "Try '%s --help' or '%s --usage' for more information.\n"
msgstr "Покушајте „%s --help“ или „%s --usage“ за више података.\n"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, c-format
msgid "Report bugs to %s.\n"
msgstr "Грешке пријавите на %s.\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Непозната грешка система"
@@ -235,6 +235,11 @@ msgstr "Нема претходног регуларног израза"
msgid "memory exhausted"
msgstr "меморија је потрошена"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr ""
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "неисправан аргумент „%s“ за „%s“"
diff --git a/gl/po/sv.gmo b/gl/po/sv.gmo
index 046893d7..e081639c 100644
--- a/gl/po/sv.gmo
+++ b/gl/po/sv.gmo
Binary files differ
diff --git a/gl/po/sv.po b/gl/po/sv.po
index 11ccd1eb..6db0cefc 100644
--- a/gl/po/sv.po
+++ b/gl/po/sv.po
@@ -1,19 +1,19 @@
# Swedish messages for gnulib.
-# Copyright © 1997, 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
+# Copyright © 1997, 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011, 2019 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.
+# Göran Uddeborg <goeran@uddeborg.se>, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011, 2019.
#
-# $Revision: 1.10 $
+# $Revision: 1.14 $
#
msgid ""
msgstr ""
-"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n"
+"Project-Id-Version: gnulib 4.0.0.2567\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
-"PO-Revision-Date: 2011-08-22 19:16+0200\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\n"
+"PO-Revision-Date: 2019-05-21 10:41+0200\n"
"Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
"Language: sv\n"
@@ -51,31 +51,31 @@ msgstr ""
"Obligatoriska eller valfria argument till långa flaggor är obligatoriska "
"eller valfria även för motsvarande korta flaggor."
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr "Användning:"
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr " eller: "
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
msgstr " [FLAGGA...]"
-#: gl/lib/argp-help.c:1668
-#, fuzzy, c-format
+#: gl/lib/argp-help.c:1670
+#, 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"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, 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"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Okänt systemfel"
@@ -121,29 +121,29 @@ msgid "(PROGRAM ERROR) Option should have been recognized!?"
msgstr "(PROGRAMFEL) Flaggan borde ha känts igen!?"
#: gl/lib/getopt.c:278
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' is ambiguous\n"
-msgstr "%s: flaggan \"-W %s\" är tvetydig\n"
+msgstr "%s: flaggan ”%s%s” är tvetydig\n"
#: gl/lib/getopt.c:284
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' is ambiguous; possibilities:"
-msgstr "%s: flaggan ”%s” är tvetydig: möjligheter:"
+msgstr "%s: flaggan ”%s%s” är tvetydig: möjligheter:"
#: gl/lib/getopt.c:319
-#, fuzzy, c-format
+#, c-format
msgid "%s: unrecognized option '%s%s'\n"
-msgstr "%s: okänd flagga \"%c%s\"\n"
+msgstr "%s: okänd flagga ”%s%s”\n"
#: gl/lib/getopt.c:345
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' doesn't allow an argument\n"
-msgstr "%s: flaggan ”%c%s” tar inget argument\n"
+msgstr "%s: flaggan ”%s%s” tar inget argument\n"
#: gl/lib/getopt.c:360
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' requires an argument\n"
-msgstr "%s: flaggan ”--%s” kräver ett argument\n"
+msgstr "%s: flaggan ”%s%s” kräver ett argument\n"
#: gl/lib/getopt.c:621
#, c-format
@@ -194,9 +194,8 @@ msgid "Invalid back reference"
msgstr "Ogiltig bakåtreferens"
#: gl/lib/regcomp.c:156
-#, fuzzy
msgid "Unmatched [, [^, [:, [., or [="
-msgstr "Ensam [ eller [^"
+msgstr "Ensam [, [^, [:, [. eller [="
#: gl/lib/regcomp.c:159
msgid "Unmatched ( or \\("
@@ -242,6 +241,11 @@ msgstr "Inget föregående reguljärt uttryck"
msgid "memory exhausted"
msgstr "minnet slut"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr "standard filbeskrivare"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "felaktigt argument %s till %s"
@@ -251,8 +255,51 @@ msgstr "minnet slut"
#~ msgid "Valid arguments are:"
#~ msgstr "Giltiga argument är:"
-#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
-#~ msgstr "%.*s: ARGP_HELP_FMT parametern måste vara positiv"
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset-allokeringar, %u friade (%.2f%%).\n"
+
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset-mängder, %u cachade (%.2f%%)\n"
+
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset-återställningar, %u cachade (%.2f%%)\n"
+
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset-tester, %u cachade (%.2f%%)\n"
+
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset-listor\n"
+
+#~ msgid "count log histogram\n"
+#~ msgstr "antalsloggshistogram\n"
+
+#~ msgid "size log histogram\n"
+#~ msgstr "storleksloggshistogram\n"
+
+#~ msgid "density histogram\n"
+#~ msgstr "densitetshistogram\n"
+
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bitset-statistik:\n"
+#~ "\n"
+
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Ackumulerade körningar = %u\n"
+
+#~ msgid "cannot read stats file"
+#~ msgstr "kan inte läsa statistikfilen"
+
+#~ msgid "bad stats file size\n"
+#~ msgstr "felaktig storlek på statistikfil\n"
+
+#~ msgid "cannot write stats file"
+#~ msgstr "kan inte skriva statistikfilen"
+
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "kan inte öppna statistikfilen för skrivning"
#~ msgid "program error"
#~ msgstr "programfel"
@@ -281,29 +328,56 @@ msgstr "minnet slut"
#~ 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 "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 "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 reading %s"
+#~ msgstr "fel vid läsning av %s"
-#~ msgid "error writing \"%s\""
-#~ msgstr "fel vid skrivning 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 "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# compiler not found, try installing mono"
+#~ msgstr "C#-kompilator hittades inte, försök installera mono"
+
+#~ msgid "C# virtual machine not found, try installing mono"
+#~ msgstr "virtuell C#-maskinen hittades inte, försök installera mono"
+
+#~ msgid "unbalanced ["
+#~ msgstr "obalanserad ["
+
+#~ msgid "invalid character class"
+#~ msgstr "ogiltig teckenklass"
+
+#~ msgid "character class syntax is [[:space:]], not [:space:]"
+#~ msgstr "teckenklassyntaxen är [[:space:]], inte [:space:]"
+
+#~ msgid "unfinished \\ escape"
+#~ msgstr "oavslutad \\-sekvens"
+
+#~ msgid "invalid content of \\{\\}"
+#~ msgstr "ogiltigt innehåll i \\{\\}"
+
+#~ msgid "regular expression too big"
+#~ msgstr "för stort reguljärt uttryck"
+
+#~ msgid "unbalanced ("
+#~ msgstr "obalanserad ("
+
+#~ msgid "no syntax specified"
+#~ msgstr "ingen syntax angiven"
-#~ msgid "C# virtual machine not found, try installing pnet"
-#~ msgstr "virtuell C#-maskinen hittades inte, försök installera pnet"
+#~ msgid "unbalanced )"
+#~ msgstr "obalanserad )"
#~ msgid "%s subprocess failed"
#~ msgstr "%s-underprocess misslyckades"
@@ -317,21 +391,9 @@ msgstr "minnet slut"
#~ 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ö"
@@ -344,6 +406,51 @@ msgstr "minnet slut"
#~ msgid "typed memory object"
#~ msgstr "objekt av typat minne"
+#~ msgid "block special file"
+#~ msgstr "blockspecialfil"
+
+#~ msgid "character special file"
+#~ msgstr "teckenspecialfil"
+
+#~ msgid "contiguous data"
+#~ msgstr "sammanhängande data"
+
+#~ msgid "fifo"
+#~ msgstr "fifo"
+
+#~ msgid "door"
+#~ msgstr "dörr"
+
+#~ msgid "multiplexed block special file"
+#~ msgstr "multiplexad blockspecialfil"
+
+#~ msgid "multiplexed character special file"
+#~ msgstr "multiplexad teckenspecialfil"
+
+#~ msgid "multiplexed file"
+#~ msgstr "multiplexad fil"
+
+#~ msgid "named file"
+#~ msgstr "namngiven fil"
+
+#~ msgid "network special file"
+#~ msgstr "nätverksspecialfil"
+
+#~ msgid "migrated file with data"
+#~ msgstr "migrerad fil med data"
+
+#~ msgid "migrated file without data"
+#~ msgstr "migrerad fil utan data"
+
+#~ msgid "port"
+#~ msgstr "port"
+
+#~ msgid "socket"
+#~ msgstr "uttag (socket)"
+
+#~ msgid "whiteout"
+#~ msgstr "övertäckningsfil"
+
#~ msgid "weird file"
#~ msgstr "konstig fil"
@@ -404,18 +511,6 @@ msgstr "minnet slut"
#~ msgid "Unknown error"
#~ msgstr "Okänt fel"
-#~ msgid "%s: option '--%s' doesn't allow an argument\n"
-#~ msgstr "%s: flaggan ”--%s” tar inget argument\n"
-
-#~ msgid "%s: unrecognized option '--%s'\n"
-#~ msgstr "%s: okänd flagga \"--%s\"\n"
-
-#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
-#~ msgstr "%s: flaggan \"-W %s\" tar inget argument\n"
-
-#~ msgid "%s: option '-W %s' requires an argument\n"
-#~ msgstr "%s: flaggan ”-W %s” kräver ett argument\n"
-
#~ msgid "invalid source_version argument to compile_java_class"
#~ msgstr "ogiltigt source_version-argument till compile_java_class"
@@ -439,6 +534,9 @@ msgstr "minnet slut"
#~ msgid "%s subprocess I/O error"
#~ msgstr "%s-underprocess I/O-fel"
+#~ msgid "cannot stat %s"
+#~ msgstr "kan inte ta status på %s"
+
#~ msgid "cannot change permissions of %s"
#~ msgstr "kan inte ändra rättigheter på %s"
@@ -473,9 +571,6 @@ msgstr "minnet slut"
#~ 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 "”"
@@ -605,6 +700,18 @@ msgstr "minnet slut"
#~ msgid "Unknown signal %d"
#~ msgstr "Okänd signal %d"
+#~ msgid "Execution times (seconds)"
+#~ msgstr "Körtider (sekunder)"
+
+#~ msgid "CPU user"
+#~ msgstr "CPU användare"
+
+#~ msgid "CPU system"
+#~ msgstr "CPU system"
+
+#~ msgid "wall clock"
+#~ msgstr "väggklocka"
+
#~ msgid "iconv function not usable"
#~ msgstr "iconv-funktion inte användbar"
@@ -642,20 +749,14 @@ msgstr "minnet slut"
#~ msgstr "©"
#~ msgid ""
-#~ "\n"
-#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
-#~ "html>.\n"
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ "Licens GPLv3+: GNU GPL version 3 eller senare <%s>.\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"
@@ -721,11 +822,8 @@ msgstr "minnet slut"
#~ "%s, %s, %s, %s,\n"
#~ "%s, %s med flera.\n"
-#~ msgid ""
-#~ "\n"
-#~ "Report bugs to: %s\n"
+#~ msgid "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"
@@ -735,12 +833,8 @@ msgstr "minnet slut"
#~ 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 "General help using GNU software: <%s>\n"
+#~ msgstr "Allmän hjälp med att använda GNU-program: <%s>\n"
#~ msgid "_open_osfhandle failed"
#~ msgstr "_open_osfhandle misslyckades"
@@ -754,6 +848,9 @@ msgstr "minnet slut"
#~ msgid "%s subprocess got fatal signal %d"
#~ msgstr "%s-underprocess fick ödesdiger signal %d"
+#~ msgid "failed to set file descriptor text/binary mode"
+#~ msgstr "misslyckades att filbeskrivaren i text-/binärt läge"
+
#~ msgid "stdin"
#~ msgstr "standard in"
@@ -781,11 +878,11 @@ msgstr "minnet slut"
#~ 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 %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 "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"
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "%s%s-argumentet ”%s” är för stort"
diff --git a/gl/po/tr.po b/gl/po/tr.po
index 81b89611..22ae8f2c 100644
--- a/gl/po/tr.po
+++ b/gl/po/tr.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils 5.3.0\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\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"
@@ -51,25 +51,25 @@ msgstr ""
"Uzun seçenekler için zorunlu olan argümanlar kısa seçenekler için de "
"zorunludur.\n"
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr ""
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr ""
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
#, fuzzy
msgid " [OPTION...]"
msgstr "Kullanım: %s [SEÇENEK]...\n"
-#: gl/lib/argp-help.c:1668
+#: gl/lib/argp-help.c:1670
#, 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"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, fuzzy, c-format
msgid "Report bugs to %s.\n"
msgstr ""
@@ -77,7 +77,7 @@ msgstr ""
"Yazılım hatalarını <%s> adresine,\n"
"çeviri hatalarını <gnu-tr@belgeler.org> adresine bildirin.\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Bilinmeyen sistem hatası"
@@ -254,6 +254,11 @@ msgstr "düzenli ifade (regular expression) aramasında hata oluştu"
msgid "memory exhausted"
msgstr "bellek tükendi"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr ""
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "%s argümanı `%s' için geçersiz"
diff --git a/gl/po/uk.gmo b/gl/po/uk.gmo
index c4cf4246..900d70cd 100644
--- a/gl/po/uk.gmo
+++ b/gl/po/uk.gmo
Binary files differ
diff --git a/gl/po/uk.po b/gl/po/uk.po
index ab8336cb..cbefdeeb 100644
--- a/gl/po/uk.po
+++ b/gl/po/uk.po
@@ -3,15 +3,15 @@
# Copyright (C) 2010 Free Software Foundation, Inc.
#
# Sergey Poznyakoff <gray@gnu.org>, 2010.
-# Yuri Chornoivan <yurchor@ukr.net>, 2011.
+# Yuri Chornoivan <yurchor@ukr.net>, 2011, 2019.
msgid ""
msgstr ""
-"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n"
+"Project-Id-Version: gnulib 4.0.0.2567\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
-"PO-Revision-Date: 2011-08-22 09:50+0300\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\n"
+"PO-Revision-Date: 2019-05-19 14:26+0300\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
-"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
+"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
"Language: uk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,7 +19,7 @@ msgstr ""
"X-Bugs: Report translation errors to the Language-Team address.\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"
+"X-Generator: Lokalize 19.03.70\n"
#: gl/lib/argp-help.c:158
#, c-format
@@ -48,30 +48,29 @@ msgid ""
msgstr ""
"Аргументи, обов'язкові для довгих ключів, є обов'язковими й для коротких."
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr "Використання:"
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr " чи: "
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
msgstr " [ПАРАМЕТР...]"
-#: gl/lib/argp-help.c:1668
-#, fuzzy, c-format
+#: gl/lib/argp-help.c:1670
+#, c-format
msgid "Try '%s --help' or '%s --usage' for more information.\n"
-msgstr ""
-"Спробуйте `%s --help' або `%s --usage' для отримання докладнішого опису.\n"
+msgstr "Віддайте команду «%s --help» або «%s --usage», щоб дізнатися більше.\n"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, c-format
msgid "Report bugs to %s.\n"
msgstr "Про помилки звітуйте на <%s>.\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Невідома системна помилка"
@@ -117,29 +116,29 @@ msgid "(PROGRAM ERROR) Option should have been recognized!?"
msgstr "(ПОМИЛКА ПРОГРАМУВАННЯ) Параметр мала бути розпізнана!?"
#: gl/lib/getopt.c:278
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' is ambiguous\n"
-msgstr "%s: параметр '-W %s' неоднозначний\n"
+msgstr "%s: параметр «%s%s» не є однозначним\n"
#: gl/lib/getopt.c:284
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' is ambiguous; possibilities:"
-msgstr "%s: параметр «%s» є неоднозначним, можливі варіанти:"
+msgstr "%s: неоднозначний параметр «%s%s»; можливі варіанти:"
#: gl/lib/getopt.c:319
-#, fuzzy, c-format
+#, c-format
msgid "%s: unrecognized option '%s%s'\n"
-msgstr "%s: невідомий параметр '%c%s'\n"
+msgstr "%s: невідомий параметр «%s%s»\n"
#: gl/lib/getopt.c:345
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' doesn't allow an argument\n"
-msgstr "%s: параметр '%c%s' не може мати аргументу\n"
+msgstr "%s: додавання аргументів до параметра «%s%s» не передбачено\n"
#: gl/lib/getopt.c:360
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' requires an argument\n"
-msgstr "%s: для використання параметра «--%s» слід вказати аргумент\n"
+msgstr "%s: до параметра «%s%s» слід додати аргумент\n"
#: gl/lib/getopt.c:621
#, c-format
@@ -190,9 +189,8 @@ msgid "Invalid back reference"
msgstr "Недійсне зворотнє посилання"
#: gl/lib/regcomp.c:156
-#, fuzzy
msgid "Unmatched [, [^, [:, [., or [="
-msgstr "Незакрита [ або [^"
+msgstr "Вираз без парних [, [^, [:, [. або [="
#: gl/lib/regcomp.c:159
msgid "Unmatched ( or \\("
@@ -238,6 +236,11 @@ msgstr "Не вказано попереднього формального ви
msgid "memory exhausted"
msgstr "пам'ять вичерпано"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr "стандартні дескриптори файлів"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "некоректний аргумент %s для %s"
@@ -247,8 +250,51 @@ msgstr "пам'ять вичерпано"
#~ msgid "Valid arguments are:"
#~ msgstr "Дозволені аргументи такі:"
-#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
-#~ msgstr "%.*s: параметр ARGP_HELP_FMT має бути додатнім"
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs, %u звільнено (%.2f%%).\n"
+
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets, %u кешовано (%.2f%%)\n"
+
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets, %u кешовано (%.2f%%)\n"
+
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests, %u кешовано (%.2f%%)\n"
+
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
+
+#~ msgid "count log histogram\n"
+#~ msgstr "гістограма журналу лічильників\n"
+
+#~ msgid "size log histogram\n"
+#~ msgstr "гістограма журналу розміру\n"
+
+#~ msgid "density histogram\n"
+#~ msgstr "гістограма щільності\n"
+
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Статистика наборів бітів:\n"
+#~ "\n"
+
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Акумульовані запуски = %u\n"
+
+#~ msgid "cannot read stats file"
+#~ msgstr "не вдалося прочитати файл статистичних даних"
+
+#~ msgid "bad stats file size\n"
+#~ msgstr "помилковий розмір файла статистичних даних\n"
+
+#~ msgid "cannot write stats file"
+#~ msgstr "не вдалося записати файл статистичних даних."
+
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "не вдалося відкрити файл статистичних даних для запису"
#~ msgid "program error"
#~ msgstr "помилка програми"
@@ -278,29 +324,57 @@ msgstr "пам'ять вичерпано"
#~ msgid "preserving permissions for %s"
#~ msgstr "збереження прав доступу до %s"
-#~ msgid "error while opening \"%s\" for reading"
-#~ msgstr "помилка під час відкриття \"%s\" для читання"
+#~ msgid "error while opening %s for reading"
+#~ msgstr "помилка при відкриванні «%s» для читання"
-#~ msgid "cannot open backup file \"%s\" for writing"
-#~ msgstr "неможливо відкрити резервний файл \"%s\" для запису"
+#~ msgid "cannot open backup file %s for writing"
+#~ msgstr "не вдається відкрити резервний файл «%s» для запису"
-#~ msgid "error reading \"%s\""
-#~ msgstr "помилка читання \"%s\""
+#~ msgid "error reading %s"
+#~ msgstr "помилка читання %s"
-#~ msgid "error writing \"%s\""
-#~ msgstr "помилка запису \"%s\""
+#~ msgid "error writing %s"
+#~ msgstr "помилка запису %s"
-#~ msgid "error after reading \"%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# compiler not found, try installing mono"
+#~ msgstr "не знайдено компілятора C#, спробуйте встановити mono"
+
+#~ msgid "C# virtual machine not found, try installing mono"
+#~ msgstr "не знайдено віртуальної машини C#, спробуйте встановити mono"
+
+#~ msgid "unbalanced ["
+#~ msgstr "неврівноважена дужка ["
+
+#~ msgid "invalid character class"
+#~ msgstr "некоректний клас символів"
-#~ msgid "C# virtual machine not found, try installing pnet"
-#~ msgstr "не знайдено віртуальної машини C#, спробуйте встановити pnet"
+#~ msgid "character class syntax is [[:space:]], not [:space:]"
+#~ msgstr ""
+#~ "синтаксис класу символів є таким: [[:space:]], — а не таким: [:space:]"
+
+#~ msgid "unfinished \\ escape"
+#~ msgstr "незавершене екранування \\"
+
+#~ msgid "invalid content of \\{\\}"
+#~ msgstr "некоректний вміст \\{\\}"
+
+#~ msgid "regular expression too big"
+#~ msgstr "занадто об'ємний формальний вираз"
+
+#~ msgid "unbalanced ("
+#~ msgstr "неврівноважена дужка ("
+
+#~ msgid "no syntax specified"
+#~ msgstr "не вказано синтаксису"
+
+#~ msgid "unbalanced )"
+#~ msgstr "неврівноважена дужка )"
#~ msgid "%s subprocess failed"
#~ msgstr "нащадок %s зазнав невдачі"
@@ -314,21 +388,9 @@ 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 "черга повідомлень"
@@ -341,6 +403,51 @@ msgstr "пам'ять вичерпано"
#~ msgid "typed memory object"
#~ msgstr "типізований об'єкт пам'яті"
+#~ msgid "block special file"
+#~ msgstr "спеціальний блоковий файл"
+
+#~ msgid "character special file"
+#~ msgstr "спеціальний символьний файл"
+
+#~ msgid "contiguous data"
+#~ msgstr "неперервні дані"
+
+#~ msgid "fifo"
+#~ msgstr "fifo"
+
+#~ msgid "door"
+#~ msgstr "двері"
+
+#~ msgid "multiplexed block special file"
+#~ msgstr "спеціальний файл ущільненого блокового пристрою"
+
+#~ msgid "multiplexed character special file"
+#~ msgstr "спеціальний файл ущільненого символьного пристрою"
+
+#~ msgid "multiplexed file"
+#~ msgstr "ущільнений файл"
+
+#~ msgid "named file"
+#~ msgstr "іменований файл"
+
+#~ msgid "network special file"
+#~ msgstr "спеціальний файл мережі"
+
+#~ msgid "migrated file with data"
+#~ msgstr "перенесений файл з даними"
+
+#~ msgid "migrated file without data"
+#~ msgstr "перенесений файл без даних"
+
+#~ msgid "port"
+#~ msgstr "порт"
+
+#~ msgid "socket"
+#~ msgstr "гніздо"
+
+#~ msgid "whiteout"
+#~ msgstr "забілювання"
+
#~ msgid "weird file"
#~ msgstr "дивний файл"
@@ -401,18 +508,6 @@ msgstr "пам'ять вичерпано"
#~ msgid "Unknown error"
#~ msgstr "Невідома помилка"
-#~ msgid "%s: option '--%s' doesn't allow an argument\n"
-#~ msgstr "%s: параметр '--%s' не може мати аргументу\n"
-
-#~ msgid "%s: unrecognized option '--%s'\n"
-#~ msgstr "%s: невідомий параметр '--%s'\n"
-
-#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
-#~ msgstr "%s: параметр '-W %s' не може мати аргументу\n"
-
-#~ msgid "%s: option '-W %s' requires an argument\n"
-#~ msgstr "%s: для використання параметра «-W %s» слід вказати аргумент\n"
-
#~ msgid "invalid source_version argument to compile_java_class"
#~ msgstr "недійсне значення аргументу source_version для compile_java_class"
@@ -438,6 +533,9 @@ msgstr "пам'ять вичерпано"
#~ msgid "%s subprocess I/O error"
#~ msgstr "помилка вводу-виводу нащадка %s"
+#~ msgid "cannot stat %s"
+#~ msgstr "не вдалося отримати статистичні дані щодо %s"
+
#~ msgid "cannot change permissions of %s"
#~ msgstr "не вдається змінити права доступу до %s"
@@ -471,9 +569,6 @@ msgstr "пам'ять вичерпано"
#~ msgid "%s subprocess terminated with exit code %d"
#~ msgstr "підпроцес %s закінчився кодом %d"
-#~ msgid "Franc,ois Pinard"
-#~ msgstr "Franc,ois Pinard"
-
#~ msgid "`"
#~ msgstr "`"
@@ -603,6 +698,18 @@ msgstr "пам'ять вичерпано"
#~ msgid "Unknown signal %d"
#~ msgstr "Невідомий сигнал %d"
+#~ msgid "Execution times (seconds)"
+#~ msgstr "Час виконання (у секундах)"
+
+#~ msgid "CPU user"
+#~ msgstr "Користувач процесора"
+
+#~ msgid "CPU system"
+#~ msgstr "Система процесора"
+
+#~ msgid "wall clock"
+#~ msgstr "настінний годинник"
+
#~ msgid "iconv function not usable"
#~ msgstr "функція iconv непридатна до вжитку"
@@ -640,20 +747,16 @@ msgstr "пам'ять вичерпано"
#~ msgstr "©"
#~ msgid ""
-#~ "\n"
-#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
-#~ "html>.\n"
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
-#~ "Це вільне програмне забезпечення: ви можете змінювати та розповсюджувати "
+#~ "Умови ліцензування викладено у GPLv3+: GNU GPL версії 3 або новішій, <"
+#~ "%s>\n"
+#~ "Це вільне програмне забезпечення: ви можете вільно змінювати і поширювати "
#~ "його.\n"
-#~ "Не надається ЖОДНИХ ГАРАНТІЙ в межах дозволених законодавством.\n"
-#~ "\n"
+#~ "Вам не надається ЖОДНИХ ГАРАНТІЙ, окрім гарантій передбачених "
+#~ "законодавством.\n"
#~ msgid "Written by %s.\n"
#~ msgstr "Автор: %s.\n"
@@ -718,12 +821,8 @@ msgstr "пам'ять вичерпано"
#~ "%s, %s, %s, %s,\n"
#~ "%s, %s та інші.\n"
-#~ msgid ""
-#~ "\n"
-#~ "Report bugs to: %s\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Про помилки звітуйте на %s\n"
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr "Про помилки звітуйте на %s\n"
#~ msgid "Report %s bugs to: %s\n"
#~ msgstr "Про помилки у програмі %s звітуйте на %s\n"
@@ -731,13 +830,10 @@ msgstr "пам'ять вичерпано"
#~ 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"
+#~ msgid "General help using GNU software: <%s>\n"
#~ msgstr ""
-#~ "Загальна допомога щодо використання ПО GNU: <http://www.gnu.org/gethelp/"
-#~ ">\n"
+#~ "Загальна довідкова інформація щодо використання програмного забезпечення "
+#~ "GNU: <%s>\n"
#~ msgid "_open_osfhandle failed"
#~ msgstr "помилка _open_osfhandle"
@@ -751,6 +847,10 @@ msgstr "пам'ять вичерпано"
#~ msgid "%s subprocess got fatal signal %d"
#~ msgstr "підпроцес %s отримав фатальний сигнал %d"
+#~ msgid "failed to set file descriptor text/binary mode"
+#~ msgstr ""
+#~ "не вдалося встановити текстовий або двійковий режим для дескриптора файла"
+
#~ msgid "stdin"
#~ msgstr "stdin"
@@ -778,11 +878,32 @@ msgstr "пам'ять вичерпано"
#~ msgid "cannot perform formatted output"
#~ msgstr "неможливо здійснити форматований вивід"
-#~ msgid "invalid %s%s argument `%s'"
-#~ msgstr "некоректний аргумент для %s%s: `%s'"
+#~ 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 home page: <https://www.gnu.org/software/%s/>\n"
+#~ msgstr "Домашня сторінка %s: <https://www.gnu.org/software/%s/>\n"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
+#~ msgstr "%.*s: параметр ARGP_HELP_FMT має бути додатнім"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: параметр '--%s' не може мати аргументу\n"
-#~ msgid "invalid suffix in %s%s argument `%s'"
-#~ msgstr "некоректний суфікс в аргументі для %s%s: `%s'"
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: невідомий параметр '--%s'\n"
-#~ msgid "%s%s argument `%s' too large"
-#~ msgstr "завеликий аргумент для %s%s: `%s'"
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: параметр '-W %s' не може мати аргументу\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: для використання параметра «-W %s» слід вказати аргумент\n"
+
+#~ msgid "Franc,ois Pinard"
+#~ msgstr "Franc,ois Pinard"
diff --git a/gl/po/vi.po b/gl/po/vi.po
index 2de25570..9a310f81 100644
--- a/gl/po/vi.po
+++ b/gl/po/vi.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnulib-3.0.0.6062.a6b16\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\n"
"PO-Revision-Date: 2014-01-13 08:31+0700\n"
"Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
"Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
@@ -50,31 +50,31 @@ msgstr ""
"Các đối số là bắt buộc hay chỉ là tùy chọn khi dùng với tùy chọn dài thì tùy "
"chọn ngắn tương ứng cũng vậy."
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr "Cách dùng:"
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr " hoặc:"
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
msgstr " [TÙY_CHỌN...]"
-#: gl/lib/argp-help.c:1668
+#: gl/lib/argp-help.c:1670
#, fuzzy, c-format
msgid "Try '%s --help' or '%s --usage' for more information.\n"
msgstr ""
"Hãy chạy “%s --help” (trợ giúp) hay “%s --usage” (cách dùng) để xem thông "
"tin thêm.\n"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, c-format
msgid "Report bugs to %s.\n"
msgstr "Hãy thông báo lỗi cho %s.\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "Gặp lỗi hệ thống chưa biết"
@@ -241,6 +241,11 @@ msgstr "Không có biểu thức chính quy đi trước"
msgid "memory exhausted"
msgstr "hết bộ nhớ"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr ""
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "đối số không hợp lệ %s cho %s"
diff --git a/gl/po/zh_CN.po b/gl/po/zh_CN.po
index 102bbf9b..51ff7069 100644
--- a/gl/po/zh_CN.po
+++ b/gl/po/zh_CN.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnulib 2.0.0.3462.e9796\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\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"
@@ -49,29 +49,29 @@ msgstr ""
"选项完整形式所必须用的或是可选的参数,在使用选项缩写形式时也是必须的或是可选"
"的。"
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
msgstr "用法:"
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
msgstr " 或者: "
-#: gl/lib/argp-help.c:1641
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
msgstr "[选项...]"
-#: gl/lib/argp-help.c:1668
+#: gl/lib/argp-help.c:1670
#, fuzzy, c-format
msgid "Try '%s --help' or '%s --usage' for more information.\n"
msgstr "请尝试执行“%s --help”或“%s --usage”来获取更多信息。\n"
-#: gl/lib/argp-help.c:1696
+#: gl/lib/argp-help.c:1698
#, c-format
msgid "Report bugs to %s.\n"
msgstr "请向 %s 报告错误。\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
msgstr "未知的系统错误"
@@ -239,6 +239,11 @@ msgstr "没有前次正则表达式"
msgid "memory exhausted"
msgstr "内存用尽"
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr ""
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "%2$s 的参数 %1$s 无效"
diff --git a/gl/po/zh_TW.gmo b/gl/po/zh_TW.gmo
index 9260e73c..335aea61 100644
--- a/gl/po/zh_TW.gmo
+++ b/gl/po/zh_TW.gmo
Binary files differ
diff --git a/gl/po/zh_TW.po b/gl/po/zh_TW.po
index f7713d82..745d8a65 100644
--- a/gl/po/zh_TW.po
+++ b/gl/po/zh_TW.po
@@ -1,92 +1,90 @@
# traditional Chinese translation of coreutils.
# Copyright (C) 1998, 2002, 2005 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnulib package.
#
# # 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.
+# pan93412 <pan93412@gmail.com>, 2019.
#
msgid ""
msgstr ""
-"Project-Id-Version: coreutils 5.3.0\n"
+"Project-Id-Version: gnulib 4.0.0.2567\n"
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
-"POT-Creation-Date: 2019-01-05 11:52+0000\n"
-"PO-Revision-Date: 2005-07-02 04:13+0800\n"
-"Last-Translator: Abel Cheung <abelcheung@gmail.com>\n"
+"POT-Creation-Date: 2019-08-03 11:23+0100\n"
+"PO-Revision-Date: 2019-05-19 19:34+0800\n"
+"Last-Translator: pan93412 <pan93412@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"
+"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 2.2.1\n"
#: gl/lib/argp-help.c:158
#, c-format
msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
-msgstr ""
+msgstr "ARGP_HELP_FMT:%s 值小於或等於 %s"
#: gl/lib/argp-help.c:234
#, c-format
msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
-msgstr ""
+msgstr "%.*s:ARGP_HELP_FMT 參數需要一個值"
#: gl/lib/argp-help.c:244
#, c-format
msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
-msgstr ""
+msgstr "%.*s:未知 ARGP_HELP_FMT 參數"
#: gl/lib/argp-help.c:257
#, c-format
msgid "Garbage in ARGP_HELP_FMT: %s"
-msgstr ""
+msgstr "ARGP_HELP_FMT 中的廢棄內容:%s"
#: gl/lib/argp-help.c:1238
-#, fuzzy
msgid ""
"Mandatory or optional arguments to long options are also mandatory or "
"optional for any corresponding short options."
-msgstr "長選項必須用的參數在使用短選項時也是必須的。\n"
+msgstr "長選項所使用的參數,在相對應的短選項也必須使用。"
-#: gl/lib/argp-help.c:1625
+#: gl/lib/argp-help.c:1627
msgid "Usage:"
-msgstr ""
+msgstr "用法:"
-#: gl/lib/argp-help.c:1629
+#: gl/lib/argp-help.c:1631
msgid " or: "
-msgstr ""
+msgstr " 或:"
-#: gl/lib/argp-help.c:1641
-#, fuzzy
+#: gl/lib/argp-help.c:1643
msgid " [OPTION...]"
-msgstr "用法:%s [選項] [檔案]...\n"
+msgstr " [選項…]"
-#: gl/lib/argp-help.c:1668
-#, fuzzy, c-format
+#: gl/lib/argp-help.c:1670
+#, c-format
msgid "Try '%s --help' or '%s --usage' for more information.\n"
-msgstr "請嘗試執行‘%s --help’來獲取更多資訊。\n"
+msgstr "嘗試「%s --help」或「%s --usage」取得更多資訊。\n"
-#: gl/lib/argp-help.c:1696
-#, fuzzy, c-format
+#: gl/lib/argp-help.c:1698
+#, c-format
msgid "Report bugs to %s.\n"
-msgstr ""
-"\n"
-"請向 <%s> 回報錯誤。\n"
+msgstr "請向 %s 匯報錯誤。\n"
-#: gl/lib/argp-help.c:1896 gl/lib/error.c:195
+#: gl/lib/argp-help.c:1898 gl/lib/error.c:195
msgid "Unknown system error"
-msgstr "不明的系統錯誤"
+msgstr "未知系統錯誤"
#: gl/lib/argp-parse.c:91
msgid "give this help list"
-msgstr ""
+msgstr "提供此說明清單"
#: gl/lib/argp-parse.c:92
msgid "give a short usage message"
-msgstr ""
+msgstr "提供短用法訊息"
#: gl/lib/argp-parse.c:93
msgid "NAME"
@@ -94,312 +92,477 @@ msgstr "名稱"
#: gl/lib/argp-parse.c:94
msgid "set the program name"
-msgstr ""
+msgstr "設定程式名稱"
#: gl/lib/argp-parse.c:95
msgid "SECS"
-msgstr ""
+msgstr "秒"
#: gl/lib/argp-parse.c:96
msgid "hang for SECS seconds (default 3600)"
-msgstr ""
+msgstr "掛斷秒數(預設 3600)"
#: gl/lib/argp-parse.c:154
-#, fuzzy
msgid "print program version"
-msgstr "讀取時發生錯誤"
+msgstr "輸出程式版本"
#: gl/lib/argp-parse.c:171
msgid "(PROGRAM ERROR) No version known!?"
-msgstr ""
+msgstr "(程式錯誤)沒有已知版本?!"
#: gl/lib/argp-parse.c:624
-#, fuzzy, c-format
+#, c-format
msgid "%s: Too many arguments\n"
-msgstr "%s:找不到正確格式的 %s 總和檢查值"
+msgstr "%s:過多參數\n"
#: gl/lib/argp-parse.c:770
msgid "(PROGRAM ERROR) Option should have been recognized!?"
-msgstr ""
+msgstr "(程式錯誤)選項應該已被識別?!"
#: gl/lib/getopt.c:278
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' is ambiguous\n"
-msgstr "%s:選項‘%s’不明確\n"
+msgstr "%s:「%s%s」選項不明確\n"
#: gl/lib/getopt.c:284
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' is ambiguous; possibilities:"
-msgstr "%s:選項‘%s’不明確\n"
+msgstr "%s:「%s%s」選項不明確;可能是:"
#: gl/lib/getopt.c:319
-#, fuzzy, c-format
+#, c-format
msgid "%s: unrecognized option '%s%s'\n"
-msgstr "%s:無法識別的選項‘%c%s’\n"
+msgstr "%s:無法識別「%s%s」選項\n"
#: gl/lib/getopt.c:345
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' doesn't allow an argument\n"
-msgstr "%s:選項‘%c%s’不可配合參數使用\n"
+msgstr "%s:「%s%s」選項不接受參數\n"
#: gl/lib/getopt.c:360
-#, fuzzy, c-format
+#, c-format
msgid "%s: option '%s%s' requires an argument\n"
-msgstr "%s:選項‘%s’需要參數\n"
+msgstr "%s:「%s%s」選項需要參數\n"
#: gl/lib/getopt.c:621
-#, fuzzy, c-format
+#, c-format
msgid "%s: invalid option -- '%c'\n"
-msgstr "%s:無效的選項 ─ %c\n"
+msgstr "%s:無效選項 -- '%c'\n"
#: gl/lib/getopt.c:636 gl/lib/getopt.c:682
-#, fuzzy, c-format
+#, c-format
msgid "%s: option requires an argument -- '%c'\n"
-msgstr "%s:選項需要參數 ─ %c\n"
+msgstr "%s:選項需要參數 -- '%c'\n"
#: gl/lib/openat-die.c:38
-#, fuzzy, c-format
+#, c-format
msgid "unable to record current working directory"
-msgstr "無法建立目錄%s"
+msgstr "無法記錄目前工作目錄"
#: gl/lib/openat-die.c:57
-#, fuzzy, c-format
+#, c-format
msgid "failed to return to initial working directory"
-msgstr "無法建立目錄%s"
+msgstr "無法回到初始工作目錄"
#: gl/lib/regcomp.c:135
msgid "Success"
-msgstr ""
+msgstr "成功"
#: gl/lib/regcomp.c:138
msgid "No match"
-msgstr ""
+msgstr "無符合項目"
#: gl/lib/regcomp.c:141
-#, fuzzy
msgid "Invalid regular expression"
-msgstr "%s:無效的正規表示式:%s"
+msgstr "正規表示式無效"
#: gl/lib/regcomp.c:144
-#, fuzzy
msgid "Invalid collation character"
-msgstr "無效的字元種類‘%s’"
+msgstr "定序字元無效"
#: gl/lib/regcomp.c:147
-#, fuzzy
msgid "Invalid character class name"
-msgstr "無效的字元種類‘%s’"
+msgstr "字元類型名稱無效"
#: gl/lib/regcomp.c:150
msgid "Trailing backslash"
-msgstr ""
+msgstr "末尾反斜線"
#: gl/lib/regcomp.c:153
-#, fuzzy
msgid "Invalid back reference"
-msgstr "無效的類型‘%s’"
+msgstr "向後參考無效"
#: gl/lib/regcomp.c:156
msgid "Unmatched [, [^, [:, [., or [="
-msgstr ""
+msgstr "不對稱的 [、[^、[:、[. 或 [="
#: gl/lib/regcomp.c:159
msgid "Unmatched ( or \\("
-msgstr ""
+msgstr "不對稱的 ( 或 \\("
#: gl/lib/regcomp.c:162
msgid "Unmatched \\{"
-msgstr ""
+msgstr "不對稱的 \\{"
#: gl/lib/regcomp.c:165
msgid "Invalid content of \\{\\}"
-msgstr ""
+msgstr "\\{\\} 中內容無效"
#: gl/lib/regcomp.c:168
-#, fuzzy
msgid "Invalid range end"
-msgstr "無效的類型‘%s’"
+msgstr "結束範圍無效"
#: gl/lib/regcomp.c:171
-#, fuzzy
msgid "Memory exhausted"
-msgstr "記憶體耗盡"
+msgstr "記憶體用盡"
#: gl/lib/regcomp.c:174
-#, fuzzy
msgid "Invalid preceding regular expression"
-msgstr "%s:無效的正規表示式:%s"
+msgstr "前置正規表示式無效"
#: gl/lib/regcomp.c:177
-#, fuzzy
msgid "Premature end of regular expression"
-msgstr "在正規運算式搜尋時發生錯誤"
+msgstr "正規表示式過早結束"
#: gl/lib/regcomp.c:180
-#, fuzzy
msgid "Regular expression too big"
-msgstr "%s:無效的正規表示式:%s"
+msgstr "正規表示式過長"
#: gl/lib/regcomp.c:183
msgid "Unmatched ) or \\)"
-msgstr ""
+msgstr "不對稱的 ) 或 \\)"
#: gl/lib/regcomp.c:676
-#, fuzzy
msgid "No previous regular expression"
-msgstr "在正規運算式搜尋時發生錯誤"
+msgstr "沒有上一個正規表示式"
#: gl/lib/xalloc-die.c:34
msgid "memory exhausted"
-msgstr "記憶體耗盡"
+msgstr "記憶體用盡"
+
+#: gl/lib/xstdopen.c:34
+#, c-format
+msgid "standard file descriptors"
+msgstr "標準檔案描述符"
#~ msgid "invalid argument %s for %s"
-#~ msgstr "%2$s的參數%1$s無效"
+#~ msgstr "傳入 %2$s 之參數 %1$s 無效"
#~ msgid "ambiguous argument %s for %s"
-#~ msgstr "%2$s的參數%1$s不明確"
+#~ msgstr "傳入 %2$s 之參數 %1$s 不明確"
#~ msgid "Valid arguments are:"
#~ msgstr "有效的參數為:"
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs,已釋放 %u (%.2f%%)。\n"
+
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets,已快取 %u (%.2f%%)\n"
+
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets,已快取 %u (%.2f%%)\n"
+
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests,%u 已快取 (%.2f%%)\n"
+
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
+
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bitset 統計:\n"
+#~ "\n"
+
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "累積執行次數 = %u\n"
+
+#~ msgid "cannot read stats file"
+#~ msgstr "無法讀取統計檔案"
+
+#~ msgid "bad stats file size\n"
+#~ msgstr "統計檔案大小無效\n"
+
+#~ msgid "cannot write stats file"
+#~ msgstr "無法寫入統計檔案"
+
+#~ msgid "cannot open stats file for writing"
+#~ 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 "寫入時發生錯誤"
-#, fuzzy
-#~ msgid "error while opening \"%s\" for reading"
-#~ msgstr "無法開啟 %s 來讀取資料"
+#~ msgid "preserving permissions for %s"
+#~ msgstr "正在保留 %s 的權限"
-#, fuzzy
-#~ msgid "cannot open backup file \"%s\" for writing"
-#~ msgstr "無法開啟%s來讀取資料"
+#~ msgid "error while opening %s for reading"
+#~ msgstr "開啟 %s 讀取時發生錯誤"
-#, fuzzy
-#~ msgid "error reading \"%s\""
+#~ msgid "cannot open backup file %s for writing"
+#~ msgstr "無法開啟備份檔 %s 寫入"
+
+#~ msgid "error reading %s"
#~ msgstr "讀取 %s 時發生錯誤"
-#, fuzzy
-#~ msgid "error writing \"%s\""
+#~ msgid "error writing %s"
#~ msgstr "寫入 %s 時發生錯誤"
-#, fuzzy
-#~ msgid "error after reading \"%s\""
-#~ msgstr "讀取 %s 時發生錯誤"
+#~ msgid "error after reading %s"
+#~ msgstr "讀取 %s 後發生錯誤"
-#, fuzzy
#~ msgid "fdopen() failed"
-#~ msgstr "開啟時發生錯誤"
+#~ msgstr "fdopen() 失敗"
+
+#~ msgid "C# compiler not found, try installing mono"
+#~ msgstr "未找到 C# 編譯器,嘗試安裝 mono"
+
+#~ msgid "C# virtual machine not found, try installing mono"
+#~ msgstr "未找到 C# 虛擬機,嘗試安裝 mono"
+
+#~ msgid "unbalanced ["
+#~ msgstr "不對稱的 ["
+
+#~ msgid "invalid character class"
+#~ msgstr "字元類型無效"
+
+#~ msgid "character class syntax is [[:space:]], not [:space:]"
+#~ msgstr "字元類型語法為 [[:space:]] 而非 [:space:]"
+
+#~ msgid "unfinished \\ escape"
+#~ msgstr "未完成的 \\ 跳脫字元"
+
+#~ msgid "invalid content of \\{\\}"
+#~ msgstr "\\{\\} 的內容無效"
+
+#~ msgid "regular expression too big"
+#~ msgstr "正規表示式過長"
+
+#~ msgid "unbalanced ("
+#~ msgstr "不對稱的 ("
+
+#~ msgid "no syntax specified"
+#~ msgstr "未指定語法"
+
+#~ msgid "unbalanced )"
+#~ msgstr "不對稱的 )"
-#, fuzzy
#~ msgid "%s subprocess failed"
-#~ msgstr "關閉時發生錯誤"
+#~ msgstr "%s 子執行程序執行失敗"
#~ msgid "regular empty file"
-#~ msgstr "普通空白檔案"
+#~ msgstr "一般空白檔案"
#~ msgid "regular file"
-#~ msgstr "普通檔案"
+#~ msgstr "一般檔案"
#~ msgid "directory"
#~ msgstr "目錄"
+#~ msgid "symbolic link"
+#~ msgstr "符號連結"
+
+#~ msgid "message queue"
+#~ msgstr "訊息佇列"
+
+#~ msgid "semaphore"
+#~ msgstr "旗號"
+
+#~ msgid "shared memory object"
+#~ msgstr "共用記憶體物件"
+
+#~ msgid "typed memory object"
+#~ msgstr "具類型記憶體物件"
+
#~ msgid "block special file"
#~ msgstr "區塊特殊檔案"
#~ msgid "character special file"
#~ msgstr "字元特殊檔案"
+#~ msgid "contiguous data"
+#~ msgstr "連續資料"
+
#~ msgid "fifo"
#~ msgstr "fifo"
-#~ msgid "symbolic link"
-#~ msgstr "符號連結"
+#~ msgid "door"
+#~ msgstr "門 (door)"
-#~ msgid "socket"
-#~ msgstr "socket"
+#~ msgid "multiplexed block special file"
+#~ msgstr "多工區塊特殊檔"
-#~ msgid "message queue"
-#~ msgstr "訊息佇列"
+#~ msgid "multiplexed character special file"
+#~ msgstr "多工字元特殊檔"
-#~ msgid "semaphore"
-#~ msgstr "semaphore"
+#~ msgid "multiplexed file"
+#~ msgstr "多工檔案"
-#~ msgid "shared memory object"
-#~ msgstr "共用記憶體物件"
+#~ msgid "named file"
+#~ msgstr "命名檔案"
-#, fuzzy
-#~ msgid "typed memory object"
-#~ msgstr "共用記憶體物件"
+#~ msgid "network special file"
+#~ msgstr "網路特殊檔案"
+
+#~ msgid "migrated file with data"
+#~ msgstr "移轉檔(含資料)"
+
+#~ msgid "migrated file without data"
+#~ msgstr "移轉檔(不含資料)"
+
+#~ msgid "port"
+#~ msgstr "連線埠"
+
+#~ msgid "socket"
+#~ msgstr "socket"
+
+#~ msgid "whiteout"
+#~ msgstr "whiteout"
#~ msgid "weird file"
-#~ msgstr "不正常的檔案"
+#~ msgstr "不正常檔案"
-#, fuzzy
#~ msgid "Address family for hostname not supported"
-#~ msgstr "不支援 FIFO 檔案"
+#~ 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 "解析名稱時發生無法復原錯誤"
-#, fuzzy
#~ msgid "ai_family not supported"
-#~ msgstr "不支援 FIFO 檔案"
+#~ 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)"
-#, fuzzy
#~ msgid "ai_socktype not supported"
-#~ msgstr "不支援 FIFO 檔案"
+#~ msgstr "不支援 ai_socktype"
-#, fuzzy
#~ msgid "System error"
-#~ msgstr "寫入時發生錯誤"
+#~ msgstr "系統錯誤"
-#, fuzzy
-#~ msgid "Unknown error"
-#~ msgstr "不明的系統錯誤"
+#~ msgid "Argument buffer too small"
+#~ msgstr "參數緩衝區過小"
-#~ msgid "%s: option `--%s' doesn't allow an argument\n"
-#~ msgstr "%s:選項‘--%s’不可配合參數使用\n"
+#~ msgid "Processing request in progress"
+#~ msgstr "正在處理請求"
-#~ msgid "%s: unrecognized option `--%s'\n"
-#~ msgstr "%s:無法識別的選項‘--%s’\n"
+#~ msgid "Request canceled"
+#~ msgstr "已取消請求"
-#~ msgid "%s: illegal option -- %c\n"
-#~ msgstr "%s:不合法的選項 ─ %c\n"
+#~ msgid "Request not canceled"
+#~ msgstr "未取消請求"
-#~ msgid "%s: option `-W %s' is ambiguous\n"
-#~ msgstr "%s:選項‘-W %s’不明確\n"
+#~ msgid "All requests done"
+#~ msgstr "所有請求完成"
-#~ msgid "%s: option `-W %s' doesn't allow an argument\n"
-#~ msgstr "%s:選項‘-W %s’不可配合參數使用\n"
+#~ msgid "Interrupted by a signal"
+#~ msgstr "遭信號中止"
-#, fuzzy
-#~ msgid "block size"
-#~ msgstr "區塊特殊檔案"
+#~ msgid "Parameter string not correctly encoded"
+#~ msgstr "未正確編碼參數字串"
-#~ msgid "%s exists but is not a directory"
-#~ msgstr "%s已存在但不是目錄"
+#~ msgid "Unknown error"
+#~ msgstr "未知錯誤"
-#~ msgid "cannot change owner and/or group of %s"
-#~ msgstr "無法更改%s的擁有者和/或所屬群組"
+#~ msgid "invalid source_version argument to compile_java_class"
+#~ msgstr "傳入 compile_java_class 的 source_version 參數無效"
-#~ msgid "cannot create directory %s"
-#~ msgstr "無法建立目錄%s"
+#~ msgid "invalid target_version argument to compile_java_class"
+#~ msgstr "傳入 compile_java_class 的 target_version 參數無效"
-#~ msgid "cannot chdir to directory %s"
-#~ msgstr "無法進入%s目錄"
+#~ 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 stat %s"
+#~ msgstr "無法取得 %s 的資訊"
#~ msgid "cannot change permissions of %s"
-#~ msgstr "無法更改%s的權限"
+#~ msgstr "無法變更 %s 的權限"
+
+#~ msgid "cannot create directory %s"
+#~ msgstr "無法建立 %s 目錄"
-#, fuzzy
#~ msgid "Failed to open /dev/zero for read"
-#~ msgstr "%s:無法開啟來寫入資料"
+#~ msgstr "無法開啟 /dev/zero 讀取"
-#, fuzzy
-#~ msgid "cannot create pipe"
-#~ msgstr "無法建立 %s 鏈結"
+#~ 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 "`"
-#~ msgstr "‘"
+#~ msgstr "「"
#~ msgid "'"
-#~ msgstr "’"
+#~ msgstr "」"
#~ msgid "^[yY]"
#~ msgstr "^[yY]"
@@ -407,14 +570,143 @@ msgstr "記憶體耗盡"
#~ 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 "虛擬計時器過期"
+
+#~ 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 "寫入已關閉管線或 socket 時發生錯誤"
+
+#~ msgid "cannot create pipe"
+#~ msgstr "無法建立管線"
+
+#~ msgid "Real-time signal %d"
+#~ msgstr "即時信號 %d"
+
+#~ msgid "Unknown signal %d"
+#~ msgstr "未知信號 %d"
+
+#~ msgid "Execution times (seconds)"
+#~ msgstr "執行次數(秒)"
+
+#~ msgid "CPU user"
+#~ msgstr "CPU 使用者"
+
+#~ msgid "CPU system"
+#~ msgstr "CPU 系統"
+
+#~ msgid "wall clock"
+#~ msgstr "掛鐘"
+
#~ msgid "iconv function not usable"
-#~ msgstr "iconv 功能無法使用"
+#~ msgstr "iconv 功能沒有用"
#~ msgid "iconv function not available"
-#~ msgstr "iconv 功能不存在"
+#~ msgstr "iconv 功能不能使用"
#~ msgid "character out of range"
-#~ msgstr "字元值超出可接受的範圍以外"
+#~ msgstr "字元超出範圍"
#~ msgid "cannot convert U+%04X to local character set"
#~ msgstr "無法將 U+%04X 轉換至使用者的字元集"
@@ -423,26 +715,34 @@ msgstr "記憶體耗盡"
#~ msgstr "無法將 U+%04X 轉換至使用者的字元集:%s"
#~ msgid "invalid user"
-#~ msgstr "無效的使用者"
+#~ msgstr "使用者無效"
#~ msgid "invalid group"
-#~ msgstr "無效的群組"
+#~ msgstr "群組無效"
-#~ msgid "cannot get the login group of a numeric UID"
-#~ msgstr "無法取得 UID 數值所代表的登入群組"
+#~ 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)"
-#, 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"
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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 ""
-#~ "本程式是自由軟體;你可以根據 Free Software Foundation 所公佈的 GNU\n"
-#~ "General Public License 第二版或(自由選擇)較新的版本中的條款去重新\n"
-#~ "散佈及/或修改本軟體。\n"
+#~ "GPLv3+ 授權:GNU GPL 第三版或更新版本 <%s>。\n"
+#~ "此為自由軟體:您能自由變更及重散佈。\n"
+#~ "在法律所允許的範圍之內「沒有任何保證」。\n"
#~ "\n"
#~ msgid "Written by %s.\n"
@@ -452,51 +752,51 @@ msgstr "記憶體耗盡"
#~ msgstr "由 %s 和 %s 編寫。\n"
#~ msgid "Written by %s, %s, and %s.\n"
-#~ msgstr "由 %s, %s 和 %s 編寫。\n"
+#~ msgstr "由 %s、%s 和 %s 編寫。\n"
#~ msgid ""
#~ "Written by %s, %s, %s,\n"
#~ "and %s.\n"
#~ msgstr ""
-#~ "由 %s, %s, %s\n"
+#~ "由 %s、%s、%s\n"
#~ "和 %s 編寫。\n"
#~ msgid ""
#~ "Written by %s, %s, %s,\n"
#~ "%s, and %s.\n"
#~ msgstr ""
-#~ "由 %s, %s, %s,\n"
+#~ "由 %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"
+#~ "由 %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"
+#~ "由 %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"
+#~ "由 %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、%s、%s、%s、\n"
+#~ "%s、%s、%s、%s\n"
#~ "和 %s 編寫。\n"
#~ msgid ""
@@ -504,15 +804,117 @@ msgstr "記憶體耗盡"
#~ "%s, %s, %s, %s,\n"
#~ "%s, %s, and others.\n"
#~ msgstr ""
-#~ "由 %s, %s, %s, %s,\n"
-#~ "%s, %s, %s, %s\n"
-#~ "和 %s 等等編寫。\n"
+#~ "由 %s、%s、%s、%s、\n"
+#~ "%s、%s、%s、%s\n"
+#~ "和 %s 等人編寫。\n"
+
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr "匯報錯誤至:%s\n"
+
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr "請將 %s 的臭蟲匯報至:%s\n"
+
+#~ msgid "%s home page: <%s>\n"
+#~ msgstr "%s 首頁:<%s>\n"
+
+#~ msgid "General help using GNU software: <%s>\n"
+#~ msgstr "使用 GNU 軟體的一般說明:<%s>\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 "failed to set file descriptor text/binary mode"
+#~ msgstr "無法將檔案描述符設定成文字 / 二進位模式"
+
+#~ 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 "字串比較出現錯誤"
+#~ msgstr "比較字串失敗"
#~ msgid "Set LC_ALL='C' to work around the problem."
-#~ msgstr "請設定 LC_ALL='C' 避免問題出現。"
+#~ msgstr "請設定 LC_ALL='C' 避免此問題發生。"
#~ msgid "The strings compared were %s and %s."
-#~ msgstr "要比較的字串為%s及%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 home page: <https://www.gnu.org/software/%s/>\n"
+#~ msgstr "%s 首頁:<https://www.gnu.org/software/%s/>\n"
+
+#~ msgid "%s: option `--%s' doesn't allow an argument\n"
+#~ msgstr "%s:選項‘--%s’不可配合參數使用\n"
+
+#~ msgid "%s: unrecognized option `--%s'\n"
+#~ msgstr "%s:無法識別的選項‘--%s’\n"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s:不合法的選項 ─ %c\n"
+
+#~ msgid "%s: option `-W %s' is ambiguous\n"
+#~ msgstr "%s:選項‘-W %s’不明確\n"
+
+#~ msgid "%s: option `-W %s' doesn't allow an argument\n"
+#~ msgstr "%s:選項‘-W %s’不可配合參數使用\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 chdir to directory %s"
+#~ msgstr "無法進入%s目錄"
+
+#~ 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"