diff options
author | Colin Watson <cjwatson@debian.org> | 2019-08-03 12:15:34 +0100 |
---|---|---|
committer | Colin Watson <cjwatson@debian.org> | 2019-08-03 12:15:34 +0100 |
commit | f22ec2853f6ea2123dc4a1fee566a828e8d86bc6 (patch) | |
tree | b4d8e7309d6d25acee9b3a94f6e07acb209daacd /gl | |
parent | 182141146d0ad9c735949840504bdfc66332da4e (diff) | |
parent | 74d8f72dc1ca9620d3e8e1ae2ed9b19047ba348f (diff) |
Import man-db_2.8.6.orig.tar.xz
Diffstat (limited to 'gl')
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 Binary files differindex ca402813..f8852fe3 100644 --- a/gl/po/bg.gmo +++ b/gl/po/bg.gmo 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 Binary files differindex 35348b90..20e9216d 100644 --- a/gl/po/de.gmo +++ b/gl/po/de.gmo 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 Binary files differindex 9d9a7e57..d08ffb1d 100644 --- a/gl/po/eo.gmo +++ b/gl/po/eo.gmo 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 Binary files differindex 67246f3c..b51d6ae1 100644 --- a/gl/po/fr.gmo +++ b/gl/po/fr.gmo 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 Binary files differindex 04903cb2..7f098688 100644 --- a/gl/po/it.gmo +++ b/gl/po/it.gmo 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 Binary files differindex 45cd10e0..045aeed9 100644 --- a/gl/po/nl.gmo +++ b/gl/po/nl.gmo 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 Binary files differindex 849c43c9..e65ecb7c 100644 --- a/gl/po/pl.gmo +++ b/gl/po/pl.gmo 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 Binary files differindex 9448afa5..bc00ead4 100644 --- a/gl/po/pt.gmo +++ b/gl/po/pt.gmo 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 Binary files differindex 22bbca16..0cbf6aeb 100644 --- a/gl/po/pt_BR.gmo +++ b/gl/po/pt_BR.gmo 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 Binary files differindex 9973fdd3..a244dfe7 100644 --- a/gl/po/ru.gmo +++ b/gl/po/ru.gmo 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 Binary files differindex 046893d7..e081639c 100644 --- a/gl/po/sv.gmo +++ b/gl/po/sv.gmo 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 Binary files differindex c4cf4246..900d70cd 100644 --- a/gl/po/uk.gmo +++ b/gl/po/uk.gmo 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 Binary files differindex 9260e73c..335aea61 100644 --- a/gl/po/zh_TW.gmo +++ b/gl/po/zh_TW.gmo 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" |