aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MakeTAGS13
-rw-r--r--Makerules9
-rw-r--r--config.make.in1
-rw-r--r--configure.in2
-rw-r--r--elf/dl-load.c42
-rw-r--r--elf/dl-lookup.c19
-rw-r--r--elf/dl-reloc.c4
-rw-r--r--elf/dl-runtime.c4
-rw-r--r--elf/dl-symbol.c2
-rw-r--r--elf/dlsym.c2
-rw-r--r--elf/link.h14
-rw-r--r--elf/rtld.c4
-rw-r--r--manual/examples/strdupa.c19
-rw-r--r--manual/libc.texinfo9
-rw-r--r--manual/nss.texi586
-rw-r--r--manual/nsswitch.texi16
-rw-r--r--manual/string.texi77
-rw-r--r--manual/users.texi18
-rw-r--r--nss/nsswitch.c2
-rw-r--r--po/SYS_libc.pot1378
-rw-r--r--po/header.pot1
-rw-r--r--shadow/sgetspent_r.c2
-rw-r--r--stdlib/strtod.c2
-rw-r--r--string/strdup.c4
-rw-r--r--sysdeps/alpha/dl-machine.h4
-rw-r--r--sysdeps/i386/dl-machine.h10
-rw-r--r--sysdeps/m68k/dl-machine.h18
-rw-r--r--sysdeps/mips/dl-machine.h2
-rw-r--r--sysdeps/unix/sysv/linux/i386/clone.S1
-rw-r--r--sysdeps/unix/sysv/linux/m68k/clone.S75
30 files changed, 2080 insertions, 260 deletions
diff --git a/MakeTAGS b/MakeTAGS
index 10b837c9cb..0416493489 100644
--- a/MakeTAGS
+++ b/MakeTAGS
@@ -132,8 +132,8 @@ endif
define extract
@rm -f $@.new
-$(XGETTEXT) --keyword=_ --keyword=N_ --add-comments=TRANS --sort-output -d - \
- $(XGETTEXTFLAGS-$(@F)) > $@.new $^
+$(XGETTEXT) --keyword=_ --keyword=N_ --add-comments=TRANS --sort-output \
+ --omit-header -n -d - $(XGETTEXTFLAGS-$(@F)) > $@.new $^
mv -f $@.new $@
endef
@@ -146,15 +146,12 @@ else
endif
$P/siglist.pot: $(common-objpfx)siglist.c; $(extract)
-$P/errlist.pot: $(..)sysdeps/gnu/errlist.c; $(extract)
-# Extract all strings from these files; their strings are not marked.
+# Extract all strings from this file; its strings are not marked.
# Their surroundings are also not interesting.
XGETTEXTFLAGS-siglist.pot = -a --no-location
-XGETTEXTFLAGS-errlist.pot = -a --no-location
-all-pot = $P/libc-top.pot $P/subdirs.pot \
- $P/siglist.pot $P/errlist.pot
+all-pot = $P/libc-top.pot $P/subdirs.pot $P/siglist.pot
ifndef subdir
# Collect all the subdir messages, massaging the file names in comments
@@ -173,7 +170,7 @@ $P/SYS_libc.pot: $(all-pot)
@rm -f $@.new
sed -e 's/VERSION/$(version)/' -e "s/DATE/`date +'%Y-%m-%d %k:%M'`/" \
po/header.pot > $@.new
- $(XGETTEXT) -d - -n -s --omit-header $^ >> $@.new
+ $(XGETTEXT) -d - --omit-header -n -s $^ >> $@.new
mv -f $@.new $@
test ! -d CVS || cvs ci -m'Regenerated from source files' $@
diff --git a/Makerules b/Makerules
index 14f5b5b54b..f82408146a 100644
--- a/Makerules
+++ b/Makerules
@@ -454,9 +454,10 @@ endef
object-suffixes-left := $(object-suffixes)
include $(o-iterator)
define do-ar
+topdir=`cd $(..).; pwd`; \
$(patsubst %,cd %;,$(objdir)) \
-$(AUTOLOCK) ${O%-lib}.lck $(AR) cru$(verbose) ${O%-lib} \
- $(patsubst $(objpfx)%,%,$^)
+$$topdir/autolock.sh ${O%-lib}.lck $(AR) cru$(verbose) ${O%-lib} \
+ $(patsubst $(objpfx)%,%,$^)
rm -f $@
touch $@
endef
@@ -474,7 +475,9 @@ define o-iterator-doit
$(common-objpfx)$(patsubst %,$(libtype$o),c)($(ar-symtab-name)): \
$(common-objpfx)$(patsubst %,$(libtype$o),c)(\
$(patsubst $(objpfx)%,%,$(o-objects))) $(subdirs-stamp-o); \
- $(AUTOLOCK) $$(common-objpfx)$$(patsubst %,$$(libtype$o),c).lck \
+ topdir=`cd $(..).; pwd`; \
+ $$$$topdir/autolock.sh \
+ $$(common-objpfx)$$(patsubst %,$$(libtype$o),c).lck \
$$(RANLIB) $$(common-objpfx)$$(patsubst %,$$(libtype$o),c)
endef
ifndef subdir
diff --git a/config.make.in b/config.make.in
index a496e29f0d..b099199c36 100644
--- a/config.make.in
+++ b/config.make.in
@@ -34,7 +34,6 @@ CC = @CC@
BUILD_CC = @BUILD_CC@
CFLAGS = @CFLAGS@
AR = @AR@
-AUTOLOCK = @AUTOLOCK@
RANLIB = @RANLIB@
AS = $(CC) -c
diff --git a/configure.in b/configure.in
index aebc785904..631a035e92 100644
--- a/configure.in
+++ b/configure.in
@@ -308,8 +308,6 @@ fi
AC_PROG_CPP
AC_CHECK_TOOL(AR, ar)
AC_CHECK_TOOL(RANLIB, ranlib, :)
-AUTOLOCK="`(cd $srcdir; pwd)`/autolock.sh"
-AC_SUBST(AUTOLOCK)
AC_CACHE_CHECK(for signed size_t type, libc_cv_signed_size_t, [dnl
echo '#include <stddef.h>
diff --git a/elf/dl-load.c b/elf/dl-load.c
index 8ccc838b2b..6fd6a6cbe0 100644
--- a/elf/dl-load.c
+++ b/elf/dl-load.c
@@ -70,11 +70,25 @@ int _dl_zerofd = -1;
size_t _dl_pagesize;
+/* Local version of `strdup' function. */
+static inline char *
+local_strdup (const char *s)
+{
+ size_t len = strlen (s) + 1;
+ void *new = malloc (len);
+
+ if (new == NULL)
+ return NULL;
+
+ return (char *) memcpy (new, s, len);
+}
+
+
/* Map in the shared object NAME, actually located in REALNAME, and already
opened on FD. */
struct link_map *
-_dl_map_object_from_fd (const char *name, int fd, char *realname,
+_dl_map_object_from_fd (char *name, int fd, char *realname,
struct link_map *loader, int l_type)
{
struct link_map *l = NULL;
@@ -96,6 +110,7 @@ _dl_map_object_from_fd (const char *name, int fd, char *realname,
l->l_next->l_prev = l->l_prev;
free (l);
}
+ free (name);
free (realname);
_dl_signal_error (code, name, msg);
}
@@ -142,6 +157,7 @@ _dl_map_object_from_fd (const char *name, int fd, char *realname,
/* The object is already loaded.
Just bump its reference count and return it. */
__close (fd);
+ free (name);
free (realname);
++l->l_opencount;
return l;
@@ -524,11 +540,8 @@ _dl_map_object (struct link_map *loader, const char *name, int type)
fd = __open (cached, O_RDONLY);
if (fd != -1)
{
- size_t cl = strlen (cached) + 1;
- realname = malloc (cl);
- if (realname)
- memcpy (realname, cached, cl);
- else
+ realname = local_strdup (cached);
+ if (realname == NULL)
{
__close (fd);
fd = -1;
@@ -548,11 +561,8 @@ _dl_map_object (struct link_map *loader, const char *name, int type)
fd = __open (name, O_RDONLY);
if (fd != -1)
{
- size_t len = strlen (name) + 1;
- realname = malloc (len);
- if (realname)
- memcpy (realname, name, len);
- else
+ realname = local_strdup (name);
+ if (realname == NULL)
{
__close (fd);
fd = -1;
@@ -560,6 +570,16 @@ _dl_map_object (struct link_map *loader, const char *name, int type)
}
}
+ if (fd != -1)
+ {
+ name = local_strdup (name);
+ if (name == NULL)
+ {
+ __close (fd);
+ fd = -1;
+ }
+ }
+
if (fd == -1)
_dl_signal_error (errno, name, "cannot open shared object file");
diff --git a/elf/dl-lookup.c b/elf/dl-lookup.c
index 44f91fca7d..e57887bfdd 100644
--- a/elf/dl-lookup.c
+++ b/elf/dl-lookup.c
@@ -45,16 +45,16 @@ _dl_elf_hash (const char *name)
}
/* Search loaded objects' symbol tables for a definition of the symbol
- UNDEF_NAME. The chosen value can't be RELOC_ADDR. If NOPLT is nonzero,
- then a PLT entry cannot satisfy the reference; some different binding
- must be found. */
+ UNDEF_NAME. FLAGS is a set of flags. If DL_LOOKUP_NOEXEC is set,
+ then don't search the executable for a definition; this used for
+ copy relocs. If DL_LOOKUP_NOPLT is set, then a PLT entry cannot
+ satisfy the reference; some different binding must be found. */
ElfW(Addr)
_dl_lookup_symbol (const char *undef_name, const ElfW(Sym) **ref,
struct link_map *symbol_scope[],
const char *reference_name,
- ElfW(Addr) reloc_addr,
- int noplt)
+ int flags)
{
const unsigned long int hash = _dl_elf_hash (undef_name);
struct
@@ -75,6 +75,10 @@ _dl_lookup_symbol (const char *undef_name, const ElfW(Sym) **ref,
map = (*scope)->l_searchlist[i];
+ /* Don't search the executable when resolving a copy reloc. */
+ if (flags & DL_LOOKUP_NOEXEC && map->l_type == lt_executable)
+ continue;
+
symtab = ((void *) map->l_addr + map->l_info[DT_SYMTAB]->d_un.d_ptr);
strtab = ((void *) map->l_addr + map->l_info[DT_STRTAB]->d_un.d_ptr);
@@ -87,9 +91,8 @@ _dl_lookup_symbol (const char *undef_name, const ElfW(Sym) **ref,
const ElfW(Sym) *sym = &symtab[symidx];
if (sym->st_value == 0 || /* No value. */
- /* Cannot resolve to the location being filled in. */
- reloc_addr == map->l_addr + sym->st_value ||
- (noplt && sym->st_shndx == SHN_UNDEF)) /* Reject PLT. */
+ ((flags & DL_LOOKUP_NOPLT) != 0 /* Reject PLT entry. */
+ && sym->st_shndx == SHN_UNDEF))
continue;
switch (ELFW(ST_TYPE) (sym->st_info))
diff --git a/elf/dl-reloc.c b/elf/dl-reloc.c
index 5adf0f6dac..fa424a4d01 100644
--- a/elf/dl-reloc.c
+++ b/elf/dl-reloc.c
@@ -57,9 +57,9 @@ _dl_relocate_object (struct link_map *l, struct link_map *scope[], int lazy)
= ((void *) l->l_addr + l->l_info[DT_STRTAB]->d_un.d_ptr);
/* This macro is used as a callback from the ELF_DYNAMIC_RELOCATE code. */
-#define RESOLVE(ref, reloc_addr, noplt) \
+#define RESOLVE(ref, flags) \
(_dl_lookup_symbol (strtab + (*ref)->st_name, ref, scope, \
- l->l_name, reloc_addr, noplt))
+ l->l_name, flags))
#include "dynamic-link.h"
ELF_DYNAMIC_RELOCATE (l, lazy);
diff --git a/elf/dl-runtime.c b/elf/dl-runtime.c
index 16e037914b..4e7b5296d4 100644
--- a/elf/dl-runtime.c
+++ b/elf/dl-runtime.c
@@ -122,9 +122,9 @@ fixup (
{
/* This macro is used as a callback from the elf_machine_relplt code. */
-#define RESOLVE(ref, reloc_addr, noplt) \
+#define RESOLVE(ref, flags) \
(_dl_lookup_symbol (strtab + (*ref)->st_name, ref, scope, \
- l->l_name, reloc_addr, noplt))
+ l->l_name, flags))
#include "dynamic-link.h"
/* Perform the specified relocation. */
diff --git a/elf/dl-symbol.c b/elf/dl-symbol.c
index 7977e69ab6..04dd122ef1 100644
--- a/elf/dl-symbol.c
+++ b/elf/dl-symbol.c
@@ -28,6 +28,6 @@ _dl_symbol_value (struct link_map *map, const char *name)
ElfW(Addr) loadbase;
const ElfW(Sym) *ref = NULL;
struct link_map *scope[2] = { map, NULL };
- loadbase = _dl_lookup_symbol (name, &ref, scope, map->l_name, 0, 0);
+ loadbase = _dl_lookup_symbol (name, &ref, scope, map->l_name, 0);
return loadbase + ref->st_value;
}
diff --git a/elf/dlsym.c b/elf/dlsym.c
index 256eba800e..98e36290c2 100644
--- a/elf/dlsym.c
+++ b/elf/dlsym.c
@@ -44,7 +44,7 @@ dlsym (void *handle, const char *name)
scope = &(_dl_global_scope ?: _dl_default_scope)[2];
owner = NULL;
}
- loadbase = _dl_lookup_symbol (name, &ref, scope, owner, 0, 0);
+ loadbase = _dl_lookup_symbol (name, &ref, scope, owner, 0);
}
return _dlerror_run (doit) ? NULL : (void *) (loadbase + ref->st_value);
diff --git a/elf/link.h b/elf/link.h
index fa96613478..a9637000e5 100644
--- a/elf/link.h
+++ b/elf/link.h
@@ -224,16 +224,18 @@ extern void _dl_close (struct link_map *map);
null-terminated list of object scopes to search; each object's
l_searchlist (i.e. the segment of the dependency tree starting at that
object) is searched in turn. REFERENCE_NAME should name the object
- containing the reference; it is used in error messages. RELOC_ADDR is
- the address being fixed up and the chosen symbol cannot be one with this
- value. If NOPLT is nonzero, then the reference must not be resolved to
- a PLT entry. */
+ containing the reference; it is used in error messages. FLAGS is a
+ set of flags: */
+#define DL_LOOKUP_NOEXEC 1 /* Don't search the executable for a
+ definition; this is used for copy
+ relocs. */
+#define DL_LOOKUP_NOPLT 2 /* The reference must not be resolved
+ to a PLT entry. */
extern ElfW(Addr) _dl_lookup_symbol (const char *undef,
const ElfW(Sym) **sym,
struct link_map *symbol_scope[],
const char *reference_name,
- ElfW(Addr) reloc_addr,
- int noplt);
+ int flags);
/* Look up symbol NAME in MAP's scope and return its run-time address. */
extern ElfW(Addr) _dl_symbol_value (struct link_map *map, const char *name);
diff --git a/elf/rtld.c b/elf/rtld.c
index fe5d269de2..308c2f4d6d 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -62,7 +62,7 @@ _dl_start (void *arg)
/* This #define produces dynamic linking inline functions for
bootstrap relocation instead of general-purpose relocation. */
#define RTLD_BOOTSTRAP
-#define RESOLVE(sym, reloc_addr, noplt) bootstrap_map.l_addr
+#define RESOLVE(sym, flags) bootstrap_map.l_addr
#include "dynamic-link.h"
/* Figure out the run-time load address of the dynamic linker itself. */
@@ -369,7 +369,7 @@ of this helper program; chances are you did not intend to run this program.\n",
const ElfW(Sym) *ref = NULL;
ElfW(Addr) loadbase = _dl_lookup_symbol (_dl_argv[i], &ref,
&_dl_default_scope[2],
- "argument", 0, 0);
+ "argument", 0);
char buf[20], *bp;
buf[sizeof buf - 1] = '\0';
bp = _itoa (ref->st_value, &buf[sizeof buf - 1], 16, 0);
diff --git a/manual/examples/strdupa.c b/manual/examples/strdupa.c
new file mode 100644
index 0000000000..7d6ef39947
--- /dev/null
+++ b/manual/examples/strdupa.c
@@ -0,0 +1,19 @@
+#include <paths.h>
+#include <string.h>
+#include <stdio.h>
+
+const char path[] = _PATH_STDPATH;
+
+int
+main (void)
+{
+ char *wr_path = strdupa (path);
+ char *cp = strtok (wr_path, ":");
+
+ while (cp != NULL)
+ {
+ puts (cp);
+ cp = strtok (NULL, ":");
+ }
+ return 0;
+}
diff --git a/manual/libc.texinfo b/manual/libc.texinfo
index 7a8c1c3327..8622e04fcb 100644
--- a/manual/libc.texinfo
+++ b/manual/libc.texinfo
@@ -137,6 +137,7 @@ of the GNU C Library.
* Process Startup:: Writing the beginning and end of your program.
* Processes:: How to create processes and run other programs.
* Job Control:: All about process groups and sessions.
+* Name Service Switch:: Accessing the various system databases.
* Users and Groups:: How users are identified and classified.
* System Information:: Getting information about the
hardware and software configuration
@@ -806,6 +807,13 @@ Functions for Job Control
* Process Group Functions:: Functions for manipulating process groups.
* Terminal Access Functions:: Functions for controlling terminal access.
+Name Service Switch
+
+* NSS Basics:: What is this NSS good for.
+* NSS Configuration File:: Configuring NSS.
+* NSS Module Internals:: How does it work internally.
+* Extending NSS:: What to do to add services or databases.
+
Users and Groups
* User and Group IDs:: Each user and group has a unique numeric ID.
@@ -961,6 +969,7 @@ Porting the GNU C Library
@include startup.texi
@include process.texi
@include job.texi
+@include nss.texi
@include users.texi
@include sysinfo.texi
@include conf.texi
diff --git a/manual/nss.texi b/manual/nss.texi
new file mode 100644
index 0000000000..cd1f4af0ec
--- /dev/null
+++ b/manual/nss.texi
@@ -0,0 +1,586 @@
+@c each section should have index entries corresponding to the section title
+
+@node Name Service Switch
+@chapter System Databases and Name Service Switch
+
+Various functions in the C Library need to be configured to work
+correctly in the local environment. Traditionally, this was done by
+using files (e.g., @file{/etc/passwd}), but other nameservices (line the
+Network Information Service (NIS) and the Domain Name Service (DNS))
+became popular, and were hacked into the C library, usually with a fixed
+search order @pxref{frobnicate, frobnicate, ,jargon}.
+
+The GNU C Library contains a cleaner solution of this problem. It is
+designed after a method used by Sun Microsystems in the C library of
+@w{Solaris 2}. GNU C Library follows their name and calls this
+scheme @dfn{Name Service Switch} (NSS).
+
+Though the interface might be similar to Sun's version there is no
+common code. We never saw any source code of Sun's implementation and
+so the internal interface are incompatible. This is also manifest in the
+file names we use as we will see later.
+
+
+@menu
+* NSS Basics:: What is this NSS good for.
+* NSS Configuration File:: Configuring NSS.
+* NSS Module Internals:: How does it work internally.
+* Extending NSS:: What to do to add services or databases.
+@end menu
+
+@node NSS Basics, NSS Configuration File, Name Service Switch, Name Service Switch
+@section NSS Basics
+
+The basic idea is to put the implementation of the different services
+offered to access the databases in separate modules. This has some
+advantages:
+
+@enumerate
+@item
+Contributors can add new services without adding them to GNU C Library.
+@item
+The modules can be updated separately.
+@item
+The C library image is smaller.
+@end enumerate
+
+To fulfill the first goal above the ABI of the modules will be described
+below. For getting the implementation of a new service right it is
+important to understand how the functions in the modules get called.
+They are in no way designed to be used by the programmer directly.
+Instead the programmer should only use the documented and standardized
+functions to access the databases.
+
+@noindent
+The databases available in the NSS are
+
+@cindex ethers
+@cindex group
+@cindex hosts
+@cindex network
+@cindex protocols
+@cindex passwd
+@cindex rpc
+@cindex services
+@cindex shadow
+@vtable @code
+@item ethers
+Ethernet numbers,
+@comment @pxref{Ethernet Numbers}.
+@item group
+Groups of users, @pxref{Group Database}.
+@item hosts
+Host names and numbers, @pxref{Host Names}.
+@item network
+Network names and numbers, @pxref{Networks Database}.
+@item protocols
+Network protocols, @pxref{Protocols Database}.
+@item passwd
+User passwords, @pxref{User Database}.
+@item rpc
+Remote procedure call names and numbers,
+@comment @pxref{RPC Database}.
+@item services
+Network services, @pxref{Services Database}.
+@item shadow
+Shadow user passwords,
+@comment @pxref{Shadow Password Database}.
+@end vtable
+
+@noindent
+There will be some more added later (@code{aliases}, @code{automount},
+@code{bootparams}, @code{netgroup}, @code{netmasks}, and
+@code{publickey}).
+
+@node NSS Configuration File, NSS Module Internals, NSS Basics, Name Service Switch
+@section The NSS Configuration File
+
+@cindex @file{/etc/nsswitch.conf}
+@cindex @file{nsswitch.conf}
+Somehow the NSS code must be told about the wishes of the user. For
+this reason there is the file @file{/etc/nsswitch.conf}. For each
+database this file contain a specification how the lookup process should
+work. The file could look like this:
+
+@example
+@include nsswitch.texi
+@end example
+
+The first column is the database as you can guess from the table above.
+The rest of the line specifies how the lookup process works. Please
+note that you specify the way it works for each database individually.
+This cannot be done with the old way of a monolithic implementation.
+
+The configuration specification for each database can contain two
+different items:
+
+@itemize @bullet
+@item
+the service specification like @code{files}, @code{db}, or @code{nis}.
+@item
+the reaction on lookup result line @code{[NOTFOUND=return]}.
+@end itemize
+
+@menu
+* Services in the NSS configuration:: Service names in the NSS configuratin.
+* Actions in the NSS configuration:: React approprite on the lookup result.
+* Notes on NSS Configuration File:: Things to take care about while
+ configuring NSS.
+@end menu
+
+@node Services in the NSS configuration, Actions in the NSS configuration, NSS Configuration File, NSS Configuration File
+@subsection Services in the NSS configuration File
+
+The above example file mentions four different services: @code{files},
+@code{db}, @code{nis}, and @code{nisplus}. This does not mean these
+services are available on all sites and it does also not mean these are
+all the services which will ever be available.
+
+In fact, these names are simply strings which the NSS code uses to find
+the implicitly addressed functions. The internal interface will be
+described later. Visible to the user are the modules which implement an
+individual service.
+
+Assume the service @var{name} shall be used for a lookup. The code for
+this service is implemented in a module called @file{libnss_@var{name}}.
+On a system supporting shared libraries this is in fact a shared library
+with the name (for example) @file{libnss_@var{name}.so.1}. The number
+at the end is the currently used version of the interface which will not
+change frequently. Normally the user should not have to be cognizant of
+these files since they should be placed in a directory where they are
+found automatically. Only the names of all available services are
+important.
+
+@node Actions in the NSS configuration, Notes on NSS Configuration File, Services in the NSS configuration, NSS Configuration File
+@subsection Actions in the NSS configuration
+
+The second item in the specification gives the user much finer control
+on the lookup process. Action items are placed between two service
+names and are written within brackets. The general form is
+
+@smallexample
+[ @r{(}!@r{?} @var{status} = @var{action}@r{)+} ]
+@end smallexample
+
+@noindent
+where
+
+@smallexample
+@var{status} @result{} success | notfound | unavail | tryagain
+@var{action} @result{} return | continue
+@end smallexample
+
+The case of the keywords is insignificant. The @var{status}
+values are the results of a call to a lookup function of a specific
+service. They mean
+
+@ftable @samp
+@item success
+No error occured an the wanted entry is returned. The default action
+for this is @code{return}.
+
+@item notfound
+The lookup process works ok but the needed value was not found. The
+default action is @code{continue}.
+
+@item unavail
+@cindex DNS server unavailable
+The service is permanently unavailable. This can either mean the needed
+file is not available, or, for DNS, the server is not available or does
+not allow queries. The default action is @code{continue}.
+
+@item tryagain
+The service is temporarily unavailable. This could mean a file is
+locked or a server currently cannot accept more connections. The
+default action is @code{continue}.
+@end ftable
+
+@noindent
+If we have a line like
+
+@smallexample
+ethers: nisplus [NOTFOUND=return] db files
+@end smallexample
+
+@noindent
+this is equivalent to
+
+@smallexample
+ethers: nisplus [SUCCESS=return NOTFOUND=return UNAVAIL=continue
+ TRYAGAIN=continue]
+ db [SUCCESS=return NOTFOUND=continue UNAVAIL=continue
+ TRYAGAIN=continue]
+ files
+@end smallexample
+
+@noindent
+(except that it would have to be written on one line). The default
+value for the actions are normally what you want, and only need to be
+changed in exceptional cases.
+
+If the optional @code{!} is placed before the @var{status} this means
+the following action is used for all statii but @var{status} itself.
+I.e., @code{!} is negation as in the C language (and others).
+
+Before we explain the exception which makes this action item necessary
+one more remark: obviously it makes no sense to add another action
+item after the @code{files} service. Since there is no other service
+following the action @emph{always} is @code{return}.
+
+@cindex nisplus, and completeness
+Now, why is this @code{[NOTFOUND=return]} action useful? To understand
+this we should know that the @code{nisplus} service is often
+complete; i.e., if an entry is not available in the NIS+ tables it is
+not available anywhere else. This is what is expressed by this action
+item: it is useless to examine further services since they will not give
+us a result.
+
+@cindex nisplus, and booting
+@cindex bootstrapping, and services
+The situation would be different if the NIS+ service is not available
+because the machine is booting. In this case the return value of the
+lookup function is not @code{notfound} but instead @code{unavail}. And
+as you can see in the complete form above: in this situation the
+@code{db} and @code{files} services are used. Neat, isn't it? The
+system administrator need not pay special care for the time the system
+is not completely ready to work (while booting or shutdown or
+network problems).
+
+
+@node Notes on NSS Configuration File, , Actions in the NSS configuration, NSS Configuration File
+@subsection Notes on the NSS Configuration File
+
+Finally a few more hints. The NSS implementation is not completely
+helpless if @file{/etc/nsswitch.conf} does not exist. For
+all supported databases there is a default value so it should normally
+be possible to get the system running even if the file is corrupted or
+missing.
+
+A second point is that the user should try to optimize the lookup
+process. The different service have different response times. A simple
+file look up on a local file could be fast, but if the file is long and the
+needed entry is near the end of the file this may take quite some time.
+In this case it might be better to use the @code{db} service which
+allows fast local access to large data sets.
+
+Often the situation is that some global information like NIS must be
+used. So it is unavoidable to use service entries like @code{nis} etc.
+But one should avoid slow services like this if possible.
+
+
+@node NSS Module Internals, Extending NSS, NSS Configuration File, Name Service Switch
+@section NSS Module Internals
+
+Now it is time to described how the modules look like. The functions
+contained in a module are identified by their names. I.e., there is no
+jump table or the like. How this is done is of no interest here; those
+interested in this topic should read about Dynamic Linking.
+@comment @ref{Dynamic Linking}.
+
+
+@menu
+* NSS Module Names:: Construction of the interface function of
+ the NSS modules.
+* NSS Modules Interface:: Programming interface in the NSS module
+ functions.
+@end menu
+
+@node NSS Module Names, NSS Modules Interface, NSS Module Internals, NSS Module Internals
+@subsection The Naming Scheme of the NSS Modules
+
+@noindent
+The name of each function consist of various parts:
+
+@quotation
+ _nss_@var{service}_@var{function}
+@end quotation
+
+@var{service} of course corresponds to the name of the module this
+function is found in.@footnote{Now you might ask why to duplicate this
+information. The answer is that we want to keep the possibility to link
+directly with these shared objects.} The @var{function} part is derived
+from the interface function in the C library itself. If the user calls
+the function @code{gethostbyname} and the service used is @code{files}
+the function
+
+@smallexample
+ _nss_files_gethostbyname_r
+@end smallexample
+
+@noindent
+in the module
+
+@smallexample
+ libnss_files.so.1
+@end smallexample
+
+@noindent
+@cindex reentrant NSS functions
+is used. You see, what is explained above in not the whole truth. In
+fact the NSS modules only contain reentrant versions of the lookup
+functions. I.e., if the user would call the @code{gethostbyname_r}
+function this also would end in the above function. For all user
+interface functions the C library maps this call to a call to the
+reentrant function. For reentrant functions this is trivial since the
+interface is (nearly) the same. For the non-reentrant version pointers
+to static buffers are used to replace the user supplied buffers.
+
+I.e., the reentrant functions @emph{can} have counterparts. No service
+module is forced to have functions for all databases and all kinds to
+access them. If a function is not available it is simply treated as if
+the function would return @code{unavail}
+(@pxref{Actions in the NSS configuration}).
+
+
+@node NSS Modules Interface, , NSS Module Names, NSS Module Internals
+@subsection The Interface of the Function in NSS Modules
+
+Now we know about the functions contained in the modules. It is now
+time to describe the types. When we mentioned the reentrant versions of
+the functions above, this means there are some additional arguments
+(compared with the standard, non-reentrant version). The prototypes for
+the non-reentrant and reentrant versions of our function above are:
+
+@smallexample
+struct hostent *gethostbyname (const char *name)
+
+struct hostent *gethostbyname_r (const char *name,
+ struct hostent *result_buf, char *buf,
+ int buflen, int *h_errnop)
+@end smallexample
+
+@noindent
+The actual prototype of the function is the NSS modules in this case is
+
+@smallexample
+int _nss_files_gethostbyname_r (const char *name,
+ struct hostent *result_buf, char *buf,
+ int buflen, int *h_errnop)
+@end smallexample
+
+I.e., the interface function is in fact the reentrant function with
+the change of the return value. While the user-level function returns a
+pointer to the result the reentrant function return an @code{int} value:
+
+@cindex NSS_STATUS_TRYAGAIN
+@cindex NSS_STATUS_UNAVAIL
+@cindex NSS_STATUS_NOTFOUND
+@cindex NSS_STATUS_SUCCESS
+@ftable @code
+@item NSS_STATUS_TRYAGAIN
+numeric value @code{-2}
+
+@item NSS_STATUS_UNAVAIL
+numeric value @code{-1}
+
+@item NSS_STATUS_NOTFOUND
+numeric value @code{0}
+
+@item NSS_STATUS_SUCCESS
+numeric value @code{1}
+@end ftable
+
+@noindent
+Now you see where the action items of the @file{/etc/nsswitch.conf} file
+are used.
+
+The above function has somthing special which is missing for almost all
+the other module functions. There is an argument @var{h_errnop}. This
+points to a variable which will be filled with the error code in case
+the execution of the function fails for some reason. The reentrant
+function cannot use the global variable @var{h_errno};
+@code{gethostbyname} calls @code{gethostbyname_r} with the
+last argument set to @code{&h_errno}.
+
+The @code{get@var{XXX}by@var{YYY}} functions are the most important
+functions in the NSS modules. But there are others which implement
+the other ways to access system databases (say for the
+password database, there are @code{setpwent}, @code{getpwent}, and
+@code{endpwent}). These will be described in more detail later.
+Here we give a general way to determine the
+signature of the module function:
+
+@itemize @bullet
+@item
+the return value is @code{int};
+@item
+the name is as explain in @pxref{NSS Module Names};
+@item
+the first arguments are identical to the arguments of the non-reentrant
+function;
+@item
+the next three arguments are:
+
+@table @code
+@item STRUCT_TYPE result_buf
+pointer to buffer where the result is stored. @code{STRUCT_TYPE} is
+normally a struct which corresponds to the database.
+@item char *buffer
+pointer to a buffer where the function can store additional adata for
+the result etc.
+@item int buflen
+length of the buffer pointed to by @var{buffer}.
+@end table
+
+@item
+possibly a last argument @var{h_errnop}, for the host name and network
+name lookup functions.
+@end itemize
+
+@noindent
+This table is correct for all functions but the @code{set@dots{}ent}
+and @code{end@dots{}ent} functions.
+
+
+@node Extending NSS, , NSS Module Internals, Name Service Switch
+@section Extending NSS
+
+One of the advantages of NSS mentioned above is that it can be extended
+quite easily. There are two ways in which the extension can happen:
+adding another database or adding another service. The former is
+normally done only by the C library developers. It is
+here only important to remember that adding another database is
+independent from adding another service because a service need not
+support all databases or lookup functions.
+
+A designer/implementor of a new service is therefore free to choose the
+databases s/he is interested in and leave the rest for later (or
+completely aside).
+
+@menu
+* Adding another Service to NSS:: What is to do to add a new service.
+* NSS Module Function Internals:: Guidelines for writing new NSS
+ service functions.
+@end menu
+
+@node Adding another Service to NSS, NSS Module Function Internals, Extending NSS, Extending NSS
+@subsection Adding another Service to NSS
+
+The sources for a new service need not (and should not) be part of the
+GNU C Library itself. The developer retains complete control over the
+sources and its development. The links between the C library and the
+new service module consists solely of the interface functions.
+
+Each module is designed following a specific interface specification.
+For now the version is 1 and this manifests in the version number of the
+shared library object of the NSS modules: they have the extension
+@code{.1}. If the interface ever changes in an incompatible way,
+this number will be increased---hopefully this will never be necessary.
+Modules using the old interface will still be usable.
+
+Developers of a new service will have to make sure that their module is
+created using the correct interface number. This means the file itself
+must have the correct name and on ElF systems the @dfn{soname} (Shared
+Object Name) must also have this number. Building a module from a bunch
+of object files on an ELF system using GNU CC could be done like this:
+
+@smallexample
+gcc -shared -o libnss_NAME.so.1 -Wl,-soname,libnss_NAME.so.1 OBJECTS
+@end smallexample
+
+@noindent
+@ref{Link Options, Options for Linking, , gcc, GNU CC}, to learn
+more about this command line.
+
+To use the new module the library must be able to find it. This can be
+achieved by using options for the dynamic linker so that it will search
+directory where the binary is placed. For an ELF system this could be
+done by adding the wanted directory to the value of
+@code{LD_LIBRARY_PATH}.
+
+But this is not always possible since some program (those which run
+under IDs which do not belong to the user) ignore this variable.
+Therefore the stable version of the module should be placed into a
+directory which is searched by the dynamic linker. Normally this should
+be the directory @file{$prefix/lib}, where @file{$prefix} corresponds to
+the value given to configure using the @code{--prefix} option. But be
+careful: this should only be done if it is clear the module does not
+cause any harm. System administrators should be careful.
+
+
+@node NSS Module Function Internals, , Adding another Service to NSS, Extending NSS
+@subsection Internals of the NSS Module Functions
+
+Until now we only provided the syntactic interface for the functions in
+the NSS module. In fact there is not more much we can tell since the
+implementation obviously is different for each function. But a few
+general rules must be followed by all functions.
+
+In fact there are four kinds of different functions which may appear in
+the interface. All derive from the traditional ones for system databases.
+@var{db} in the following table is normally an abbreviation for the
+database (e.g., it is @code{pw} for the password database).
+
+@table @code
+@item int _nss_@var{database}_set@var{db}ent (void)
+This function prepares the service for following operations. For a
+simple file based lookup this means files could be opened, for other
+services this function simply is a noop.
+
+One special case for this function is that it takes an additional
+argument for some @var{database}s (i.e., the interface is
+@code{int set@var{db}ent (int)}). @ref{Host Names}, which describes the
+@code{sethostent} function.
+
+The return value should be @var{NSS_STATUS_SUCCESS} or according to the
+table above in case of an error (@pxref{NSS Modules Interface}).
+
+@item int _nss_@var{database}_end@var{db}ent (void)
+This function simply closes all files which are still open or removes
+buffer caches. If there are no files or buffers to remove this is again
+a simple noop.
+
+There normally is no return value different to @var{NSS_STATUS_SUCCESS}.
+
+@item int _nss_@var{database}_get@var{db}ent_r (@var{STRUCTURE} *result, char *buffer, int buflen)
+Since this function will be called several times in a row to retrieve
+one entry after the other it must keep some kind of state. But this
+also means the functions are not really reentrant. They are reentrant
+only in that simultaneous calls to this function will not try to
+write the retrieved data in the same place (as it would be the case for
+the non-reentrant functions); instead, it writes to the structure
+pointed to by the @var{result} parameter. But the calls share a common
+state and in the case of a file access this means they return neighboring
+entries in the file.
+
+The buffer of length @var{buflen} pointed to by @var{buffer} can be used
+for storing some additional data for the result. It is @emph{not}
+guaranteed that the same buffer will be passed for the next call of this
+function. Therefore one must not misuse this buffer to save some state
+information from one call to another.
+
+As explained above this function could also have an additional last
+argument. This depends on the database used; it happens only for
+@code{host} and @code{network}.
+
+The function shall return @code{NSS_STATUS_SUCCESS} as long as their are
+more entries. When the last entry was read it should return
+@code{NSS_STATUS_NOTFOUND}. When the buffer given as an argument is too
+small for the data to be returned @code{NSS_STATUS_TRYAGAIN} should be
+returned. When the service was not formerly initialized by a call to
+@code{_nss_@var{DATABASE}_set@var{db}ent} all return value allowed for
+this function can also be returned here.
+
+@item int _nss_@var{DATABASE}_get@var{db}by@var{XX}_r (@var{PARAMS}, @var{STRUCTURE} *result, char *buffer, int buflen)
+This function shall return the entry from the database which is
+addressed by the @var{PARAMS}. The type and number of these arguments
+vary. It must be individually determined by looking to the user-level
+interface functions. All arguments given to the non-reentrant version
+are here described by @var{PARAMS}.
+
+The result must be stored in the structure pointed to by @var{result}.
+If there is additional data to return (say strings, where the
+@var{result} structure only contains pointers) the function must use the
+@var{buffer} or length @var{buflen}. There must not be any references
+to non-constant global data.
+
+The implementation of this function should honour the @var{stayopen}
+flag set by the @code{set@var{DB}ent} function whenever this makes sense.
+
+Again, this function takes an additional last argument for the
+@code{host} and @code{network} database.
+
+The return value should as always follow the rules given above
+(@pxref{NSS Modules Interface}).
+
+@end table
diff --git a/manual/nsswitch.texi b/manual/nsswitch.texi
new file mode 100644
index 0000000000..62e7f607d1
--- /dev/null
+++ b/manual/nsswitch.texi
@@ -0,0 +1,16 @@
+# /etc/nsswitch.conf
+#
+# Name Service Switch configuration file.
+#
+
+passwd: db files nis
+shadow: files
+group: db files nis
+
+hosts: files nisplus nis dns
+networks: nisplus [NOTFOUND=return] files
+
+ethers: nisplus [NOTFOUND=return] db files
+protocols: nisplus [NOTFOUND=return] db files
+rpc: nisplus [NOTFOUND=return] db files
+services: nisplus [NOTFOUND=return] db files
diff --git a/manual/string.texi b/manual/string.texi
index 8b7e9da96b..ccaf9e4494 100644
--- a/manual/string.texi
+++ b/manual/string.texi
@@ -294,6 +294,21 @@ returns a pointer to the new string.
@end deftypefun
@comment string.h
+@comment GNU
+@deftypefun {char *} strndup (const char *@var{s}, size_t @var{size})
+This function is similar to @code{strdup} but always copies at most
+@var{size} characters into the newly allocated string.
+
+If the length of @var{s} is more than @var{size}, then @code{strndup}
+copies just the first @var{size} characters and adds a closing null
+terminator. Otherwise all characters are copied and the string is
+terminated.
+
+This function is different to @code{strncpy} in that it always
+terminates the destination string.
+@end deftypefun
+
+@comment string.h
@comment Unknown origin
@deftypefun {char *} stpcpy (char *@var{to}, const char *@var{from})
This function is like @code{strcpy}, except that it returns a pointer to
@@ -315,6 +330,68 @@ Its behavior is undefined if the strings overlap.
@end deftypefun
@comment string.h
+@comment GNU
+@deftypefun {char *} stpncpy (char *@var{to}, const char *@var{from}, size_t @var{size})
+This function is similar to @code{stpcpy} but copies always exactly
+@var{size} characters into @var{to}.
+
+If the length of @var{from} is more then @var{size}, then @code{stpncpy}
+copies just the first @var{size} characters and returns a pointer to the
+character directly following the one which was copied last. Note that in
+this case there is no null terminator written into @var{to}.
+
+If the length of @var{from} is less than @var{size}, then @code{stpncpy}
+copies all of @var{from}, followed by enough null characters to add up
+to @var{size} characters in all. This behaviour is rarely useful, but it
+is implemented to be useful in contexts where this behaviour of the
+@code{strncpy} is used. @code{stpncpy} returns a pointer to the
+@emph{first} written null character.
+
+This function is not part of ANSI or POSIX but was found useful while
+developing GNU C Library itself.
+
+Its behaviour is undefined if the strings overlap.
+@end deftypefun
+
+@comment string.h
+@comment GNU
+@deftypefun {char *} strdupa (const char *@var{s})
+This function is similar to @code{strdup} but allocates the new string
+using @code{alloca} instead of @code{malloc}
+@pxref{Variable Size Automatic}. This means of course the returned
+string has the same limitations as any block of memory allocated using
+@code{alloca}.
+
+For obvious reasons @code{strdupa} is implemented only as a macro. I.e.,
+you cannot get the address of this function. Despite this limitations
+it is a useful function. The following code shows a situation where
+using @code{malloc} would be a lot more expensive.
+
+@smallexample
+@include strdupa.c.texi
+@end smallexample
+
+Please note that calling @code{strtok} using @var{path} directly is
+illegal.
+
+This function is only available if GNU CC is used.
+@end deftypefun
+
+@comment string.h
+@comment GNU
+@deftypefun {char *} strndupa (const char *@var{s}, size_t @var{size})
+This function is similar to @code{strndup} but like @code{strdupa} it
+allocates the new string using @code{alloca}
+@pxref{Variable Size Automatic}. The same advantages and limitations
+of @code{strdupa} are valid for @code{strndupa}, too.
+
+This function is implemented only as a macro which means one cannot
+get the address of it.
+
+@code{strndupa} is only available if GNU CC is used.
+@end deftypefun
+
+@comment string.h
@comment ANSI
@deftypefun {char *} strcat (char *@var{to}, const char *@var{from})
The @code{strcat} function is similar to @code{strcpy}, except that the
diff --git a/manual/users.texi b/manual/users.texi
index 9b5e1ce9b5..b1d0d6f929 100644
--- a/manual/users.texi
+++ b/manual/users.texi
@@ -1,4 +1,4 @@
-@node Users and Groups, System Information, Job Control, Top
+@node Users and Groups, System Information, Name Service Switch, Top
@chapter Users and Groups
Every user who can log in on the system is identified by a unique number
@@ -87,7 +87,7 @@ for purposes of access control. These IDs are also called the
@dfn{effective user ID} and @dfn{effective group ID} of the process.
Your login shell starts out with a persona which consists of your user
-ID and your default group ID.
+ID and your default group ID.
@c !!! also supplementary group IDs.
In normal circumstances, all your other processes inherit these values.
@@ -367,7 +367,7 @@ The return values and error conditions for @code{setregid} are the same
as those for @code{setreuid}.
@end deftypefun
-The GNU system also lets privileged processes change their supplementary
+The GNU system also lets privileged processes change their supplementary
group IDs. To use @code{setgroups} or @code{initgroups}, your programs
should include the header file @file{grp.h}.
@pindex grp.h
@@ -417,14 +417,14 @@ user_user_id = getuid ();
game_user_id = geteuid ();
@end smallexample
-Then it can turn off game file access with
+Then it can turn off game file access with
@smallexample
setuid (user_user_id);
@end smallexample
@noindent
-and turn it on with
+and turn it on with
@smallexample
setuid (game_user_id);
@@ -478,7 +478,7 @@ file will be installed with the set-user-ID bit set and owned by the
same user as the @file{scores} file. Typically, a system
administrator will set up an account like @code{games} for this purpose.
-The executable file is given mode @code{4755}, so that doing an
+The executable file is given mode @code{4755}, so that doing an
@samp{ls -l} on it produces output like:
@smallexample
@@ -608,7 +608,7 @@ record_score (int score)
@node Tips for Setuid
@section Tips for Writing Setuid Programs
-It is easy for setuid programs to give the user access that isn't
+It is easy for setuid programs to give the user access that isn't
intended---in fact, if you want to avoid this, you need to be careful.
Here are some guidelines for preventing unintended access and
minimizing its consequences when it does occur:
@@ -731,7 +731,7 @@ are declared in the header file @file{pwd.h}.
@comment pwd.h
@comment POSIX.1
@deftp {Data Type} {struct passwd}
-The @code{passwd} data structure is used to hold information about
+The @code{passwd} data structure is used to hold information about
entries in the system user data base. It has at least the following members:
@table @code
@@ -887,7 +887,7 @@ database are declared in the header file @file{grp.h}.
@comment grp.h
@comment POSIX.1
-@deftp {Data Type} {struct group}
+@deftp {Data Type} {struct group}
The @code{group} structure is used to hold information about an entry in
the system group database. It has at least the following members:
diff --git a/nss/nsswitch.c b/nss/nsswitch.c
index 099f405c6e..16e1caf50d 100644
--- a/nss/nsswitch.c
+++ b/nss/nsswitch.c
@@ -353,7 +353,7 @@ nss_lookup_function (service_user *ni, const char *fct_name)
{
struct link_map *scope[2] = { map, NULL };
loadbase = _dl_lookup_symbol (name, &ref,
- scope, map->l_name, 0, 0);
+ scope, map->l_name, 0);
}
/* Construct the function name. */
diff --git a/po/SYS_libc.pot b/po/SYS_libc.pot
index b30691f9d3..3bc8a9b8a7 100644
--- a/po/SYS_libc.pot
+++ b/po/SYS_libc.pot
@@ -1,17 +1,18 @@
-# GNU libc message catalog of translations
-# Copyright (C) 1996 Free Software Foundation, Inc.
-# Automatically generated; contact <bug-glibc@prep.ai.mit.edu>
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: libc 1.90\n"
-"PO-Revision-Date: 1996-05-29 14:03\n"
-"Last-Translator: GNU libc maintainers <bug-glibc@prep.ai.mit.edu>\n"
+"Project-Id-Version: libc 1.93\n"
+"POT-Creation-Date: 1996-08-14 18:02\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+DIST\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8-bit\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: ENCODING\n"
#: sunrpc/rpc_main.c:80
#, c-format
@@ -43,27 +44,31 @@ msgstr ""
msgid " program vers proto port\n"
msgstr ""
-#: time/zic.c:423
+#: time/zic.c:425
#, c-format
msgid " (rule from \"%s\", line %d)"
msgstr ""
-#: time/zic.c:420
+#: locale/programs/ld-collate.c:360 programs/ld-ctype.c:1233
+msgid " done\n"
+msgstr ""
+
+#: time/zic.c:422
#, c-format
msgid "\"%s\", line %d: %s"
msgstr ""
-#: time/zic.c:908
+#: time/zic.c:946
#, c-format
msgid "\"Zone %s\" line and -l option are mutually exclusive"
msgstr ""
-#: time/zic.c:916
+#: time/zic.c:954
#, c-format
msgid "\"Zone %s\" line and -p option are mutually exclusive"
msgstr ""
-#: time/zic.c:721
+#: time/zic.c:759
#, c-format
msgid "%s in ruleless zone"
msgstr ""
@@ -88,94 +93,99 @@ msgstr ""
msgid "%s, line %d: "
msgstr ""
-#: time/zic.c:2035
+#: time/zic.c:2140
#, c-format
msgid "%s: %d did not sign extend correctly\n"
msgstr ""
-#: time/zic.c:1339
+#: locale/programs/charmap.c:176
+#, c-format
+msgid "%s: <mb_cur_max> must be greater than <mb_cur_min>\n"
+msgstr ""
+
+#: time/zic.c:1431
#, c-format
msgid "%s: Can't create %s: %s\n"
msgstr ""
-#: time/zic.c:2014
+#: time/zic.c:2119
#, c-format
msgid "%s: Can't create directory %s: %s\n"
msgstr ""
-#: time/zic.c:600
+#: time/zic.c:613
#, c-format
msgid "%s: Can't link from %s to %s: %s\n"
msgstr ""
-#: time/zic.c:746
+#: time/zic.c:784
#, c-format
msgid "%s: Can't open %s: %s\n"
msgstr ""
-#: time/zic.c:814
+#: time/zic.c:852
#, c-format
msgid "%s: Error closing %s: %s\n"
msgstr ""
-#: time/zic.c:808
+#: time/zic.c:846
#, c-format
msgid "%s: Error reading %s\n"
msgstr ""
-#: time/zic.c:1404
+#: time/zic.c:1495
#, c-format
msgid "%s: Error writing %s\n"
msgstr ""
-#: time/zdump.c:257
+#: time/zdump.c:258
#, c-format
msgid "%s: Error writing standard output "
msgstr ""
-#: time/zic.c:793
+#: time/zic.c:831
#, c-format
msgid "%s: Leap line in non leap seconds file %s\n"
msgstr ""
-#: time/zic.c:360
+#: time/zic.c:362
#, c-format
msgid "%s: Memory exhausted: %s\n"
msgstr ""
-#: time/zic.c:515
+#: time/zic.c:528
#, c-format
msgid "%s: More than one -L option specified\n"
msgstr ""
-#: time/zic.c:475
+#: time/zic.c:488
#, c-format
msgid "%s: More than one -d option specified\n"
msgstr ""
-#: time/zic.c:485
+#: time/zic.c:498
#, c-format
msgid "%s: More than one -l option specified\n"
msgstr ""
-#: time/zic.c:495
+#: time/zic.c:508
#, c-format
msgid "%s: More than one -p option specified\n"
msgstr ""
-#: time/zic.c:505
+#: time/zic.c:518
#, c-format
msgid "%s: More than one -y option specified\n"
msgstr ""
-#: posix/getconf.c:149
+#: time/zic.c:1846
#, c-format
-msgid "%s: Unrecognized variable `%s'\n"
+msgid "%s: command was '%s', result was %d\n"
msgstr ""
-#: time/zic.c:1741
+#: locale/programs/charmap.c:593 programs/locfile.c:878
#, c-format
-msgid "%s: command was '%s', result was %d\n"
+msgid "%s: error in state machine"
msgstr ""
#: posix/getopt.c:686
@@ -218,11 +228,16 @@ msgstr ""
msgid "%s: output would overwrite %s\n"
msgstr ""
-#: time/zic.c:800 zic.c:1212 zic.c:1232
+#: time/zic.c:838 zic.c:1249 zic.c:1269
#, c-format
msgid "%s: panic: Invalid l_value %d\n"
msgstr ""
+#: locale/programs/charmap.c:600
+#, c-format
+msgid "%s: premature end of file"
+msgstr ""
+
#: sunrpc/rpc_main.c:152
#, c-format
msgid "%s: unable to open "
@@ -238,10 +253,11 @@ msgstr ""
msgid "%s: unrecognized option `--%s'\n"
msgstr ""
-#: time/zic.c:432
+#: time/zic.c:447
#, c-format
msgid ""
-"%s: usage is %s [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] [ -d directory ]\n"
+"%s: usage is %s [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] [ -d "
+"directory ]\n"
"\t[ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n"
msgstr ""
@@ -259,10 +275,14 @@ msgstr ""
msgid "(unknown)"
msgstr ""
-#: catgets/gencat.c:242
+#: catgets/gencat.c:243
msgid "*standard input*"
msgstr ""
+#: stdio-common/../sysdeps/gnu/errlist.c:766
+msgid ".lib section in a.out corrupted"
+msgstr ""
+
#: inet/rcmd.c:325
msgid ".rhosts fstat failed"
msgstr ""
@@ -288,41 +308,100 @@ msgstr ""
msgid "; why = "
msgstr ""
+#: locale/programs/ld-ctype.c:325
+#, c-format
+msgid "<SP> character must not be in class `%s'"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:316
+#, c-format
+msgid "<SP> character not in class `%s'"
+msgstr ""
+
+#. TRANS The experienced user will know what is wrong.
+#. TRANS @c This error code is a joke. Its perror text is part of the joke.
+#. TRANS @c Don't change it.
+#: stdio-common/../sysdeps/gnu/errlist.c:591
msgid "?"
msgstr ""
+#: stdio-common/../sysdeps/gnu/errlist.c:762
+msgid "Accessing a corrupted shared library"
+msgstr ""
+
+#. TRANS The requested socket address is already in use. @xref{Socket Addresses}.
+#: stdio-common/../sysdeps/gnu/errlist.c:354
msgid "Address already in use"
msgstr ""
-msgid "Address family not supported by protocol family"
+#. TRANS The address family specified for a socket is not supported; it is
+#. TRANS inconsistent with the protocol being used on the socket. @xref{Sockets}.
+#: stdio-common/../sysdeps/gnu/errlist.c:349
+msgid "Address family not supported by protocol"
+msgstr ""
+
+#: stdio-common/../sysdeps/gnu/errlist.c:714
+msgid "Advertise error"
msgstr ""
msgid "Alarm clock"
msgstr ""
+#. TRANS Argument list too long; used when the arguments passed to a new program
+#. TRANS being executed with one of the @code{exec} functions (@pxref{Executing a
+#. TRANS File}) occupy too much memory space. This condition never arises in the
+#. TRANS GNU system.
+#: stdio-common/../sysdeps/gnu/errlist.c:57
msgid "Argument list too long"
msgstr ""
+#: stdio-common/../sysdeps/gnu/errlist.c:770
+msgid "Attempting to link in too many shared libraries"
+msgstr ""
+
#: sunrpc/clnt_perr.c:276
msgid "Authentication OK"
msgstr ""
+#. TRANS ???
+#: stdio-common/../sysdeps/gnu/errlist.c:549
msgid "Authentication error"
msgstr ""
+#. TRANS Bad address; an invalid pointer was detected.
+#. TRANS In the GNU system, this error never happens; you get a signal instead.
+#: stdio-common/../sysdeps/gnu/errlist.c:102
msgid "Bad address"
msgstr ""
+#. TRANS Bad file descriptor; for example, I/O on a descriptor that has been
+#. TRANS closed or reading from a descriptor open only for writing (or vice
+#. TRANS versa).
+#: stdio-common/../sysdeps/gnu/errlist.c:70
msgid "Bad file descriptor"
msgstr ""
+#: stdio-common/../sysdeps/gnu/errlist.c:682
+msgid "Bad font file format"
+msgstr ""
+
+#. TRANS A file that isn't a block special file was given in a situation that
+#. TRANS requires one. For example, trying to mount an ordinary file as a file
+#. TRANS system in Unix gives this error.
+#: stdio-common/../sysdeps/gnu/errlist.c:109
msgid "Block device required"
msgstr ""
-#: sunrpc/pmap_rmt.c:336
+#: sunrpc/pmap_rmt.c:335
msgid "Broadcast select problem"
msgstr ""
+#. TRANS Broken pipe; there is no process reading from the other end of a pipe.
+#. TRANS Every library function that returns this error code also generates a
+#. TRANS @code{SIGPIPE} signal; this signal terminates the program if not handled
+#. TRANS or blocked. Thus, your program will never actually see @code{EPIPE}
+#. TRANS unless it has handled or blocked @code{SIGPIPE}.
+#: stdio-common/../sysdeps/gnu/errlist.c:222
msgid "Broken pipe"
msgstr ""
@@ -332,20 +411,32 @@ msgstr ""
msgid "CPU time limit exceeded"
msgstr ""
-msgid "Can't assign requested address"
+#: stdio-common/../sysdeps/gnu/errlist.c:758
+msgid "Can not access a needed shared library"
msgstr ""
-msgid "Can't send after socket shutdown"
+#. TRANS No memory available. The system cannot allocate more virtual memory
+#. TRANS because its capacity is full.
+#: stdio-common/../sysdeps/gnu/errlist.c:91
+msgid "Cannot allocate memory"
msgstr ""
-msgid "Cannot allocate memory"
+#. TRANS The requested socket address is not available; for example, you tried
+#. TRANS to give a socket a name that doesn't match the local host name.
+#. TRANS @xref{Socket Addresses}.
+#: stdio-common/../sysdeps/gnu/errlist.c:361
+msgid "Cannot assign requested address"
msgstr ""
-#: sunrpc/pmap_rmt.c:254
+#: sunrpc/pmap_rmt.c:253
msgid "Cannot create socket for broadcast rpc"
msgstr ""
-#: sunrpc/pmap_rmt.c:348
+#: stdio-common/../sysdeps/gnu/errlist.c:774
+msgid "Cannot exec a shared library directly"
+msgstr ""
+
+#: sunrpc/pmap_rmt.c:347
msgid "Cannot receive reply to broadcast"
msgstr ""
@@ -353,14 +444,23 @@ msgstr ""
msgid "Cannot register service"
msgstr ""
-#: sunrpc/pmap_rmt.c:312
+#. TRANS The socket has already been shut down.
+#: stdio-common/../sysdeps/gnu/errlist.c:422
+msgid "Cannot send after transport endpoint shutdown"
+msgstr ""
+
+#: sunrpc/pmap_rmt.c:311
msgid "Cannot send broadcast packet"
msgstr ""
-#: sunrpc/pmap_rmt.c:260
+#: sunrpc/pmap_rmt.c:259
msgid "Cannot set socket option SO_BROADCAST"
msgstr ""
+#: stdio-common/../sysdeps/gnu/errlist.c:622
+msgid "Channel number out of range"
+msgstr ""
+
msgid "Child exited"
msgstr ""
@@ -368,33 +468,80 @@ msgstr ""
msgid "Client credential too weak"
msgstr ""
+#: stdio-common/../sysdeps/gnu/errlist.c:722
+msgid "Communication error on send"
+msgstr ""
+
+#. TRANS Go home and have a glass of warm, dairy-fresh milk.
+#: stdio-common/../sysdeps/gnu/errlist.c:601
msgid "Computer bought the farm"
msgstr ""
+#: locale/programs/ld-ctype.c:1196
+msgid "Computing table size for character classes might take a while..."
+msgstr ""
+
+#: locale/programs/ld-collate.c:327
+msgid "Computing table size for collation information might take a while..."
+msgstr ""
+
+#. TRANS A remote host refused to allow the network connection (typically because
+#. TRANS it is not running the requested service).
+#: stdio-common/../sysdeps/gnu/errlist.c:439
msgid "Connection refused"
msgstr ""
+#. TRANS A network connection was closed for reasons outside the control of the
+#. TRANS local host, such as by the remote machine rebooting or an unrecoverable
+#. TRANS protocol violation.
+#: stdio-common/../sysdeps/gnu/errlist.c:389
msgid "Connection reset by peer"
msgstr ""
+#. TRANS A socket operation with a specified timeout received no response during
+#. TRANS the timeout period.
+#: stdio-common/../sysdeps/gnu/errlist.c:433
msgid "Connection timed out"
msgstr ""
msgid "Continued"
msgstr ""
+#. TRANS No default destination address was set for the socket. You get this
+#. TRANS error when you try to transmit data over a connectionless socket,
+#. TRANS without first specifying a destination for the data with @code{connect}.
+#: stdio-common/../sysdeps/gnu/errlist.c:417
msgid "Destination address required"
msgstr ""
-msgid "Device busy"
+#: stdio-common/../sysdeps/gnu/errlist.c:686
+msgid "Device not a stream"
msgstr ""
+#. TRANS No such device or address. The system tried to use the device
+#. TRANS represented by a file you specified, and it couldn't find the device.
+#. TRANS This can mean that the device file was installed incorrectly, or that
+#. TRANS the physical device is missing or not correctly attached to the
+#. TRANS computer.
+#: stdio-common/../sysdeps/gnu/errlist.c:49
msgid "Device not configured"
msgstr ""
+#. TRANS Resource busy; a system resource that can't be shared is already in use.
+#. TRANS For example, if you try to delete a file that is the root of a currently
+#. TRANS mounted filesystem, you get this error.
+#: stdio-common/../sysdeps/gnu/errlist.c:116
+msgid "Device or resource busy"
+msgstr ""
+
+#. TRANS Directory not empty, where an empty directory was expected. Typically,
+#. TRANS this error occurs when you are trying to delete a directory.
+#: stdio-common/../sysdeps/gnu/errlist.c:468
msgid "Directory not empty"
msgstr ""
+#. TRANS The user's disk quota was exceeded.
+#: stdio-common/../sysdeps/gnu/errlist.c:486
msgid "Disc quota exceeded"
msgstr ""
@@ -407,6 +554,13 @@ msgstr ""
msgid "Error in unknown error system: "
msgstr ""
+#: stdio-common/../sysdeps/gnu/errlist.c:662
+msgid "Exchange full"
+msgstr ""
+
+#. TRANS Invalid executable file format. This condition is detected by the
+#. TRANS @code{exec} functions; see @ref{Executing a File}.
+#: stdio-common/../sysdeps/gnu/errlist.c:63
msgid "Exec format error"
msgstr ""
@@ -414,34 +568,59 @@ msgstr ""
msgid "Failed (unspecified error)"
msgstr ""
+#: stdio-common/../sysdeps/gnu/errlist.c:750
+msgid "File descriptor in bad state"
+msgstr ""
+
+#. TRANS File exists; an existing file was specified in a context where it only
+#. TRANS makes sense to specify a new file.
+#: stdio-common/../sysdeps/gnu/errlist.c:122
msgid "File exists"
msgstr ""
+#: stdio-common/../sysdeps/gnu/errlist.c:678
+msgid "File locking deadlock error"
+msgstr ""
+
+#. TRANS Filename too long (longer than @code{PATH_MAX}; @pxref{Limits for
+#. TRANS Files}) or host name too long (in @code{gethostname} or
+#. TRANS @code{sethostname}; @pxref{Host Identification}).
+#: stdio-common/../sysdeps/gnu/errlist.c:452
msgid "File name too long"
msgstr ""
msgid "File size limit exceeded"
msgstr ""
+#. TRANS File too big; the size of a file would be larger than allowed by the system.
+#: stdio-common/../sysdeps/gnu/errlist.c:190
msgid "File too large"
msgstr ""
msgid "Floating point exception"
msgstr ""
+#. TRANS Function not implemented. Some functions have commands or options defined
+#. TRANS that might not be supported in all implementations, and this is the kind
+#. TRANS of error you get if you request them and they are not supported.
+#: stdio-common/../sysdeps/gnu/errlist.c:561
msgid "Function not implemented"
msgstr ""
+#. TRANS This error code has no purpose.
+#: stdio-common/../sysdeps/gnu/errlist.c:606
msgid "Gratuitous error"
msgstr ""
msgid "Hangup"
msgstr ""
+#. TRANS The remote host for a requested network connection is down.
+#: stdio-common/../sysdeps/gnu/errlist.c:457
msgid "Host is down"
msgstr ""
-#: resolv/herror.c:74
+#: resolv/herror.c:75
msgid "Host name lookup failure"
msgstr ""
@@ -451,30 +630,69 @@ msgstr ""
msgid "IOT trap"
msgstr ""
+#: stdio-common/../sysdeps/gnu/errlist.c:618
+msgid "Identifier removed"
+msgstr ""
+
msgid "Illegal Instruction"
msgstr ""
+#. TRANS Invalid seek operation (such as on a pipe).
+#: stdio-common/../sysdeps/gnu/errlist.c:201
msgid "Illegal seek"
msgstr ""
+#. TRANS Inappropriate file type or format. The file was the wrong type for the
+#. TRANS operation, or a data file had the wrong format.
+#. TRANS
+#. TRANS On some systems @code{chmod} returns this error if you try to set the
+#. TRANS sticky bit on a non-directory file; @pxref{Setting Permissions}.
+#: stdio-common/../sysdeps/gnu/errlist.c:544
msgid "Inappropriate file type or format"
msgstr ""
+#. TRANS Inappropriate I/O control operation, such as trying to set terminal
+#. TRANS modes on an ordinary file.
+#: stdio-common/../sysdeps/gnu/errlist.c:176
msgid "Inappropriate ioctl for device"
msgstr ""
+#. TRANS In the GNU system, servers supporting the @code{term} protocol return
+#. TRANS this error for certain operations when the caller is not in the
+#. TRANS foreground process group of the terminal. Users do not usually see this
+#. TRANS error because functions such as @code{read} and @code{write} translate
+#. TRANS it into a @code{SIGTTIN} or @code{SIGTTOU} signal. @xref{Job Control},
+#. TRANS for information on process groups and these signals.
+#: stdio-common/../sysdeps/gnu/errlist.c:577
msgid "Inappropriate operation for background process"
msgstr ""
+#. TRANS Input/output error; usually used for physical read or write errors.
+#: stdio-common/../sysdeps/gnu/errlist.c:40
msgid "Input/output error"
msgstr ""
msgid "Interrupt"
msgstr ""
+#. TRANS Interrupted function call; an asynchronous signal occured and prevented
+#. TRANS completion of the call. When this happens, you should try the call
+#. TRANS again.
+#. TRANS
+#. TRANS You can choose to have functions resume after a signal that is handled,
+#. TRANS rather than failing with @code{EINTR}; see @ref{Interrupted
+#. TRANS Primitives}.
+#: stdio-common/../sysdeps/gnu/errlist.c:35
msgid "Interrupted system call"
msgstr ""
+#: stdio-common/../sysdeps/gnu/errlist.c:610
+msgid "Interrupted system call should be restarted"
+msgstr ""
+
+#. TRANS Invalid argument. This is used to indicate various kinds of problems
+#. TRANS with passing the wrong argument to a library function.
+#: stdio-common/../sysdeps/gnu/errlist.c:152
msgid "Invalid argument"
msgstr ""
@@ -502,9 +720,23 @@ msgstr ""
msgid "Invalid content of \\{\\}"
msgstr ""
+#. TRANS An attempt to make an improper link across file systems was detected.
+#. TRANS This happens not only when you use @code{link} (@pxref{Hard Links}) but
+#. TRANS also when you rename a file with @code{rename} (@pxref{Renaming Files}).
+#: stdio-common/../sysdeps/gnu/errlist.c:129
msgid "Invalid cross-device link"
msgstr ""
+#: stdio-common/../sysdeps/gnu/errlist.c:654
+msgid "Invalid exchange"
+msgstr ""
+
+#. TRANS While decoding a multibyte character the function came along an invalid
+#. TRANS or an incomplete sequence of bytes or the given wide character is invalid.
+#: stdio-common/../sysdeps/gnu/errlist.c:567
+msgid "Invalid or incomplete multibyte or wide character"
+msgstr ""
+
#: posix/regex.c:953
msgid "Invalid preceding regular expression"
msgstr ""
@@ -517,45 +749,141 @@ msgstr ""
msgid "Invalid regular expression"
msgstr ""
+#: stdio-common/../sysdeps/gnu/errlist.c:670
+msgid "Invalid request code"
+msgstr ""
+
+#: stdio-common/../sysdeps/gnu/errlist.c:658
+msgid "Invalid request descriptor"
+msgstr ""
+
#: sunrpc/clnt_perr.c:288
msgid "Invalid server verifier"
msgstr ""
+#: stdio-common/../sysdeps/gnu/errlist.c:674
+msgid "Invalid slot"
+msgstr ""
+
+#. TRANS File is a directory; you cannot open a directory for writing,
+#. TRANS or create or remove hard links to it.
+#: stdio-common/../sysdeps/gnu/errlist.c:146
msgid "Is a directory"
msgstr ""
+#: stdio-common/../sysdeps/gnu/errlist.c:794
+msgid "Is a named type file"
+msgstr ""
+
msgid "Killed"
msgstr ""
+#: stdio-common/../sysdeps/gnu/errlist.c:650
+msgid "Level 2 halted"
+msgstr ""
+
+#: stdio-common/../sysdeps/gnu/errlist.c:626
+msgid "Level 2 not synchronized"
+msgstr ""
+
+#: stdio-common/../sysdeps/gnu/errlist.c:630
+msgid "Level 3 halted"
+msgstr ""
+
+#: stdio-common/../sysdeps/gnu/errlist.c:634
+msgid "Level 3 reset"
+msgstr ""
+
+#: stdio-common/../sysdeps/gnu/errlist.c:710
+msgid "Link has been severed"
+msgstr ""
+
+#: stdio-common/../sysdeps/gnu/errlist.c:638
+msgid "Link number out of range"
+msgstr ""
+
+#: stdio-common/../sysdeps/gnu/errlist.c:702
+msgid "Machine is not on the network"
+msgstr ""
+
#: posix/regex.c:952
msgid "Memory exhausted"
msgstr ""
+#. TRANS The size of a message sent on a socket was larger than the supported
+#. TRANS maximum size.
+#: stdio-common/../sysdeps/gnu/errlist.c:305
msgid "Message too long"
msgstr ""
+#: stdio-common/../sysdeps/gnu/errlist.c:730
+msgid "Multihop attempted"
+msgstr ""
+
+#: stdio-common/../sysdeps/gnu/errlist.c:746
+msgid "Name not unique on network"
+msgstr ""
+
+#. TRANS ???
+#: stdio-common/../sysdeps/gnu/errlist.c:554
msgid "Need authenticator"
msgstr ""
+#. TRANS A network connection was reset because the remote host crashed.
+#: stdio-common/../sysdeps/gnu/errlist.c:377
msgid "Network dropped connection on reset"
msgstr ""
+#. TRANS A socket operation failed because the network was down.
+#: stdio-common/../sysdeps/gnu/errlist.c:366
msgid "Network is down"
msgstr ""
+#. TRANS A socket operation failed because the subnet containing the remote host
+#. TRANS was unreachable.
+#: stdio-common/../sysdeps/gnu/errlist.c:372
msgid "Network is unreachable"
msgstr ""
-#: resolv/herror.c:76
+#: stdio-common/../sysdeps/gnu/errlist.c:646
+msgid "No CSI structure available"
+msgstr ""
+
+#: stdio-common/../sysdeps/gnu/errlist.c:790
+msgid "No XENIX semaphores available"
+msgstr ""
+
+#: resolv/herror.c:77
msgid "No address associated with name"
msgstr ""
+#: stdio-common/../sysdeps/gnu/errlist.c:666
+msgid "No anode"
+msgstr ""
+
+#. TRANS The kernel's buffers for I/O operations are all in use. In GNU, this
+#. TRANS error is always synonymous with @code{ENOMEM}; you may get one or the
+#. TRANS other from network operations.
+#: stdio-common/../sysdeps/gnu/errlist.c:396
msgid "No buffer space available"
msgstr ""
+#. TRANS There are no child processes. This error happens on operations that are
+#. TRANS supposed to manipulate child processes, when there aren't any processes
+#. TRANS to manipulate.
+#: stdio-common/../sysdeps/gnu/errlist.c:77
msgid "No child processes"
msgstr ""
+#: stdio-common/../sysdeps/gnu/errlist.c:690
+msgid "No data available"
+msgstr ""
+
+#. TRANS No locks available. This is used by the file locking facilities; see
+#. TRANS @ref{File Locks}. This error is never generated by the GNU system, but
+#. TRANS it can result from an operation to an NFS server running another
+#. TRANS operating system.
+#: stdio-common/../sysdeps/gnu/errlist.c:535
msgid "No locks available"
msgstr ""
@@ -563,7 +891,11 @@ msgstr ""
msgid "No match"
msgstr ""
-#: posix/regex.c:5200
+#: stdio-common/../sysdeps/gnu/errlist.c:614
+msgid "No message of desired type"
+msgstr ""
+
+#: posix/regex.c:5202
msgid "No previous regular expression"
msgstr ""
@@ -571,46 +903,125 @@ msgstr ""
msgid "No remote programs registered.\n"
msgstr ""
+#. TRANS The remote host for a requested network connection is not reachable.
+#: stdio-common/../sysdeps/gnu/errlist.c:462
msgid "No route to host"
msgstr ""
+#. TRANS No space left on device; write operation on a file failed because the
+#. TRANS disk is full.
+#: stdio-common/../sysdeps/gnu/errlist.c:196
msgid "No space left on device"
msgstr ""
+#. TRANS No such file or directory. This is a ``file doesn't exist'' error
+#. TRANS for ordinary files that are referenced in contexts where they are
+#. TRANS expected to already exist.
+#: stdio-common/../sysdeps/gnu/errlist.c:19
msgid "No such file or directory"
msgstr ""
+#. TRANS No process matches the specified process ID.
+#: stdio-common/../sysdeps/gnu/errlist.c:24
msgid "No such process"
msgstr ""
+#: stdio-common/../sysdeps/gnu/errlist.c:786
+msgid "Not a XENIX named type file"
+msgstr ""
+
+#: stdio-common/../sysdeps/gnu/errlist.c:738
+msgid "Not a data message"
+msgstr ""
+
+#. TRANS A file that isn't a directory was specified when a directory is required.
+#: stdio-common/../sysdeps/gnu/errlist.c:140
msgid "Not a directory"
msgstr ""
+#. TRANS Domain error; used by mathematical functions when an argument value does
+#. TRANS not fall into the domain over which the function is defined.
+#: stdio-common/../sysdeps/gnu/errlist.c:228
msgid "Numerical argument out of domain"
msgstr ""
+#. TRANS Range error; used by mathematical functions when the result value is
+#. TRANS not representable because of overflow or underflow.
+#: stdio-common/../sysdeps/gnu/errlist.c:234
msgid "Numerical result out of range"
msgstr ""
-#: time/zic.c:1835
+#. TRANS An attempt was made to NFS-mount a remote file system with a file name that
+#. TRANS already specifies an NFS-mounted file.
+#. TRANS (This is an error on some operating systems, but we expect it to work
+#. TRANS properly on the GNU system, making this error code impossible.)
+#: stdio-common/../sysdeps/gnu/errlist.c:502
+msgid "Object is remote"
+msgstr ""
+
+#: time/zic.c:1940
msgid "Odd number of quotation marks"
msgstr ""
+#. TRANS An operation is already in progress on an object that has non-blocking
+#. TRANS mode selected.
+#: stdio-common/../sysdeps/gnu/errlist.c:294
msgid "Operation already in progress"
msgstr ""
+#. TRANS Operation not permitted; only the owner of the file (or other resource)
+#. TRANS or processes with special privileges can perform the operation.
+#: stdio-common/../sysdeps/gnu/errlist.c:12
msgid "Operation not permitted"
msgstr ""
+#. TRANS The operation you requested is not supported. Some socket functions
+#. TRANS don't make sense for all types of sockets, and others may not be
+#. TRANS implemented for all communications protocols. In the GNU system, this
+#. TRANS error can happen for many calls when the object does not support the
+#. TRANS particular operation; it is a generic indication that the server knows
+#. TRANS nothing to do for that call.
+#: stdio-common/../sysdeps/gnu/errlist.c:338
msgid "Operation not supported"
msgstr ""
+#. TRANS The wrong type of device was given to a function that expects a
+#. TRANS particular sort of device.
+#: stdio-common/../sysdeps/gnu/errlist.c:135
msgid "Operation not supported by device"
msgstr ""
+#. TRANS An operation that cannot complete immediately was initiated on an object
+#. TRANS that has non-blocking mode selected. Some functions that must always
+#. TRANS block (such as @code{connect}; @pxref{Connecting}) never return
+#. TRANS @code{EAGAIN}. Instead, they return @code{EINPROGRESS} to indicate that
+#. TRANS the operation has begun and will take some time. Attempts to manipulate
+#. TRANS the object before the call completes return @code{EALREADY}. You can
+#. TRANS use the @code{select} function to find out when the pending operation
+#. TRANS has completed; @pxref{Waiting for I/O}.
+#: stdio-common/../sysdeps/gnu/errlist.c:288
msgid "Operation now in progress"
msgstr ""
+#. TRANS In the GNU C library, this is another name for @code{EAGAIN} (above).
+#. TRANS The values are always the same, on every operating system.
+#. TRANS
+#. TRANS C libraries in many older Unix systems have @code{EWOULDBLOCK} as a
+#. TRANS separate error code.
+#: stdio-common/../sysdeps/gnu/errlist.c:276
+msgid "Operation would block"
+msgstr ""
+
+#: stdio-common/../sysdeps/gnu/errlist.c:698
+msgid "Out of streams resources"
+msgstr ""
+
+#: stdio-common/../sysdeps/gnu/errlist.c:706
+msgid "Package not installed"
+msgstr ""
+
+#. TRANS Permission denied; the file permissions do not allow the attempted operation.
+#: stdio-common/../sysdeps/gnu/errlist.c:96
msgid "Permission denied"
msgstr ""
@@ -624,33 +1035,66 @@ msgstr ""
msgid "Profiling timer expired"
msgstr ""
+#: stdio-common/../sysdeps/gnu/errlist.c:642
+msgid "Protocol driver not attached"
+msgstr ""
+
+#: stdio-common/../sysdeps/gnu/errlist.c:726
+msgid "Protocol error"
+msgstr ""
+
+#. TRANS The socket communications protocol family you requested is not supported.
+#: stdio-common/../sysdeps/gnu/errlist.c:343
msgid "Protocol family not supported"
msgstr ""
+#. TRANS You specified a socket option that doesn't make sense for the
+#. TRANS particular protocol being used by the socket. @xref{Socket Options}.
+#: stdio-common/../sysdeps/gnu/errlist.c:316
msgid "Protocol not available"
msgstr ""
+#. TRANS The socket domain does not support the requested communications protocol
+#. TRANS (perhaps because the requested protocol is completely invalid.)
+#. TRANS @xref{Creating a Socket}.
+#: stdio-common/../sysdeps/gnu/errlist.c:323
msgid "Protocol not supported"
msgstr ""
+#. TRANS The socket type does not support the requested communications protocol.
+#: stdio-common/../sysdeps/gnu/errlist.c:310
msgid "Protocol wrong type for socket"
msgstr ""
msgid "Quit"
msgstr ""
+#: stdio-common/../sysdeps/gnu/errlist.c:734
+msgid "RFS specific error"
+msgstr ""
+
+#. TRANS ???
+#: stdio-common/../sysdeps/gnu/errlist.c:527
msgid "RPC bad procedure for program"
msgstr ""
+#. TRANS ???
+#: stdio-common/../sysdeps/gnu/errlist.c:517
msgid "RPC program not available"
msgstr ""
+#. TRANS ???
+#: stdio-common/../sysdeps/gnu/errlist.c:522
msgid "RPC program version wrong"
msgstr ""
+#. TRANS ???
+#: stdio-common/../sysdeps/gnu/errlist.c:507
msgid "RPC struct is bad"
msgstr ""
+#. TRANS ???
+#: stdio-common/../sysdeps/gnu/errlist.c:512
msgid "RPC version wrong"
msgstr ""
@@ -730,6 +1174,8 @@ msgstr ""
msgid "RPC: Unknown protocol"
msgstr ""
+#. TRANS An attempt was made to modify something on a read-only file system.
+#: stdio-common/../sysdeps/gnu/errlist.c:206
msgid "Read-only file system"
msgstr ""
@@ -737,71 +1183,60 @@ msgstr ""
msgid "Regular expression too big"
msgstr ""
-msgid "Reserved error 82"
-msgstr ""
-
-msgid "Reserved error 83"
-msgstr ""
-
-msgid "Reserved error 84"
-msgstr ""
-
-msgid "Reserved error 85"
-msgstr ""
-
-msgid "Reserved error 86"
-msgstr ""
-
-msgid "Reserved error 87"
-msgstr ""
-
-msgid "Reserved error 88"
-msgstr ""
-
-msgid "Reserved error 89"
-msgstr ""
-
-msgid "Reserved error 90"
-msgstr ""
-
-msgid "Reserved error 91"
-msgstr ""
-
-msgid "Reserved error 92"
-msgstr ""
-
-msgid "Reserved error 93"
-msgstr ""
-
-msgid "Reserved error 94"
+#: stdio-common/../sysdeps/gnu/errlist.c:798
+msgid "Remote I/O error"
msgstr ""
-msgid "Reserved error 95"
+#: stdio-common/../sysdeps/gnu/errlist.c:754
+msgid "Remote address changed"
msgstr ""
-msgid "Reserved error 96"
-msgstr ""
-
-msgid "Reserved error 97"
-msgstr ""
-
-msgid "Reserved error 98"
-msgstr ""
-
-msgid "Reserved error 99"
-msgstr ""
-
-#: resolv/herror.c:72
+#: resolv/herror.c:73
msgid "Resolver Error 0 (no error)"
msgstr ""
-#: resolv/herror.c:114
+#: resolv/herror.c:115
msgid "Resolver internal error"
msgstr ""
+#. TRANS Deadlock avoided; allocating a system resource would have resulted in a
+#. TRANS deadlock situation. The system does not guarantee that it will notice
+#. TRANS all such situations. This error means you got lucky and the system
+#. TRANS noticed; it might just hang. @xref{File Locks}, for an example.
+#: stdio-common/../sysdeps/gnu/errlist.c:85
msgid "Resource deadlock avoided"
msgstr ""
+#. TRANS Resource temporarily unavailable; the call might work if you try again
+#. TRANS later. The macro @code{EWOULDBLOCK} is another name for @code{EAGAIN};
+#. TRANS they are always the same in the GNU C library.
+#. TRANS
+#. TRANS This error can happen in a few different situations:
+#. TRANS
+#. TRANS @itemize @bullet
+#. TRANS @item
+#. TRANS An operation that would block was attempted on an object that has
+#. TRANS non-blocking mode selected. Trying the same operation again will block
+#. TRANS until some external condition makes it possible to read, write, or
+#. TRANS connect (whatever the operation). You can use @code{select} to find out
+#. TRANS when the operation will be possible; @pxref{Waiting for I/O}.
+#. TRANS
+#. TRANS @strong{Portability Note:} In older Unix many systems, this condition
+#. TRANS was indicated by @code{EWOULDBLOCK}, which was a distinct error code
+#. TRANS different from @code{EAGAIN}. To make your program portable, you should
+#. TRANS check for both codes and treat them the same.
+#. TRANS
+#. TRANS @item
+#. TRANS A temporary resource shortage made an operation impossible. @code{fork}
+#. TRANS can return this error. It indicates that the shortage is expected to
+#. TRANS pass, so your program can try the call again later and it may succeed.
+#. TRANS It is probably a good idea to delay for a few seconds before trying it
+#. TRANS again, to allow time for other processes to release scarce resources.
+#. TRANS Such shortages are usually fairly serious and affect the whole system,
+#. TRANS so usually an interactive program should report the error to the user
+#. TRANS and return to its command loop.
+#. TRANS @end itemize
+#: stdio-common/../sysdeps/gnu/errlist.c:267
msgid "Resource temporarily unavailable"
msgstr ""
@@ -816,21 +1251,30 @@ msgstr ""
msgid "Server rejected verifier"
msgstr ""
-msgid "Socket is already connected"
-msgstr ""
-
-msgid "Socket is not connected"
-msgstr ""
-
+#. TRANS A file that isn't a socket was specified when a socket is required.
+#: stdio-common/../sysdeps/gnu/errlist.c:299
msgid "Socket operation on non-socket"
msgstr ""
+#. TRANS The socket type is not supported.
+#: stdio-common/../sysdeps/gnu/errlist.c:328
msgid "Socket type not supported"
msgstr ""
+#. TRANS A network connection was aborted locally.
+#: stdio-common/../sysdeps/gnu/errlist.c:382
msgid "Software caused connection abort"
msgstr ""
+#: stdio-common/../sysdeps/gnu/errlist.c:718
+msgid "Srmount error"
+msgstr ""
+
+#. TRANS Stale NFS file handle. This indicates an internal confusion in the NFS
+#. TRANS system which is due to file system rearrangements on the server host.
+#. TRANS Repairing this condition usually requires unmounting and remounting
+#. TRANS the NFS file system on the local host.
+#: stdio-common/../sysdeps/gnu/errlist.c:494
msgid "Stale NFS file handle"
msgstr ""
@@ -846,37 +1290,80 @@ msgstr ""
msgid "Stopped (tty output)"
msgstr ""
-#: posix/regex.c:940
+#: stdio-common/../sysdeps/gnu/errlist.c:778
+msgid "Streams pipe error"
+msgstr ""
+
+#: stdio-common/../sysdeps/gnu/errlist.c:782
+msgid "Structure needs cleaning"
+msgstr ""
+
+#: posix/regex.c:940 stdio-common/../sysdeps/gnu/errlist.c:7
msgid "Success"
msgstr ""
msgid "Terminated"
msgstr ""
+#. TRANS An attempt to execute a file that is currently open for writing, or
+#. TRANS write to a file that is currently being executed. Often using a
+#. TRANS debugger to run a program is considered having it open for writing and
+#. TRANS will cause this error. (The name stands for ``text file busy''.) This
+#. TRANS is not an error in the GNU system; the text is copied as necessary.
+#: stdio-common/../sysdeps/gnu/errlist.c:185
msgid "Text file busy"
msgstr ""
-msgid "Too many levels of remote in path"
+#: stdio-common/../sysdeps/gnu/errlist.c:694
+msgid "Timer expired"
msgstr ""
+#. TRANS Too many levels of symbolic links were encountered in looking up a file name.
+#. TRANS This often indicates a cycle of symbolic links.
+#: stdio-common/../sysdeps/gnu/errlist.c:445
msgid "Too many levels of symbolic links"
msgstr ""
+#. TRANS Too many links; the link count of a single file would become too large.
+#. TRANS @code{rename} can cause this error if the file being renamed already has
+#. TRANS as many links as it can take (@pxref{Renaming Files}).
+#: stdio-common/../sysdeps/gnu/errlist.c:213
msgid "Too many links"
msgstr ""
+#. TRANS The current process has too many files open and can't open any more.
+#. TRANS Duplicate descriptors do count toward this limit.
+#. TRANS
+#. TRANS In BSD and GNU, the number of open files is controlled by a resource
+#. TRANS limit that can usually be increased. If you get this error, you might
+#. TRANS want to increase the @code{RLIMIT_NOFILE} limit or make it unlimited;
+#. TRANS @pxref{Limits on Resources}.
+#: stdio-common/../sysdeps/gnu/errlist.c:163
msgid "Too many open files"
msgstr ""
+#. TRANS There are too many distinct file openings in the entire system. Note
+#. TRANS that any number of linked channels count as just one file opening; see
+#. TRANS @ref{Linked Channels}. This error never occurs in the GNU system.
+#: stdio-common/../sysdeps/gnu/errlist.c:170
msgid "Too many open files in system"
msgstr ""
+#. TRANS This means that the per-user limit on new process would be exceeded by
+#. TRANS an attempted @code{fork}. @xref{Limits on Resources}, for details on
+#. TRANS the @code{RLIMIT_NPROC} limit.
+#: stdio-common/../sysdeps/gnu/errlist.c:475
msgid "Too many processes"
msgstr ""
-msgid "Too many references: can't splice"
+#. TRANS ???
+#: stdio-common/../sysdeps/gnu/errlist.c:427
+msgid "Too many references: cannot splice"
msgstr ""
+#. TRANS The file quota system is confused because there are too many users.
+#. TRANS @c This can probably happen in a GNU system when using NFS.
+#: stdio-common/../sysdeps/gnu/errlist.c:481
msgid "Too many users"
msgstr ""
@@ -887,10 +1374,28 @@ msgstr ""
msgid "Trailing backslash"
msgstr ""
+#. TRANS In the GNU system, opening a file returns this error when the file is
+#. TRANS translated by a program and the translator program dies while starting
+#. TRANS up, before it has connected to the file.
+#: stdio-common/../sysdeps/gnu/errlist.c:584
msgid "Translator died"
msgstr ""
-#: catgets/gencat.c:201
+#. TRANS You tried to connect a socket that is already connected.
+#. TRANS @xref{Connecting}.
+#: stdio-common/../sysdeps/gnu/errlist.c:402
+msgid "Transport endpoint is already connected"
+msgstr ""
+
+#. TRANS The socket is not connected to anything. You get this error when you
+#. TRANS try to transmit data over a socket, without first specifying a
+#. TRANS destination for the data. For a connectionless socket (for datagram
+#. TRANS protocols, such as UDP), you get @code{EDESTADDRREQ} instead.
+#: stdio-common/../sysdeps/gnu/errlist.c:410
+msgid "Transport endpoint is not connected"
+msgstr ""
+
+#: catgets/gencat.c:202
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr ""
@@ -904,15 +1409,15 @@ msgstr ""
msgid "Unknown error "
msgstr ""
-#: resolv/herror.c:73
+#: resolv/herror.c:74
msgid "Unknown host"
msgstr ""
-#: resolv/herror.c:117
+#: resolv/herror.c:118
msgid "Unknown resolver error"
msgstr ""
-#: resolv/herror.c:75
+#: resolv/herror.c:76
msgid "Unknown server error"
msgstr ""
@@ -941,10 +1446,15 @@ msgstr ""
msgid "Unmatched \\{"
msgstr ""
+#: posix/getconf.c:184
+#, c-format
+msgid "Unrecognized variable `%s'"
+msgstr ""
+
msgid "Urgent I/O condition"
msgstr ""
-#: catgets/gencat.c:204
+#: catgets/gencat.c:205
#, c-format
msgid ""
"Usage: %s [OPTION]... -o OUTPUT-FILE [INPUT-FILE]...\n"
@@ -959,7 +1469,7 @@ msgid ""
"is -, output is written to standard output.\n"
msgstr ""
-#: posix/getconf.c:81
+#: posix/getconf.c:131
#, c-format
msgid "Usage: %s variable_name [pathname]\n"
msgstr ""
@@ -974,23 +1484,62 @@ msgstr ""
msgid "User defined signal 2"
msgstr ""
+#: stdio-common/../sysdeps/gnu/errlist.c:742
+msgid "Value too large for defined data type"
+msgstr ""
+
msgid "Virtual timer expired"
msgstr ""
-#: time/zic.c:1740
+#: time/zic.c:1845
msgid "Wild result from command execution"
msgstr ""
msgid "Window changed"
msgstr ""
+#. TRANS You did @strong{what}?
+#: stdio-common/../sysdeps/gnu/errlist.c:596
msgid "You really blew it this time"
msgstr ""
-#: time/zic.c:1013
+#: time/zic.c:1051
msgid "Zone continuation line end time is not after end time of previous line"
msgstr ""
+#: locale/programs/charmap.c:397 programs/locfile.c:341
+#, c-format
+msgid "`%1$s' definition does not end with `END %1$s'"
+msgstr ""
+
+#: locale/programs/ld-monetary.c:358 programs/ld-numeric.c:190
+#, c-format
+msgid "`-1' must be last entry in `%s' field in `%s' category"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1651
+msgid "`...' must only be used in `...' and `UNDEFINED' entries"
+msgstr ""
+
+#: locale/programs/locfile.c:538
+msgid "`from' expected after first argument to `collating-element'"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1108
+msgid ""
+"`from' string in collation element declaration contains unknown character"
+msgstr ""
+
+#: locale/programs/charmap.c:267
+#, c-format
+msgid "argument to <%s> must be a single character"
+msgstr ""
+
+#: locale/programs/locfile.c:215
+#, c-format
+msgid "argument to `%s' must be a single character"
+msgstr ""
+
#: sunrpc/rpc_parse.c:326
msgid "array declaration expected"
msgstr ""
@@ -1003,19 +1552,23 @@ msgstr ""
msgid "bad .rhosts owner"
msgstr ""
-#: time/zic.c:1136
+#: locale/programs/charmap.c:212 programs/locfile.c:209
+msgid "bad argument"
+msgstr ""
+
+#: time/zic.c:1173
msgid "blank FROM field on Link line"
msgstr ""
-#: time/zic.c:1140
+#: time/zic.c:1177
msgid "blank TO field on Link line"
msgstr ""
-#: malloc/mcheck.c:174
+#: malloc/mcheck.c:189
msgid "block freed twice"
msgstr ""
-#: malloc/mcheck.c:177
+#: malloc/mcheck.c:192
msgid "bogus mcheck_status, library is buggy"
msgstr ""
@@ -1031,25 +1584,109 @@ msgstr ""
msgid "cache_set: victim not found"
msgstr ""
+#: time/zic.c:1686
+msgid "can't determine time zone abbrevation to use just after until time"
+msgstr ""
+
#: sunrpc/svc_simple.c:64
#, c-format
msgid "can't reassign procedure number %d\n"
msgstr ""
-#: catgets/gencat.c:248
+#: locale/programs/ld-collate.c:1313
+#, c-format
+msgid "cannot insert collation element `%.*s'"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1492 programs/ld-collate.c:1497
+msgid "cannot insert into result table"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1165 programs/ld-collate.c:1207
+#, c-format
+msgid "cannot insert new collating symbol definition: %s"
+msgstr ""
+
+#: catgets/gencat.c:249
#, c-format
msgid "cannot open input file `%s'"
msgstr ""
-#: catgets/gencat.c:753 gencat.c:794
+#: catgets/gencat.c:754 gencat.c:795
#, c-format
msgid "cannot open output file `%s'"
msgstr ""
+#: locale/programs/locfile.c:986
+#, c-format
+msgid "cannot open output file `%s' for category `%s'"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1359
+msgid "cannot process order specification"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:264
+#, c-format
+msgid "character %s'%s' in class `%s' must be in class `%s'"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:288
+#, c-format
+msgid "character %s'%s' in class `%s' must not be in class `%s'"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:309
+msgid "character <SP> not defined in character map"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:1140
+#, c-format
+msgid "character `%c' not defined while needed as default value"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:938 locale/programs/ld-ctype.c:1017
+#: locale/programs/ld-ctype.c:1041 locale/programs/ld-ctype.c:1113
+#: programs/ld-ctype.c:1001 programs/ld-ctype.c:1009 programs/ld-ctype.c:1025
+#: programs/ld-ctype.c:1033 programs/ld-ctype.c:1067 programs/ld-ctype.c:1075
+#: programs/ld-ctype.c:1151
+#, c-format
+msgid "character `%s' not defined while needed as default value"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:800
+#, c-format
+msgid "character class `%s' already defined"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:832
+#, c-format
+msgid "character map `%s' already defined"
+msgstr ""
+
+#: locale/programs/charmap.c:76
+#, c-format
+msgid "character map file `%s' not found"
+msgstr ""
+
#: sunrpc/clnt_raw.c:106
msgid "clnt_raw.c - Fatal header serialization error."
msgstr ""
+#: locale/programs/ld-collate.c:1328
+#, c-format
+msgid "collation element `%.*s' appears more than once: ignore line"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1346
+msgid "collation symbol `.*s' appears more than once: ignore line"
+msgstr ""
+
+#: locale/programs/locfile.c:522
+#, c-format
+msgid "collation symbol expected after `%s'"
+msgstr ""
+
#: inet/rcmd.c:112
#, c-format
msgid "connect to address %s: "
@@ -1063,11 +1700,11 @@ msgstr ""
msgid "couldn't create an rpc server\n"
msgstr ""
-#: sunrpc/portmap.c:122
+#: sunrpc/portmap.c:121
msgid "couldn't do tcp_create\n"
msgstr ""
-#: sunrpc/portmap.c:100
+#: sunrpc/portmap.c:99
msgid "couldn't do udp_create\n"
msgstr ""
@@ -1076,27 +1713,50 @@ msgstr ""
msgid "couldn't register prog %d vers %d\n"
msgstr ""
+#: locale/programs/charmap.c:86
+#, c-format
+msgid "default character map file `%s' not found"
+msgstr ""
+
#: sunrpc/rpc_parse.c:77
msgid "definition keyword expected"
msgstr ""
-#: catgets/gencat.c:367
+#: locale/programs/charset.c:87 programs/charset.c:132
+#, c-format
+msgid "duplicate character name `%s'"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1140
+msgid "duplicate collating element definition"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1286
+#, c-format
+msgid "duplicate definition for character `%.*s'"
+msgstr ""
+
+#: catgets/gencat.c:368
msgid "duplicate set definition"
msgstr ""
-#: time/zic.c:928
+#: time/zic.c:966
#, c-format
msgid "duplicate zone name %s (file \"%s\", line %d)"
msgstr ""
-#: catgets/gencat.c:530
+#: catgets/gencat.c:531
msgid "duplicated message identifier"
msgstr ""
-#: catgets/gencat.c:503
+#: catgets/gencat.c:504
msgid "duplicated message number"
msgstr ""
+#: locale/programs/ld-collate.c:1695
+msgid "empty weight name: line ignored"
+msgstr ""
+
#: sunrpc/svc_udp.c:344
msgid "enablecache: cache already enabled"
msgstr ""
@@ -1113,6 +1773,22 @@ msgstr ""
msgid "enablecache: could not allocate cache fifo"
msgstr ""
+#: locale/programs/ld-collate.c:1418
+msgid "end point of ellipsis range is bigger then start"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1148
+msgid "error while inserting collation element into hash table"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1160
+msgid "error while inserting to hash table"
+msgstr ""
+
+#: locale/programs/locfile.c:465
+msgid "expect string argument for `copy'"
+msgstr ""
+
#: sunrpc/rpc_util.c:300
#, c-format
msgid "expected '%s'"
@@ -1128,7 +1804,7 @@ msgstr ""
msgid "expected '%s', '%s' or '%s'"
msgstr ""
-#: time/zic.c:819
+#: time/zic.c:857
msgid "expected continuation line not found"
msgstr ""
@@ -1136,95 +1812,188 @@ msgstr ""
msgid "expected type specifier"
msgstr ""
+#: locale/programs/locfile.c:1010
+#, c-format
+msgid "failure while writing data for category `%s'"
+msgstr ""
+
+#: locale/programs/ld-monetary.c:154 programs/ld-numeric.c:95
+#, c-format
+msgid "field `%s' in category `%s' not defined"
+msgstr ""
+
+#: locale/programs/ld-messages.c:81 programs/ld-messages.c:102
+#, c-format
+msgid "field `%s' in category `%s' undefined"
+msgstr ""
+
+#: locale/programs/locfile.c:547
+msgid "from-value of `collating-element' must be a string"
+msgstr ""
+
+#: locale/programs/linereader.c:328
+msgid "garbage at end of character code specification"
+msgstr ""
+
+#: locale/programs/linereader.c:214
+msgid "garbage at end of digit"
+msgstr ""
+
#: sunrpc/get_myaddr.c:73
msgid "get_myaddress: ioctl (get interface configuration)"
msgstr ""
-#: time/zic.c:1113
+#: time/zic.c:1150
msgid "illegal CORRECTION field on Leap line"
msgstr ""
-#: time/zic.c:1117
+#: time/zic.c:1154
msgid "illegal Rolling/Stationary field on Leap line"
msgstr ""
+#: locale/programs/ld-collate.c:1766
+msgid "illegal character constant in string"
+msgstr ""
+
#: sunrpc/rpc_scan.c:281
msgid "illegal character in file: "
msgstr ""
+#: locale/programs/ld-collate.c:1115
+msgid "illegal collation element"
+msgstr ""
+
+#: locale/programs/charmap.c:196
+msgid "illegal definition"
+msgstr ""
+
+#: locale/programs/charmap.c:349
+msgid "illegal encoding given"
+msgstr ""
+
+#: locale/programs/linereader.c:546
+msgid "illegal escape sequence at end of string"
+msgstr ""
+
+#: locale/programs/charset.c:101
+msgid "illegal names for character range"
+msgstr ""
+
#: sunrpc/rpc_parse.c:146
msgid "illegal result type"
msgstr ""
-#: catgets/gencat.c:340 gencat.c:417
+#: catgets/gencat.c:341 gencat.c:418
msgid "illegal set number"
msgstr ""
-#: time/zic.c:777
+#: locale/programs/ld-ctype.c:806
+#, c-format
+msgid "implementation limit: no more than %d character classes allowed"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:838
+#, c-format
+msgid "implementation limit: no more than %d character maps allowed"
+msgstr ""
+
+#: time/zic.c:815
msgid "input line of unknown type"
msgstr ""
-#: time/zic.c:984
+#: time/zic.c:1734
+msgid "internal error - addtype called with bad isdst"
+msgstr ""
+
+#: time/zic.c:1742
+msgid "internal error - addtype called with bad ttisgmt"
+msgstr ""
+
+#: time/zic.c:1738
+msgid "internal error - addtype called with bad ttisstd"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:300
+#, c-format
+msgid "internal error in %s, line %u"
+msgstr ""
+
+#: time/zic.c:1022
msgid "invalid GMT offset"
msgstr ""
-#: time/zic.c:987
+#: time/zic.c:1025
msgid "invalid abbreviation format"
msgstr ""
-#: time/zic.c:1078 zic.c:1277 zic.c:1291
+#: time/zic.c:1115 zic.c:1314 zic.c:1328
msgid "invalid day of month"
msgstr ""
-#: time/zic.c:1236
+#: time/zic.c:1273
msgid "invalid ending year"
msgstr ""
-#: time/zic.c:1050
+#: time/zic.c:1087
msgid "invalid leaping year"
msgstr ""
-#: time/zic.c:1065 zic.c:1168
+#: time/zic.c:1102 zic.c:1205
msgid "invalid month name"
msgstr ""
-#: time/zic.c:883
+#: time/zic.c:921
msgid "invalid saved time"
msgstr ""
-#: time/zic.c:1216
+#: time/zic.c:1253
msgid "invalid starting year"
msgstr ""
-#: time/zic.c:1094 zic.c:1196
+#: time/zic.c:1131 zic.c:1233
msgid "invalid time of day"
msgstr ""
-#: time/zic.c:1282
+#: time/zic.c:1319
msgid "invalid weekday name"
msgstr ""
-#: time/zic.c:757
+#: locale/programs/ld-collate.c:1411
+msgid "line after ellipsis must contain character definition"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1390
+msgid "line before ellipsis does not contain definition for character constant"
+msgstr ""
+
+#: time/zic.c:795
msgid "line too long"
msgstr ""
-#: catgets/gencat.c:598
+#: catgets/gencat.c:599
msgid "malformed line ignored"
msgstr ""
-#: malloc/mcheck.c:168
+#: malloc/mcheck.c:183
msgid "memory clobbered before allocated block"
msgstr ""
-#: malloc/mcheck.c:171
+#: malloc/mcheck.c:186
msgid "memory clobbered past end of allocated block"
msgstr ""
-#: malloc/mcheck.c:165
+#: locale/programs/ld-collate.c:167 locale/programs/ld-collate.c:177
+#: locale/programs/ld-collate.c:1467 posix/getconf.c:174
+#: programs/ld-collate.c:173 programs/ld-collate.c:1438 programs/locfile.c:940
+#: programs/xmalloc.c:64
+msgid "memory exhausted"
+msgstr ""
+
+#: malloc/mcheck.c:180
msgid "memory is consistent, library is buggy"
msgstr ""
-#: time/zic.c:878
+#: time/zic.c:916
msgid "nameless rule"
msgstr ""
@@ -1237,19 +2006,49 @@ msgstr ""
msgid "no array-of-pointer declarations -- use typedef"
msgstr ""
-#: time/zic.c:1955
+#: locale/programs/ld-messages.c:95 programs/ld-messages.c:116
+#, c-format
+msgid "no correct regular expression for field `%s' in category `%s': %s"
+msgstr ""
+
+#: time/zic.c:2060
msgid "no day in month matches rule"
msgstr ""
-#: sunrpc/portmap.c:452
+#: locale/programs/ld-collate.c:259
+msgid "no definition of `UNDEFINED'"
+msgstr ""
+
+#: locale/programs/locfile.c:479
+msgid "no other keyword shall be specified when `copy' is used"
+msgstr ""
+
+#: locale/programs/charmap.c:315 programs/charmap.c:466 programs/charmap.c:545
+msgid "no symbolic name given"
+msgstr ""
+
+#: locale/programs/charmap.c:380 programs/charmap.c:512 programs/charmap.c:578
+msgid "no symbolic name given for end of range"
+msgstr ""
+
+#: locale/programs/ld-collate.c:244
+#, c-format
+msgid "no weight defined for symbol `%s'"
+msgstr ""
+
+#: locale/programs/charmap.c:430
+msgid "only WIDTH definitions are allowed to follow the CHARMAP definition"
+msgstr ""
+
+#: sunrpc/portmap.c:451
msgid "portmap CALLIT: cannot fork.\n"
msgstr ""
-#: portmap.c:117 sunrpc/portmap.c:95
+#: portmap.c:116 sunrpc/portmap.c:94
msgid "portmap cannot bind"
msgstr ""
-#: portmap.c:113 sunrpc/portmap.c:87
+#: portmap.c:112 sunrpc/portmap.c:86
msgid "portmap cannot create socket"
msgstr ""
@@ -1291,7 +2090,7 @@ msgstr ""
msgid "registerrpc: out of memory\n"
msgstr ""
-#: time/zic.c:1690
+#: time/zic.c:1795
msgid "repeated leap second moment"
msgstr ""
@@ -1323,10 +2122,14 @@ msgstr ""
msgid "rpcinfo: can't contact portmapper: "
msgstr ""
-#: sunrpc/portmap.c:138
+#: sunrpc/portmap.c:137
msgid "run_svc returned unexpectedly\n"
msgstr ""
+#: time/zic.c:709 zic.c:711
+msgid "same rule name in multiple files"
+msgstr ""
+
#: inet/rcmd.c:158
msgid "select: protocol failure in circuit setup\n"
msgstr ""
@@ -1335,15 +2138,24 @@ msgstr ""
msgid "socket: protocol failure in circuit setup.\n"
msgstr ""
-#: time/zic.c:742
+#: locale/programs/locfile.c:600
+msgid "sorting order `forward' and `backward' are mutually exclusive"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1567 programs/ld-collate.c:1613
+msgid ""
+"specification of sorting weight for collation symbol does not make sense"
+msgstr ""
+
+#: time/zic.c:780
msgid "standard input"
msgstr ""
-#: time/zdump.c:259
+#: time/zdump.c:260
msgid "standard output"
msgstr ""
-#: time/zic.c:1240
+#: time/zic.c:1277
msgid "starting year greater than ending year"
msgstr ""
@@ -1371,53 +2183,195 @@ msgstr ""
msgid "svcudp_create: socket creation problem"
msgstr ""
-#: catgets/gencat.c:369 gencat.c:505 gencat.c:532
+#: locale/programs/ld-collate.c:1190
+#, c-format
+msgid ""
+"symbol for multicharacter collating element `%.*s' duplicates element "
+"definition"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1063
+#, c-format
+msgid ""
+"symbol for multicharacter collating element `%.*s' duplicates other element "
+"definition"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1199
+#, c-format
+msgid ""
+"symbol for multicharacter collating element `%.*s' duplicates other symbol "
+"definition"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1072
+#, c-format
+msgid ""
+"symbol for multicharacter collating element `%.*s' duplicates symbol "
+"definition"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1054 programs/ld-collate.c:1181
+#, c-format
+msgid ""
+"symbol for multicharacter collating element `%.*s' duplicates symbolic name "
+"in charset"
+msgstr ""
+
+#: locale/programs/charmap.c:314 locale/programs/charmap.c:465
+#: locale/programs/charmap.c:576 programs/charmap.c:348 programs/charmap.c:378
+#: programs/charmap.c:511 programs/charmap.c:544
+#, c-format
+msgid "syntax error in %s definition: %s"
+msgstr ""
+
+#: locale/programs/locfile.c:620
+msgid "syntax error in `order_start' directive"
+msgstr ""
+
+#: locale/programs/locfile.c:362
+msgid "syntax error in character class definition"
+msgstr ""
+
+#: locale/programs/locfile.c:420
+msgid "syntax error in character conversion definition"
+msgstr ""
+
+#: locale/programs/locfile.c:662
+msgid "syntax error in collating order definition"
+msgstr ""
+
+#: locale/programs/locfile.c:512
+msgid "syntax error in collation definition"
+msgstr ""
+
+#: locale/programs/locfile.c:335
+msgid "syntax error in definition of LC_CTYPE category"
+msgstr ""
+
+#: locale/programs/locfile.c:278
+msgid "syntax error in definition of new character class"
+msgstr ""
+
+#: locale/programs/locfile.c:288
+msgid "syntax error in definition of new character map"
+msgstr ""
+
+#: locale/programs/locfile.c:873
+msgid "syntax error in message locale definition"
+msgstr ""
+
+#: locale/programs/locfile.c:784
+msgid "syntax error in monetary locale definition"
+msgstr ""
+
+#: locale/programs/locfile.c:811
+msgid "syntax error in numeric locale definition"
+msgstr ""
+
+#: locale/programs/locfile.c:722
+msgid "syntax error in order specification"
+msgstr ""
+
+#: locale/programs/charmap.c:195 programs/charmap.c:211
+#, c-format
+msgid "syntax error in prolog: %s"
+msgstr ""
+
+#: locale/programs/locfile.c:849
+msgid "syntax error in time locale definition"
+msgstr ""
+
+#: locale/programs/locfile.c:255
+msgid "syntax error: not inside a locale definition section"
+msgstr ""
+
+#: catgets/gencat.c:370 gencat.c:506 gencat.c:533
msgid "this is the first definition"
msgstr ""
-#: time/zic.c:1083
+#: time/zic.c:1120
msgid "time before zero"
msgstr ""
-#: time/zic.c:1091 zic.c:1855 zic.c:1874
+#: time/zic.c:1128 zic.c:1960 zic.c:1979
msgid "time overflow"
msgstr ""
+#: locale/programs/charset.c:44
+msgid "too few bytes in character encoding"
+msgstr ""
+
+#: locale/programs/charset.c:46
+msgid "too many bytes in character encoding"
+msgstr ""
+
+#: locale/programs/locales.h:72
+msgid "too many character classes defined"
+msgstr ""
+
#: sunrpc/rpc_util.c:285
msgid "too many files!\n"
msgstr ""
-#: time/zic.c:1684
+#: time/zic.c:1789
msgid "too many leap seconds"
msgstr ""
-#: time/zic.c:1656
+#: time/zic.c:1761
msgid "too many local time types"
msgstr ""
-#: time/zic.c:1622
+#: time/zic.c:1715
msgid "too many transitions?!"
msgstr ""
-#: time/zic.c:1978
+#: locale/programs/ld-collate.c:1622
+msgid "too many weights"
+msgstr ""
+
+#: time/zic.c:2083
msgid "too many, or too long, time zone abbreviations"
msgstr ""
+#: locale/programs/linereader.h:146
+msgid "trailing garbage at end of line"
+msgstr ""
+
#: sunrpc/svc_simple.c:132
#, c-format
msgid "trouble replying to prog %d\n"
msgstr ""
-#: time/zic.c:1247
+#: locale/programs/ld-collate.c:1382
+msgid "two lines in a row containing `...' are not allowed"
+msgstr ""
+
+#: time/zic.c:1284
msgid "typed single year"
msgstr ""
-#: catgets/gencat.c:466
+#: locale/programs/charmap.c:617 programs/charmap.c:628
+#, c-format
+msgid "unknown character `%s'"
+msgstr ""
+
+#: locale/programs/ld-messages.c:193 locale/programs/ld-messages.c:215
+#: programs/ld-messages.c:204 programs/ld-messages.c:226
+#, c-format
+msgid "unknown character in field `%s' of category `%s'"
+msgstr ""
+
+#: locale/programs/locfile.c:585
+msgid "unknown collation directive"
+msgstr ""
+
+#: catgets/gencat.c:467
#, c-format
msgid "unknown directive `%s': line ignored"
msgstr ""
-#: catgets/gencat.c:445
+#: catgets/gencat.c:446
#, c-format
msgid "unknown set `%s'"
msgstr ""
@@ -1425,27 +2379,89 @@ msgstr ""
msgid "unknown signal"
msgstr ""
-#: time/zic.c:714
+#: locale/programs/ld-collate.c:1366 locale/programs/ld-collate.c:1731
+#: programs/ld-collate.c:1557
+#, c-format
+msgid "unknown symbol `%.*s': line ignored"
+msgstr ""
+
+#: time/zic.c:752
msgid "unruly zone"
msgstr ""
-#: catgets/gencat.c:950
+#: catgets/gencat.c:951
msgid "unterminated message"
msgstr ""
+#: locale/programs/linereader.c:515 programs/linereader.c:550
+msgid "unterminated string"
+msgstr ""
+
#: sunrpc/rpc_scan.c:319
msgid "unterminated string constant"
msgstr ""
+#: locale/programs/linereader.c:385
+msgid "unterminated symbolic name"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1684
+msgid "unterminated weight name"
+msgstr ""
+
+#: locale/programs/charset.c:119
+msgid "upper limit in range is not smaller then lower limit"
+msgstr ""
+
#: sunrpc/rpc_main.c:78
#, c-format
msgid "usage: %s infile\n"
msgstr ""
-#: time/zic.c:1921
+#: time/zic.c:2026
msgid "use of 2/29 in non leap-year"
msgstr ""
+#: locale/programs/charmap.c:438 programs/charmap.c:492
+#, c-format
+msgid "value for %s must be an integer"
+msgstr ""
+
+#: locale/programs/charmap.c:233
+#, c-format
+msgid "value for <%s> must lie between 1 and 4"
+msgstr ""
+
+#: locale/programs/ld-monetary.c:148 programs/ld-numeric.c:89
+#, c-format
+msgid "value for field `%s' in category `%s' must not be the empty string"
+msgstr ""
+
+#: locale/programs/charmap.c:245
+msgid "value of <mb_cur_max> must be greater than the value of <mb_cur_min>"
+msgstr ""
+
+#: locale/programs/ld-monetary.c:138
+msgid ""
+"value of field `int_curr_symbol' in category `LC_MONETARY' does not "
+"correspond to a valid name in ISO 4217"
+msgstr ""
+
+#: locale/programs/ld-monetary.c:133
+msgid ""
+"value of field `int_curr_symbol' in category `LC_MONETARY' has wrong length"
+msgstr ""
+
+#: locale/programs/ld-monetary.c:370 programs/ld-numeric.c:199
+#, c-format
+msgid "values for field `%s' in category `%s' must be smaller than 127"
+msgstr ""
+
+#: locale/programs/ld-monetary.c:366
+#, c-format
+msgid "values for field `%s' in category `%s' must not be zero"
+msgstr ""
+
#: sunrpc/rpc_parse.c:330
msgid "variable-length array declaration expected"
msgstr ""
@@ -1458,26 +2474,26 @@ msgstr ""
msgid "while opening UTMP file"
msgstr ""
-#: catgets/gencat.c:977
+#: catgets/gencat.c:978
msgid "while opening old catalog file"
msgstr ""
-#: time/zic.c:1041
+#: time/zic.c:1078
msgid "wrong number of fields on Leap line"
msgstr ""
-#: time/zic.c:1132
+#: time/zic.c:1169
msgid "wrong number of fields on Link line"
msgstr ""
-#: time/zic.c:874
+#: time/zic.c:912
msgid "wrong number of fields on Rule line"
msgstr ""
-#: time/zic.c:944
+#: time/zic.c:982
msgid "wrong number of fields on Zone continuation line"
msgstr ""
-#: time/zic.c:902
+#: time/zic.c:940
msgid "wrong number of fields on Zone line"
msgstr ""
diff --git a/po/header.pot b/po/header.pot
index c74bd351ec..ea05c22466 100644
--- a/po/header.pot
+++ b/po/header.pot
@@ -13,3 +13,4 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: ENCODING\n"
+
diff --git a/shadow/sgetspent_r.c b/shadow/sgetspent_r.c
index 3ad72f0c0a..134a45e5b4 100644
--- a/shadow/sgetspent_r.c
+++ b/shadow/sgetspent_r.c
@@ -66,7 +66,7 @@ struct spwd *
__sgetspent_r (const char *string, struct spwd *result, char *buffer,
int buflen)
{
- return parse_line (strncpy (string, buffer, buflen), result, NULL, 0)
+ return parse_line (strncpy (buffer, string, buflen), result, NULL, 0)
? result : NULL;
}
weak_alias (__sgetspent_r, sgetspent_r)
diff --git a/stdlib/strtod.c b/stdlib/strtod.c
index 8269010bc3..66d6726a30 100644
--- a/stdlib/strtod.c
+++ b/stdlib/strtod.c
@@ -378,7 +378,7 @@ INTERNAL (STRTOF) (nptr, endptr, group)
in the format described in <locale.h>. */
const char *grouping;
- assert (sizeof (wchar_t) <= sizeof (wint_t));
+ assert (sizeof (wchar_t) == sizeof (wint_t));
if (group)
{
diff --git a/string/strdup.c b/string/strdup.c
index 3e9eee0945..ef883eecdd 100644
--- a/string/strdup.c
+++ b/string/strdup.c
@@ -31,8 +31,6 @@ __strdup (const char *s)
if (new == NULL)
return NULL;
- memcpy (new, s, len);
-
- return (char *) new;
+ return (char *) memcpy (new, s, len);
}
weak_alias (__strdup, strdup)
diff --git a/sysdeps/alpha/dl-machine.h b/sysdeps/alpha/dl-machine.h
index a75011fccb..2bf8f9b7ec 100644
--- a/sysdeps/alpha/dl-machine.h
+++ b/sysdeps/alpha/dl-machine.h
@@ -341,8 +341,8 @@ elf_machine_rela (struct link_map *map,
{
Elf64_Addr loadbase, sym_value;
- loadbase = RESOLVE (&sym, (Elf64_Addr)reloc_addr,
- r_info == R_ALPHA_JMP_SLOT);
+ loadbase = RESOLVE (&sym,
+ r_info == R_ALPHA_JMP_SLOT ? DL_LOOKUP_NOPLT : 0);
sym_value = sym ? loadbase + sym->st_value : 0;
if (r_info == R_ALPHA_GLOB_DAT)
diff --git a/sysdeps/i386/dl-machine.h b/sysdeps/i386/dl-machine.h
index 111122e437..d616bf4db8 100644
--- a/sysdeps/i386/dl-machine.h
+++ b/sysdeps/i386/dl-machine.h
@@ -193,15 +193,15 @@ elf_machine_rel (struct link_map *map,
switch (ELF32_R_TYPE (reloc->r_info))
{
case R_386_COPY:
- loadbase = RESOLVE (&sym, (Elf32_Addr) reloc_addr, 0);
+ loadbase = RESOLVE (&sym, DL_LOOKUP_NOEXEC);
memcpy (reloc_addr, (void *) (loadbase + sym->st_value), sym->st_size);
break;
case R_386_GLOB_DAT:
- loadbase = RESOLVE (&sym, (Elf32_Addr) reloc_addr, 0);
+ loadbase = RESOLVE (&sym, 0);
*reloc_addr = sym ? (loadbase + sym->st_value) : 0;
break;
case R_386_JMP_SLOT:
- loadbase = RESOLVE (&sym, (Elf32_Addr) reloc_addr, 1);
+ loadbase = RESOLVE (&sym, DL_LOOKUP_NOPLT);
*reloc_addr = sym ? (loadbase + sym->st_value) : 0;
break;
case R_386_32:
@@ -222,7 +222,7 @@ elf_machine_rel (struct link_map *map,
built-in definitions used while loading those libraries. */
undo = map->l_addr + sym->st_value;
#endif
- loadbase = RESOLVE (&sym, (Elf32_Addr) reloc_addr, 0);
+ loadbase = RESOLVE (&sym, 0);
*reloc_addr += (sym ? (loadbase + sym->st_value) : 0) - undo;
break;
}
@@ -233,7 +233,7 @@ elf_machine_rel (struct link_map *map,
*reloc_addr += map->l_addr;
break;
case R_386_PC32:
- loadbase = RESOLVE (&sym, (Elf32_Addr) reloc_addr, 0);
+ loadbase = RESOLVE (&sym, 0);
*reloc_addr += ((sym ? (loadbase + sym->st_value) : 0) -
(Elf32_Addr) reloc_addr);
break;
diff --git a/sysdeps/m68k/dl-machine.h b/sysdeps/m68k/dl-machine.h
index 4642f00c63..15aa5325fc 100644
--- a/sysdeps/m68k/dl-machine.h
+++ b/sysdeps/m68k/dl-machine.h
@@ -205,29 +205,29 @@ elf_machine_rela (struct link_map *map,
switch (ELF32_R_TYPE (reloc->r_info))
{
case R_68K_COPY:
- loadbase = RESOLVE (&sym, (Elf32_Addr) reloc_addr, 0);
+ loadbase = RESOLVE (&sym, DL_LOOKUP_NOEXEC);
memcpy (reloc_addr, (void *) (loadbase + sym->st_value), sym->st_size);
break;
case R_68K_GLOB_DAT:
- loadbase = RESOLVE (&sym, (Elf32_Addr) reloc_addr, 0);
+ loadbase = RESOLVE (&sym, 0);
*reloc_addr = sym ? (loadbase + sym->st_value) : 0;
break;
case R_68K_JMP_SLOT:
- loadbase = RESOLVE (&sym, (Elf32_Addr) reloc_addr, 1);
+ loadbase = RESOLVE (&sym, DL_LOOKUP_NOPLT);
*reloc_addr = sym ? (loadbase + sym->st_value) : 0;
break;
case R_68K_8:
- loadbase = RESOLVE (&sym, (Elf32_Addr) reloc_addr, 0);
+ loadbase = RESOLVE (&sym, 0);
*(char *) reloc_addr = ((sym ? (loadbase + sym->st_value) : 0)
+ reloc->r_addend);
break;
case R_68K_16:
- loadbase = RESOLVE (&sym, (Elf32_Addr) reloc_addr, 0);
+ loadbase = RESOLVE (&sym, 0);
*(short *) reloc_addr = ((sym ? (loadbase + sym->st_value) : 0)
+ reloc->r_addend);
break;
case R_68K_32:
- loadbase = RESOLVE (&sym, (Elf32_Addr) reloc_addr, 0);
+ loadbase = RESOLVE (&sym, 0);
*reloc_addr = ((sym ? (loadbase + sym->st_value) : 0)
+ reloc->r_addend);
break;
@@ -235,17 +235,17 @@ elf_machine_rela (struct link_map *map,
*reloc_addr = map->l_addr + reloc->r_addend;
break;
case R_68K_PC8:
- loadbase = RESOLVE (&sym, (Elf32_Addr) reloc_addr, 0);
+ loadbase = RESOLVE (&sym, 0);
*(char *) reloc_addr = ((sym ? (loadbase + sym->st_value) : 0)
+ reloc->r_addend - (Elf32_Addr) reloc_addr);
break;
case R_68K_PC16:
- loadbase = RESOLVE (&sym, (Elf32_Addr) reloc_addr, 0);
+ loadbase = RESOLVE (&sym, 0);
*(short *) reloc_addr = ((sym ? (loadbase + sym->st_value) : 0)
+ reloc->r_addend - (Elf32_Addr) reloc_addr);
break;
case R_68K_PC32:
- loadbase = RESOLVE (&sym, (Elf32_Addr) reloc_addr, 0);
+ loadbase = RESOLVE (&sym, 0);
*reloc_addr = ((sym ? (loadbase + sym->st_value) : 0)
+ reloc->r_addend - (Elf32_Addr) reloc_addr);
break;
diff --git a/sysdeps/mips/dl-machine.h b/sysdeps/mips/dl-machine.h
index 50e9f64665..c0ac649144 100644
--- a/sysdeps/mips/dl-machine.h
+++ b/sysdeps/mips/dl-machine.h
@@ -453,7 +453,7 @@ elf_machine_rel (struct link_map *map,
else
#endif
undo = 0;
- loadbase = RESOLVE (&sym, (ElfW(Addr)) reloc_addr, 0);
+ loadbase = RESOLVE (&sym, 0);
*reloc_addr += (sym ? (loadbase + sym->st_value) : 0) - undo;
}
break;
diff --git a/sysdeps/unix/sysv/linux/i386/clone.S b/sysdeps/unix/sysv/linux/i386/clone.S
index 02f561927e..b60bc8ed92 100644
--- a/sysdeps/unix/sysv/linux/i386/clone.S
+++ b/sysdeps/unix/sysv/linux/i386/clone.S
@@ -71,6 +71,7 @@ ENTRY(__clone)
thread_start:
subl %ebp,%ebp /* terminate the stack frame */
call *%ebx
+ pushl %eax
#ifdef PIC
call _exit@PLT
#else
diff --git a/sysdeps/unix/sysv/linux/m68k/clone.S b/sysdeps/unix/sysv/linux/m68k/clone.S
new file mode 100644
index 0000000000..64077e00de
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/m68k/clone.S
@@ -0,0 +1,75 @@
+/* Copyright (C) 1996 Free Software Foundation, Inc.
+ Contributed by Andreas Schwab (schwab@issan.informatik.uni-dortmund.de)
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library 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
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB. If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA. */
+
+/* clone is even more special than fork as it mucks with stacks
+ and invokes a function in the right context after its all over. */
+
+#include <sysdep.h>
+#include <errnos.h>
+
+/* int clone (int (*fn) (), void *child_stack, int flags, int nargs, ...) */
+
+ .text
+ENTRY (__clone)
+ /* Sanity check arguments. */
+ movel #-EINVAL, %d0
+ movel 4(%sp), %a0 /* no NULL function pointers */
+ tstl %a0
+ jeq syscall_error
+ movel 8(%sp), %a1 /* no NULL stack pointers */
+ tstl %a1
+ jeq syscall_error
+ movel 16(%sp), %d1 /* no negative argument counts */
+ jmi syscall_error
+
+ /* Allocate space on the new stack and copy args over */
+ movel %d1, %d0
+ negl %d0
+ lea (%a1,%d0.l*4), %a1
+ jeq 2f
+1: movel 16(%sp,%d1.l*4), -4(%a1,%d1.l*4)
+ subql #1, %d1
+ jne 1b
+2:
+
+ /* Do the system call */
+ exg %d2, %a1 /* save %d2 and get stack pointer */
+ movel 12(%sp), %d1 /* get flags */
+ movel #SYS_ify (clone), %d0
+ trap #0
+ exg %d2, %a1 /* restore %d2 */
+
+ tstl %d0
+ jmi syscall_error
+ jeq thread_start
+
+ rts
+
+ SYSCALL_ERROR_HANDLER
+
+thread_start:
+ subl %fp, %fp /* terminate the stack frame */
+ jsr (%a0)
+ movel %d0, -(%sp)
+#ifdef PIC
+ bsrl _exit@PLTPC
+#else
+ jbsr _exit
+#endif
+
+weak_alias (__clone, clone)