mirror of
git://sourceware.org/git/glibc.git
synced 2025-03-19 13:40:59 +08:00
Update.
2001-11-21 Bruno Haible <bruno@clisp.org> * charmaps/ISO-8859-16: Swap 0xa5 and 0xab entries.
This commit is contained in:
parent
f4efd06825
commit
8e9b2075ba
@ -1,5 +1,5 @@
|
||||
/* Implement simple hashing table with string based keys.
|
||||
Copyright (C) 1994, 1995, 1996, 1997, 2000 Free Software Foundation, Inc.
|
||||
Copyright (C) 1994-1997, 2000, 2001 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, October 1994.
|
||||
|
||||
@ -163,9 +163,11 @@ insert_entry_2 (htab, key, keylen, hval, idx, data)
|
||||
}
|
||||
|
||||
++htab->filled;
|
||||
if (100 * htab->filled > 90 * htab->size)
|
||||
if (100 * htab->filled > 75 * htab->size)
|
||||
{
|
||||
/* Table is filled more than 90%. Resize the table. */
|
||||
/* Table is filled more than 75%. Resize the table.
|
||||
Experiments have shown that for best performance, this threshold
|
||||
must lie between 40% and 85%. */
|
||||
unsigned long int old_size = htab->size;
|
||||
|
||||
htab->size = next_prime (htab->size * 2);
|
||||
@ -346,22 +348,18 @@ compute_hashval (key, keylen)
|
||||
size_t keylen;
|
||||
{
|
||||
size_t cnt;
|
||||
unsigned long int hval, g;
|
||||
unsigned long int hval;
|
||||
|
||||
/* Compute the hash value for the given string. The algorithm
|
||||
is taken from [Aho,Sethi,Ullman]. */
|
||||
is taken from [Aho,Sethi,Ullman], modified to reduce the number of
|
||||
collisions for short strings with very varied bit patterns.
|
||||
See http://www.clisp.org/haible/hashfunc.html. */
|
||||
cnt = 0;
|
||||
hval = keylen;
|
||||
while (cnt < keylen)
|
||||
{
|
||||
hval <<= 4;
|
||||
hval = (hval << 9) | (hval >> (LONGBITS - 9));
|
||||
hval += (unsigned long int) *(((char *) key) + cnt++);
|
||||
g = hval & ((unsigned long) 0xf << (LONGBITS - 4));
|
||||
if (g != 0)
|
||||
{
|
||||
hval ^= g >> (LONGBITS - 8);
|
||||
hval ^= g;
|
||||
}
|
||||
}
|
||||
return hval != 0 ? hval : ~((unsigned long) 0);
|
||||
}
|
||||
|
@ -1,3 +1,7 @@
|
||||
2001-11-21 Bruno Haible <bruno@clisp.org>
|
||||
|
||||
* charmaps/ISO-8859-16: Swap 0xa5 and 0xab entries.
|
||||
|
||||
2001-11-15 Børre Gaup <boerre.gaup@pc.nu>
|
||||
|
||||
* locales/se_NO: New file.
|
||||
|
@ -172,13 +172,13 @@ CHARMAP
|
||||
<U0105> /xa2 LATIN SMALL LETTER A WITH OGONEK
|
||||
<U0141> /xa3 LATIN CAPITAL LETTER L WITH STROKE
|
||||
<U20AC> /xa4 EURO SIGN
|
||||
<U00AB> /xa5 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
|
||||
<U201E> /xa5 DOUBLE LOW-9 QUOTATION MARK
|
||||
<U0160> /xa6 LATIN CAPITAL LETTER S WITH CARON
|
||||
<U00A7> /xa7 SECTION SIGN
|
||||
<U0161> /xa8 LATIN SMALL LETTER S WITH CARON
|
||||
<U00A9> /xa9 COPYRIGHT SIGN
|
||||
<U0218> /xaa LATIN CAPITAL LETTER S WITH COMMA BELOW
|
||||
<U201E> /xab DOUBLE LOW-9 QUOTATION MARK
|
||||
<U00AB> /xab LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
|
||||
<U0179> /xac LATIN CAPITAL LETTER Z WITH ACUTE
|
||||
<U00AD> /xad SOFT HYPHEN
|
||||
<U017A> /xae LATIN SMALL LETTER Z WITH ACUTE
|
||||
|
@ -764,7 +764,7 @@ getgrgid_plusgroup (gid_t gid, struct group *result, char *buffer,
|
||||
nis_result *res;
|
||||
char buf[24 + grptablelen];
|
||||
|
||||
sprintf(buf, "[gid=%d],%s", gid, grptable);
|
||||
sprintf(buf, "[gid=%lu],%s", (unsigned long int) gid, grptable);
|
||||
res = nis_list(buf, FOLLOW_PATH | FOLLOW_LINKS, NULL, NULL);
|
||||
if (niserr2nss (res->status) != NSS_STATUS_SUCCESS)
|
||||
{
|
||||
@ -794,7 +794,7 @@ getgrgid_plusgroup (gid_t gid, struct group *result, char *buffer,
|
||||
return NSS_STATUS_NOTFOUND;
|
||||
}
|
||||
|
||||
snprintf (buf, sizeof (buf), "%d", gid);
|
||||
snprintf (buf, sizeof (buf), "%lu", (unsigned long int) gid);
|
||||
|
||||
if (yp_match (domain, "group.bygid", buf, strlen (buf),
|
||||
&outval, &outvallen) != YPERR_SUCCESS)
|
||||
|
@ -1353,8 +1353,9 @@ getpwuid_plususer (uid_t uid, struct passwd *result, char *buffer,
|
||||
nis_result *res;
|
||||
char buf[1024 + pwdtablelen];
|
||||
|
||||
snprintf(buf, sizeof (buf), "[uid=%d],%s", uid, pwdtable);
|
||||
res = nis_list(buf, FOLLOW_PATH | FOLLOW_LINKS, NULL, NULL);
|
||||
snprintf (buf, sizeof (buf), "[uid=%lu],%s", (unsigned long int) uid,
|
||||
pwdtable);
|
||||
res = nis_list (buf, FOLLOW_PATH | FOLLOW_LINKS, NULL, NULL);
|
||||
if (niserr2nss (res->status) != NSS_STATUS_SUCCESS)
|
||||
{
|
||||
enum nss_status status = niserr2nss (res->status);
|
||||
@ -1383,7 +1384,7 @@ getpwuid_plususer (uid_t uid, struct passwd *result, char *buffer,
|
||||
return NSS_STATUS_NOTFOUND;
|
||||
}
|
||||
|
||||
sprintf (buf, "%d", uid);
|
||||
sprintf (buf, "%lu", (unsigned long int) uid);
|
||||
if (yp_match (domain, "passwd.byuid", buf, strlen (buf),
|
||||
&outval, &outvallen)
|
||||
!= YPERR_SUCCESS)
|
||||
|
@ -227,7 +227,7 @@ _nss_nis_getgrgid_r (gid_t gid, struct group *grp,
|
||||
if (yp_get_default_domain (&domain))
|
||||
return NSS_STATUS_UNAVAIL;
|
||||
|
||||
nlen = sprintf (buf, "%d", gid);
|
||||
nlen = sprintf (buf, "%lu", (unsigned long int) gid);
|
||||
|
||||
retval = yperr2nss (yp_match (domain, "group.bygid", buf,
|
||||
nlen, &result, &len));
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1996, 1997, 1998, 1999, 2001 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Thorsten Kukuk <kukuk@suse.de>, 1996.
|
||||
|
||||
@ -143,7 +143,7 @@ static enum nss_status
|
||||
parse_netid_str (const char *s, uid_t *uidp, gid_t *gidp, int *gidlenp,
|
||||
gid_t *gidlist)
|
||||
{
|
||||
char *p;
|
||||
char *p, *ep;
|
||||
int gidlen;
|
||||
|
||||
if (!s || !isdigit (*s))
|
||||
@ -153,7 +153,7 @@ parse_netid_str (const char *s, uid_t *uidp, gid_t *gidp, int *gidlenp,
|
||||
}
|
||||
|
||||
/* Fetch the uid */
|
||||
*uidp = (atoi (s));
|
||||
*uidp = strtoul (s, NULL, 10);
|
||||
|
||||
if (*uidp == 0)
|
||||
{
|
||||
@ -175,14 +175,17 @@ parse_netid_str (const char *s, uid_t *uidp, gid_t *gidp, int *gidlenp,
|
||||
return NSS_STATUS_NOTFOUND;
|
||||
}
|
||||
|
||||
*gidp = (atoi (p));
|
||||
*gidp = strtoul (p, &ep, 10);
|
||||
|
||||
gidlen = 0;
|
||||
|
||||
while ((p = strchr (p, ',')) != NULL)
|
||||
/* After strtoul() ep should point to the first invalid character.
|
||||
This is the marker "," we search for the next value. */
|
||||
while (ep != NULL && *ep == ',')
|
||||
{
|
||||
p++;
|
||||
gidlist[gidlen++] = atoi (p);
|
||||
ep++;
|
||||
p = ep;
|
||||
gidlist[gidlen++] = strtoul (p, &ep, 10);
|
||||
}
|
||||
|
||||
*gidlenp = gidlen;
|
||||
|
@ -329,7 +329,7 @@ _nss_nis_getpwuid_r (uid_t uid, struct passwd *pwd,
|
||||
if (yp_get_default_domain (&domain))
|
||||
return NSS_STATUS_UNAVAIL;
|
||||
|
||||
nlen = sprintf (buf, "%d", uid);
|
||||
nlen = sprintf (buf, "%lu", (unsigned long int) uid);
|
||||
|
||||
retval = yperr2nss (yp_match (domain, "passwd.byuid", buf,
|
||||
nlen, &result, &len));
|
||||
|
@ -227,7 +227,7 @@ _nss_nisplus_getgrgid_r (const gid_t gid, struct group *gr,
|
||||
nis_result *result;
|
||||
char buf[36 + tablename_len];
|
||||
|
||||
sprintf (buf, "[gid=%d],%s", gid, tablename_val);
|
||||
sprintf (buf, "[gid=%lu],%s", (unsigned long int) gid, tablename_val);
|
||||
|
||||
result = nis_list (buf, FOLLOW_PATH | FOLLOW_LINKS, NULL, NULL);
|
||||
|
||||
|
@ -89,7 +89,7 @@ _nss_nisplus_parse_pwent (nis_result *result, struct passwd *pw,
|
||||
len = strlen (first_unused);
|
||||
if (len == 0) /* If we don't have a uid, it's an invalid shadow entry */
|
||||
return 0;
|
||||
pw->pw_uid = atoi (first_unused);
|
||||
pw->pw_uid = strtoul (first_unused, NULL, 10);
|
||||
room_left -= (len + 1);
|
||||
first_unused += (len + 1);
|
||||
|
||||
@ -102,7 +102,7 @@ _nss_nisplus_parse_pwent (nis_result *result, struct passwd *pw,
|
||||
len = strlen (first_unused);
|
||||
if (len == 0) /* If we don't have a gid, it's an invalid shadow entry */
|
||||
return 0;
|
||||
pw->pw_gid = atoi (first_unused);
|
||||
pw->pw_gid = strtoul (first_unused, NULL, 10);
|
||||
room_left -= (len + 1);
|
||||
first_unused += (len + 1);
|
||||
|
||||
@ -200,7 +200,7 @@ _nss_nisplus_parse_grent (nis_result *result, u_long entry, struct group *gr,
|
||||
len = strlen (first_unused);
|
||||
if (len == 0) /* We should always have an gid */
|
||||
return 0;
|
||||
gr->gr_gid = atoi (first_unused);
|
||||
gr->gr_gid = strtoul (first_unused, NULL, 10);
|
||||
room_left -= (strlen (first_unused) + 1);
|
||||
first_unused += strlen (first_unused) + 1;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (c) 1997, 1999 Free Software Foundation, Inc.
|
||||
/* Copyright (c) 1997, 1999, 2001 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Thorsten Kukuk <kukuk@suse.de>, 1997.
|
||||
|
||||
@ -200,6 +200,7 @@ static enum nss_status
|
||||
parse_grp_str (const char *s, gid_t *gidp, int *gidlenp, gid_t *gidlist,
|
||||
int *errnop)
|
||||
{
|
||||
char *ep;
|
||||
int gidlen;
|
||||
|
||||
if (!s || (!isdigit (*s)))
|
||||
@ -208,14 +209,17 @@ parse_grp_str (const char *s, gid_t *gidp, int *gidlenp, gid_t *gidlist,
|
||||
return NSS_STATUS_NOTFOUND;
|
||||
}
|
||||
|
||||
*gidp = atoi (s);
|
||||
*gidp = strtoul (s, &ep, 10);
|
||||
|
||||
gidlen = 0;
|
||||
|
||||
while ((s = strchr (s, ',')) != NULL)
|
||||
/* After strtoul() ep should point to the marker ',', which means
|
||||
here starts a new value. */
|
||||
while (ep != NULL && *ep == ',')
|
||||
{
|
||||
s++;
|
||||
gidlist[gidlen++] = atoi (s);
|
||||
ep++;
|
||||
s = ep;
|
||||
gidlist[gidlen++] = strtoul (s, &ep, 10);
|
||||
}
|
||||
*gidlenp = gidlen;
|
||||
|
||||
@ -368,7 +372,7 @@ _nss_nisplus_netname2user (char netname[MAXNETNAMELEN + 1], uid_t *uidp,
|
||||
_("netname2user: LOCAL entry for %s in directory %s not unique"),
|
||||
netname, domain);
|
||||
/* Fetch the uid */
|
||||
*uidp = atoi (ENTRY_VAL (res->objects.objects_val, 2));
|
||||
*uidp = strtoul (ENTRY_VAL (res->objects.objects_val, 2), NULL, 10);
|
||||
|
||||
if (*uidp == 0)
|
||||
{
|
||||
|
@ -235,7 +235,7 @@ _nss_nisplus_getpwuid_r (const uid_t uid, struct passwd *pw,
|
||||
nis_result *result;
|
||||
char buf[100 + tablename_len];
|
||||
|
||||
sprintf (buf, "[uid=%d],%s", uid, tablename_val);
|
||||
sprintf (buf, "[uid=%lu],%s", (unsigned long int) uid, tablename_val);
|
||||
|
||||
result = nis_list(buf, FOLLOW_PATH | FOLLOW_LINKS, NULL, NULL);
|
||||
|
||||
|
@ -246,8 +246,18 @@ addgrbygid (struct database *db, int fd, request_header *req,
|
||||
char *buffer = alloca (buflen);
|
||||
struct group resultbuf;
|
||||
struct group *grp;
|
||||
gid_t gid = atol (key);
|
||||
uid_t oldeuid = 0;
|
||||
char *ep;
|
||||
gid_t gid = strtoul ((char *)key, &ep, 10);
|
||||
|
||||
if (*(char*)key == '\0' || *ep != '\0') /* invalid numeric gid */
|
||||
{
|
||||
if (debug_level > 0)
|
||||
dbg_log (_("Invalid numeric gid \"%s\"!"), (char *)key);
|
||||
|
||||
errno = EINVAL;
|
||||
return;
|
||||
}
|
||||
|
||||
if (debug_level > 0)
|
||||
dbg_log (_("Haven't found \"%d\" in group cache!"), gid);
|
||||
|
@ -242,8 +242,18 @@ addpwbyuid (struct database *db, int fd, request_header *req,
|
||||
char *buffer = alloca (buflen);
|
||||
struct passwd resultbuf;
|
||||
struct passwd *pwd;
|
||||
uid_t uid = atol (key);
|
||||
uid_t oldeuid = 0;
|
||||
char *ep;
|
||||
uid_t uid = strtoul ((char*) key, &ep, 10);
|
||||
|
||||
if (*(char*)key == '\0' || *ep != '\0') /* invalid numeric uid */
|
||||
{
|
||||
if (debug_level > 0)
|
||||
dbg_log (_("Invalid numeric uid \"%s\"!"), (char *)key);
|
||||
|
||||
errno = EINVAL;
|
||||
return;
|
||||
}
|
||||
|
||||
if (debug_level > 0)
|
||||
dbg_log (_("Haven't found \"%d\" in password cache!"), uid);
|
||||
|
20
nss/getent.c
20
nss/getent.c
@ -207,7 +207,15 @@ group_keys (int number, char *key[])
|
||||
for (i = 0; i < number; ++i)
|
||||
{
|
||||
if (isdigit (key[i][0]))
|
||||
grp = getgrgid (atol (key[i]));
|
||||
{
|
||||
char *ep;
|
||||
gid_t arg_gid = strtoul (key[i], &ep, 10);
|
||||
|
||||
if (*key[i] != '\0' && *ep == '\0') /* valid numeric uid */
|
||||
grp = getgrgid (arg_gid);
|
||||
else
|
||||
grp = NULL;
|
||||
}
|
||||
else
|
||||
grp = getgrnam (key[i]);
|
||||
|
||||
@ -404,7 +412,15 @@ passwd_keys (int number, char *key[])
|
||||
for (i = 0; i < number; ++i)
|
||||
{
|
||||
if (isdigit (key[i][0]))
|
||||
pwd = getpwuid (atol (key[i]));
|
||||
{
|
||||
char *ep;
|
||||
uid_t arg_uid = strtoul (key[i], &ep, 10);
|
||||
|
||||
if (*key[i] != '\0' && *ep == '\0') /* valid numeric uid */
|
||||
pwd = getpwuid (arg_uid);
|
||||
else
|
||||
pwd = NULL;
|
||||
}
|
||||
else
|
||||
pwd = getpwnam (key[i]);
|
||||
|
||||
|
@ -231,10 +231,23 @@ __gen_tempname (char *tmpl, int kind)
|
||||
char *XXXXXX;
|
||||
static uint64_t value;
|
||||
uint64_t random_time_bits;
|
||||
int count, fd = -1;
|
||||
unsigned int count;
|
||||
int fd = -1;
|
||||
int save_errno = errno;
|
||||
struct_stat64 st;
|
||||
|
||||
/* A lower bound on the number of temporary files to attempt to
|
||||
generate. The maximum total number of temporary file names that
|
||||
can exist for a given template is 62**6. It should never be
|
||||
necessary to try all these combinations. Instead if a reasonable
|
||||
number of names is tried (we define reasonable as 62**3) fail to
|
||||
give the system administrator the chance to remove the problems. */
|
||||
unsigned int attempts_min = 62 * 62 * 62;
|
||||
|
||||
/* The number of times to attempt to generate a temporary file. To
|
||||
conform to POSIX, this must be no smaller than TMP_MAX. */
|
||||
unsigned int attempts = attempts_min < TMP_MAX ? TMP_MAX : attempts_min;
|
||||
|
||||
len = strlen (tmpl);
|
||||
if (len < 6 || strcmp (&tmpl[len - 6], "XXXXXX"))
|
||||
{
|
||||
@ -261,7 +274,7 @@ __gen_tempname (char *tmpl, int kind)
|
||||
#endif
|
||||
value += random_time_bits ^ __getpid ();
|
||||
|
||||
for (count = 0; count < TMP_MAX; value += 7777, ++count)
|
||||
for (count = 0; count < attempts; value += 7777, ++count)
|
||||
{
|
||||
uint64_t v = value;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user