This commit is contained in:
Jakub Jelinek 2008-12-08 12:48:27 +00:00
parent ab36c7e3c9
commit 5bbe5886ed
3 changed files with 908 additions and 1 deletions

887
glibc-fixes1.patch Normal file
View File

@ -0,0 +1,887 @@
2008-12-07 Ulrich Drepper <drepper@redhat.com>
* resolv/res_send.c (send_dg): Use correct guards for SOCK_CLOEXEC
use.
* resolv/res_init.c (__res_vinit): Always assign to statp->nscount
after reading name server list.
* nis/nss_nis/nis-hosts.c (_nss_nis_gethostbyname4_r): Fix memory
handling for host name aliases.
2008-11-24 Arkadiusz Miśkiewicz <arekm@maven.pl>
* sysdeps/i386/dl-tlsdesc.S (_dl_tlsdesc_dynamic): Use LOAD_PIC_REG
instead of doing things manually.
2008-11-26 Chris Steel <chris.steel.lnx@googlemail.com>
* posix/regex_internal.h (build_wcs_upper_buffer):
Return type is reg_error_t.
2008-12-05 Ulrich Drepper <drepper@redhat.com>
* posix/globtest.sh: Use mktemp to create temporary file and
directory.
* sysdeps/unix/sysv/linux/bits/sched.h (__CPU_SET_S): Handle large
sets correctly.
(__CPU_CLR_S): Likewise.
(__CPU_ISSET_S): Likewise.
2008-12-04 Ulrich Drepper <drepper@redhat.com>
* locale/programs/ld-address.c (DEFINE_LANGUAGE_CODE2): Define.
* locale/iso-639.def: Add Chhattisgarhi entry.
2008-12-02 Ulrich Drepper <drepper@redhat.com>
* resolv/nss_dns/dns-host.c (_nss_dns_gethostbyname3_r): Recognize
ESRCH return value.
(_nss_dns_gethostbyname4_r): Likewise.
* resolv/res_init.c (__res_vinit): Initialize nscount to zero.
* sysdeps/posix/getaddrinfo.c (gaih_inet): In case we use
gethostbyname4_r, we don't have a separate IPv6 status, so copy
the no_data variable.
* resolv/res_init.c (__res_vinit): Fill in IPv4 name server
information at the correct index.
2008-12-01 Ulrich Drepper <drepper@redhat.com>
* resolv/res_send.c (send_dg): Create sockets with non-blocking
flag already set.
* stdlib/setenv.c (unsetenv): Don't search environment if it does
not exist.
* stdlib/Makefile (tests): Add tst-unsetenv1.
* stdlib/tst-unsetenv1.c: New file.
2008-11-29 Ulrich Drepper <drepper@redhat.com>
* login/utmp_file.c (file_writable): New variable.
(setutent_file): Don't try to open file for writing.
(pututline_file): Before writing, make descriptor writable if
necessary.
2008-11-26 Ulrich Drepper <drepper@redhat.com>
* sysdeps/posix/getaddrinfo.c (getaddrinfo): Only restrict search
to IPv4 or IPv6 if an interface has been found.
2008-11-26 Roland McGrath <roland@redhat.com>
* elf/elf.h (NT_386_IOPERM): New macro.
(NT_PPC_VSX): New macro.
localedata/
2008-12-05 Ulrich Drepper <drepper@redhat.com>
* SUPPORTED (SUPPORTED-LOCALES): Add hne_IN.
* locales/hne_IN: New file.
Contributed by Pravin Satpute <psatpute@redhat.com>.
--- libc/elf/elf.h 1 Oct 2008 19:41:34 -0000 1.167
+++ libc/elf/elf.h 26 Nov 2008 09:15:31 -0000 1.168
@@ -608,7 +608,9 @@ typedef struct
#define NT_PRXFPREG 0x46e62b7f /* Contains copy of user_fxsr_struct */
#define NT_PPC_VMX 0x100 /* PowerPC Altivec/VMX registers */
#define NT_PPC_SPE 0x101 /* PowerPC SPE/EVR registers */
+#define NT_PPC_VSX 0x102 /* PowerPC VSX registers */
#define NT_386_TLS 0x200 /* i386 TLS slots (struct user_desc) */
+#define NT_386_IOPERM 0x201 /* x86 io permission bitmap (1=deny) */
/* Legal values for the note segment descriptor types for object files. */
--- libc/locale/iso-639.def 4 Mar 2008 17:42:10 -0000 1.18
+++ libc/locale/iso-639.def 5 Dec 2008 03:26:04 -0000 1.19
@@ -1,8 +1,9 @@
/*
- * Defines the languages codes and abbreviations according to ISO 639-[12].
+ * Defines the languages codes and abbreviations according to ISO 639-[123].
* This is used in ld-address.c (address_finish).
*
* Format is: ("English name", 639-1-code, 639-2/T-code, 639-2/B-code)
+ * For some languages which have no 639-2 code the 639-3 code is used.
* If you find something missing or wrong, please go to the URL
* http://www.gnu.org/software/libc/bugs.html and follow
* instructions there to file a bug report.
@@ -89,6 +90,7 @@ DEFINE_LANGUAGE_CODE ("Chamorro", ch, ch
DEFINE_LANGUAGE_CODE ("Chechen", ce, che, che)
DEFINE_LANGUAGE_CODE3 ("Cherokee", chr, chr)
DEFINE_LANGUAGE_CODE3 ("Cheyenne", chy, chy)
+DEFINE_LANGUAGE_CODE2 ("Chhattisgarhi", hne) /* ISO 639-3 */
DEFINE_LANGUAGE_CODE3 ("Chibcha", chb, chb)
DEFINE_LANGUAGE_CODE ("Chichewa; Chewa; Nyanja", ny, nya, nya)
DEFINE_LANGUAGE_CODE ("Chinese", zh, zho, chi)
--- libc/locale/programs/ld-address.c 16 Jul 2007 00:54:59 -0000 1.25
+++ libc/locale/programs/ld-address.c 5 Dec 2008 03:25:18 -0000 1.26
@@ -57,6 +57,8 @@ static struct
{ #Ab, #Term, #Lib },
#define DEFINE_LANGUAGE_CODE3(Name, Term, Lib) \
{ "", #Term, #Lib },
+#define DEFINE_LANGUAGE_CODE2(Name, Term) \
+ { "", #Term, "" },
#include "iso-639.def"
};
--- libc/localedata/SUPPORTED 16 Sep 2008 21:24:57 -0000 1.114
+++ libc/localedata/SUPPORTED 6 Dec 2008 03:02:45 -0000 1.115
@@ -222,6 +222,7 @@ ha_NG/UTF-8 \
he_IL.UTF-8/UTF-8 \
he_IL/ISO-8859-8 \
hi_IN/UTF-8 \
+hne_IN/UTF-8 \
hr_HR.UTF-8/UTF-8 \
hr_HR/ISO-8859-2 \
hsb_DE/ISO-8859-2 \
--- libc/localedata/locales/hne_IN 1 Jan 1970 00:00:00 -0000
+++ libc/localedata/locales/hne_IN 6 Dec 2008 02:13:13 -0000 1.1
@@ -0,0 +1,180 @@
+comment_char %
+escape_char /
+% Chhattisgarhi language locale for India.
+% Contributed by Pravin Satpute <psatpute@redhat.com> and
+% Ravishankar Shrivastava <raviratlami@gmail.com>.
+
+LC_IDENTIFICATION
+title "Chhattisgarhi language locale for India"
+source "Red Hat, Pune"
+address "Marisfot III, Marigold Premises, East-Wing, Kalyaninagar, Pune, India-411014"
+contact ""
+email "bug-glibc-locales@gnu.org"
+tel ""
+fax ""
+language "Chhattisgarhi"
+territory "India"
+revision "1.0"
+date "2008-12-03"
+%
+category "hne_IN:2008";LC_IDENTIFICATION
+category "hne_IN:2008";LC_CTYPE
+category "hne_IN:2008";LC_COLLATE
+category "hne_IN:2008";LC_TIME
+category "hne_IN:2008";LC_NUMERIC
+category "hne_IN:2008";LC_MONETARY
+category "hne_IN:2008";LC_MESSAGES
+category "hne_IN:2008";LC_PAPER
+category "hne_IN:2008";LC_NAME
+category "hne_IN:2008";LC_ADDRESS
+category "hne_IN:2008";LC_TELEPHONE
+
+END LC_IDENTIFICATION
+
+LC_CTYPE
+copy "hi_IN"
+END LC_CTYPE
+
+LC_COLLATE
+copy "hi_IN"
+END LC_COLLATE
+
+LC_MONETARY
+copy "hi_IN"
+END LC_MONETARY
+
+
+LC_NUMERIC
+copy "hi_IN"
+END LC_NUMERIC
+
+
+LC_TIME
+% This is the POSIX Locale definition for the LC_TIME category.
+% These are generated based on XML base Locale difintion file
+% for IBM Class for Unicode/Java
+%
+% Abbreviated weekday names (%a)
+abday "<U0907><U0924><U0020>";/
+ "<U0938><U094B><U092E><U0020>";/
+ "<U092E><U0902><U0917><U0020>";/
+ "<U092C><U0941><U0927><U0020>";/
+ "<U092C><U093F><U0930><U0020>";/
+ "<U0938><U0941><U0915>";/
+ "<U0938><U0928><U093F>"
+%
+% Full weekday names (%A)
+day "<U0907><U0924><U0935><U093E><U0930><U0020>";/
+ "<U0938><U094B><U092E><U0935><U093E><U0930><U0020>";/
+ "<U092E><U0902><U0917><U0932><U0935><U093E><U0930><U0020>";/
+ "<U092C><U0941><U0927><U0935><U093E><U0930><U0020>";/
+ "<U092C><U093F><U0930><U0938><U092A><U0924><U0020>";/
+ "<U0938><U0941><U0915><U0930><U0935><U093E><U0930><U0020>";/
+ "<U0938><U0928><U093F><U0935><U093E><U0930><U0020>"
+%
+% Abbreviated month names (%b)
+abmon "<U091C><U0928>";/
+ "<U092B><U0930>";/
+ "<U092E><U093E><U0930><U094D><U091A>";/
+ "<U0905><U092A>";/
+ "<U092E><U0908>";"<U091C><U0942><U0928>";/
+ "<U091C><U0941><U0932><U093E>";/
+ "<U0905><U0917>";/
+ "<U0938><U093F><U0924>";/
+ "<U0905><U0915><U091F><U0942>";/
+ "<U0928><U0935>";/
+ "<U0926><U093F><U0938>"
+%
+% Full month names (%B)
+mon "<U091C><U0928><U0935><U0930><U0940>";/
+ "<U092B><U0930><U0935><U0930><U0940>";/
+ "<U092E><U093E><U0930><U094D><U091A>";/
+ "<U0905><U092A><U0930><U0947><U0932>";/
+ "<U092E><U0908>";"<U091C><U0942><U0928>";/
+ "<U091C><U0941><U0932><U093E><U0908>";/
+ "<U0905><U0917><U0938><U094D><U0924>";/
+ "<U0938><U093F><U0924><U092E><U092C><U0930>";/
+ "<U0905><U0915><U091F><U0942><U092C><U0930>";/
+ "<U0928><U0935><U092E><U092C><U0930>";/
+ "<U0926><U093F><U0938><U092E><U092C><U0930>"
+%
+% Equivalent of AM PM
+am_pm "<U092C><U093F><U0939><U093F><U0928><U093F><U092F><U093E><U0901>";/
+ "<U092E><U0902><U091D><U0928><U093F><U092F><U093E><U0901>"
+%
+% Appropriate date and time representation
+% %A %d %b %Y%I:%M:%S %Z
+d_t_fmt "<U0025><U0041><U0020><U0025><U0064><U0020><U0025><U0062>/
+<U0020><U0025><U0059><U0020><U0025><U0049><U003A><U0025><U004D><U003A>/
+<U0025><U0053><U0020><U0025><U0070><U0020><U0025><U005A>"
+%
+% Appropriate date representation
+% %A %d %b %Y
+d_fmt "<U0025><U0041><U0020><U0025><U0064><U0020><U0025><U0062>/
+<U0020><U0025><U0059>"
+%
+% Appropriate time representation
+% %I:%M:%S %Z
+t_fmt "<U0025><U0049><U003A><U0025><U004D><U003A><U0025><U0053>/
+<U0020><U0020><U0025><U005A>"
+%
+% Appropriate 12 h time representation (%r)
+t_fmt_ampm "<U0025><U0049><U003A><U0025><U004D><U003A><U0025><U0053>/
+<U0020><U0025><U0070><U0020><U0025><U005A>"
+%
+date_fmt "<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/
+<U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
+<U0025><U005A><U0020><U0025><U0059>"
+END LC_TIME
+
+
+LC_MESSAGES
+yesexpr "<U005E><U005B><U0939><U0935><U0079><U0059><U005D>"
+noexpr "<U005E><U005B><U0928><U0907><U006E><U004E><U005D>"
+yesstr "<U0939><U0935>"
+nostr "<U0928><U0907>"
+END LC_MESSAGES
+
+
+LC_PAPER
+copy "hi_IN"
+END LC_PAPER
+
+
+LC_NAME
+% This is the ISO_IEC TR14652 Locale definition for the
+% LC_NAME category.
+%
+name_fmt "<U0025><U0070><U0025><U0074><U0025><U0066><U0025><U0074>/
+<U0025><U0067>"
+name_gen ""
+name_mr "<U0938><U093F><U0930><U0940><U092E><U093E><U0928>"
+name_mrs "<U0938><U093F><U0930><U0940><U092E><U0924><U0940>"
+name_miss "<U0915><U0941><U0902><U0935><U093E><U0930><U0940>"
+name_ms "<U0915><U0941><U0902>"
+
+END LC_NAME
+
+
+LC_ADDRESS
+% This is the ISO_IEC TR14652 Locale definition for the
+% LC_ADDRESS
+postal_fmt "<U0025><U007A><U0025><U0063><U0025><U0054><U0025><U0073>/
+<U0025><U0062><U0025><U0065><U0025><U0072>"
+
+country_ab2 "<U0049><U004E>"
+country_ab3 "<U0049><U004E><U0044>"
+country_num 356
+lang_term "<U0068><U006E><U0065>"
+
+END LC_ADDRESS
+
+
+LC_TELEPHONE
+copy "hi_IN"
+END LC_TELEPHONE
+
+
+LC_MEASUREMENT
+copy "hi_IN"
+END LC_MEASUREMENT
--- libc/localedata/locales/sd_IN 16 Sep 2008 00:12:28 -0000 1.1
+++ libc/localedata/locales/sd_IN 5 Dec 2008 06:33:30 -0000 1.2
@@ -7,7 +7,7 @@ escape_char /
LC_IDENTIFICATION
title "Sindhi language locale for India"
-source "Redhat, Pune"
+source "Red Hat, Pune"
address "Marisfot III, Marigold Premises, East-Wing, Kalyaninagar, Pune, India-411014"
contact ""
email "bug-glibc-locales@gnu.org"
--- libc/localedata/locales/sd_IN@devanagari 16 Sep 2008 00:09:22 -0000 1.2
+++ libc/localedata/locales/sd_IN@devanagari 5 Dec 2008 06:33:30 -0000 1.3
@@ -6,7 +6,7 @@ escape_char /
LC_IDENTIFICATION
title "Sindhi language locale for India"
-source "Redhat, Pune"
+source "Red Hat, Pune"
address "Marisfot III, Marigold Premises, East-Wing, Kalyaninagar, Pune, India-411014"
contact ""
email "bug-glibc-locales@gnu.org"
--- libc/login/utmp_file.c 14 Aug 2008 04:22:59 -0000 1.22
+++ libc/login/utmp_file.c 30 Nov 2008 06:56:18 -0000 1.23
@@ -36,6 +36,7 @@
/* Descriptor for the file and position. */
static int file_fd = -1;
+static bool file_writable;
static off64_t file_offset;
/* Cache for the last read entry. */
@@ -138,7 +139,6 @@ setutent_file (void)
if (file_fd < 0)
{
const char *file_name;
- int result;
file_name = TRANSFORM_UTMP_FILE_NAME (__libc_utmp_file_name);
@@ -147,14 +147,10 @@ setutent_file (void)
#else
# define O_flags O_LARGEFILE
#endif
- file_fd = open_not_cancel_2 (file_name, O_RDWR | O_flags);
+ file_writable = false;
+ file_fd = open_not_cancel_2 (file_name, O_RDONLY | O_flags);
if (file_fd == -1)
- {
- /* Hhm, read-write access did not work. Try read-only. */
- file_fd = open_not_cancel_2 (file_name, O_RDONLY | O_flags);
- if (file_fd == -1)
- return 0;
- }
+ return 0;
#ifndef __ASSUME_O_CLOEXEC
# ifdef O_CLOEXEC
@@ -162,7 +158,7 @@ setutent_file (void)
# endif
{
/* We have to make sure the file is `closed on exec'. */
- result = fcntl_not_cancel (file_fd, F_GETFD, 0);
+ int result = fcntl_not_cancel (file_fd, F_GETFD, 0);
if (result >= 0)
{
# ifdef O_CLOEXEC
@@ -404,6 +400,52 @@ pututline_file (const struct utmp *data)
assert (file_fd >= 0);
+ if (! file_writable)
+ {
+ /* We must make the file descriptor writable before going on. */
+ const char *file_name = TRANSFORM_UTMP_FILE_NAME (__libc_utmp_file_name);
+
+ int new_fd = open_not_cancel_2 (file_name, O_RDWR | O_flags);
+ if (new_fd == -1)
+ return NULL;
+
+#ifndef __ASSUME_O_CLOEXEC
+# ifdef O_CLOEXEC
+ if (__have_o_cloexec <= 0)
+# endif
+ {
+ /* We have to make sure the file is `closed on exec'. */
+ int result = fcntl_not_cancel (file_fd, F_GETFD, 0);
+ if (result >= 0)
+ {
+# ifdef O_CLOEXEC
+ if (__have_o_cloexec == 0)
+ __have_o_cloexec = (result & FD_CLOEXEC) ? 1 : -1;
+
+ if (__have_o_cloexec < 0)
+# endif
+ result = fcntl_not_cancel (file_fd, F_SETFD,
+ result | FD_CLOEXEC);
+ }
+
+ if (result == -1)
+ {
+ close_not_cancel_no_status (file_fd);
+ return NULL;
+ }
+ }
+#endif
+
+ if (__lseek64 (new_fd, __lseek64 (file_fd, 0, SEEK_CUR), SEEK_SET) == -1
+ || dup2 (new_fd, file_fd) < 0)
+ {
+ close_not_cancel_no_status (new_fd);
+ return NULL;
+ }
+ close_not_cancel_no_status (new_fd);
+ file_writable = true;
+ }
+
/* Find the correct place to insert the data. */
if (file_offset > 0
&& (
--- libc/nis/nss_nis/nis-hosts.c 10 May 2008 23:23:25 -0000 1.29
+++ libc/nis/nss_nis/nis-hosts.c 7 Dec 2008 17:06:43 -0000 1.31
@@ -485,24 +485,6 @@ _nss_nis_gethostbyname4_r (const char *n
return retval;
}
- struct parser_data data;
- struct hostent host;
- int parse_res = parse_line (result, &host, &data, buflen, errnop, AF_UNSPEC,
- 0);
- if (__builtin_expect (parse_res < 1, 0))
- {
- if (parse_res == -1)
- {
- *herrnop = NETDB_INTERNAL;
- return NSS_STATUS_TRYAGAIN;
- }
- else
- {
- *herrnop = HOST_NOT_FOUND;
- return NSS_STATUS_NOTFOUND;
- }
- }
-
if (*pat == NULL)
{
uintptr_t pad = (-(uintptr_t) buffer
@@ -524,16 +506,47 @@ _nss_nis_gethostbyname4_r (const char *n
buflen -= sizeof (struct gaih_addrtuple);
}
- (*pat)->next = NULL;
- size_t h_name_len = strlen (host.h_name);
- if (h_name_len >= buflen)
+ uintptr_t pad = -(uintptr_t) buffer % __alignof__ (struct parser_data);
+ buffer += pad;
+
+ struct parser_data *data = (void *) buffer;
+
+ if (__builtin_expect (buflen < sizeof *data + 1 + pad, 0))
goto erange;
- (*pat)->name = memcpy (buffer, host.h_name, h_name_len + 1);
+ buflen -= pad;
+
+ struct hostent host;
+ int parse_res = parse_line (result, &host, data, buflen, errnop, AF_UNSPEC,
+ 0);
+ if (__builtin_expect (parse_res < 1, 0))
+ {
+ if (parse_res == -1)
+ {
+ *herrnop = NETDB_INTERNAL;
+ return NSS_STATUS_TRYAGAIN;
+ }
+ else
+ {
+ *herrnop = HOST_NOT_FOUND;
+ return NSS_STATUS_NOTFOUND;
+ }
+ }
+
+ (*pat)->next = NULL;
(*pat)->family = host.h_addrtype;
memcpy ((*pat)->addr, host.h_addr_list[0], host.h_length);
(*pat)->scopeid = 0;
assert (host.h_addr_list[1] == NULL);
+ /* Undo the alignment for parser_data. */
+ buffer -= pad;
+ buflen += pad;
+
+ size_t h_name_len = strlen (host.h_name) + 1;
+ if (h_name_len >= buflen)
+ goto erange;
+ (*pat)->name = memcpy (buffer, host.h_name, h_name_len);
+
free (result);
return NSS_STATUS_SUCCESS;
--- libc/posix/globtest.sh 14 Feb 2007 19:52:33 -0000 1.26
+++ libc/posix/globtest.sh 6 Dec 2008 06:05:39 -0000 1.27
@@ -1,4 +1,4 @@
-#! /bin/sh
+#! /bin/bash
common_objpfx=$1; shift
elf_objpfx=$1; shift
@@ -28,14 +28,11 @@ export LANG
# Create the arena
: ${TMPDIR=/tmp}
-testdir=$TMPDIR/globtest-dir
-testout=$TMPDIR/globtest-out
+testdir=$(mktemp -d $TMPDIR/globtest-dir.XXXXXX)
+testout=$(mktemp $TMPDIR/globtest-out.XXXXXX)
trap 'chmod 777 $testdir/noread; rm -fr $testdir $testout' 1 2 3 15
-test -d $testdir/noread && chmod 777 $testdir/noread
-rm -fr $testdir 2>/dev/null
-mkdir $testdir
echo 1 > $testdir/file1
echo 2 > $testdir/file2
echo 3 > $testdir/-file3
--- libc/posix/regex_internal.h 26 Aug 2007 01:35:05 -0000 1.74
+++ libc/posix/regex_internal.h 6 Dec 2008 00:12:55 -0000 1.75
@@ -391,7 +391,8 @@ static reg_errcode_t re_string_realloc_b
internal_function;
# ifdef RE_ENABLE_I18N
static void build_wcs_buffer (re_string_t *pstr) internal_function;
-static int build_wcs_upper_buffer (re_string_t *pstr) internal_function;
+static reg_errcode_t build_wcs_upper_buffer (re_string_t *pstr)
+ internal_function;
# endif /* RE_ENABLE_I18N */
static void build_upper_buffer (re_string_t *pstr) internal_function;
static void re_string_translate_buffer (re_string_t *pstr) internal_function;
--- libc/resolv/res_init.c 7 Apr 2008 17:20:25 -0000 1.47
+++ libc/resolv/res_init.c 8 Dec 2008 03:59:05 -0000 1.50
@@ -183,7 +183,7 @@ __res_vinit(res_state statp, int preinit
#endif
statp->nsaddr.sin_family = AF_INET;
statp->nsaddr.sin_port = htons(NAMESERVER_PORT);
- statp->nscount = 1;
+ statp->nscount = 0;
statp->ndots = 1;
statp->pfcode = 0;
statp->_vcsock = -1;
@@ -314,9 +314,9 @@ __res_vinit(res_state statp, int preinit
cp++;
if ((*cp != '\0') && (*cp != '\n')
&& __inet_aton(cp, &a)) {
- statp->nsaddr_list[nserv].sin_addr = a;
- statp->nsaddr_list[nserv].sin_family = AF_INET;
- statp->nsaddr_list[nserv].sin_port =
+ statp->nsaddr_list[nservall].sin_addr = a;
+ statp->nsaddr_list[nservall].sin_family = AF_INET;
+ statp->nsaddr_list[nservall].sin_port =
htons(NAMESERVER_PORT);
nserv++;
#ifdef _LIBC
@@ -420,8 +420,7 @@ __res_vinit(res_state statp, int preinit
continue;
}
}
- if (nserv > 1)
- statp->nscount = nserv;
+ statp->nscount = nserv;
#ifdef _LIBC
if (nservall - nserv > 0) {
statp->_u._ext.nscount6 = nservall - nserv;
--- libc/resolv/res_send.c 31 Oct 2008 17:36:29 -0000 1.62
+++ libc/resolv/res_send.c 8 Dec 2008 04:08:41 -0000 1.64
@@ -95,6 +95,7 @@ static const char rcsid[] = "$BINDId: re
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
+#include <kernel-features.h>
#if PACKETSZ > 65536
#define MAXPACKET PACKETSZ
@@ -103,6 +104,13 @@ static const char rcsid[] = "$BINDId: re
#endif
+#ifndef __ASSUME_SOCK_CLOEXEC
+static int __have_o_nonblock;
+#else
+# define __have_o_nonblock 0
+#endif
+
+
/* From ev_streams.c. */
static inline void
@@ -920,8 +928,20 @@ send_dg(res_state statp,
if (EXT(statp).nssocks[ns] == -1) {
/* only try IPv6 if IPv6 NS and if not failed before */
if ((EXT(statp).nscount6 > 0) && !statp->ipv6_unavail) {
- EXT(statp).nssocks[ns] =
- socket(PF_INET6, SOCK_DGRAM, 0);
+ if (__have_o_nonblock >= 0) {
+ EXT(statp).nssocks[ns] =
+ socket(PF_INET6, SOCK_DGRAM|SOCK_NONBLOCK,
+ 0);
+#ifndef __ASSUME_SOCK_CLOEXEC
+ if (__have_o_nonblock == 0)
+ __have_o_nonblock
+ = (EXT(statp).nssocks[ns] == -1
+ && errno == EINVAL ? -1 : 1);
+#endif
+ }
+ if (__have_o_nonblock < 0)
+ EXT(statp).nssocks[ns] =
+ socket(PF_INET6, SOCK_DGRAM, 0);
if (EXT(statp).nssocks[ns] < 0)
statp->ipv6_unavail = errno == EAFNOSUPPORT;
/* If IPv6 socket and nsap is IPv4, make it
@@ -929,8 +949,22 @@ send_dg(res_state statp,
else if (nsap->sin6_family == AF_INET)
convaddr4to6(nsap);
}
- if (EXT(statp).nssocks[ns] < 0)
- EXT(statp).nssocks[ns] = socket(PF_INET, SOCK_DGRAM, 0);
+ if (EXT(statp).nssocks[ns] < 0) {
+ if (__have_o_nonblock >= 0) {
+ EXT(statp).nssocks[ns]
+ = socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK,
+ 0);
+#ifndef __ASSUME_SOCK_CLOEXEC
+ if (__have_o_nonblock == 0)
+ __have_o_nonblock
+ = (EXT(statp).nssocks[ns] == -1
+ && errno == EINVAL ? -1 : 1);
+#endif
+ }
+ if (__have_o_nonblock < 0)
+ EXT(statp).nssocks[ns]
+ = socket(PF_INET, SOCK_DGRAM, 0);
+ }
if (EXT(statp).nssocks[ns] < 0) {
*terrno = errno;
Perror(statp, stderr, "socket(dg)", errno);
@@ -955,13 +989,15 @@ send_dg(res_state statp,
__res_iclose(statp, false);
return (0);
}
- /* Make socket non-blocking. */
- int fl = __fcntl (EXT(statp).nssocks[ns], F_GETFL);
- if (fl != -1)
- __fcntl (EXT(statp).nssocks[ns], F_SETFL,
- fl | O_NONBLOCK);
- Dprint(statp->options & RES_DEBUG,
- (stdout, ";; new DG socket\n"))
+ if (__have_o_nonblock < 0) {
+ /* Make socket non-blocking. */
+ int fl = __fcntl (EXT(statp).nssocks[ns], F_GETFL);
+ if (fl != -1)
+ __fcntl (EXT(statp).nssocks[ns], F_SETFL,
+ fl | O_NONBLOCK);
+ Dprint(statp->options & RES_DEBUG,
+ (stdout, ";; new DG socket\n"))
+ }
}
/*
--- libc/resolv/nss_dns/dns-host.c 12 Nov 2008 07:52:20 -0000 1.54
+++ libc/resolv/nss_dns/dns-host.c 3 Dec 2008 07:09:26 -0000 1.55
@@ -198,8 +198,14 @@ _nss_dns_gethostbyname3_r (const char *n
1024, &host_buffer.ptr, NULL, NULL, NULL);
if (n < 0)
{
- status = (errno == ECONNREFUSED
- ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND);
+ if (errno == ESRCH)
+ {
+ status = NSS_STATUS_TRYAGAIN;
+ h_errno = TRY_AGAIN;
+ }
+ else
+ status = (errno == ECONNREFUSED
+ ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND);
*h_errnop = h_errno;
if (h_errno == TRY_AGAIN)
*errnop = EAGAIN;
@@ -304,8 +310,14 @@ _nss_dns_gethostbyname4_r (const char *n
&ans2p, &nans2p, &resplen2);
if (n < 0)
{
- status = (errno == ECONNREFUSED
- ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND);
+ if (errno == ESRCH)
+ {
+ status = NSS_STATUS_TRYAGAIN;
+ h_errno = TRY_AGAIN;
+ }
+ else
+ status = (errno == ECONNREFUSED
+ ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND);
*herrnop = h_errno;
if (h_errno == TRY_AGAIN)
*errnop = EAGAIN;
--- libc/stdlib/Makefile 8 Mar 2008 21:31:19 -0000 1.122
+++ libc/stdlib/Makefile 2 Dec 2008 02:27:21 -0000 1.123
@@ -69,7 +69,7 @@ tests := tst-strtol tst-strtod testmb t
test-a64l tst-qsort tst-system testmb2 bug-strtod2 \
tst-atof1 tst-atof2 tst-strtod2 tst-strtod3 tst-rand48-2 \
tst-makecontext tst-strtod4 tst-strtod5 tst-qsort2 \
- tst-makecontext2 tst-strtod6
+ tst-makecontext2 tst-strtod6 tst-unsetenv1
include ../Makeconfig
--- libc/stdlib/setenv.c 14 Dec 2005 10:44:05 -0000 1.1
+++ libc/stdlib/setenv.c 2 Dec 2008 01:39:44 -0000 1.2
@@ -292,19 +292,20 @@ unsetenv (name)
LOCK;
ep = __environ;
- while (*ep != NULL)
- if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
- {
- /* Found it. Remove this pointer by moving later ones back. */
- char **dp = ep;
-
- do
- dp[0] = dp[1];
- while (*dp++);
- /* Continue the loop in case NAME appears again. */
- }
- else
- ++ep;
+ if (ep != NULL)
+ while (*ep != NULL)
+ if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
+ {
+ /* Found it. Remove this pointer by moving later ones back. */
+ char **dp = ep;
+
+ do
+ dp[0] = dp[1];
+ while (*dp++);
+ /* Continue the loop in case NAME appears again. */
+ }
+ else
+ ++ep;
UNLOCK;
--- libc/stdlib/tst-unsetenv1.c 1 Jan 1970 00:00:00 -0000
+++ libc/stdlib/tst-unsetenv1.c 2 Dec 2008 02:27:12 -0000 1.1
@@ -0,0 +1,12 @@
+#include <stdlib.h>
+
+static int
+do_test (void)
+{
+ clearenv ();
+ unsetenv ("FOO");
+ return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
--- libc/sysdeps/i386/dl-tlsdesc.S 13 May 2008 05:33:06 -0000 1.1
+++ libc/sysdeps/i386/dl-tlsdesc.S 6 Dec 2008 00:15:17 -0000 1.2
@@ -128,8 +128,7 @@ _dl_tlsdesc_dynamic:
.Lslow:
cfi_adjust_cfa_offset (28)
movl %ebx, 16(%esp)
- call __i686.get_pc_thunk.bx
- addl $_GLOBAL_OFFSET_TABLE_, %ebx
+ LOAD_PIC_REG (bx)
call ___tls_get_addr@PLT
movl 16(%esp), %ebx
jmp .Lret
--- libc/sysdeps/posix/getaddrinfo.c 30 Jul 2008 19:14:22 -0000 1.136
+++ libc/sysdeps/posix/getaddrinfo.c 3 Dec 2008 07:04:10 -0000 1.139
@@ -733,6 +733,8 @@ gaih_inet (const char *name, const struc
tmpbuflen, 2 * tmpbuflen);
}
+ no_inet6_data = no_data;
+
if (status == NSS_STATUS_SUCCESS)
{
if ((req->ai_flags & AI_CANONNAME) != 0 && canon == NULL)
@@ -2108,7 +2110,7 @@ getaddrinfo (const char *name, const cha
{
/* If we haven't seen both IPv4 and IPv6 interfaces we can
narrow down the search. */
- if (! seen_ipv4 || ! seen_ipv6)
+ if ((! seen_ipv4 || ! seen_ipv6) && (seen_ipv4 || seen_ipv6))
{
local_hints = *hints;
local_hints.ai_family = seen_ipv4 ? PF_INET : PF_INET6;
--- libc/sysdeps/unix/sysv/linux/bits/sched.h 13 Nov 2008 19:56:57 -0000 1.31
+++ libc/sysdeps/unix/sysv/linux/bits/sched.h 6 Dec 2008 05:59:22 -0000 1.33
@@ -131,26 +131,31 @@ typedef struct
do { \
size_t __i; \
size_t __imax = (setsize) / sizeof (__cpu_mask); \
- cpu_set_t *__arr = (cpusetp); \
+ __cpu_mask *__bits = (cpusetp)->__bits; \
for (__i = 0; __i < __imax; ++__i) \
- __arr->__bits[__i] = 0; \
+ __bits[__i] = 0; \
} while (0)
# endif
# define __CPU_SET_S(cpu, setsize, cpusetp) \
(__extension__ \
({ size_t __cpu = (cpu); \
__cpu < 8 * (setsize) \
- ? ((cpusetp)->__bits[__CPUELT (__cpu)] |= __CPUMASK (__cpu)) : 0; }))
+ ? (((__cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)] \
+ |= __CPUMASK (__cpu)) \
+ : 0; }))
# define __CPU_CLR_S(cpu, setsize, cpusetp) \
(__extension__ \
({ size_t __cpu = (cpu); \
__cpu < 8 * (setsize) \
- ? ((cpusetp)->__bits[__CPUELT (__cpu)] &= ~__CPUMASK (__cpu)) : 0; }))
+ ? (((__cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)] \
+ &= ~__CPUMASK (__cpu)) \
+ : 0; }))
# define __CPU_ISSET_S(cpu, setsize, cpusetp) \
(__extension__ \
({ size_t __cpu = (cpu); \
__cpu < 8 * (setsize) \
- ? (((cpusetp)->__bits[__CPUELT (__cpu)] & __CPUMASK (__cpu))) != 0 \
+ ? ((((__cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)] \
+ & __CPUMASK (__cpu))) != 0 \
: 0; }))
# define __CPU_COUNT_S(setsize, cpusetp) \
@@ -162,12 +167,12 @@ typedef struct
# else
# define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \
(__extension__ \
- ({ cpu_set_t *__arr1 = (cpusetp1); \
- cpu_set_t *__arr2 = (cpusetp2); \
+ ({ __cpu_mask *__arr1 = (cpusetp1)->__bits; \
+ __cpu_mask *__arr2 = (cpusetp2)->__bits; \
size_t __imax = (setsize) / sizeof (__cpu_mask); \
size_t __i; \
for (__i = 0; __i < __imax; ++__i) \
- if (__arr1->__bits[__i] != __arr2->__bits[__i]) \
+ if (__bits[__i] != __bits[__i]) \
break; \
__i == __imax; }))
# endif
@@ -175,12 +180,12 @@ typedef struct
# define __CPU_OP_S(setsize, destset, srcset1, srcset2, op) \
(__extension__ \
({ cpu_set_t *__dest = (destset); \
- cpu_set_t *__arr1 = (srcset1); \
- cpu_set_t *__arr2 = (srcset2); \
+ __cpu_mask *__arr1 = (srcset1)->__bits; \
+ __cpu_mask *__arr2 = (srcset2)->__bits; \
size_t __imax = (setsize) / sizeof (__cpu_mask); \
size_t __i; \
for (__i = 0; __i < __imax; ++__i) \
- __dest->__bits[__i] = __arr1->__bits[__i] op __arr2->__bits[__i]; \
+ ((__cpu_mask *) __dest->__bits)[__i] = __arr1[__i] op __arr2[__i]; \
__dest; }))
# define __CPU_ALLOC_SIZE(count) \

View File

@ -0,0 +1,11 @@
--- libc/resolv/Versions 2008-08-02 10:26:09.000000000 +0200
+++ libc/resolv/Versions 2008-12-08 12:51:53.000000000 +0100
@@ -102,7 +102,7 @@ libnss_dns {
_nss_dns_gethostbyname_r; _nss_dns_getnetbyaddr_r;
_nss_dns_getnetbyname_r; _nss_dns_getcanonname_r;
_nss_dns_gethostbyaddr2_r;
- _nss_dns_gethostbyname4_r;
+# _nss_dns_gethostbyname4_r;
}
}

View File

@ -23,7 +23,7 @@
Summary: The GNU libc libraries
Name: glibc
Version: 2.9
Release: 2
Release: 3
# GPLv2+ is used in a bunch of programs, LGPLv2+ is used for libraries.
# Things that are linked directly into dynamically linked programs
# and shared libraries (e.g. crt files, lib*_nonshared.a) have an additional
@ -41,6 +41,8 @@ Source2: %(echo %{glibcsrcdir} | sed s/glibc-/glibc-libidn-/).tar.bz2
Source3: %{glibcname}-fedora-%{glibcdate}.tar.bz2
Patch0: %{glibcname}-fedora.patch
Patch1: %{name}-ia64-lib64.patch
Patch2: glibc-fixes1.patch
Patch3: glibc-nss_dns-gethostbyname4-disable.patch
Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
Obsoletes: glibc-profile < 2.4
Provides: ldconfig
@ -222,6 +224,8 @@ package or when debugging this package.
%patch1 -p1
%endif
%endif
%patch2 -p1
%patch3 -p1
# A lot of programs still misuse memcpy when they have to use
# memmove. The memcpy implementation below is not tolerant at
@ -988,6 +992,11 @@ rm -f *.filelist*
%endif
%changelog
* Mon Dec 8 2008 Jakub Jelinek <jakub@redhat.com> 2.9-3
- temporarily disable _nss_dns_gethostbyname4_r (#459756)
- NIS hostname lookup fixes (#473073, #474800, BZ#7058)
- fix unsetenv (#472941)
* Thu Nov 13 2008 Jakub Jelinek <jakub@redhat.com> 2.9-2
- glibc 2.9 release
- fix CPU_ALLOC_SIZE on 32-bit arches (BZ#7029)