From 706074a5bb120f78f4fd8bc40c6814f14e17e530 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 15 Aug 1996 01:23:29 +0000 Subject: [PATCH] update from main archive 960814 --- MakeTAGS | 13 +- Makerules | 9 +- config.make.in | 1 - configure.in | 2 - elf/dl-load.c | 42 +- elf/dl-lookup.c | 19 +- elf/dl-reloc.c | 4 +- elf/dl-runtime.c | 4 +- elf/dl-symbol.c | 2 +- elf/dlsym.c | 2 +- elf/link.h | 14 +- elf/rtld.c | 4 +- manual/examples/strdupa.c | 19 + manual/libc.texinfo | 9 + manual/nss.texi | 586 ++++++++++ manual/nsswitch.texi | 16 + manual/string.texi | 77 ++ manual/users.texi | 18 +- nss/nsswitch.c | 2 +- po/SYS_libc.pot | 1378 ++++++++++++++++++++---- po/header.pot | 1 + shadow/sgetspent_r.c | 2 +- stdlib/strtod.c | 2 +- string/strdup.c | 4 +- sysdeps/alpha/dl-machine.h | 4 +- sysdeps/i386/dl-machine.h | 10 +- sysdeps/m68k/dl-machine.h | 18 +- sysdeps/mips/dl-machine.h | 2 +- sysdeps/unix/sysv/linux/i386/clone.S | 1 + sysdeps/unix/sysv/linux/{i386 => m68k}/clone.S | 75 +- 30 files changed, 2040 insertions(+), 300 deletions(-) create mode 100644 manual/examples/strdupa.c create mode 100644 manual/nss.texi create mode 100644 manual/nsswitch.texi copy sysdeps/unix/sysv/linux/{i386 => m68k}/clone.S (51%) 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 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 +#include +#include + +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 +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Free Software Foundation, Inc. +# FIRST AUTHOR , 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 \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 \n" "Language-Team: LANGUAGE \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: must be greater than \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 " character must not be in class `%s'" +msgstr "" + +#: locale/programs/ld-ctype.c:316 +#, c-format +msgid " 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 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 must be greater than the value of " +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 . */ 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/i386/clone.S b/sysdeps/unix/sysv/linux/m68k/clone.S similarity index 51% copy from sysdeps/unix/sysv/linux/i386/clone.S copy to sysdeps/unix/sysv/linux/m68k/clone.S index 02f561927e..64077e00de 100644 --- a/sysdeps/unix/sysv/linux/i386/clone.S +++ b/sysdeps/unix/sysv/linux/m68k/clone.S @@ -1,5 +1,5 @@ /* Copyright (C) 1996 Free Software Foundation, Inc. - Contributed by Richard Henderson (rth@tamu.edu) + 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 @@ -16,65 +16,60 @@ 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 +/* 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 #include -/* int clone(int (*fn)(), void *child_stack, int flags, int nargs, ...) */ +/* int clone (int (*fn) (), void *child_stack, int flags, int nargs, ...) */ .text -ENTRY(__clone) +ENTRY (__clone) /* Sanity check arguments. */ - movl $-EINVAL,%eax - movl 4(%esp),%ecx /* no NULL function pointers */ - testl %ecx,%ecx - jz syscall_error - movl 8(%esp),%ecx /* no NULL stack pointers */ - testl %ecx,%ecx - jz syscall_error - movl 16(%esp),%edx /* no negative argument counts */ - testl %edx,%edx - js syscall_error + 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 */ - movl %edx,%eax - negl %eax - lea -4(%ecx,%eax,4),%ecx - jz 2f -1: movl 16(%esp,%edx,4),%eax - movl %eax,0(%ecx,%edx,4) - dec %edx - jnz 1b + 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: - /* Save the function pointer as the zeroth argument. - It will be popped off in the child in the ebx frobbing below. */ - movl 4(%esp),%eax - movl %eax,0(%ecx) /* Do the system call */ - pushl %ebx - movl 16(%esp),%ebx - movl $SYS_ify(clone),%eax - int $0x80 - popl %ebx + 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 */ - test %eax,%eax - jl syscall_error - jz thread_start + tstl %d0 + jmi syscall_error + jeq thread_start - ret + rts SYSCALL_ERROR_HANDLER thread_start: - subl %ebp,%ebp /* terminate the stack frame */ - call *%ebx + subl %fp, %fp /* terminate the stack frame */ + jsr (%a0) + movel %d0, -(%sp) #ifdef PIC - call _exit@PLT + bsrl _exit@PLTPC #else - call _exit + jbsr _exit #endif -weak_alias(__clone, clone) +weak_alias (__clone, clone) -- 2.11.4.GIT