summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2006-05-19 16:04:10 +0000
committerJakub Jelinek <jakub@redhat.com>2006-05-19 16:04:10 +0000
commit4cad81b6e72ed99c7816f28ad6828196b2ac7b65 (patch)
tree418c1c32beba4d79ae71206b90fbb6a8847eca2a
parent3ec0d26c76d6905501034692d05bddbabae64e76 (diff)
Updated to fedora-glibc-20060519T1550cvs/fedora-glibc-2_4_90-8
-rw-r--r--ChangeLog174
-rw-r--r--fedora/branch.mk4
-rw-r--r--fedora/glibc.spec.in8
-rw-r--r--iconv/gconv_builtin.h5
-rw-r--r--iconv/gconv_conf.c71
-rw-r--r--iconv/gconv_int.h4
-rw-r--r--include/arpa/nameser.h2
-rw-r--r--include/rpc/auth.h6
-rw-r--r--include/rpc/key_prot.h22
-rw-r--r--include/rpc/pmap_prot.h6
-rw-r--r--include/rpc/pmap_rmt.h6
-rw-r--r--include/rpc/xdr.h62
-rw-r--r--include/rpcsvc/nis_callback.h7
-rw-r--r--include/rpcsvc/yp.h8
-rw-r--r--include/rpcsvc/ypupd.h2
-rw-r--r--intl/dcigettext.c5
-rw-r--r--locale/findlocale.c11
-rw-r--r--locale/loadlocale.c4
-rw-r--r--locale/localeinfo.h20
-rw-r--r--locale/newlocale.c5
-rw-r--r--locale/programs/ld-time.c15
-rw-r--r--locale/setlocale.c31
-rw-r--r--math/complex.h2
-rw-r--r--misc/getusershell.c23
-rw-r--r--nis/nis_call.c83
-rw-r--r--nis/nis_callback.c42
-rw-r--r--nis/nis_error.c84
-rw-r--r--nis/nis_error.h48
-rw-r--r--nis/nis_xdr.c4
-rw-r--r--nis/nis_xdr.h36
-rw-r--r--nis/nss_compat/compat-grp.c8
-rw-r--r--nis/nss_compat/compat-initgroups.c6
-rw-r--r--nis/nss_compat/compat-pwd.c8
-rw-r--r--nis/nss_compat/compat-spwd.c8
-rw-r--r--nis/yp_xdr.c8
-rw-r--r--nis/ypupdate_xdr.c2
-rw-r--r--nptl/ChangeLog16
-rw-r--r--nptl/pthread_key_create.c55
-rw-r--r--nptl/sem_open.c4
-rw-r--r--nptl/semaphoreP.h4
-rw-r--r--nptl/sysdeps/unix/sysv/linux/fork.h4
-rw-r--r--nptl/sysdeps/unix/sysv/linux/pthread_attr_setaffinity.c4
-rw-r--r--nptl/sysdeps/unix/sysv/linux/pthread_setaffinity.c4
-rw-r--r--nscd/nscd_getai.c4
-rw-r--r--nscd/nscd_getgr_r.c5
-rw-r--r--nscd/nscd_gethst_r.c4
-rw-r--r--nscd/nscd_initgroups.c4
-rw-r--r--posix/gai.conf26
-rw-r--r--resolv/res_debug.c14
-rw-r--r--stdlib/fmtmsg.c4
-rw-r--r--stdlib/longlong.h5
-rw-r--r--sunrpc/key_call.c1
-rw-r--r--sysdeps/posix/getaddrinfo.c17
-rw-r--r--sysdeps/unix/sysv/linux/getdents.c4
-rw-r--r--sysdeps/unix/sysv/linux/ifaddrs.c5
-rw-r--r--sysdeps/unix/sysv/linux/sched_getaffinity.c7
-rw-r--r--sysdeps/unix/sysv/linux/sys/inotify.h11
57 files changed, 718 insertions, 324 deletions
diff --git a/ChangeLog b/ChangeLog
index 92259aa5b4..944e6bcd6e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,177 @@
+2006-05-19 Ulrich Drepper <drepper@redhat.com>
+
+ * nis/nis_callback.c (__nis_create_callback): Calls to
+ svcudp_bufcreate and svctcp_create can fail. Free ->xprt if
+ asprintf call fails.
+
+ * sysdeps/unix/sysv/linux/ifaddrs.c (__netlink_sendreq): Make sure
+ no uninitialized memory is passed to sendto.
+
+2006-05-18 Ulrich Drepper <drepper@redhat.com>
+
+ * nis/nis_callback.c (__nis_create_callback): Use asprinf instead
+ of snprintf+strdup. Handle OOM.
+ * nis/nis_callback.c (__nis_create_callback): Allocate cb and
+ cb->serv together. Remove now obsolete free calls.
+ (__nis_destroy_callback): Remove now obsolete free call.
+
+2006-05-18 David Woodhouse <dwmw2@infradead.org>
+
+ * sysdeps/posix/getaddrinfo.c: Add unique labels to the default
+ RFC3484 precedence table for fec0::/10 and fc00::/7 (site-local
+ and ULA respectively). Set precedence for IPv4 address to 10 as
+ defined in RFC3484 for preferring IPv6.
+ * posix/gai.conf: Update to match the new default tables.
+
+2006-05-18 Jakub Jelinek <jakub@redhat.com>
+
+ * nis/nss_compat/compat-pwd.c (internal_setpwent): If nss_set*ent
+ returned NSS_STATUS_UNAVAIL, still return NSS_STATUS_SUCCESS.
+ * nis/nss_compat/compat-spwd.c (internal_setspent): Likewise.
+ * nis/nss_compat/compat-grp.c (internal_setgrent): Likewise.
+
+ * nis/nss_compat/compat-initgroups.c (nss_setgrent, nss_endgrent):
+ Removed.
+ (init_nss_interface): Remove initialization of these variables.
+
+2006-05-18 Ulrich Drepper <drepper@redhat.com>
+
+ * nis/nis_call.c (rec_dirsearch): Little optimization: pull
+ nis_free_directory forward to avoid duplication.
+
+2006-05-17 Ulrich Drepper <drepper@redhat.com>
+
+ * nis/nis_call.c (rec_dirsearch): Handle __nis_finddirectory and
+ rec_dirsearch returning NULL.
+ (first_shoot): Handle __nis_finddirectory returning NULL.
+ (__nisfind_server): Fix leak when rec_dirsearch returns NULL.
+
+ * sysdeps/unix/sysv/linux/sys/inotify.h: Define IN_CLOSE, IN_MOVE,
+ IN_ONLYDIR, IN_DONT_FOLLOW, and IN_MASK_ADD.
+
+2006-05-17 Jakub Jelinek <jakub@redhat.com>
+
+ * sunrpc/key_call.c (getkeyserv_handle): Call auth_destroy if
+ pid changed.
+
+2006-05-15 Ulrich Drepper <drepper@redhat.com>
+
+ * include/rpc/pmap_prot.h: Mark all functions as hidden.
+
+ * nscd/nscd_initgroups.c: Mark __gr_map_handle as hidden.
+ * nscd/nscd_getgr_r.c: Likewise.
+
+ * include/rpc/pmap_rmt.h: Mark all functions as hidden.
+
+ * nscd/nscd_getai.c (__hst_map_handle): Mark as hidden.
+ * nscd/nscd_gethst_r.c (__hst_map_handle): Likewise.
+
+ * stdlib/longlong.h (__clz_tab): Mark as hidden.
+
+ * iconv/gconv_int.h: Mark __gconv_lock as hidden.
+
+ * include/rpc/key_prot.h: Mark all _internal functions as hidden.
+
+ * include/rpc/auth.h: Mark xdr_des_block_internal and
+ xdr_opaque_auth_internal as hidden.
+
+ * sysdeps/unix/sysv/linux/getdents.c: Mark __have_no_getdents64 as
+ hidden.
+
+ * include/rpc/xdr.h: Mark all _internal functions as hidden.
+
+ * misc/getusershell.c (okshells): Don't use static initializers,
+ do it dynamically.
+
+ * stdlib/fmtmsg.c (keywords): Change type of len element to
+ uint32_t to not waste space on 64bit machines.
+
+ * locale/setlocale.c: Change _nl_category_names into a string.
+ Add new _nl_category_name_idxs. Change all users.
+ * locale/localeinfo.h: Adjust declaration of _nl_category_names.
+ Declare _nl_category_name_idxs.
+ * locale/findlocale.c: Adjust for _nl_category_names change.
+ * locale/loadlocale.c: Likewise.
+ * locale/newlocale.c: Likewise.
+ * intl/dcigettext.c: Likewise.
+
+ * iconv/gconv_conf.c (add_alias): Move actual alias handling to...
+ (add_alias2): ...here. New function.
+ (__gconv_read_conf): Simplify builtin alias handling.
+ (builtin_aliases): Convert to string to avoid relocations.
+ * iconv/gconv_builtin.h: Add comment about correct formatting.
+
+2006-05-15 Jakub Jelinek <jakub@redhat.com>
+
+ * resolv/res_debug.c (loc_ntoa): Make error const.
+
+2006-05-14 Andreas Schwab <schwab@suse.de>
+
+ * math/complex.h [__LDBL_COMPAT]: Use __REDIRECT_NTH.
+
+2006-05-12 Jakub Jelinek <jakub@redhat.com>
+
+ * sysdeps/unix/sysv/linux/sched_getaffinity.c: Include sys/param.h.
+ (__sched_getaffinity_new): Don't crash if cpusetsize is smaller than
+ sizeof (cpu_set_t).
+
+2006-05-11 Ulrich Drepper <drepper@redhat.com>
+
+ * resolv/res_debug.c (loc_ntoa): Define error as array, not pointer.
+
+ * include/arpa/nameser.h: Declare _ns_flagdata as hidden.
+
+ * nis/yp_xdr.c: Add libnsl_hidden_def for xdr_ypresp_master.
+ * include/rpcsvc/yp.h: Add libnsl_hidden_proto for xdr_ypresp_master.
+
+ * nis/yp_xdr.c: Add libnsl_hidden_def for xdr_ypbind_resp.
+ * include/rpcsvc/yp.h: Add libnsl_hidden_proto for xdr_ypbind_resp.
+
+ * nis/nis_xdr.c: Add libnsl_hidden_def for xdr_cback_data.
+ * include/rpcsvc/nis_callback.h: Add libnsl_hidden_proto for
+ xdr_cback_data.
+
+ * nis/ypupdate_xdr.c: Add libnsl_hidden_def for xdr_ypupdate_args.
+ * include/rpcsvc/ypupd.h: Add libnsl_hidden_proto for
+ xdr_ypupdate_args.
+
+ * nis/yp_xdr.c: Add libnsl_hidden_def for xdr_ypresp_order.
+ * include/rpcsvc/yp.h: Add libnsl_hidden_proto for xdr_ypresp_order.
+
+ * nis/yp_xdr.c: Add libnsl_hidden_def for xdr_ypresp_maplist.
+ * include/rpcsvc/yp.h: Add libnsl_hidden_proto for xdr_ypresp_maplist.
+
+ * nis/nis_xdr.c: Add libnsl_hidden_def for xdr_obj_p.
+ * include/rpcsvc/nis_callback.h: New file.
+
+ * nis/yp_xdr.c: Add libnsl_hidden_def for xdr_ypresp_val.
+ * include/rpcsvc/yp.h: Add libnsl_hidden_proto for xdr_ypresp_val.
+
+ * nis/yp_xdr.c: Add libnsl_hidden_def for xdr_ypreq_nokey.
+ * include/rpcsvc/yp.h: Add libnsl_hidden_proto for xdr_ypreq_nokey.
+
+ * nis/yp_xdr.c: Add libnsl_hidden_def for xdr_ypmaplist.
+ * include/rpcsvc/yp.h: Add libnsl_hidden_proto for xdr_ypmaplist.
+
+ * nis/yp_xdr.c: Add libnsl_hidden_def for xdr_ypreq_nokey.
+ * include/rpcsvc/yp.h: Add libnsl_hidden_proto for xdr_ypreq_nokey.
+
+ * nis/ypupdate_xdr.c: Add libnsl_hidden_def for xdr_ypdelete_args.
+ * include/rpcsvc/ypupd.h: Add libnsl_hidden_proto for
+ xdr_ypdelete_args.
+
+ * nis/nis_xdr.h: Mark all functions as hidden. Remove
+ __BEGIN_DECLS and __END_DECLS, the header is not installed.
+
+ * nis/nis_error.c: Remove table of strings. Use position
+ independent mechanism.
+ * nis/nis_error.h: New file.
+
+2006-05-11 Jakub Jelinek <jakub@redhat.com>
+
+ * locale/programs/ld-time.c (time_finish): If wide era name or
+ format aren't provided, set both wname and wformat to L"".
+
2006-05-10 Ulrich Drepper <drepper@redhat.com>
* sysdeps/unix/sysv/linux/tcgetattr.c (__tcgetattr): Only store
diff --git a/fedora/branch.mk b/fedora/branch.mk
index 3f536bb857..cec9684bc5 100644
--- a/fedora/branch.mk
+++ b/fedora/branch.mk
@@ -3,5 +3,5 @@ glibc-branch := fedora
glibc-base := HEAD
DIST_BRANCH := devel
COLLECTION := dist-fc4
-fedora-sync-date := 2006-05-11 13:25 UTC
-fedora-sync-tag := fedora-glibc-20060511T1325
+fedora-sync-date := 2006-05-19 15:50 UTC
+fedora-sync-tag := fedora-glibc-20060519T1550
diff --git a/fedora/glibc.spec.in b/fedora/glibc.spec.in
index bbdbce1284..761bb5b799 100644
--- a/fedora/glibc.spec.in
+++ b/fedora/glibc.spec.in
@@ -1,4 +1,4 @@
-%define glibcrelease 7
+%define glibcrelease 8
%define auxarches i586 i686 athlon sparcv9 alphaev6
%define prelinkarches noarch
%define xenarches i686 athlon
@@ -1392,6 +1392,12 @@ rm -f *.filelist*
%endif
%changelog
+* Fri May 19 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-8
+- update from CVS
+ - fix nss_compat when SETENT_BATCH_READ=TRUE is in /etc/default/nss
+ - fix RFC3484 precedence table for site-local and ULA addresses (#188364)
+ - fix a sunrpc memory leak
+
* Thu May 11 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-7
- update from CVS
- fix tcgetattr (#177965)
diff --git a/iconv/gconv_builtin.h b/iconv/gconv_builtin.h
index bd34c256dc..ef9ab8d7cf 100644
--- a/iconv/gconv_builtin.h
+++ b/iconv/gconv_builtin.h
@@ -1,5 +1,5 @@
/* Builtin transformations.
- Copyright (C) 1997-1999, 2000-2002 Free Software Foundation, Inc.
+ Copyright (C) 1997-1999, 2000-2002, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -18,6 +18,9 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
+/* All encoding named must be in upper case. There must be no extra
+ spaces. */
+
BUILTIN_ALIAS ("UCS4//", "ISO-10646/UCS4/")
BUILTIN_ALIAS ("UCS-4//", "ISO-10646/UCS4/")
BUILTIN_ALIAS ("UCS-4BE//", "ISO-10646/UCS4/")
diff --git a/iconv/gconv_conf.c b/iconv/gconv_conf.c
index ad5a7ee105..22ffa4f41c 100644
--- a/iconv/gconv_conf.c
+++ b/iconv/gconv_conf.c
@@ -1,5 +1,5 @@
/* Handle configuration data.
- Copyright (C) 1997-2003, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1997-2003, 2005, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -78,11 +78,11 @@ static struct gconv_module builtin_modules[] =
#undef BUILTIN_ALIAS
};
-static const char *const builtin_aliases[] =
+static const char builtin_aliases[] =
{
#define BUILTIN_TRANSFORMATION(From, To, Cost, Name, Fct, BtowcFct, \
MinF, MaxF, MinT, MaxT)
-#define BUILTIN_ALIAS(From, To) From " " To,
+#define BUILTIN_ALIAS(From, To) From "\0" To "\0"
#include "gconv_builtin.h"
@@ -124,13 +124,41 @@ detect_conflict (const char *alias)
}
+/* The actual code to add aliases. */
+static void
+add_alias2 (const char *from, const char *to, const char *wp, void *modules)
+{
+ /* Test whether this alias conflicts with any available module. */
+ if (detect_conflict (from))
+ /* It does conflict, don't add the alias. */
+ return;
+
+ struct gconv_alias *new_alias = (struct gconv_alias *)
+ malloc (sizeof (struct gconv_alias) + (wp - from));
+ if (new_alias != NULL)
+ {
+ void **inserted;
+
+ new_alias->fromname = memcpy ((char *) new_alias
+ + sizeof (struct gconv_alias),
+ from, wp - from);
+ new_alias->toname = new_alias->fromname + (to - from);
+
+ inserted = (void **) __tsearch (new_alias, &__gconv_alias_db,
+ __gconv_alias_compare);
+ if (inserted == NULL || *inserted != new_alias)
+ /* Something went wrong, free this entry. */
+ free (new_alias);
+ }
+}
+
+
/* Add new alias. */
static void
add_alias (char *rp, void *modules)
{
/* We now expect two more string. The strings are normalized
(converted to UPPER case) and strored in the alias database. */
- struct gconv_alias *new_alias;
char *from, *to, *wp;
while (__isspace_l (*rp, _nl_C_locobj_ptr))
@@ -152,28 +180,7 @@ add_alias (char *rp, void *modules)
return;
*wp++ = '\0';
- /* Test whether this alias conflicts with any available module. */
- if (detect_conflict (from))
- /* It does conflict, don't add the alias. */
- return;
-
- new_alias = (struct gconv_alias *)
- malloc (sizeof (struct gconv_alias) + (wp - from));
- if (new_alias != NULL)
- {
- void **inserted;
-
- new_alias->fromname = memcpy ((char *) new_alias
- + sizeof (struct gconv_alias),
- from, wp - from);
- new_alias->toname = new_alias->fromname + (to - from);
-
- inserted = (void **) __tsearch (new_alias, &__gconv_alias_db,
- __gconv_alias_compare);
- if (inserted == NULL || *inserted != new_alias)
- /* Something went wrong, free this entry. */
- free (new_alias);
- }
+ add_alias2 (from, to, wp, modules);
}
@@ -588,12 +595,16 @@ __gconv_read_conf (void)
}
/* Add aliases for builtin conversions. */
- cnt = sizeof (builtin_aliases) / sizeof (builtin_aliases[0]);
- while (cnt > 0)
+ const char *cp = builtin_aliases;
+ do
{
- char *copy = strdupa (builtin_aliases[--cnt]);
- add_alias (copy, modules);
+ const char *from = cp;
+ const char *to = __rawmemchr (from, '\0') + 1;
+ cp = __rawmemchr (to, '\0') + 1;
+
+ add_alias2 (from, to, cp, modules);
}
+ while (*cp != '\0');
/* Restore the error number. */
__set_errno (save_errno);
diff --git a/iconv/gconv_int.h b/iconv/gconv_int.h
index ace2bae1c6..8d9cdaefc2 100644
--- a/iconv/gconv_int.h
+++ b/iconv/gconv_int.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997-2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+/* Copyright (C) 1997-2005, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -128,7 +128,7 @@ extern struct gconv_module *__gconv_modules_db attribute_hidden;
extern const char *__gconv_path_envvar attribute_hidden;
/* Lock for the conversion database content. */
-__libc_lock_define (extern, __gconv_lock);
+__libc_lock_define (extern, __gconv_lock attribute_hidden)
/* The gconv functions expects the name to be in upper case and complete,
diff --git a/include/arpa/nameser.h b/include/arpa/nameser.h
index 449f5b452e..efbe956602 100644
--- a/include/arpa/nameser.h
+++ b/include/arpa/nameser.h
@@ -7,6 +7,8 @@
#include <stdint.h>
#include <netinet/in.h>
+extern struct _ns_flagdata _ns_flagdata[] attribute_hidden;
+
#if _STRING_ARCH_unaligned
# undef NS_GET16
diff --git a/include/rpc/auth.h b/include/rpc/auth.h
index a5e290b898..bc433b5930 100644
--- a/include/rpc/auth.h
+++ b/include/rpc/auth.h
@@ -22,8 +22,10 @@ DECLARE_NSS_PROTOTYPES (nisplus)
#undef DECLARE_NSS_PROTOTYPES
-extern bool_t xdr_des_block_internal (XDR *__xdrs, des_block *__blkp);
-extern bool_t xdr_opaque_auth_internal (XDR *, struct opaque_auth *);
+extern bool_t xdr_des_block_internal (XDR *__xdrs, des_block *__blkp)
+ attribute_hidden;
+extern bool_t xdr_opaque_auth_internal (XDR *, struct opaque_auth *)
+ attribute_hidden;
extern AUTH *authunix_create_internal (char *__machname, __uid_t __uid,
__gid_t __gid, int __len,
diff --git a/include/rpc/key_prot.h b/include/rpc/key_prot.h
index ee30c65d3b..2da5de7f70 100644
--- a/include/rpc/key_prot.h
+++ b/include/rpc/key_prot.h
@@ -1,11 +1,15 @@
#include <sunrpc/rpc/key_prot.h>
-extern bool_t xdr_cryptkeyres_internal (XDR *xdrs, cryptkeyres *objp);
-extern bool_t xdr_keystatus_internal (XDR *, keystatus*);
-extern bool_t xdr_keybuf_internal (XDR *, keybuf);
-extern bool_t xdr_cryptkeyarg_internal (XDR *, cryptkeyarg*);
-extern bool_t xdr_cryptkeyarg2_internal (XDR *, cryptkeyarg2*);
-extern bool_t xdr_key_netstres_internal (XDR *, key_netstres*);
-extern bool_t xdr_key_netstarg_internal (XDR *, key_netstarg*);
-extern bool_t xdr_netnamestr_internal (XDR *, netnamestr*);
-extern bool_t xdr_unixcred_internal (XDR *, unixcred*);
+extern bool_t xdr_cryptkeyres_internal (XDR *xdrs, cryptkeyres *objp)
+ attribute_hidden;
+extern bool_t xdr_keystatus_internal (XDR *, keystatus*) attribute_hidden;
+extern bool_t xdr_keybuf_internal (XDR *, keybuf) attribute_hidden;
+extern bool_t xdr_cryptkeyarg_internal (XDR *, cryptkeyarg*) attribute_hidden;
+extern bool_t xdr_cryptkeyarg2_internal (XDR *, cryptkeyarg2*)
+ attribute_hidden;
+extern bool_t xdr_key_netstres_internal (XDR *, key_netstres*)
+ attribute_hidden;
+extern bool_t xdr_key_netstarg_internal (XDR *, key_netstarg*)
+ attribute_hidden;
+extern bool_t xdr_netnamestr_internal (XDR *, netnamestr*) attribute_hidden;
+extern bool_t xdr_unixcred_internal (XDR *, unixcred*) attribute_hidden;
diff --git a/include/rpc/pmap_prot.h b/include/rpc/pmap_prot.h
index e50d5e0c79..902faba019 100644
--- a/include/rpc/pmap_prot.h
+++ b/include/rpc/pmap_prot.h
@@ -1,5 +1,7 @@
#include <sunrpc/rpc/pmap_prot.h>
-extern bool_t xdr_pmap_internal (XDR *__xdrs, struct pmap *__regs);
-extern bool_t xdr_pmaplist_internal (XDR *__xdrs, struct pmaplist **__rp);
+extern bool_t xdr_pmap_internal (XDR *__xdrs, struct pmap *__regs)
+ attribute_hidden;
+extern bool_t xdr_pmaplist_internal (XDR *__xdrs, struct pmaplist **__rp)
+ attribute_hidden;
diff --git a/include/rpc/pmap_rmt.h b/include/rpc/pmap_rmt.h
index f8e586c27e..63e41cab28 100644
--- a/include/rpc/pmap_rmt.h
+++ b/include/rpc/pmap_rmt.h
@@ -1,5 +1,7 @@
#include <sunrpc/rpc/pmap_rmt.h>
extern bool_t xdr_rmtcall_args_internal (XDR *__xdrs,
- struct rmtcallargs *__crp);
-extern bool_t xdr_rmtcallres_internal (XDR *__xdrs, struct rmtcallres *__crp);
+ struct rmtcallargs *__crp)
+ attribute_hidden;
+extern bool_t xdr_rmtcallres_internal (XDR *__xdrs, struct rmtcallres *__crp)
+ attribute_hidden;
diff --git a/include/rpc/xdr.h b/include/rpc/xdr.h
index ab43f83dcb..e10d53e3b1 100644
--- a/include/rpc/xdr.h
+++ b/include/rpc/xdr.h
@@ -1,36 +1,54 @@
#include <sunrpc/rpc/xdr.h>
-extern bool_t xdr_void_internal (void);
-extern bool_t xdr_bool_internal (XDR *__xdrs, bool_t *__bp);
-extern bool_t xdr_u_hyper_internal (XDR *__xdrs, u_quad_t *__ullp);
-extern bool_t xdr_u_long_internal (XDR *__xdrs, u_long *__ulp);
-extern bool_t xdr_u_int_internal (XDR *__xdrs, u_int *__up);
-extern bool_t xdr_u_short_internal (XDR *__xdrs, u_short *__usp);
-extern bool_t xdr_hyper_internal (XDR *__xdrs, quad_t *__ullp);
-extern bool_t xdr_long_internal (XDR *__xdrs, long *__ulp);
-extern bool_t xdr_int_internal (XDR *__xdrs, int *__up);
-extern bool_t xdr_short_internal (XDR *__xdrs, short *__usp);
-extern bool_t xdr_enum_internal (XDR *__xdrs, enum_t *__ep);
+extern bool_t xdr_void_internal (void) attribute_hidden;
+extern bool_t xdr_bool_internal (XDR *__xdrs, bool_t *__bp) attribute_hidden;
+extern bool_t xdr_u_hyper_internal (XDR *__xdrs, u_quad_t *__ullp)
+ attribute_hidden;
+extern bool_t xdr_u_long_internal (XDR *__xdrs, u_long *__ulp)
+ attribute_hidden;
+extern bool_t xdr_u_int_internal (XDR *__xdrs, u_int *__up)
+ attribute_hidden;
+extern bool_t xdr_u_short_internal (XDR *__xdrs, u_short *__usp)
+ attribute_hidden;
+extern bool_t xdr_hyper_internal (XDR *__xdrs, quad_t *__ullp)
+ attribute_hidden;
+extern bool_t xdr_long_internal (XDR *__xdrs, long *__ulp)
+ attribute_hidden;
+extern bool_t xdr_int_internal (XDR *__xdrs, int *__up)
+ attribute_hidden;
+extern bool_t xdr_short_internal (XDR *__xdrs, short *__usp)
+ attribute_hidden;
+extern bool_t xdr_enum_internal (XDR *__xdrs, enum_t *__ep)
+ attribute_hidden;
extern bool_t xdr_union_internal (XDR *__xdrs, enum_t *__dscmp, char *__unp,
const struct xdr_discrim *choices,
- xdrproc_t dfault);
+ xdrproc_t dfault) attribute_hidden;
extern bool_t xdr_string_internal (XDR *__xdrs, char **__cpp, u_int __maxsize);
extern bool_t xdr_array_internal (XDR * _xdrs, caddr_t *__addrp,
u_int *__sizep, u_int __maxsize,
- u_int __elsize, xdrproc_t __elproc);
+ u_int __elsize, xdrproc_t __elproc)
+ attribute_hidden;
extern bool_t xdr_reference_internal (XDR *__xdrs, caddr_t *__xpp,
- u_int __size, xdrproc_t __proc);
+ u_int __size, xdrproc_t __proc)
+ attribute_hidden;
extern bool_t xdr_bytes_internal (XDR *xdrs, char **cpp, u_int *sizep,
- u_int maxsize);
-extern bool_t xdr_netobj_internal (XDR *__xdrs, struct netobj *__np);
-extern bool_t xdr_opaque_internal (XDR *__xdrs, caddr_t __cp, u_int __cnt);
+ u_int maxsize) attribute_hidden;
+extern bool_t xdr_netobj_internal (XDR *__xdrs, struct netobj *__np)
+ attribute_hidden;
+extern bool_t xdr_opaque_internal (XDR *__xdrs, caddr_t __cp, u_int __cnt)
+ attribute_hidden;
extern void xdrrec_create_internal (XDR *__xdrs, u_int __sendsize,
u_int __recvsize, caddr_t __tcp_handle,
int (*__readit) (char *, char *, int),
- int (*__writeit) (char *, char *, int));
-extern void xdrmem_create_internal (XDR *, const caddr_t, u_int, enum xdr_op);
-extern bool_t xdrrec_endofrecord_internal (XDR *__xdrs, bool_t __sendnow);
-extern bool_t xdrrec_skiprecord_internal (XDR *__xdrs);
-extern bool_t xdrrec_eof_internal (XDR *__xdrs);
+ int (*__writeit) (char *, char *, int))
+ attribute_hidden;
+extern void xdrmem_create_internal (XDR *, const caddr_t, u_int, enum xdr_op)
+ attribute_hidden;
+extern bool_t xdrrec_endofrecord_internal (XDR *__xdrs, bool_t __sendnow)
+ attribute_hidden;
+extern bool_t xdrrec_skiprecord_internal (XDR *__xdrs)
+ attribute_hidden;
+extern bool_t xdrrec_eof_internal (XDR *__xdrs)
+ attribute_hidden;
libc_hidden_proto (xdrstdio_create)
diff --git a/include/rpcsvc/nis_callback.h b/include/rpcsvc/nis_callback.h
new file mode 100644
index 0000000000..dfa9cd3ef7
--- /dev/null
+++ b/include/rpcsvc/nis_callback.h
@@ -0,0 +1,7 @@
+#ifndef _RPCSVC_NIS_CALLBACK_H
+#include <nis/rpcsvc/nis_callback.h>
+
+libnsl_hidden_proto (xdr_obj_p)
+libnsl_hidden_proto (xdr_cback_data)
+
+#endif
diff --git a/include/rpcsvc/yp.h b/include/rpcsvc/yp.h
index cc4e00fd0b..04a973eae7 100644
--- a/include/rpcsvc/yp.h
+++ b/include/rpcsvc/yp.h
@@ -14,5 +14,13 @@ libnsl_hidden_proto (xdr_ypresp_all)
libnsl_hidden_proto (xdr_yppush_status)
libnsl_hidden_proto (xdr_ypbind_resptype)
libnsl_hidden_proto (xdr_ypbind_binding)
+libnsl_hidden_proto (xdr_ypreq_nokey)
+libnsl_hidden_proto (xdr_ypmaplist)
+libnsl_hidden_proto (xdr_ypreq_key)
+libnsl_hidden_proto (xdr_ypresp_val)
+libnsl_hidden_proto (xdr_ypresp_maplist)
+libnsl_hidden_proto (xdr_ypresp_order)
+libnsl_hidden_proto (xdr_ypbind_resp)
+libnsl_hidden_proto (xdr_ypresp_master)
#endif
diff --git a/include/rpcsvc/ypupd.h b/include/rpcsvc/ypupd.h
index 68116e629f..7601971512 100644
--- a/include/rpcsvc/ypupd.h
+++ b/include/rpcsvc/ypupd.h
@@ -2,5 +2,7 @@
#include <nis/rpcsvc/ypupd.h>
libnsl_hidden_proto (xdr_yp_buf)
+libnsl_hidden_proto (xdr_ypdelete_args)
+libnsl_hidden_proto (xdr_ypupdate_args)
#endif
diff --git a/intl/dcigettext.c b/intl/dcigettext.c
index f294dedf2f..b56196ccbe 100644
--- a/intl/dcigettext.c
+++ b/intl/dcigettext.c
@@ -1,5 +1,5 @@
/* Implementation of the internal dcigettext function.
- Copyright (C) 1995-2002,2003,2004,2005 Free Software Foundation, Inc.
+ Copyright (C) 1995-2005, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -286,7 +286,8 @@ static const char *guess_category_value PARAMS ((int category,
internal_function;
#ifdef _LIBC
# include "../locale/localeinfo.h"
-# define category_to_name(category) _nl_category_names[category]
+# define category_to_name(category) \
+ _nl_category_names.str + _nl_category_name_idxs[category]
#else
static const char *category_to_name PARAMS ((int category)) internal_function;
#endif
diff --git a/locale/findlocale.c b/locale/findlocale.c
index 04b197d266..ea24170df5 100644
--- a/locale/findlocale.c
+++ b/locale/findlocale.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996-2001, 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 1996-2001, 2002, 2003, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@@ -80,7 +80,8 @@ _nl_find_locale (const char *locale_path, size_t locale_path_len,
variables. */
*name = getenv ("LC_ALL");
if (*name == NULL || (*name)[0] == '\0')
- *name = getenv (_nl_category_names[category]);
+ *name = getenv (_nl_category_names.str
+ + _nl_category_name_idxs[category]);
if (*name == NULL || (*name)[0] == '\0')
*name = getenv ("LANG");
}
@@ -145,7 +146,8 @@ _nl_find_locale (const char *locale_path, size_t locale_path_len,
locale_path, locale_path_len, mask,
language, territory, codeset,
normalized_codeset, modifier,
- _nl_category_names[category], 0);
+ _nl_category_names.str
+ + _nl_category_name_idxs[category], 0);
if (locale_file == NULL)
{
@@ -155,7 +157,8 @@ _nl_find_locale (const char *locale_path, size_t locale_path_len,
locale_path, locale_path_len, mask,
language, territory, codeset,
normalized_codeset, modifier,
- _nl_category_names[category], 1);
+ _nl_category_names.str
+ + _nl_category_name_idxs[category], 1);
if (locale_file == NULL)
/* This means we are out of core. */
return NULL;
diff --git a/locale/loadlocale.c b/locale/loadlocale.c
index 2a5935087c..467dff157a 100644
--- a/locale/loadlocale.c
+++ b/locale/loadlocale.c
@@ -1,5 +1,5 @@
/* Functions to read locale data files.
- Copyright (C) 1996-2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1996-2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@@ -198,7 +198,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category)
+ 5 + _nl_category_name_sizes[category] + 1);
__mempcpy (__mempcpy (__mempcpy (newp, file->filename, filenamelen),
"/SYS_", 5),
- _nl_category_names[category],
+ _nl_category_names.str + _nl_category_name_idxs[category],
_nl_category_name_sizes[category] + 1);
fd = open_not_cancel_2 (newp, O_RDONLY);
diff --git a/locale/localeinfo.h b/locale/localeinfo.h
index 3b0ed4f30b..4f746a298d 100644
--- a/locale/localeinfo.h
+++ b/locale/localeinfo.h
@@ -1,5 +1,5 @@
/* Declarations for internal libc locale interfaces
- Copyright (C) 1995-2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1995-2003, 2005, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -172,8 +172,22 @@ enum
#define _ISCTYPE(c, desc) \
(((((const uint32_t *) (desc)) - 8)[(c) >> 5] >> ((c) & 0x1f)) & 1)
-extern const char *const _nl_category_names[__LC_LAST] attribute_hidden;
-extern const size_t _nl_category_name_sizes[__LC_LAST] attribute_hidden;
+/* Category name handling variables. */
+#define CATNAMEMF(line) CATNAMEMF1 (line)
+#define CATNAMEMF1(line) str##line
+extern const union catnamestr_t
+{
+ struct
+ {
+#define DEFINE_CATEGORY(category, category_name, items, a) \
+ char CATNAMEMF (__LINE__)[sizeof (category_name)];
+#include "categories.def"
+#undef DEFINE_CATEGORY
+ };
+ char str[0];
+} _nl_category_names attribute_hidden;
+const uint8_t _nl_category_name_idxs[__LC_LAST] attribute_hidden;
+extern const uint8_t _nl_category_name_sizes[__LC_LAST] attribute_hidden;
/* Name of the standard locales. */
extern const char _nl_C_name[] attribute_hidden;
diff --git a/locale/newlocale.c b/locale/newlocale.c
index b3d4b464b1..0c31ba48ae 100644
--- a/locale/newlocale.c
+++ b/locale/newlocale.c
@@ -1,5 +1,5 @@
/* Return a reference to locale information record.
- Copyright (C) 1996, 1997, 1999, 2000, 2001, 2002, 2004, 2005
+ Copyright (C) 1996, 1997, 1999, 2000-2002, 2004, 2005, 2006
Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@@ -133,7 +133,8 @@ __newlocale (int category_mask, const char *locale, __locale_t base)
for (cnt = 0; cnt < __LC_LAST; ++cnt)
if (cnt != LC_ALL
&& (size_t) (cp - np) == _nl_category_name_sizes[cnt]
- && memcmp (np, _nl_category_names[cnt], cp - np) == 0)
+ && memcmp (np, (_nl_category_names.str
+ + _nl_category_name_idxs[cnt]), cp - np) == 0)
break;
if (cnt == __LC_LAST)
diff --git a/locale/programs/ld-time.c b/locale/programs/ld-time.c
index 78aff7fee6..4f1dcb0ce7 100644
--- a/locale/programs/ld-time.c
+++ b/locale/programs/ld-time.c
@@ -467,15 +467,22 @@ No definition for %s category found"), "LC_TIME"));
wstr = wstr ? wcschr (wstr + 1, L':') : NULL; /* end offset */
wstr = wstr ? wcschr (wstr + 1, L':') : NULL; /* end start */
wstr = wstr ? wcschr (wstr + 1, L':') : NULL; /* end end */
- time->era_entries[idx].wname = (uint32_t *) wstr + 1;
if (wstr != NULL)
{
+ time->era_entries[idx].wname = (uint32_t *) wstr + 1;
wstr = wcschr (wstr + 1, L':'); /* end name */
- *wstr = L'\0';
- time->era_entries[idx].wformat = (uint32_t *) wstr + 1;
+ if (wstr != NULL)
+ {
+ *wstr = L'\0';
+ time->era_entries[idx].wformat = (uint32_t *) wstr + 1;
+ }
+ else
+ time->era_entries[idx].wname =
+ time->era_entries[idx].wformat = (uint32_t *) L"";
}
else
- time->era_entries[idx].wformat = NULL;
+ time->era_entries[idx].wname =
+ time->era_entries[idx].wformat = (uint32_t *) L"";
}
}
diff --git a/locale/setlocale.c b/locale/setlocale.c
index 50bf8e772f..c1b8c3faec 100644
--- a/locale/setlocale.c
+++ b/locale/setlocale.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 1995-2000, 2002, 2003, 2004
+/* Copyright (C) 1991, 1992, 1995-2000, 2002, 2003, 2004, 2006
Free Software Foundation, Inc.
This file is part of the GNU C Library.
@@ -66,18 +66,27 @@ static char *const _nl_current_used[] =
#endif
-/* Define an array of category names (also the environment variable names),
- indexed by integral category. */
-const char *const _nl_category_names[] =
+/* Define an array of category names (also the environment variable names). */
+const union catnamestr_t _nl_category_names attribute_hidden =
{
+ {
#define DEFINE_CATEGORY(category, category_name, items, a) \
- [category] = category_name,
+ category_name,
#include "categories.def"
-#undef DEFINE_CATEGORY
- [LC_ALL] = "LC_ALL"
+#undef DEFINE_CATEGORY
+ }
};
+
+const uint8_t _nl_category_name_idxs[__LC_LAST] attribute_hidden =
+ {
+#define DEFINE_CATEGORY(category, category_name, items, a) \
+ [category] = offsetof (union catnamestr_t, CATNAMEMF (__LINE__)),
+#include "categories.def"
+#undef DEFINE_CATEGORY
+ };
+
/* An array of their lengths, for convenience. */
-const size_t _nl_category_name_sizes[] =
+const uint8_t _nl_category_name_sizes[] attribute_hidden =
{
#define DEFINE_CATEGORY(category, category_name, items, a) \
[category] = sizeof (category_name) - 1,
@@ -173,7 +182,7 @@ new_composite_name (int category, const char *newnames[__LC_LAST])
const char *name = (category == LC_ALL ? newnames[i] :
category == i ? newnames[0] :
_nl_global_locale.__names[i]);
- p = __stpcpy (p, _nl_category_names[i]);
+ p = __stpcpy (p, _nl_category_names.str + _nl_category_name_idxs[i]);
*p++ = '=';
p = __stpcpy (p, name);
*p++ = ';';
@@ -275,7 +284,9 @@ setlocale (int category, const char *locale)
for (cnt = 0; cnt < __LC_LAST; ++cnt)
if (cnt != LC_ALL
&& (size_t) (cp - np) == _nl_category_name_sizes[cnt]
- && memcmp (np, _nl_category_names[cnt], cp - np) == 0)
+ && (memcmp (np, (_nl_category_names.str
+ + _nl_category_name_idxs[cnt]), cp - np)
+ == 0))
break;
if (cnt == __LC_LAST)
diff --git a/math/complex.h b/math/complex.h
index 229bb7dca6..751aaf763f 100644
--- a/math/complex.h
+++ b/math/complex.h
@@ -89,7 +89,7 @@ __BEGIN_DECLS
# ifdef __LDBL_COMPAT
# undef __MATHDECL_1
# define __MATHDECL_1(type, function, args) \
- extern type __REDIRECT(__MATH_PRECNAME(function), args, function) __THROW
+ extern type __REDIRECT_NTH(__MATH_PRECNAME(function), args, function)
# endif
# ifndef _Mlong_double_
diff --git a/misc/getusershell.c b/misc/getusershell.c
index f41c6fa5f0..255b579b1a 100644
--- a/misc/getusershell.c
+++ b/misc/getusershell.c
@@ -46,7 +46,15 @@ static char sccsid[] = "@(#)getusershell.c 8.1 (Berkeley) 6/4/93";
* /etc/shells.
*/
+/* NB: we do not initialize okshells here. The initialization needs
+ relocations. These interfaces are used so rarely that this is not
+ justified. Instead explicitly initialize the array when it is
+ used. */
+#if 0
static const char *const okshells[] = { _PATH_BSHELL, _PATH_CSHELL, NULL };
+#else
+static const char *okshells[3];
+#endif
static char **curshell, **shells, *strings;
static char **initshells (void) __THROW;
@@ -97,21 +105,22 @@ initshells()
free(strings);
strings = NULL;
if ((fp = fopen(_PATH_SHELLS, "rc")) == NULL)
- return (char **) okshells;
+ goto init_okshells_noclose;
if (fstat64(fileno(fp), &statb) == -1) {
+ init_okshells:
(void)fclose(fp);
+ init_okshells_noclose:
+ okshells[0] = _PATH_BSHELL;
+ okshells[1] = _PATH_CSHELL;
return (char **) okshells;
}
- if ((strings = malloc((u_int)statb.st_size + 1)) == NULL) {
- (void)fclose(fp);
- return (char **) okshells;
- }
+ if ((strings = malloc((u_int)statb.st_size + 1)) == NULL)
+ goto init_okshells;
shells = calloc((unsigned)statb.st_size / 3, sizeof (char *));
if (shells == NULL) {
- (void)fclose(fp);
free(strings);
strings = NULL;
- return (char **) okshells;
+ goto init_okshells;
}
sp = shells;
cp = strings;
diff --git a/nis/nis_call.c b/nis/nis_call.c
index 32d29ae99f..753ef77997 100644
--- a/nis/nis_call.c
+++ b/nis/nis_call.c
@@ -368,6 +368,12 @@ rec_dirsearch (const_nis_name name, directory_obj *dir, nis_error *status)
domain ! (Now I understand why a root server must be a
replica of the parent domain) */
fd_res = __nis_finddirectory (dir, ndomain);
+ if (fd_res == NULL)
+ {
+ nis_free_directory (dir);
+ *status = NIS_NOMEMORY;
+ return NULL;
+ }
*status = fd_res->status;
if (fd_res->status != NIS_SUCCESS)
{
@@ -375,27 +381,25 @@ rec_dirsearch (const_nis_name name, directory_obj *dir, nis_error *status)
__free_fdresult (fd_res);
return dir;
}
+ nis_free_directory (dir);
obj = calloc (1, sizeof (directory_obj));
+ if (obj == NULL)
+ {
+ __free_fdresult (fd_res);
+ *status = NIS_NOMEMORY;
+ return NULL;
+ }
xdrmem_create (&xdrs, fd_res->dir_data.dir_data_val,
fd_res->dir_data.dir_data_len, XDR_DECODE);
_xdr_directory_obj (&xdrs, obj);
xdr_destroy (&xdrs);
__free_fdresult (fd_res);
- if (obj != NULL)
- {
- /* We have found a NIS+ server serving ndomain, now
- let us search for "name" */
- nis_free_directory (dir);
- return rec_dirsearch (name, obj, status);
- }
- else
- {
- /* Ups, very bad. Are we already the root server ? */
- nis_free_directory (dir);
- return NULL;
- }
+
+ /* We have found a NIS+ server serving ndomain, now
+ let us search for "name" */
+ return rec_dirsearch (name, obj, status);
}
- break;
+ break;
case LOWER_NAME:
{
directory_obj *obj;
@@ -433,6 +437,12 @@ rec_dirsearch (const_nis_name name, directory_obj *dir, nis_error *status)
strcpy (cp, domain);
fd_res = __nis_finddirectory (dir, leaf);
+ if (fd_res == NULL)
+ {
+ nis_free_directory (dir);
+ *status = NIS_NOMEMORY;
+ return NULL;
+ }
*status = fd_res->status;
if (fd_res->status != NIS_SUCCESS)
{
@@ -440,21 +450,24 @@ rec_dirsearch (const_nis_name name, directory_obj *dir, nis_error *status)
__free_fdresult (fd_res);
return dir;
}
- obj = calloc(1, sizeof(directory_obj));
- xdrmem_create(&xdrs, fd_res->dir_data.dir_data_val,
- fd_res->dir_data.dir_data_len, XDR_DECODE);
- _xdr_directory_obj(&xdrs, obj);
- xdr_destroy(&xdrs);
- __free_fdresult (fd_res);
- if (obj != NULL)
+ nis_free_directory (dir);
+ obj = calloc (1, sizeof(directory_obj));
+ if (obj == NULL)
{
- /* We have found a NIS+ server serving ndomain, now
- let us search for "name" */
- nis_free_directory (dir);
- return rec_dirsearch (name, obj, status);
+ __free_fdresult (fd_res);
+ *status = NIS_NOMEMORY;
+ return NULL;
}
+ xdrmem_create (&xdrs, fd_res->dir_data.dir_data_val,
+ fd_res->dir_data.dir_data_len, XDR_DECODE);
+ _xdr_directory_obj (&xdrs, obj);
+ xdr_destroy (&xdrs);
+ __free_fdresult (fd_res);
+ /* We have found a NIS+ server serving ndomain, now
+ let us search for "name" */
+ return rec_dirsearch (name, obj, status);
}
- break;
+ break;
case BAD_NAME:
nis_free_directory (dir);
*status = NIS_BADNAME;
@@ -484,6 +497,8 @@ first_shoot (const_nis_name name, directory_obj *dir)
return dir;
fd_res = __nis_finddirectory (dir, domain);
+ if (fd_res == NULL)
+ return NULL;
if (fd_res->status == NIS_SUCCESS
&& (obj = calloc (1, sizeof (directory_obj))) != NULL)
{
@@ -513,28 +528,30 @@ __nisfind_server (const_nis_name name, directory_obj **dir)
dir = __nis_cache_search (name, flags, &cinfo);
#endif
+ nis_error result = NIS_SUCCESS;
if (*dir == NULL)
{
nis_error status;
directory_obj *obj;
*dir = readColdStartFile ();
- if (*dir == NULL) /* No /var/nis/NIS_COLD_START->no NIS+ installed */
+ if (*dir == NULL)
+ /* No /var/nis/NIS_COLD_START->no NIS+ installed. */
return NIS_UNAVAIL;
/* Try at first, if servers in "dir" know our object */
obj = first_shoot (name, *dir);
if (obj == NULL)
{
- *dir = rec_dirsearch (name, *dir, &status);
- if (*dir == NULL)
- return status;
+ obj = rec_dirsearch (name, *dir, &status);
+ if (obj == NULL)
+ result = status;
}
- else
- *dir = obj;
+
+ *dir = obj;
}
- return NIS_SUCCESS;
+ return result;
}
nis_error
diff --git a/nis/nis_callback.c b/nis/nis_callback.c
index 7d1b9f8e53..6582315c70 100644
--- a/nis/nis_callback.c
+++ b/nis/nis_callback.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998, 1999, 2000, 2005 Free Software Foundation, Inc.
+/* Copyright (C) 1997,1998,1999,2000,2005,2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@suse.de>, 1997.
@@ -275,15 +275,14 @@ __nis_create_callback (int (*callback) (const_nis_name, const nis_object *,
int sock = RPC_ANYSOCK;
struct sockaddr_in sin;
socklen_t len = sizeof (struct sockaddr_in);
- char addr[NIS_MAXNAMELEN + 1];
unsigned short port;
+ int nomsg = 0;
- cb = (struct nis_cb *) calloc (1, sizeof (struct nis_cb));
+ cb = (struct nis_cb *) calloc (1,
+ sizeof (struct nis_cb) + sizeof (nis_server));
if (__builtin_expect (cb == NULL, 0))
goto failed;
- cb->serv = (nis_server *) calloc (1, sizeof (nis_server));
- if (__builtin_expect (cb->serv == NULL, 0))
- goto failed;
+ cb->serv = (nis_server *) (cb + 1);
cb->serv->name = strdup (nis_local_principal ());
if (__builtin_expect (cb->serv->name == NULL, 0))
goto failed;
@@ -326,15 +325,20 @@ __nis_create_callback (int (*callback) (const_nis_name, const nis_object *,
cb->serv->ep.ep_val[0].proto = strdup ((flags & USE_DGRAM) ? "udp" : "tcp");
if (__builtin_expect (cb->serv->ep.ep_val[0].proto == NULL, 0))
goto failed;
- cb->xprt = (flags & USE_DGRAM) ? svcudp_bufcreate (sock, 100, 8192) :
- svctcp_create (sock, 100, 8192);
+ cb->xprt = ((flags & USE_DGRAM)
+ ? svcudp_bufcreate (sock, 100, 8192)
+ : svctcp_create (sock, 100, 8192));
+ if (cb->xprt == NULL)
+ {
+ nomsg = 1;
+ goto failed;
+ }
cb->sock = cb->xprt->xp_sock;
if (!svc_register (cb->xprt, CB_PROG, CB_VERS, cb_prog_1, 0))
{
xprt_unregister (cb->xprt);
svc_destroy (cb->xprt);
xdr_free ((xdrproc_t) _xdr_nis_server, (char *) cb->serv);
- free (cb->serv);
free (cb);
syslog (LOG_ERR, "NIS+: failed to register callback dispatcher");
return NULL;
@@ -345,30 +349,31 @@ __nis_create_callback (int (*callback) (const_nis_name, const nis_object *,
xprt_unregister (cb->xprt);
svc_destroy (cb->xprt);
xdr_free ((xdrproc_t) _xdr_nis_server, (char *) cb->serv);
- free (cb->serv);
free (cb);
syslog (LOG_ERR, "NIS+: failed to read local socket info");
return NULL;
}
port = ntohs (sin.sin_port);
get_myaddress (&sin);
- snprintf (addr, sizeof (addr), "%s.%d.%d", inet_ntoa (sin.sin_addr),
- (port & 0xFF00) >> 8, port & 0x00FF);
- cb->serv->ep.ep_val[0].uaddr = strdup (addr);
+
+ if (asprintf (&cb->serv->ep.ep_val[0].uaddr, "%s.%d.%d",
+ inet_ntoa (sin.sin_addr), (port & 0xFF00) >> 8, port & 0x00FF)
+ < 0)
+ goto failed;
return cb;
failed:
if (cb)
{
+ if (cb->xprt)
+ svc_destroy (cb->xprt);
if (cb->serv)
- {
- xdr_free ((xdrproc_t) _xdr_nis_server, (char *) cb->serv);
- free (cb->serv);
- }
+ xdr_free ((xdrproc_t) _xdr_nis_server, (char *) cb->serv);
free (cb);
}
- syslog (LOG_ERR, "NIS+: out of memory allocating callback");
+ if (!nomsg)
+ syslog (LOG_ERR, "NIS+: out of memory allocating callback");
return NULL;
}
@@ -379,7 +384,6 @@ __nis_destroy_callback (struct nis_cb *cb)
svc_destroy (cb->xprt);
close (cb->sock);
xdr_free ((xdrproc_t) _xdr_nis_server, (char *) cb->serv);
- free (cb->serv);
free (cb);
return NIS_SUCCESS;
diff --git a/nis/nis_error.c b/nis/nis_error.c
index 7db885ef93..d92ad03604 100644
--- a/nis/nis_error.c
+++ b/nis/nis_error.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 1997, 1998, 1999, 2004, 2005 Free Software Foundation, Inc.
+/* Copyright (c) 1997,1998,1999,2004,2005,2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997.
@@ -24,65 +24,41 @@
#include <rpcsvc/nis.h>
-static const char *nis_errlist[] =
+#define MF(line) MF1 (line)
+#define MF1(line) str##line
+static const union msgstr_t
{
- N_("Success"),
- N_("Probable success"),
- N_("Not found"),
- N_("Probably not found"),
- N_("Cache expired"),
- N_("NIS+ servers unreachable"),
- N_("Unknown object"),
- N_("Server busy, try again"),
- N_("Generic system error"),
- N_("First/next chain broken"),
- N_("Permission denied"),
- N_("Not owner"),
- N_("Name not served by this server"),
- N_("Server out of memory"),
- N_("Object with same name exists"),
- N_("Not master server for this domain"),
- N_("Invalid object for operation"),
- N_("Malformed name, or illegal name"),
- N_("Unable to create callback"),
- N_("Results sent to callback proc"),
- N_("Not found, no such name"),
- N_("Name/entry isn't unique"),
- N_("Modification failed"),
- N_("Database for table does not exist"),
- N_("Entry/table type mismatch"),
- N_("Link points to illegal name"),
- N_("Partial success"),
- N_("Too many attributes"),
- N_("Error in RPC subsystem"),
- N_("Missing or malformed attribute"),
- N_("Named object is not searchable"),
- N_("Error while talking to callback proc"),
- N_("Non NIS+ namespace encountered"),
- N_("Illegal object type for operation"),
- N_("Passed object is not the same object on server"),
- N_("Modify operation failed"),
- N_("Query illegal for named table"),
- N_("Attempt to remove a non-empty table"),
- N_("Error in accessing NIS+ cold start file. Is NIS+ installed?"),
- N_("Full resync required for directory"),
- N_("NIS+ operation failed"),
- N_("NIS+ service is unavailable or not installed"),
- N_("Yes, 42 is the meaning of life"),
- N_("Unable to authenticate NIS+ server"),
- N_("Unable to authenticate NIS+ client"),
- N_("No file space on server"),
- N_("Unable to create process on server"),
- N_("Master server busy, full dump rescheduled.")
-};
+ struct
+ {
+#define S(s) char MF(__LINE__)[sizeof (s)];
+#include "nis_error.h"
+#undef S
+ };
+ char str[0];
+} msgstr =
+ {
+ {
+#define S(s) s,
+#include "nis_error.h"
+#undef S
+ }
+ };
+
+static const unsigned short int msgidx[] =
+ {
+#define S(s) offsetof (union msgstr_t, MF (__LINE__)),
+#include "nis_error.h"
+#undef S
+ };
+
const char *
nis_sperrno (const nis_error status)
{
- if (status >= (sizeof (nis_errlist) / sizeof (nis_errlist[0])))
+ if (status >= sizeof (msgidx) / sizeof (msgidx[0]))
return "???";
else
- return gettext (nis_errlist[status]);
+ return gettext (msgstr.str + msgidx[status]);
}
libnsl_hidden_def (nis_sperrno)
@@ -105,7 +81,7 @@ nis_sperror_r (const nis_error status, const char *label,
if (snprintf (buffer, buflen, "%s: %s", label, nis_sperrno (status))
>= buflen)
{
- errno = ERANGE;
+ __set_errno (ERANGE);
return NULL;
}
diff --git a/nis/nis_error.h b/nis/nis_error.h
new file mode 100644
index 0000000000..add1316d9f
--- /dev/null
+++ b/nis/nis_error.h
@@ -0,0 +1,48 @@
+S(N_("Success"))
+S(N_("Probable success"))
+S(N_("Not found"))
+S(N_("Probably not found"))
+S(N_("Cache expired"))
+S(N_("NIS+ servers unreachable"))
+S(N_("Unknown object"))
+S(N_("Server busy, try again"))
+S(N_("Generic system error"))
+S(N_("First/next chain broken"))
+S(N_("Permission denied"))
+S(N_("Not owner"))
+S(N_("Name not served by this server"))
+S(N_("Server out of memory"))
+S(N_("Object with same name exists"))
+S(N_("Not master server for this domain"))
+S(N_("Invalid object for operation"))
+S(N_("Malformed name, or illegal name"))
+S(N_("Unable to create callback"))
+S(N_("Results sent to callback proc"))
+S(N_("Not found, no such name"))
+S(N_("Name/entry isn't unique"))
+S(N_("Modification failed"))
+S(N_("Database for table does not exist"))
+S(N_("Entry/table type mismatch"))
+S(N_("Link points to illegal name"))
+S(N_("Partial success"))
+S(N_("Too many attributes"))
+S(N_("Error in RPC subsystem"))
+S(N_("Missing or malformed attribute"))
+S(N_("Named object is not searchable"))
+S(N_("Error while talking to callback proc"))
+S(N_("Non NIS+ namespace encountered"))
+S(N_("Illegal object type for operation"))
+S(N_("Passed object is not the same object on server"))
+S(N_("Modify operation failed"))
+S(N_("Query illegal for named table"))
+S(N_("Attempt to remove a non-empty table"))
+S(N_("Error in accessing NIS+ cold start file. Is NIS+ installed?"))
+S(N_("Full resync required for directory"))
+S(N_("NIS+ operation failed"))
+S(N_("NIS+ service is unavailable or not installed"))
+S(N_("Yes, 42 is the meaning of life"))
+S(N_("Unable to authenticate NIS+ server"))
+S(N_("Unable to authenticate NIS+ client"))
+S(N_("No file space on server"))
+S(N_("Unable to create process on server"))
+S(N_("Master server busy, full dump rescheduled."))
diff --git a/nis/nis_xdr.c b/nis/nis_xdr.c
index 1ef08c7890..3d4f7268c0 100644
--- a/nis/nis_xdr.c
+++ b/nis/nis_xdr.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 1997, 1998, 2005 Free Software Foundation, Inc.
+/* Copyright (c) 1997, 1998, 2005, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997.
@@ -433,6 +433,7 @@ xdr_obj_p (XDR *xdrs, obj_p *objp)
return xdr_pointer (xdrs, (char **)objp, sizeof (nis_object),
(xdrproc_t)_xdr_nis_object);
}
+libnsl_hidden_def (xdr_obj_p)
bool_t
xdr_cback_data (XDR *xdrs, cback_data *objp)
@@ -441,3 +442,4 @@ xdr_cback_data (XDR *xdrs, cback_data *objp)
&objp->entries.entries_len, ~0,
sizeof (obj_p), (xdrproc_t) xdr_obj_p);
}
+libnsl_hidden_def (xdr_cback_data)
diff --git a/nis/nis_xdr.h b/nis/nis_xdr.h
index 2f1a179e0a..791a964d2f 100644
--- a/nis/nis_xdr.h
+++ b/nis/nis_xdr.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 1998, 1999 Free Software Foundation, Inc.
+/* Copyright (c) 1998, 1999, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@suse.de>, 1998.
@@ -22,24 +22,20 @@
#include <features.h>
-__BEGIN_DECLS
-
-extern bool_t _xdr_nis_attr (XDR *, nis_attr*);
-extern bool_t _xdr_nis_name (XDR *, nis_name*);
-extern bool_t _xdr_nis_server (XDR *, nis_server*);
-extern bool_t _xdr_directory_obj (XDR *, directory_obj*);
-extern bool_t _xdr_nis_object (XDR *, nis_object*);
-extern bool_t _xdr_nis_error (XDR *, nis_error*);
-extern bool_t _xdr_nis_result (XDR *, nis_result*);
-extern bool_t _xdr_ns_request (XDR *, ns_request*);
-extern bool_t _xdr_ib_request (XDR *, ib_request*);
-extern bool_t _xdr_ping_args (XDR *, ping_args*);
-extern bool_t _xdr_cp_result (XDR *, cp_result*);
-extern bool_t _xdr_nis_tag (XDR *, nis_tag*);
-extern bool_t _xdr_nis_taglist (XDR *, nis_taglist*);
-extern bool_t _xdr_fd_args (XDR *, fd_args*);
-extern bool_t _xdr_fd_result (XDR *, fd_result*);
-
-__END_DECLS
+extern bool_t _xdr_nis_attr (XDR *, nis_attr*) attribute_hidden;
+extern bool_t _xdr_nis_name (XDR *, nis_name*) attribute_hidden;
+extern bool_t _xdr_nis_server (XDR *, nis_server*) attribute_hidden;
+extern bool_t _xdr_directory_obj (XDR *, directory_obj*) attribute_hidden;
+extern bool_t _xdr_nis_object (XDR *, nis_object*) attribute_hidden;
+extern bool_t _xdr_nis_error (XDR *, nis_error*) attribute_hidden;
+extern bool_t _xdr_nis_result (XDR *, nis_result*) attribute_hidden;
+extern bool_t _xdr_ns_request (XDR *, ns_request*) attribute_hidden;
+extern bool_t _xdr_ib_request (XDR *, ib_request*) attribute_hidden;
+extern bool_t _xdr_ping_args (XDR *, ping_args*) attribute_hidden;
+extern bool_t _xdr_cp_result (XDR *, cp_result*) attribute_hidden;
+extern bool_t _xdr_nis_tag (XDR *, nis_tag*) attribute_hidden;
+extern bool_t _xdr_nis_taglist (XDR *, nis_taglist*) attribute_hidden;
+extern bool_t _xdr_fd_args (XDR *, fd_args*) attribute_hidden;
+extern bool_t _xdr_fd_result (XDR *, fd_result*) attribute_hidden;
#endif
diff --git a/nis/nss_compat/compat-grp.c b/nis/nss_compat/compat-grp.c
index d51eb6d0f2..093876fd74 100644
--- a/nis/nss_compat/compat-grp.c
+++ b/nis/nss_compat/compat-grp.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996-1999,2001-2004,2005 Free Software Foundation, Inc.
+/* Copyright (C) 1996-1999,2001-2005,2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@suse.de>, 1996.
@@ -138,7 +138,11 @@ internal_setgrent (ent_t *ent, int stayopen)
rewind (ent->stream);
if (status == NSS_STATUS_SUCCESS && nss_setgrent)
- return nss_setgrent (stayopen);
+ {
+ status = nss_setgrent (stayopen);
+ if (status == NSS_STATUS_UNAVAIL)
+ status = NSS_STATUS_SUCCESS;
+ }
return status;
}
diff --git a/nis/nss_compat/compat-initgroups.c b/nis/nss_compat/compat-initgroups.c
index 9574ea7c0b..70403a0785 100644
--- a/nis/nss_compat/compat-initgroups.c
+++ b/nis/nss_compat/compat-initgroups.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998-2003, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2003, 2004, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@suse.de>, 1998.
@@ -36,7 +36,6 @@ static service_user *ni;
static enum nss_status (*nss_initgroups_dyn) (const char *, gid_t,
long int *, long int *,
gid_t **, long int, int *);
-static enum nss_status (*nss_setgrent) (int stayopen);
static enum nss_status (*nss_getgrnam_r) (const char *name,
struct group * grp, char *buffer,
size_t buflen, int *errnop);
@@ -45,7 +44,6 @@ static enum nss_status (*nss_getgrgid_r) (gid_t gid, struct group * grp,
int *errnop);
static enum nss_status (*nss_getgrent_r) (struct group * grp, char *buffer,
size_t buflen, int *errnop);
-static enum nss_status (*nss_endgrent) (void);
/* Protect global state against multiple changers. */
__libc_lock_define_initialized (static, lock)
@@ -92,11 +90,9 @@ init_nss_interface (void)
&& __nss_database_lookup ("group_compat", NULL, "nis", &ni) >= 0)
{
nss_initgroups_dyn = __nss_lookup_function (ni, "initgroups_dyn");
- nss_setgrent = __nss_lookup_function (ni, "setgrent");
nss_getgrnam_r = __nss_lookup_function (ni, "getgrnam_r");
nss_getgrgid_r = __nss_lookup_function (ni, "getgrgid_r");
nss_getgrent_r = __nss_lookup_function (ni, "getgrent_r");
- nss_endgrent = __nss_lookup_function (ni, "endgrent");
}
__libc_lock_unlock (lock);
diff --git a/nis/nss_compat/compat-pwd.c b/nis/nss_compat/compat-pwd.c
index 43ccb27071..1031714529 100644
--- a/nis/nss_compat/compat-pwd.c
+++ b/nis/nss_compat/compat-pwd.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996-1999,2001-2004,2005 Free Software Foundation, Inc.
+/* Copyright (C) 1996-1999,2001-2005,2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
@@ -258,7 +258,11 @@ internal_setpwent (ent_t *ent, int stayopen)
give_pwd_free (&ent->pwd);
if (status == NSS_STATUS_SUCCESS && nss_setpwent)
- return nss_setpwent (stayopen);
+ {
+ status = nss_setpwent (stayopen);
+ if (status == NSS_STATUS_UNAVAIL)
+ status = NSS_STATUS_SUCCESS;
+ }
return status;
}
diff --git a/nis/nss_compat/compat-spwd.c b/nis/nss_compat/compat-spwd.c
index 120e3bd38d..5c820a5f65 100644
--- a/nis/nss_compat/compat-spwd.c
+++ b/nis/nss_compat/compat-spwd.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996-1999,2001-2004,2005 Free Software Foundation, Inc.
+/* Copyright (C) 1996-1999,2001-2005,2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
@@ -212,7 +212,11 @@ internal_setspent (ent_t *ent, int stayopen)
give_spwd_free (&ent->pwd);
if (status == NSS_STATUS_SUCCESS && nss_setspent)
- return nss_setspent (stayopen);
+ {
+ status = nss_setspent (stayopen);
+ if (status == NSS_STATUS_UNAVAIL)
+ status = NSS_STATUS_SUCCESS;
+ }
return status;
}
diff --git a/nis/yp_xdr.c b/nis/yp_xdr.c
index 0ee80126e8..b87ee06151 100644
--- a/nis/yp_xdr.c
+++ b/nis/yp_xdr.c
@@ -103,6 +103,7 @@ xdr_ypreq_key (XDR *xdrs, ypreq_key *objp)
return FALSE;
return xdr_keydat (xdrs, &objp->key);
}
+libnsl_hidden_def (xdr_ypreq_key)
bool_t
xdr_ypreq_nokey (XDR *xdrs, ypreq_nokey *objp)
@@ -111,6 +112,7 @@ xdr_ypreq_nokey (XDR *xdrs, ypreq_nokey *objp)
return FALSE;
return xdr_mapname (xdrs, &objp->map);
}
+libnsl_hidden_def (xdr_ypreq_nokey)
bool_t
xdr_ypreq_xfr (XDR *xdrs, ypreq_xfr *objp)
@@ -131,6 +133,7 @@ xdr_ypresp_val (XDR *xdrs, ypresp_val *objp)
return FALSE;
return xdr_valdat (xdrs, &objp->val);
}
+libnsl_hidden_def (xdr_ypresp_val)
bool_t
xdr_ypresp_key_val (XDR *xdrs, ypresp_key_val *objp)
@@ -150,6 +153,7 @@ xdr_ypresp_master (XDR *xdrs, ypresp_master *objp)
return FALSE;
return xdr_peername (xdrs, &objp->peer);
}
+libnsl_hidden_def (xdr_ypresp_master)
bool_t
xdr_ypresp_order (XDR *xdrs, ypresp_order *objp)
@@ -158,6 +162,7 @@ xdr_ypresp_order (XDR *xdrs, ypresp_order *objp)
return FALSE;
return xdr_u_int (xdrs, &objp->ordernum);
}
+libnsl_hidden_def (xdr_ypresp_order)
bool_t
xdr_ypresp_all (XDR *xdrs, ypresp_all *objp)
@@ -193,6 +198,7 @@ xdr_ypmaplist (XDR *xdrs, ypmaplist *objp)
return xdr_pointer (xdrs, (char **) &objp->next, sizeof (ypmaplist),
(xdrproc_t) xdr_ypmaplist);
}
+libnsl_hidden_def (xdr_ypmaplist)
bool_t
xdr_ypresp_maplist (XDR *xdrs, ypresp_maplist *objp)
@@ -202,6 +208,7 @@ xdr_ypresp_maplist (XDR *xdrs, ypresp_maplist *objp)
return xdr_pointer (xdrs, (char **) &objp->maps, sizeof (ypmaplist),
(xdrproc_t) xdr_ypmaplist);
}
+libnsl_hidden_def (xdr_ypresp_maplist)
bool_t
xdr_yppush_status (XDR *xdrs, yppush_status *objp)
@@ -248,6 +255,7 @@ xdr_ypbind_resp (XDR *xdrs, ypbind_resp *objp)
}
return FALSE;
}
+libnsl_hidden_def (xdr_ypbind_resp)
bool_t
xdr_ypbind_setdom (XDR *xdrs, ypbind_setdom *objp)
diff --git a/nis/ypupdate_xdr.c b/nis/ypupdate_xdr.c
index 4789e47c3e..0f5469fa23 100644
--- a/nis/ypupdate_xdr.c
+++ b/nis/ypupdate_xdr.c
@@ -50,6 +50,7 @@ xdr_ypupdate_args (XDR *xdrs, ypupdate_args *objp)
return FALSE;
return xdr_yp_buf (xdrs, &objp->datum);
}
+libnsl_hidden_def (xdr_ypupdate_args)
bool_t
xdr_ypdelete_args (XDR *xdrs, ypdelete_args *objp)
@@ -58,3 +59,4 @@ xdr_ypdelete_args (XDR *xdrs, ypdelete_args *objp)
return FALSE;
return xdr_yp_buf (xdrs, &objp->key);
}
+libnsl_hidden_def (xdr_ypdelete_args)
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index 80eb4ad9f3..04a4cfad4e 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,19 @@
+2006-05-15 Ulrich Drepper <drepper@redhat.com>
+
+ * sysdeps/unix/sysv/linux/fork.h: Makr __fork_handlers as hidden.
+
+2006-05-11 Ulrich Drepper <drepper@redhat.com>
+
+ * pthread_key_create.c (__pthread_key_create): Do away with
+ __pthread_keys_lock.
+
+ * sysdeps/unix/sysv/linux/pthread_setaffinity.c
+ (__kernel_cpumask_size): Mark as hidden.
+ * sysdeps/unix/sysv/linux/pthread_attr_setaffinity.c: Likewise.
+
+ * sem_open.c (__sem_mappings_lock): Mark as hidden.
+ * semaphoreP.h (__sem_mappings_lock): Likewise.
+
2006-05-10 Ulrich Drepper <drepper@redhat.com>
* pthread_atfork.c: Mark __dso_handle as hidden.
diff --git a/nptl/pthread_key_create.c b/nptl/pthread_key_create.c
index cf35bc8776..5fc8846243 100644
--- a/nptl/pthread_key_create.c
+++ b/nptl/pthread_key_create.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -19,45 +19,36 @@
#include <errno.h>
#include "pthreadP.h"
+#include <atomic.h>
-/* Internal mutex for __pthread_keys table handling. */
-lll_lock_t __pthread_keys_lock = LLL_LOCK_INITIALIZER;
-
int
__pthread_key_create (key, destr)
pthread_key_t *key;
void (*destr) (void *);
{
- int result = EAGAIN;
- size_t cnt;
-
- lll_lock (__pthread_keys_lock);
-
/* Find a slot in __pthread_kyes which is unused. */
- for (cnt = 0; cnt < PTHREAD_KEYS_MAX; ++cnt)
- if (KEY_UNUSED (__pthread_keys[cnt].seq)
- && KEY_USABLE (__pthread_keys[cnt].seq))
- {
- /* We found an unused slot. */
- ++__pthread_keys[cnt].seq;
-
- /* Remember the destructor. */
- __pthread_keys[cnt].destr = destr;
-
- /* Return the key to the caller. */
- *key = cnt;
-
- /* The call succeeded. */
- result = 0;
-
- /* We found a key and can stop now. */
- break;
- }
-
- lll_unlock (__pthread_keys_lock);
-
- return result;
+ for (size_t cnt = 0; cnt < PTHREAD_KEYS_MAX; ++cnt)
+ {
+ uintptr_t seq = __pthread_keys[cnt].seq;
+
+ if (KEY_UNUSED (seq) && KEY_USABLE (seq)
+ /* We found an unused slot. Try to allocate it. */
+ && ! atomic_compare_and_exchange_bool_acq (&__pthread_keys[cnt].seq,
+ seq + 1, seq))
+ {
+ /* Remember the destructor. */
+ __pthread_keys[cnt].destr = destr;
+
+ /* Return the key to the caller. */
+ *key = cnt;
+
+ /* The call succeeded. */
+ return 0;
+ }
+ }
+
+ return EAGAIN;
}
strong_alias (__pthread_key_create, pthread_key_create)
strong_alias (__pthread_key_create, __pthread_key_create_internal)
diff --git a/nptl/sem_open.c b/nptl/sem_open.c
index a4b2f5b3ac..66bcb13aec 100644
--- a/nptl/sem_open.c
+++ b/nptl/sem_open.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -147,7 +147,7 @@ __sem_search (const void *a, const void *b)
void *__sem_mappings attribute_hidden;
/* Lock to protect the search tree. */
-lll_lock_t __sem_mappings_lock = LLL_LOCK_INITIALIZER;
+lll_lock_t __sem_mappings_lock attribute_hidden = LLL_LOCK_INITIALIZER;
/* Search for existing mapping and if possible add the one provided. */
diff --git a/nptl/semaphoreP.h b/nptl/semaphoreP.h
index d14ea92c74..754609a1a8 100644
--- a/nptl/semaphoreP.h
+++ b/nptl/semaphoreP.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -48,7 +48,7 @@ extern pthread_once_t __namedsem_once attribute_hidden;
extern void *__sem_mappings attribute_hidden;
/* Lock to protect the search tree. */
-extern lll_lock_t __sem_mappings_lock;
+extern lll_lock_t __sem_mappings_lock attribute_hidden;
/* Initializer for mountpoint. */
diff --git a/nptl/sysdeps/unix/sysv/linux/fork.h b/nptl/sysdeps/unix/sysv/linux/fork.h
index d093ccc907..6458977b99 100644
--- a/nptl/sysdeps/unix/sysv/linux/fork.h
+++ b/nptl/sysdeps/unix/sysv/linux/fork.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -41,7 +41,7 @@ struct fork_handler
};
/* The single linked list of all currently registered for handlers. */
-extern struct fork_handler *__fork_handlers;
+extern struct fork_handler *__fork_handlers attribute_hidden;
/* Function to call to unregister fork handlers. */
diff --git a/nptl/sysdeps/unix/sysv/linux/pthread_attr_setaffinity.c b/nptl/sysdeps/unix/sysv/linux/pthread_attr_setaffinity.c
index ca84f1c9bd..355e695ec2 100644
--- a/nptl/sysdeps/unix/sysv/linux/pthread_attr_setaffinity.c
+++ b/nptl/sysdeps/unix/sysv/linux/pthread_attr_setaffinity.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
@@ -27,7 +27,7 @@
/* Defined in pthread_setaffinity.c. */
-extern size_t __kernel_cpumask_size;
+extern size_t __kernel_cpumask_size attribute_hidden;
extern int __determine_cpumask_size (pid_t tid);
diff --git a/nptl/sysdeps/unix/sysv/linux/pthread_setaffinity.c b/nptl/sysdeps/unix/sysv/linux/pthread_setaffinity.c
index 5b24c694a9..3776e26e4b 100644
--- a/nptl/sysdeps/unix/sysv/linux/pthread_setaffinity.c
+++ b/nptl/sysdeps/unix/sysv/linux/pthread_setaffinity.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
@@ -25,7 +25,7 @@
#include <shlib-compat.h>
-size_t __kernel_cpumask_size;
+size_t __kernel_cpumask_size attribute_hidden;
/* Determine the current affinity. As a side affect we learn
diff --git a/nscd/nscd_getai.c b/nscd/nscd_getai.c
index 4e3dfad1ea..b59c31ea26 100644
--- a/nscd/nscd_getai.c
+++ b/nscd/nscd_getai.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+/* Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2004.
@@ -34,7 +34,7 @@ extern int __nss_not_use_nscd_hosts;
/* We use the mapping from nscd_gethst. */
-libc_locked_map_ptr (extern, __hst_map_handle);
+libc_locked_map_ptr (extern, __hst_map_handle) attribute_hidden;
int
diff --git a/nscd/nscd_getgr_r.c b/nscd/nscd_getgr_r.c
index dae1c0da54..922b906c19 100644
--- a/nscd/nscd_getgr_r.c
+++ b/nscd/nscd_getgr_r.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
+/* Copyright (C) 1998-2000, 2002-2005, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@uni-paderborn.de>, 1998.
@@ -67,7 +66,7 @@ __nscd_getgrgid_r (gid_t gid, struct group *resultbuf, char *buffer,
}
-libc_locked_map_ptr (,__gr_map_handle);
+libc_locked_map_ptr (,__gr_map_handle) attribute_hidden;
/* Note that we only free the structure if necessary. The memory
mapping is not removed since it is not visible to the malloc
handling. */
diff --git a/nscd/nscd_gethst_r.c b/nscd/nscd_gethst_r.c
index 9fa10e2740..516977bcc4 100644
--- a/nscd/nscd_gethst_r.c
+++ b/nscd/nscd_gethst_r.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998-2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2005, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@@ -87,7 +87,7 @@ __nscd_gethostbyaddr_r (const void *addr, socklen_t len, int type,
}
-libc_locked_map_ptr (, __hst_map_handle);
+libc_locked_map_ptr (, __hst_map_handle) attribute_hidden;
/* Note that we only free the structure if necessary. The memory
mapping is not removed since it is not visible to the malloc
handling. */
diff --git a/nscd/nscd_initgroups.c b/nscd/nscd_initgroups.c
index cf5af6edc1..3d82275d7e 100644
--- a/nscd/nscd_initgroups.c
+++ b/nscd/nscd_initgroups.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+/* Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2004.
@@ -30,7 +30,7 @@
/* We use the same mapping as in nscd_getgr. */
-libc_locked_map_ptr (extern, __gr_map_handle);
+libc_locked_map_ptr (extern, __gr_map_handle) attribute_hidden;
int
diff --git a/posix/gai.conf b/posix/gai.conf
index 5f063f5c3c..0e334ac2c5 100644
--- a/posix/gai.conf
+++ b/posix/gai.conf
@@ -24,17 +24,29 @@
#label 2002::/16 2
#label ::/96 3
#label ::ffff:0:0/96 4
+#label fec0::/10 5
+#label fc00::/7 6
+#
+# This default differs from the tables given in RFC 3484 by handling
+# (now obsolete) site-local IPv6 addresses and Unique Local Addresses.
+# The reason for this difference is that these addresses are never
+# NATed while IPv4 site-local addresses most probably are. Given
+# the precedence of IPv6 over IPv4 (see below) on machines having only
+# site-local IPv4 and IPv6 addresses a lookup for a global address would
+# see the IPv6 be preferred. The result is a long delay because the
+# site-local IPv6 addresses cannot be used while the IPv4 address is
+# (at least for the foreseeable future) NATed.
#
# precedence <mask> <value>
-# Add another rule the to RFC 3484 precendence table. See section 2.1
+# Add another rule the to RFC 3484 precedence table. See section 2.1
# and 10.3 in RFC 3484. The default is:
#
-#precendence ::1/128 50
-#precendence ::/0 40
-#precendence 2002::/16 30
-#precendence ::/96 20
-#precendence ::ffff:0:0/96 10
+#precedence ::1/128 50
+#precedence ::/0 40
+#precedence 2002::/16 30
+#precedence ::/96 20
+#precedence ::ffff:0:0/96 10
#
# For sites which prefer IPv4 connections change the last line to
#
-#precendence ::ffff:0:0/96 100
+#precedence ::ffff:0:0/96 100
diff --git a/resolv/res_debug.c b/resolv/res_debug.c
index 9b308b189a..d9f1607df6 100644
--- a/resolv/res_debug.c
+++ b/resolv/res_debug.c
@@ -896,7 +896,7 @@ loc_ntoa(binary, ascii)
const u_char *binary;
char *ascii;
{
- static char *error = "?";
+ static const char error[] = "?";
static char tmpbuf[sizeof
"1000 60 60.000 N 1000 60 60.000 W -12345678.00m 90000000.00m 90000000.00m 90000000.00m"];
const u_char *cp = binary;
@@ -976,11 +976,11 @@ loc_ntoa(binary, ascii)
altmeters = (altval / 100) * altsign;
if ((sizestr = strdup(precsize_ntoa(sizeval))) == NULL)
- sizestr = error;
+ sizestr = (char *) error;
if ((hpstr = strdup(precsize_ntoa(hpval))) == NULL)
- hpstr = error;
+ hpstr = (char *) error;
if ((vpstr = strdup(precsize_ntoa(vpval))) == NULL)
- vpstr = error;
+ vpstr = (char *) error;
sprintf(ascii,
"%d %.2d %.2d.%.3d %c %d %.2d %.2d.%.3d %c %d.%.2dm %sm %sm %sm",
@@ -988,11 +988,11 @@ loc_ntoa(binary, ascii)
longdeg, longmin, longsec, longsecfrac, eastwest,
altmeters, altfrac, sizestr, hpstr, vpstr);
- if (sizestr != error)
+ if (sizestr != (char *) error)
free(sizestr);
- if (hpstr != error)
+ if (hpstr != (char *) error)
free(hpstr);
- if (vpstr != error)
+ if (vpstr != (char *) error)
free(vpstr);
return (ascii);
diff --git a/stdlib/fmtmsg.c b/stdlib/fmtmsg.c
index e0f4061cee..2a4d16a461 100644
--- a/stdlib/fmtmsg.c
+++ b/stdlib/fmtmsg.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997,1999,2000-2003,2005 Free Software Foundation, Inc.
+/* Copyright (C) 1997,1999,2000-2003,2005, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -44,7 +44,7 @@ enum
static const struct
{
- size_t len;
+ uint32_t len;
/* Adjust the size if new elements are added. */
const char name[12];
} keywords[] =
diff --git a/stdlib/longlong.h b/stdlib/longlong.h
index 4e1931d823..ca6285a19b 100644
--- a/stdlib/longlong.h
+++ b/stdlib/longlong.h
@@ -1,7 +1,6 @@
/* longlong.h -- definitions for mixed size 32/64 bit arithmetic.
Copyright (C) 1991, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
+ 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
@@ -46,7 +45,7 @@
#define UDWtype UDItype
#endif
-extern const UQItype __clz_tab[256];
+extern const UQItype __clz_tab[256] attribute_hidden;
/* Define auxiliary asm macros.
diff --git a/sunrpc/key_call.c b/sunrpc/key_call.c
index 63293aefa5..611c37256c 100644
--- a/sunrpc/key_call.c
+++ b/sunrpc/key_call.c
@@ -400,6 +400,7 @@ getkeyserv_handle (int vers)
/* if pid has changed, destroy client and rebuild */
if (kcp->client != NULL && kcp->pid != __getpid ())
{
+ auth_destroy (kcp->client->cl_auth);
clnt_destroy (kcp->client);
kcp->client = NULL;
}
diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c
index a78c670bfb..a35b8662d5 100644
--- a/sysdeps/posix/getaddrinfo.c
+++ b/sysdeps/posix/getaddrinfo.c
@@ -1202,6 +1202,21 @@ static const struct prefixentry default_labels[] =
= { .u6_addr8 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 } } },
96, 4 },
+ /* The next two entries differ from RFC 3484. We need to treat
+ IPv6 site-local addresses special because they are never NATed,
+ unlike site-locale IPv4 addresses. If this would not happen, on
+ machines which have only IPv4 and IPv6 site-local addresses, the
+ sorting would prefer the IPv6 site-local addresses, causing
+ unnecessary delays when trying to connect to a global IPv6 address
+ through a site-local IPv6 address. */
+ { { .in6_u
+ = { .u6_addr8 = { 0xfe, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } },
+ 10, 5 },
+ { { .in6_u
+ = { .u6_addr8 = { 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } },
+ 7, 6 },
{ { .in6_u
= { .u6_addr8 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } },
@@ -1231,7 +1246,7 @@ static const struct prefixentry default_precedence[] =
{ { .in6_u
= { .u6_addr8 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 } } },
- 96, 100 },
+ 96, 10 },
{ { .in6_u
= { .u6_addr8 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } },
diff --git a/sysdeps/unix/sysv/linux/getdents.c b/sysdeps/unix/sysv/linux/getdents.c
index 963b40d91d..836cbf3922 100644
--- a/sysdeps/unix/sysv/linux/getdents.c
+++ b/sysdeps/unix/sysv/linux/getdents.c
@@ -39,9 +39,9 @@
# ifndef __ASSUME_GETDENTS64_SYSCALL
# ifndef __GETDENTS
/* The variable is shared between all *getdents* calls. */
-int __have_no_getdents64;
+int __have_no_getdents64 attribute_hidden;
# else
-extern int __have_no_getdents64;
+extern int __have_no_getdents64 attribute_hidden;
# endif
# define have_no_getdents64_defined 1
# endif
diff --git a/sysdeps/unix/sysv/linux/ifaddrs.c b/sysdeps/unix/sysv/linux/ifaddrs.c
index e6720f0ca2..82495de03e 100644
--- a/sysdeps/unix/sysv/linux/ifaddrs.c
+++ b/sysdeps/unix/sysv/linux/ifaddrs.c
@@ -89,10 +89,11 @@ __netlink_free_handle (struct netlink_handle *h)
static int
__netlink_sendreq (struct netlink_handle *h, int type)
{
- struct
+ struct req
{
struct nlmsghdr nlh;
struct rtgenmsg g;
+ char pad[0];
} req;
struct sockaddr_nl nladdr;
@@ -105,6 +106,8 @@ __netlink_sendreq (struct netlink_handle *h, int type)
req.nlh.nlmsg_pid = 0;
req.nlh.nlmsg_seq = h->seq;
req.g.rtgen_family = AF_UNSPEC;
+ if (sizeof (req) != offsetof (struct req, pad))
+ memset (req.pad, '\0', sizeof (req) - offsetof (struct req, pad));
memset (&nladdr, '\0', sizeof (nladdr));
nladdr.nl_family = AF_NETLINK;
diff --git a/sysdeps/unix/sysv/linux/sched_getaffinity.c b/sysdeps/unix/sysv/linux/sched_getaffinity.c
index c0a6eb81b9..ab171123b0 100644
--- a/sysdeps/unix/sysv/linux/sched_getaffinity.c
+++ b/sysdeps/unix/sysv/linux/sched_getaffinity.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -20,6 +20,7 @@
#include <sched.h>
#include <string.h>
#include <sysdep.h>
+#include <sys/param.h>
#include <sys/types.h>
#include <shlib-compat.h>
@@ -28,8 +29,8 @@
int
__sched_getaffinity_new (pid_t pid, size_t cpusetsize, cpu_set_t *cpuset)
{
- int res = INLINE_SYSCALL (sched_getaffinity, 3, pid, sizeof (cpu_set_t),
- cpuset);
+ int res = INLINE_SYSCALL (sched_getaffinity, 3, pid,
+ MIN (INT_MAX, cpusetsize), cpuset);
if (res != -1)
{
/* Clean the rest of the memory the kernel didn't do. */
diff --git a/sysdeps/unix/sysv/linux/sys/inotify.h b/sysdeps/unix/sysv/linux/sys/inotify.h
index c498fe8f18..0131db9d3e 100644
--- a/sysdeps/unix/sysv/linux/sys/inotify.h
+++ b/sysdeps/unix/sysv/linux/sys/inotify.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2005 Free Software Foundation, Inc.
+/* Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -54,7 +54,16 @@ struct inotify_event
#define IN_Q_OVERFLOW 0x00004000 /* Event queued overflowed. */
#define IN_IGNORED 0x00008000 /* File was ignored. */
+/* Helper events. */
+#define IN_CLOSE (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) /* Close. */
+#define IN_MOVE (IN_MOVED_FROM | IN_MOVED_TO) /* Moves. */
+
/* Special flags. */
+#define IN_ONLYDIR 0x01000000 /* Only watch the path if it is a
+ directory. */
+#define IN_DONT_FOLLOW 0x02000000 /* Do not follow a sym link. */
+#define IN_MASK_ADD 0x20000000 /* Add to the mask of an already
+ existing watch. */
#define IN_ISDIR 0x40000000 /* Event occurred against dir. */
#define IN_ONESHOT 0x80000000 /* Only send event once. */