Updated to fedora-glibc-20060807T1859

This commit is contained in:
Jakub Jelinek 2006-08-07 19:28:26 +00:00
parent 98d2266156
commit 503d6a9585
38 changed files with 731 additions and 120 deletions

View File

@ -1,8 +1,86 @@
2006-08-07 Jakub Jelinek <jakub@redhat.com>
Ulrich Drepper <drepper@redhat.com>
* nis/nis_call.c (rec_dirsearch) [case LOWER_NAME]: Don't take
short cut if only one name component is stripped away.
2006-08-07 Ulrich Drepper <drepper@redhat.com>
* nis/nis_call.c: Minor cleanups throughout.
(rec_dirsearch) [HIGHER_NAME]: Correctly size ndomain array.
(first_shoot): Add search_parent_first parameter. Only if it is set
search parent server first.
If directory for table found through cold start cache is not the same
as referenced in the cache, don't use it.
(__nisfind_server): Take additional parameter. Pass it on to
first_shoot.
(__prepare_niscall): Adjust __nisfind_server call.
* nis/rpcsvc/nislib.h: Adjust __nisfind_server prototype.
* nis/nis_table.c: Adjust __nisfind_server call.
* nis/nis_lookup.c: Likewise.
(nis_lookup): Don't loop endlessly if name is reduced to ".".
2006-08-03 Ulrich Drepper <drepper@redhat.com>
[BZ #2182]
* math/s_cacosh.c: Return values from positive branch.
* math/s_cacoshf.c: Likewise.
* math/s_cacoshl.c: Likewise.
[BZ #2883]
* sysvipc/sys/msg.h: Change return value to ssize_t.
* sysdeps/unix/sysv/linux/msgrcv.c: Likewise.
* sysvipc/msgrcv.c: Likewise.
* include/sys/msg.h: Likewise.
* grp/initgroups.c (internal_getgrouplist): Remove unnecessary
test introduced in patch for bz #661.
(getgrouplist): Simplify code a bit. Don't allocate one additional
element for NEWGROUPS.
[BZ #2908]
* stdio-common/printf_fphex.c (__printf_fphex): When rounding up
'f', use '1' as leading digit not '\1'.
* stdio-common/Makefile (tests): Add bug16.
* stdio-common/bug16.c: New file.
[BZ #2914]
* sysdeps/unix/sysv/linux/gethostid.c: Don't define OLD_HOSTIDFILE
and don't try to open it. The patch introducing the macro
contained a bug and used the same file name as the new file
instead of using /var/adm/hostid. Nobody complaint so I'm taking
this out completely.
[BZ #2926]
* assert/assert.h: Move cast to void inside ?: to quiet gcc.
Patch by Jerry James <Jerry.James@usu.edu>.
* rt/Makefile (tests): Add tst-clock2.
* rt/tst-clock2.c: New file.
[BZ #2978]
* resolv/gai_notify.c (__gai_notify_only): Copy memory for thread
function and its parameters and pass it to new thread.
(__gai_notify): Add support for alternative waiting for completion.
* resolv/gai_suspend.c (gai_suspend): Add support for alternative
waiting for completion.
* resolv/getaddrinfo_a.c: Likewise.
* resolv/gai_misc.h (struct waitlist): Don't add cond if alternative
waiting for completion is used.
* resolv/gai_misc.c: Allow overwriting code to start helper thread.
* resolv/gai_cancel.c: Include <gai_misc.h> not "gai_misc.h".
* resolv/gai_error.c: Likewise.
* resolv/gai_sigqueue.c: Likewise.
2006-08-02 Thomas Schwinge <tschwinge@gnu.org>
* hurd/getdport.c (__getdport): Don't return EBADF; instead set
errno to EBADF and return MACH_PORT_NULL.
2006-06-23 Joseph Myers <joseph@codesourcery.com>
[BZ #2980]
* posix/Makefile (CFLAGS-waitid.c): Add
-fasynchronous-unwind-tables.
* posix/Makefile (CFLAGS-waitid.c): Add -fasynchronous-unwind-tables.
2006-08-02 Ulrich Drepper <drepper@redhat.com>
@ -11,6 +89,7 @@
2006-08-01 Ulrich Drepper <drepper@redhat.com>
[BZ #2098]
* nscd/initgrcache.c (addinitgroupsX): Judge successful lookups by
status of NSS calls, not the number of returned entries.

View File

@ -84,16 +84,18 @@ extern void __assert (const char *__assertion, const char *__file, int __line)
__END_DECLS
# define assert(expr) \
(__ASSERT_VOID_CAST ((expr) ? 0 : \
(__assert_fail (__STRING(expr), __FILE__, __LINE__, \
__ASSERT_FUNCTION), 0)))
# define assert(expr) \
((expr) \
? __ASSERT_VOID_CAST (0) \
: (__assert_fail (__STRING(expr), __FILE__, __LINE__, __ASSERT_FUNCTION), \
__ASSERT_VOID_CAST (0)))
# ifdef __USE_GNU
# define assert_perror(errnum) \
(__ASSERT_VOID_CAST (!(errnum) ? 0 : \
(__assert_perror_fail ((errnum), __FILE__, __LINE__, \
__ASSERT_FUNCTION), 0)))
# define assert_perror(errnum) \
(!(errnum) \
? __ASSERT_VOID_CAST (0) \
: (__assert_perror_fail ((errnum), __FILE__, __LINE__, __ASSERT_FUNCTION), \
__ASSERT_VOID_CAST (0)))
# endif
/* Version 2.4 and later of GCC define a magical variable `__PRETTY_FUNCTION__'

View File

@ -3,5 +3,5 @@ glibc-branch := fedora
glibc-base := HEAD
DIST_BRANCH := devel
COLLECTION := dist-fc4
fedora-sync-date := 2006-08-02 18:08 UTC
fedora-sync-tag := fedora-glibc-20060802T1808
fedora-sync-date := 2006-08-07 18:59 UTC
fedora-sync-tag := fedora-glibc-20060807T1859

View File

@ -1,4 +1,4 @@
%define glibcrelease 17
%define glibcrelease 18
%define auxarches i586 i686 athlon sparcv9 alphaev6
%define xenarches i686 athlon
%ifarch %{xenarches}
@ -1438,6 +1438,8 @@ rm -f *.filelist*
%endif
%changelog
* Mon Aug 7 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-18
- NIS+ fixes
- fix memusage and xtrace scripts (#200736)
- redirect /sbin/service sshd condrestart std{out,err} to /dev/null
when executed from glibc_post_upgrade

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1989,91,93,1996-2003, 2004, 2005 Free Software Foundation, Inc.
/* Copyright (C) 1989,91,93,1996-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
@ -17,6 +17,7 @@
02111-1307 USA. */
#include <alloca.h>
#include <assert.h>
#include <errno.h>
#include <grp.h>
#include <limits.h>
@ -74,8 +75,8 @@ internal_getgrouplist (const char *user, gid_t group, long int *size,
long int start = 1;
/* Never store more than the starting *SIZE number of elements. */
if (*size > 0)
(*groupsp)[0] = group;
assert (*size > 0);
(*groupsp)[0] = group;
if (__nss_group_database != NULL)
{
@ -142,11 +143,9 @@ internal_getgrouplist (const char *user, gid_t group, long int *size,
int
getgrouplist (const char *user, gid_t group, gid_t *groups, int *ngroups)
{
gid_t *newgroups;
long int size = MAX (1, *ngroups);
int result;
newgroups = (gid_t *) malloc ((size + 1) * sizeof (gid_t));
gid_t *newgroups = (gid_t *) malloc (size * sizeof (gid_t));
if (__builtin_expect (newgroups == NULL, 0))
/* No more memory. */
// XXX This is wrong. The user provided memory, we have to use
@ -155,20 +154,16 @@ getgrouplist (const char *user, gid_t group, gid_t *groups, int *ngroups)
// XXX too small. For initgroups a flag could say: increase size.
return -1;
result = internal_getgrouplist (user, group, &size, &newgroups, -1);
int total = internal_getgrouplist (user, group, &size, &newgroups, -1);
memcpy (groups, newgroups, MIN (*ngroups, result) * sizeof (gid_t));
if (result > *ngroups)
{
*ngroups = result;
result = -1;
}
else
*ngroups = result;
memcpy (groups, newgroups, MIN (*ngroups, total) * sizeof (gid_t));
free (newgroups);
return result;
int retval = total > *ngroups ? -1 : total;
*ngroups = total;
return retval;
}
static_link_warning (getgrouplist)

View File

@ -35,8 +35,11 @@ __getdport (int fd)
so we don't bother allocating a real table. */
if (_hurd_init_dtable == NULL)
/* Never had a descriptor table. */
return EBADF;
{
/* Never had a descriptor table. */
errno = EBADF;
return MACH_PORT_NULL;
}
if (fd < 0 || (unsigned int) fd > _hurd_init_dtablesize ||
_hurd_init_dtable[fd] == MACH_PORT_NULL)

View File

@ -1,8 +1,8 @@
#ifndef _SYS_MSG_H
#include <sysvipc/sys/msg.h>
extern int __libc_msgrcv (int msqid, void *msgp, size_t msgsz, long int msgtyp,
int msgflg);
extern ssize_t __libc_msgrcv (int msqid, void *msgp, size_t msgsz,
long int msgtyp, int msgflg);
extern int __libc_msgsnd (int msqid, const void *msgp, size_t msgsz,
int msgflg);

View File

@ -1,3 +1,18 @@
2006-06-03 Eddy Petrisor <eddy.petrisor@gmail.com>
[BZ #2125]
* locales/ro_RO: Fix collation rules for <U0218> and <U021A>.
Define first_weekday, first_workdayweek_day, work_day,
country_isbn and country_post fields.
Comments for terminology and bibliographic codes were added.
2006-08-03 Ulrich Drepper <drepper@redhat.com>
* SUPPORTED (SUPPORTED-LOCALES): Add csb_PL.UTF-8.
[BZ #2961]
* locales/csb_PL: New file.
2006-08-01 Ulrich Drepper <drepper@redhat.com>
* locales/es_NI: Define real t_fmt_ampm and am_pm.

View File

@ -72,6 +72,7 @@ ca_IT.UTF-8/UTF-8 \
ca_IT/ISO-8859-15 \
cs_CZ.UTF-8/UTF-8 \
cs_CZ/ISO-8859-2 \
csb_PL/UTF-8 \
cy_GB.UTF-8/UTF-8 \
cy_GB/ISO-8859-14 \
da_DK.UTF-8/UTF-8 \

210
localedata/locales/csb_PL Normal file
View File

@ -0,0 +1,210 @@
comment_char %
escape_char /
%
% Kashubian Language Locale for Poland
% Source: csb_PL locale
% Contact: Michal Ostrowski
% Email: ostrowski.michal@gmail.com
% Tel: +48586717262
% Fax: none
% Language: csb
% Territory: PL
% Revision: 1.0
% Date: 2006-07-25
% Application: general
% Users: general
% Charset: UTF-8
% Distribution and use is free, also
% for commercial purposes.
LC_IDENTIFICATION
title "Kashubian locale for Poland"
source "csb_PL locale"
address ""
contact "Michal Ostrowski"
email "bug-glibc-locales@gnu.org"
tel ""
fax ""
language "Kashubian"
territory "Poland"
revision "1.0"
date "2006-07-25"
audience "general"
application "GNU locale"
abbreviation ""
%
category "csb_PL:2000";LC_IDENTIFICATION
category "csb_PL:2000";LC_CTYPE
category "csb_PL:2000";LC_COLLATE
category "csb_PL:2000";LC_TIME
category "csb_PL:2000";LC_NUMERIC
category "csb_PL:2000";LC_MONETARY
category "csb_PL:2000";LC_MESSAGES
category "csb_PL:2000";LC_PAPER
category "csb_PL:2000";LC_NAME
category "csb_PL:2000";LC_ADDRESS
category "csb_PL:2000";LC_TELEPHONE
END LC_IDENTIFICATION
LC_CTYPE
copy "pl_PL"
END LC_CTYPE
LC_COLLATE
copy "iso14651_t1"
collating-symbol <aogonek>
collating-symbol <atilde>
collating-symbol <eacute>
collating-symbol <ediaeresis>
collating-symbol <lstroke>
collating-symbol <nacute>
collating-symbol <ograve>
collating-symbol <oacute>
collating-symbol <ocircumflex>
collating-symbol <ugrave>
collating-symbol <zdot>
reorder-after <a>
<aogonek>
<atilde>
reorder-after <e>
<eacute>
<ediaeresis>
reorder-after <l>
<lstroke>
reorder-after <n>
<nacute>
reorder-after <o>
<ograve>
<oacute>
<ocircumflex>
reorder-after <u>
<ugrave>
reorder-after <z>
<zdot>
reorder-after <U0061>
<U0105> <aogonek>;<BAS>;<MIN>;IGNORE
<U0104> <aogonek>;<BAS>;<CAP>;IGNORE
<U00E3> <atilde>;<BAS>;<MIN>;IGNORE
<U00C3> <atilde>;<BAS>;<CAP>;IGNORE
reorder-after <U0065>
<U00E9> <eacute>;<BAS>;<MIN>;IGNORE
<U00C9> <eacute>;<BAS>;<CAP>;IGNORE
<U00EB> <ediaeresis>;<BAS>;<MIN>;IGNORE
<U00CB> <ediaeresis>;<BAS>;<CAP>;IGNORE
reorder-after <U006C>
<U0142> <lstroke>;<BAS>;<MIN>;IGNORE
<U0141> <lstroke>;<BAS>;<CAP>;IGNORE
reorder-after <U006E>
<U0144> <nacute>;<BAS>;<MIN>;IGNORE
<U0143> <nacute>;<BAS>;<CAP>;IGNORE
reorder-after <U006F>
<U00F2> <ograve>;<BAS>;<MIN>;IGNORE
<U00D2> <ograve>;<BAS>;<CAP>;IGNORE
<U00F3> <oacute>;<BAS>;<MIN>;IGNORE
<U00D3> <oacute>;<BAS>;<CAP>;IGNORE
<U00F4> <ocircumflex>;<BAS>;<MIN>;IGNORE
<U00D4> <ocircumflex>;<BAS>;<CAP>;IGNORE
reorder-after <U0075>
<U00F9> <ugrave>;<BAS>;<MIN>;IGNORE
<U00D9> <ugrave>;<BAS>;<CAP>;IGNORE
reorder-after <U007A>
<U017C> <zdot>;<BAS>;<MIN>;IGNORE
<U017B> <zdot>;<BAS>;<CAP>;IGNORE
reorder-end
END LC_COLLATE
LC_MESSAGES
yesexpr "<U005E><U005B><U004A><U006A><U0054><U0074><U0059><U0079><U005D><U002E><U002A>"
noexpr "<U005E><U005B><U006E><U004E><U005D><U002E><U002A>"
END LC_MESSAGES
LC_MONETARY
copy "pl_PL"
END LC_MONETARY
LC_NUMERIC
copy "pl_PL"
END LC_NUMERIC
LC_TIME
abday "<U006E><U0069><U0065>"; "<U0070><U00F2><U006E>";/
"<U0077><U0074><U00F3>"; "<U0073><U0074><U0072>";/
"<U0063><U007A><U0077>"; "<U0070><U0069><U0105>";/
"<U0073><U006F><U0062>"
day "<U006E><U0069><U0065><U0064><U007A><U0065><U006C><U0061>";/
"<U0070><U00F2><U006E><U0069><U0065><U0064><U007A><U00F4><U0142><U006B>";/
"<U0077><U0074><U00F3><U0072><U006B>";/
"<U0073><U0074><U0072><U007A><U006F><U0064><U0061>";/
"<U0063><U007A><U0077><U0069><U00F4><U0072><U0074><U006B>";/
"<U0070><U0069><U0105><U0074><U006B>";/
"<U0073><U006F><U0062><U00F2><U0074><U0061>"
abmon "<U0073><U0074><U00EB>"; "<U0067><U0072><U006F>";/
"<U0073><U0074><U006D>"; "<U0142><U017C><U00EB>";/
"<U006D><U00F4><U006A>"; "<U0063><U007A><U0065>";/
"<U006C><U00EB><U0070>"; "<U007A><U00E9><U006C>";/
"<U0073><U00E9><U0077>"; "<U0072><U0075><U006A>";/
"<U006C><U00EB><U0073>"; "<U0067><U00F2><U0064>"
mon "<U0073><U0074><U00EB><U0063><U007A><U006E><U0069><U006B>";/
"<U0067><U0072><U006F><U006D><U0069><U0063><U007A><U006E><U0069><U006B>";/
"<U0073><U0074><U0072><U0075><U006D><U0069><U0061><U006E><U006E><U0069><U006B>";/
"<U0142><U017C><U00EB><U006B><U0077><U0069><U00F4><U0074>";/
"<U006D><U00F4><U006A>";/
"<U0063><U007A><U0065><U0072><U0077><U0069><U0144><U0063>";/
"<U006C><U00EB><U0070><U0069><U006E><U0063>";/
"<U007A><U00E9><U006C><U006E><U0069><U006B>";/
"<U0073><U00E9><U0077><U006E><U0069><U006B>";/
"<U0072><U0075><U006A><U0061><U006E>";/
"<U006C><U00EB><U0073><U0074><U006F><U0070><U0061><U0064><U006E><U0069><U006B>";/
"<U0067><U00F2><U0064><U006E><U0069><U006B>"
d_t_fmt "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
d_fmt "<U0025><U0059><U002D><U0025><U006D><U002D><U0025><U0064>"
t_fmt "<U0025><U0054>"
am_pm "";""
t_fmt_ampm ""
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>"
week 7;19971201;4
first_weekday 2
first_workday 2
END LC_TIME
LC_PAPER
copy "pl_PL"
END LC_PAPER
LC_TELEPHONE
copy "pl_PL"
END LC_TELEPHONE
LC_MEASUREMENT
copy "pl_PL"
END LC_MEASUREMENT
LC_NAME
copy "pl_PL"
END LC_NAME
LC_ADDRESS
copy "pl_PL"
END LC_ADDRESS

View File

@ -94,14 +94,14 @@ reorder-after <U0073>
<U0219> <s,>;<CDI>;<MIN>;IGNORE
<U015F> <s,>;<CDI>;<MIN>;IGNORE
reorder-after <U0053>
<U0218> <s,>;<CDI>;<MIN>;IGNORE
<U0218> <s,>;<CDI>;<CAP>;IGNORE
<U015E> <s,>;<CDI>;<CAP>;IGNORE
reorder-after <U0074>
<U021B> <t,>;<CDI>;<MIN>;IGNORE
<U0163> <t,>;<CDI>;<MIN>;IGNORE
reorder-after <U0054>
<U021A> <t,>;<CDI>;<MIN>;IGNORE
<U021A> <t,>;<CDI>;<CAP>;IGNORE
<U0162> <t,>;<CDI>;<CAP>;IGNORE
reorder-end
@ -266,6 +266,10 @@ t_fmt_ampm ""
date_fmt "<U0025><U0041><U0020><U0025><U002D><U0065><U0020><U0025><U0042>/
<U0020><U0025><U0059><U002C><U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
<U0025><U007A>"
% First week day is Monday
first_weekday 2
% First work day is Monday
first_workday 2
END LC_TIME
@ -369,9 +373,18 @@ country_ab2 "<U0052><U004F>"
country_ab3 "<U0052><U004F><U0055>"
country_num 642
country_car "<U0052><U004F>"
% ISBN code is 973
% see: http://homepages.cwi.nl/~dik/english/codes/isbn.html
% and other sources
country_isbn 973
% FIXME: is it really RO?
country_post "<U0052><U004F>"
% language names are not capitalized in Romanian ( roma>na( )
lang_name "<U0072><U006F><U006D><U00E2><U006E><U0103>"
lang_ab "<U0072><U006F>"
% set the terminology code to "ron" as defined in iso639-2
lang_term "<U0072><U006F><U006E>"
% set the bibliographic code to "rum" as defined in iso639-2
lang_lib "<U0072><U0075><U006D>"
END LC_ADDRESS

View File

@ -80,6 +80,10 @@ __cacosh (__complex__ double x)
__imag__ y += __imag__ x;
res = __clog (y);
/* We have to use the positive branch. */
if (__real__ res < 0.0)
res = -res;
}
return res;

View File

@ -95,6 +95,10 @@ __cacoshf (__complex__ float x)
+ ro);
__imag__ res = __ieee754_atan2f (__imag__ x + b, __real__ x + a);
#endif
/* We have to use the positive branch. */
if (__real__ res < 0.0)
res = -res;
}
return res;

View File

@ -80,6 +80,10 @@ __cacoshl (__complex__ long double x)
__imag__ y += __imag__ x;
res = __clogl (y);
/* We have to use the positive branch. */
if (__real__ res < 0.0)
res = -res;
}
return res;

View File

@ -38,12 +38,12 @@ static const struct timeval UDPTIMEOUT = {5, 0};
extern u_short __pmap_getnisport (struct sockaddr_in *address, u_long program,
u_long version, u_int protocol);
unsigned long
unsigned long int
inetstr2int (const char *str)
{
size_t j = 0;
for (size_t i = 0; str[i] != '\0'; ++i)
if (str[i] == '.' && ++j == 4)
if (str[i] == '.' && __builtin_expect (++j == 4, 0))
{
char buffer[i + 1];
buffer[i] = '\0';
@ -68,8 +68,6 @@ libnsl_hidden_def (__nisbind_destroy)
nis_error
__nisbind_next (dir_binding *bind)
{
u_int j;
if (bind->clnt != NULL)
{
if (bind->use_auth)
@ -81,7 +79,7 @@ __nisbind_next (dir_binding *bind)
if (bind->trys >= bind->server_len)
return NIS_FAIL;
for (j = bind->current_ep + 1;
for (u_int j = bind->current_ep + 1;
j < bind->server_val[bind->server_used].ep.ep_len; ++j)
if (strcmp (bind->server_val[bind->server_used].ep.ep_val[j].family,
"inet") == 0)
@ -96,7 +94,7 @@ __nisbind_next (dir_binding *bind)
if (bind->server_used >= bind->server_len)
bind->server_used = 0;
for (j = 0; j < bind->server_val[bind->server_used].ep.ep_len; ++j)
for (u_int j = 0; j < bind->server_val[bind->server_used].ep.ep_len; ++j)
if (strcmp (bind->server_val[bind->server_used].ep.ep_val[j].family,
"inet") == 0)
if (bind->server_val[bind->server_used].ep.ep_val[j].proto[0] == '-')
@ -125,7 +123,7 @@ __nisbind_connect (dir_binding *dbp)
dbp->addr.sin_addr.s_addr =
inetstr2int (serv->ep.ep_val[dbp->current_ep].uaddr);
if (dbp->addr.sin_addr.s_addr == 0)
if (dbp->addr.sin_addr.s_addr == INADDR_NONE)
return NIS_FAIL;
/* Check, if the host is online and rpc.nisd is running. Much faster
@ -340,7 +338,7 @@ rec_dirsearch (const_nis_name name, directory_obj *dir, nis_error *status)
case HIGHER_NAME:
{ /* We need data from a parent domain */
directory_obj *obj;
char ndomain [strlen (name) + 3];
char ndomain[strlen (dir->do_name) + 3];
nis_domain_of_r (dir->do_name, ndomain, sizeof (ndomain));
@ -388,7 +386,6 @@ rec_dirsearch (const_nis_name name, directory_obj *dir, nis_error *status)
char domain[namelen + 3];
char ndomain[namelen + 3];
char *cp;
u_int run = 0;
strcpy (domain, name);
@ -402,16 +399,9 @@ rec_dirsearch (const_nis_name name, directory_obj *dir, nis_error *status)
nis_leaf_of_r (domain, leaf, sizeof (leaf));
nis_domain_of_r (domain, ndomain, sizeof (ndomain));
strcpy (domain, ndomain);
++run;
}
while (nis_dir_cmp (domain, dir->do_name) != SAME_NAME);
if (run == 1)
{
/* We have found the directory above. Use it. */
return dir;
}
cp = rawmemchr (leaf, '\0');
*cp++ = '.';
strcpy (cp, domain);
@ -461,31 +451,44 @@ rec_dirsearch (const_nis_name name, directory_obj *dir, nis_error *status)
/* We try to query the current server for the searched object,
maybe he know about it ? */
static directory_obj *
first_shoot (const_nis_name name, directory_obj *dir)
first_shoot (const_nis_name name, int search_parent_first, directory_obj *dir)
{
directory_obj *obj = NULL;
fd_result *fd_res;
XDR xdrs;
char domain[strlen (name) + 3];
#if 0
if (nis_dir_cmp (name, dir->do_name) == SAME_NAME)
return dir;
#endif
nis_domain_of_r (name, domain, sizeof (domain));
const char *search_name = name;
if (search_parent_first)
{
nis_domain_of_r (name, domain, sizeof (domain));
search_name = domain;
}
if (nis_dir_cmp (domain, dir->do_name) == SAME_NAME)
if (nis_dir_cmp (search_name, dir->do_name) == SAME_NAME)
return dir;
fd_res = __nis_finddirectory (dir, domain);
fd_res = __nis_finddirectory (dir, search_name);
if (fd_res == NULL)
return NULL;
if (fd_res->status == NIS_SUCCESS
&& (obj = calloc (1, sizeof (directory_obj))) != NULL)
{
xdrmem_create(&xdrs, fd_res->dir_data.dir_data_val,
fd_res->dir_data.dir_data_len, XDR_DECODE);
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);
if (strcmp (dir->do_name, obj->do_name) != 0)
{
nis_free_directory (obj);
obj = NULL;
}
}
__free_fdresult (fd_res);
@ -497,7 +500,8 @@ first_shoot (const_nis_name name, directory_obj *dir)
}
nis_error
__nisfind_server (const_nis_name name, directory_obj **dir)
__nisfind_server (const_nis_name name, int search_parent_first,
directory_obj **dir)
{
if (name == NULL)
return NIS_BADNAME;
@ -520,7 +524,7 @@ __nisfind_server (const_nis_name name, directory_obj **dir)
return NIS_UNAVAIL;
/* Try at first, if servers in "dir" know our object */
obj = first_shoot (name, *dir);
obj = first_shoot (name, search_parent_first, *dir);
if (obj == NULL)
{
obj = rec_dirsearch (name, *dir, &status);
@ -539,7 +543,7 @@ nis_error
__prepare_niscall (const_nis_name name, directory_obj **dirp,
dir_binding *bptrp, unsigned int flags)
{
nis_error retcode = __nisfind_server (name, dirp);
nis_error retcode = __nisfind_server (name, 1, dirp);
if (__builtin_expect (retcode != NIS_SUCCESS, 0))
return retcode;

View File

@ -127,7 +127,7 @@ nis_lookup (const_nis_name name, const unsigned int flags)
/* Otherwise __nisfind_server will not do anything. */
dir = NULL;
if (__nisfind_server (req.ns_name, &dir)
if (__nisfind_server (req.ns_name, 1, &dir)
!= NIS_SUCCESS)
goto out;
@ -147,6 +147,11 @@ nis_lookup (const_nis_name name, const unsigned int flags)
nis_domain_of_r (req.ns_name, ndomain,
sizeof (ndomain));
req.ns_name = strdupa (ndomain);
if (strcmp (ndomain, ".") == 0)
{
NIS_RES_STATUS (res) = NIS_NAMEUNREACHABLE;
goto out;
}
__nisbind_destroy (&bptr);
nis_free_directory (dir);

View File

@ -271,7 +271,8 @@ nis_list (const_nis_name name, unsigned int flags,
memset (res, '\0', sizeof (nis_result));
status = __nisfind_server (ibreq->ibr_name, &dir);
status = __nisfind_server (ibreq->ibr_name,
ibreq->ibr_srch.ibr_srch_val != NULL, &dir);
if (status != NIS_SUCCESS)
{
NIS_RES_STATUS (res) = status;

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
/* Copyright (C) 1997, 1998, 1999, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@suse.de>, 1997.
@ -276,7 +276,8 @@ extern nis_error __nisbind_create (dir_binding *, const nis_server *,
extern nis_error __nisbind_connect (dir_binding *) __THROW;
extern nis_error __nisbind_next (dir_binding *) __THROW;
extern void __nisbind_destroy (dir_binding *) __THROW;
extern nis_error __nisfind_server (const_nis_name, directory_obj **) __THROW;
extern nis_error __nisfind_server (const_nis_name, int, directory_obj **)
__THROW;
#endif

View File

@ -1,3 +1,11 @@
2006-08-03 Ulrich Drepper <drepper@redhat.com>
[BZ #2892]
* pthread_setspecific.c (__pthread_setspecific): Check
out-of-range index before checking for unused key.
* sysdeps/pthread/gai_misc.h: New file.
2006-08-01 Ulrich Drepper <drepper@redhat.com>
* sysdeps/unix/sysv/linux/i386/smp.h: New file. Old Linux-specific

View File

@ -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.
@ -52,8 +52,8 @@ __pthread_setspecific (key, value)
}
else
{
if (KEY_UNUSED ((seq = __pthread_keys[key].seq))
|| key >= PTHREAD_KEYS_MAX)
if (key >= PTHREAD_KEYS_MAX
|| KEY_UNUSED ((seq = __pthread_keys[key].seq)))
/* Not valid. */
return EINVAL;

View File

@ -0,0 +1,119 @@
/* Copyright (C) 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
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
/* We define a special synchronization primitive for AIO. POSIX
conditional variables would be ideal but the pthread_cond_*wait
operations do not return on EINTR. This is a requirement for
correct aio_suspend and lio_listio implementations. */
#include <assert.h>
#include <signal.h>
#include <pthreadP.h>
#include <lowlevellock.h>
#define DONT_NEED_GAI_MISC_COND 1
#define GAI_MISC_NOTIFY(waitlist) \
do { \
if (--*waitlist->counterp == 0) \
lll_futex_wake (waitlist->counterp, 1); \
} while (0)
#define GAI_MISC_WAIT(result, futex, timeout, cancel) \
do { \
volatile int *futexaddr = &futex; \
int oldval = futex; \
\
if (oldval != 0) \
{ \
pthread_mutex_unlock (&__gai_requests_mutex); \
\
int oldtype; \
if (cancel) \
oldtype = LIBC_CANCEL_ASYNC (); \
\
int status; \
do \
{ \
status = lll_futex_timed_wait (futexaddr, oldval, timeout); \
if (status != -EWOULDBLOCK) \
break; \
\
oldval = *futexaddr; \
} \
while (oldval != 0); \
\
if (cancel) \
LIBC_CANCEL_RESET (oldtype); \
\
if (status == -EINTR) \
result = EINTR; \
else if (status == -ETIMEDOUT) \
result = EAGAIN; \
else \
assert (status == 0 || status == -EWOULDBLOCK); \
\
pthread_mutex_lock (&__gai_requests_mutex); \
} \
} while (0)
#define gai_start_notify_thread __gai_start_notify_thread
#define gai_create_helper_thread __gai_create_helper_thread
extern inline void
__gai_start_notify_thread (void)
{
sigset_t ss;
sigemptyset (&ss);
INTERNAL_SYSCALL_DECL (err);
INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_SETMASK, &ss, NULL, _NSIG / 8);
}
extern inline int
__gai_create_helper_thread (pthread_t *threadp, void *(*tf) (void *),
void *arg)
{
pthread_attr_t attr;
/* Make sure the thread is created detached. */
pthread_attr_init (&attr);
pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
/* The helper thread needs only very little resources. */
(void) pthread_attr_setstacksize (&attr, PTHREAD_STACK_MIN);
/* Block all signals in the helper thread. To do this thoroughly we
temporarily have to block all signals here. */
sigset_t ss;
sigset_t oss;
sigfillset (&ss);
INTERNAL_SYSCALL_DECL (err);
INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_SETMASK, &ss, &oss, _NSIG / 8);
int ret = pthread_create (threadp, &attr, tf, arg);
/* Restore the signal mask. */
INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_SETMASK, &oss, NULL,
_NSIG / 8);
(void) pthread_attr_destroy (&attr);
return ret;
}
#include_next <gai_misc.h>

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2001 Free Software Foundation, Inc.
/* Copyright (C) 2001, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
@ -20,7 +20,7 @@
#include <netdb.h>
#include <pthread.h>
#include "gai_misc.h"
#include <gai_misc.h>
int

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2001 Free Software Foundation, Inc.
/* Copyright (C) 2001, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
@ -19,7 +19,7 @@
#include <netdb.h>
#include "gai_misc.h"
#include <gai_misc.h>
int
gai_error (struct gaicb *req)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2001 Free Software Foundation, Inc.
/* Copyright (C) 2001, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
@ -23,10 +23,31 @@
#include <stdlib.h>
#include <sys/time.h>
#include "gai_misc.h"
#include <gai_misc.h>
#ifndef gai_create_helper_thread
# define gai_create_helper_thread __gai_create_helper_thread
extern inline int
__gai_create_helper_thread (pthread_t *threadp, void *(*tf) (void *),
void *arg)
{
pthread_attr_t attr;
/* Make sure the thread is created detached. */
pthread_attr_init (&attr);
pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
int ret = pthread_create (threadp, &attr, tf, arg);
(void) pthread_attr_destroy (&attr);
return ret;
}
#endif
/* Pool of request list entries. */
static struct requestlist **pool;
@ -229,16 +250,11 @@ __gai_enqueue_request (struct gaicb *gaicbp)
if (nthreads < optim.gai_threads && idle_thread_count == 0)
{
pthread_t thid;
pthread_attr_t attr;
newp->running = 1;
/* Make sure the thread is created detached. */
pthread_attr_init (&attr);
pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
/* Now try to start a thread. */
if (pthread_create (&thid, &attr, handle_requests, newp) == 0)
if (gai_create_helper_thread (&thid, handle_requests, newp) == 0)
/* We managed to enqueue the request. All errors which can
happen now can be recognized by calls to `gai_error'. */
++nthreads;

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2001 Free Software Foundation, Inc.
/* Copyright (C) 2001, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
@ -29,7 +29,9 @@ struct waitlist
{
struct waitlist *next;
#ifndef DONT_NEED_GAI_MISC_COND
pthread_cond_t *cond;
#endif
volatile int *counterp;
/* The next field is used in asynchronous `lio_listio' operations. */
struct sigevent *sigevp;

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2001 Free Software Foundation, Inc.
/* Copyright (C) 2001, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
@ -20,15 +20,24 @@
#include <netdb.h>
#include <pthread.h>
#include <stdlib.h>
#include <gai_misc.h>
#include "gai_misc.h"
struct notify_func
{
void (*func) (sigval_t);
sigval_t value;
};
static void *
notify_func_wrapper (void *arg)
{
struct sigevent *sigev = arg;
sigev->sigev_notify_function (sigev->sigev_value);
gai_start_notify_thread ();
struct notify_func *const n = arg;
void (*func) (sigval_t) = n->func;
sigval_t value = n->value;
free (n);
(*func) (value);
return NULL;
}
@ -54,8 +63,26 @@ __gai_notify_only (struct sigevent *sigev, pid_t caller_pid)
pattr = &attr;
}
if (pthread_create (&tid, pattr, notify_func_wrapper, sigev) < 0)
/* SIGEV may be freed as soon as we return, so we cannot let the
notification thread use that pointer. Even though a sigval_t is
only one word and the same size as a void *, we cannot just pass
the value through pthread_create as the argument and have the new
thread run the user's function directly, because on some machines
the calling convention for a union like sigval_t is different from
that for a pointer type like void *. */
struct notify_func *nf = malloc (sizeof *nf);
if (nf == NULL)
result = -1;
else
{
nf->func = sigev->sigev_notify_function;
nf->value = sigev->sigev_value;
if (pthread_create (&tid, pattr, notify_func_wrapper, nf) < 0)
{
free (nf);
result = -1;
}
}
}
else if (sigev->sigev_notify == SIGEV_SIGNAL)
/* We have to send a signal. */
@ -79,15 +106,21 @@ __gai_notify (struct requestlist *req)
{
struct waitlist *next = waitlist->next;
/* Decrement the counter. This is used in both cases. */
--*waitlist->counterp;
if (waitlist->sigevp == NULL)
pthread_cond_signal (waitlist->cond);
{
#ifdef DONT_NEED_GAI_MISC_COND
GAI_MISC_NOTIFY (waitlist);
#else
/* Decrement the counter. */
--*waitlist->counterp;
pthread_cond_signal (waitlist->cond);
#endif
}
else
/* This is part of a asynchronous `getaddrinfo_a' operation. If
this request is the last one, send the signal. */
if (*waitlist->counterp == 0)
if (--*waitlist->counterp == 0)
{
__gai_notify_only (waitlist->sigevp, waitlist->caller_pid);
/* This is tricky. See getaddrinfo_a.c for the reason why

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2001 Free Software Foundation, Inc.
/* Copyright (C) 2001, 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,7 +20,7 @@
#include <errno.h>
#include <signal.h>
#include "gai_misc.h"
#include <gai_misc.h>
int
__gai_sigqueue (sig, val, caller_pid)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2001 Free Software Foundation, Inc.
/* Copyright (C) 2001, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
@ -23,7 +23,7 @@
#include <stdlib.h>
#include <sys/time.h>
#include "gai_misc.h"
#include <gai_misc.h>
int
@ -32,9 +32,11 @@ gai_suspend (const struct gaicb *const list[], int ent,
{
struct waitlist waitlist[ent];
struct requestlist *requestlist[ent];
#ifndef DONT_NEED_GAI_MISC_COND
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
#endif
int cnt;
int dummy;
int cntr = 1;
int none = 1;
int result;
@ -50,9 +52,11 @@ gai_suspend (const struct gaicb *const list[], int ent,
if (requestlist[cnt] != NULL)
{
#ifndef DONT_NEED_GAI_MISC_COND
waitlist[cnt].cond = &cond;
#endif
waitlist[cnt].next = requestlist[cnt]->waiting;
waitlist[cnt].counterp = &dummy;
waitlist[cnt].counterp = &cntr;
waitlist[cnt].sigevp = NULL;
waitlist[cnt].caller_pid = 0; /* Not needed. */
requestlist[cnt]->waiting = &waitlist[cnt];
@ -78,6 +82,9 @@ gai_suspend (const struct gaicb *const list[], int ent,
which we must remove. So defer cancelation for now. */
pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &oldstate);
#ifdef DONT_NEED_GAI_MISC_COND
GAI_MISC_WAIT (result, cntr, timeout, 1);
#else
if (timeout == NULL)
result = pthread_cond_wait (&cond, &__gai_requests_mutex);
else
@ -99,6 +106,7 @@ gai_suspend (const struct gaicb *const list[], int ent,
result = pthread_cond_timedwait (&cond, &__gai_requests_mutex,
&abstime);
}
#endif
/* Now remove the entry in the waiting list for all requests
which didn't terminate. */
@ -121,10 +129,12 @@ gai_suspend (const struct gaicb *const list[], int ent,
/* Now it's time to restore the cancelation state. */
pthread_setcancelstate (oldstate, NULL);
#ifndef DONT_NEED_GAI_MISC_COND
/* Release the conditional variable. */
if (pthread_cond_destroy (&cond) != 0)
/* This must never happen. */
abort ();
#endif
if (result != 0)
{

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2001 Free Software Foundation, Inc.
/* Copyright (C) 2001, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
@ -23,7 +23,7 @@
#include <stdlib.h>
#include <unistd.h>
#include "gai_misc.h"
#include <gai_misc.h>
/* We need this special structure to handle asynchronous I/O. */
@ -96,7 +96,9 @@ getaddrinfo_a (int mode, struct gaicb *list[], int ent, struct sigevent *sig)
}
else if (mode == GAI_WAIT)
{
#ifndef DONT_NEED_GAI_MISC_COND
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
#endif
struct waitlist waitlist[ent];
int oldstate;
@ -104,7 +106,9 @@ getaddrinfo_a (int mode, struct gaicb *list[], int ent, struct sigevent *sig)
for (cnt = 0; cnt < ent; ++cnt)
if (requests[cnt] != NULL)
{
#ifndef DONT_NEED_GAI_MISC_COND
waitlist[cnt].cond = &cond;
#endif
waitlist[cnt].next = requests[cnt]->waiting;
waitlist[cnt].counterp = &total;
waitlist[cnt].sigevp = NULL;
@ -119,15 +123,24 @@ getaddrinfo_a (int mode, struct gaicb *list[], int ent, struct sigevent *sig)
pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &oldstate);
while (total > 0)
pthread_cond_wait (&cond, &__gai_requests_mutex);
{
#ifdef DONT_NEED_GAI_MISC_COND
int result;
GAI_MISC_WAIT (result, total, NULL, 1);
#else
pthread_cond_wait (&cond, &__gai_requests_mutex);
#endif
}
/* Now it's time to restore the cancelation state. */
pthread_setcancelstate (oldstate, NULL);
#ifndef DONT_NEED_GAI_MISC_COND
/* Release the conditional variable. */
if (pthread_cond_destroy (&cond) != 0)
/* This must never happen. */
abort ();
#endif
}
else
{
@ -147,7 +160,9 @@ getaddrinfo_a (int mode, struct gaicb *list[], int ent, struct sigevent *sig)
for (cnt = 0; cnt < ent; ++cnt)
if (requests[cnt] != NULL)
{
#ifndef DONT_NEED_GAI_MISC_COND
waitlist->list[cnt].cond = NULL;
#endif
waitlist->list[cnt].next = requests[cnt]->waiting;
waitlist->list[cnt].counterp = &waitlist->counter;
waitlist->list[cnt].sigevp = &waitlist->sigev;

View File

@ -48,7 +48,8 @@ tests := tst-shm tst-clock tst-clock_nanosleep tst-timer tst-timer2 \
tst-mqueue5 tst-mqueue6 tst-mqueue7 tst-mqueue8 tst-mqueue9 \
tst-timer3 tst-timer4 tst-timer5 \
tst-cpuclock1 tst-cpuclock2 \
tst-cputimer1 tst-cputimer2 tst-cputimer3
tst-cputimer1 tst-cputimer2 tst-cputimer3 \
tst-clock2
extra-libs := librt
extra-libs-others := $(extra-libs)

43
rt/tst-clock2.c Normal file
View File

@ -0,0 +1,43 @@
/* Test setting the monotonic clock. */
#include <time.h>
#include <unistd.h>
#if defined CLOCK_MONOTONIC && defined _POSIX_MONOTONIC_CLOCK
# include <errno.h>
# include <stdio.h>
static int
do_test (void)
{
if (sysconf (_SC_MONOTONIC_CLOCK) <= 0)
return 0;
struct timespec ts;
if (clock_gettime (CLOCK_MONOTONIC, &ts) != 0)
{
puts ("clock_gettime(CLOCK_MONOTONIC) failed");
return 1;
}
/* Setting the monotonic clock must fail. */
if (clock_settime (CLOCK_MONOTONIC, &ts) != -1)
{
puts ("clock_settime(CLOCK_MONOTONIC) did not fail");
return 1;
}
if (errno != EINVAL)
{
printf ("clock_settime(CLOCK_MONOTONIC) set errno to %d, expected %d\n",
errno, EINVAL);
return 1;
}
return 0;
}
# define TEST_FUNCTION do_test ()
#else
# define TEST_FUNCTION 0
#endif
#include "../test-skeleton.c"

View File

@ -54,7 +54,7 @@ tests := tstscanf test_rdwr test-popen tstgetln test-fseek \
tst-swprintf tst-fseek tst-fmemopen test-vfprintf tst-gets \
tst-perror tst-sprintf tst-rndseek tst-fdopen tst-fphex bug14 bug15 \
tst-popen tst-unlockedio tst-fmemopen2 tst-put-error tst-fgets \
tst-fwrite
tst-fwrite bug16
test-srcs = tst-unbputc tst-printf

20
stdio-common/bug16.c Normal file
View File

@ -0,0 +1,20 @@
#include <stdio.h>
#include <string.h>
static int
do_test (void)
{
char buf[100];
snprintf (buf, sizeof (buf), "%.0LA", 0x0.FFFFp+0L);
if (strcmp (buf, "0X1P+0") != 0)
{
printf ("got \"%s\", expected \"0X1P+0\"\n", buf);
return 1;
}
return 0;
}
#define TEST_FUNCTION do_test ()
#include "../test-skeleton.c"

View File

@ -1,5 +1,5 @@
/* Print floating point number in hexadecimal notation according to ISO C99.
Copyright (C) 1997-2002,2004 Free Software Foundation, Inc.
Copyright (C) 1997-2002,2004,2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -399,12 +399,15 @@ __printf_fphex (FILE *fp,
++leading;
else
{
leading = 1;
leading = '1';
if (expnegative)
{
exponent += 4;
if (exponent >= 0)
expnegative = 0;
exponent -= 4;
if (exponent <= 0)
{
exponent = -exponent;
expnegative = 0;
}
}
else
exponent += 4;

View File

@ -1,4 +1,5 @@
/* Copyright (C) 1995,1996,1998-2001,2003,2004 Free Software Foundation, Inc.
/* Copyright (C) 1995,1996,1998-2001,2003,2004,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
@ -24,7 +25,6 @@
#include <not-cancel.h>
#define HOSTIDFILE "/etc/hostid"
#define OLD_HOSTIDFILE "/etc/hostid"
#ifdef SET_PROCEDURE
int
@ -81,8 +81,6 @@ gethostid ()
/* First try to get the ID from a former invocation of sethostid. */
fd = open_not_cancel (HOSTIDFILE, O_RDONLY|O_LARGEFILE, 0);
if (fd < 0)
fd = open_not_cancel (OLD_HOSTIDFILE, O_RDONLY|O_LARGEFILE, 0);
if (fd >= 0)
{
ssize_t n = read_not_cancel (fd, &id, sizeof (id));

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1995, 1997, 1998, 2000, 2002 Free Software Foundation, Inc.
/* Copyright (C) 1995,1997,1998,2000,2002,2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
@ -35,7 +35,7 @@ struct ipc_kludge
};
int
ssize_t
__libc_msgrcv (msqid, msgp, msgsz, msgtyp, msgflg)
int msqid;
void *msgp;
@ -56,8 +56,8 @@ __libc_msgrcv (msqid, msgp, msgsz, msgtyp, msgflg)
int oldtype = LIBC_CANCEL_ASYNC ();
int result = INLINE_SYSCALL (ipc, 5, IPCOP_msgrcv, msqid, msgsz, msgflg,
__ptrvalue (&tmp));
ssize_t result = INLINE_SYSCALL (ipc, 5, IPCOP_msgrcv, msqid, msgsz, msgflg,
__ptrvalue (&tmp));
LIBC_CANCEL_RESET (oldtype);

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
/* Copyright (C) 1995, 1996, 1997, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
@ -26,7 +26,7 @@
describes which message is returned in MSGFLG describes the behaviour
in buffer overflow or queue underflow. */
int
ssize_t
msgrcv (msqid, msgp, msgsz, msgtyp, msgflg)
int msqid;
void *msgp;

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1995,1996,1997,1999,2000,2003 Free Software Foundation, Inc.
/* Copyright (C) 1995-1997,1999,2000,2003,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
@ -66,8 +66,8 @@ extern int msgget (key_t __key, int __msgflg) __THROW;
This function is a cancellation point and therefore not marked with
__THROW. */
extern int msgrcv (int __msqid, void *__msgp, size_t __msgsz,
long int __msgtyp, int __msgflg);
extern ssize_t msgrcv (int __msqid, void *__msgp, size_t __msgsz,
long int __msgtyp, int __msgflg);
/* Send message to message queue.