Skip to content

Commit

Permalink
Update.
Browse files Browse the repository at this point in the history
1999-11-05  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/bits/resource.h (RLIM_INFINITY): Adjust
	for kernel changes.
	* sysdeps/unix/sysv/linux/bits/types.h (__rlim_t, __rlim64_t): Make
	unsigned.

1999-10-04  Tim Waugh <twaugh@redhat.com>

	* posix/wordexp-test.c: More tests.

	* posix/wordexp.c (wordexp): Explicit null words should be kept.

1999-11-04  Shinya Hanataka  <hanataka@abyss.rim.or.jp>

	* locale/programs/linereader.c (get_string): Correct type of buf2
	variable.
	* locale/programs/ld-ctype.c (ctype_output): Store index correctly
	for _NL_CTYPE_INDIGITS_MB_LEN, _NL_CTYPE_INDIGITS_WC_LEN,
	_NL_CTYPE_INDIGITS*_MB, _NL_CTYPE_OUTDIGIT*_MB, and
	_NL_CTYPE_OUTDIGIT*_WC.
	(allocate_arrays): Completely initialize mapping tables.
	* locale/programs/ld-time.c (time_startup): We need the wide car
	string.
	(time_finish): Correct handling of era.
	(time_output): Fix a few array indeces.
	(time_read): Pass the repertoire map to lr_token.
  • Loading branch information
Ulrich Drepper committed Nov 5, 1999
1 parent 9532eb6 commit a9c27b3
Show file tree
Hide file tree
Showing 8 changed files with 104 additions and 36 deletions.
28 changes: 28 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,31 @@
1999-11-05 Ulrich Drepper <drepper@cygnus.com>

* sysdeps/unix/sysv/linux/bits/resource.h (RLIM_INFINITY): Adjust
for kernel changes.
* sysdeps/unix/sysv/linux/bits/types.h (__rlim_t, __rlim64_t): Make
unsigned.

1999-10-04 Tim Waugh <twaugh@redhat.com>

* posix/wordexp-test.c: More tests.

* posix/wordexp.c (wordexp): Explicit null words should be kept.

1999-11-04 Shinya Hanataka <hanataka@abyss.rim.or.jp>

* locale/programs/linereader.c (get_string): Correct type of buf2
variable.
* locale/programs/ld-ctype.c (ctype_output): Store index correctly
for _NL_CTYPE_INDIGITS_MB_LEN, _NL_CTYPE_INDIGITS_WC_LEN,
_NL_CTYPE_INDIGITS*_MB, _NL_CTYPE_OUTDIGIT*_MB, and
_NL_CTYPE_OUTDIGIT*_WC.
(allocate_arrays): Completely initialize mapping tables.
* locale/programs/ld-time.c (time_startup): We need the wide car
string.
(time_finish): Correct handling of era.
(time_output): Fix a few array indeces.
(time_read): Pass the repertoire map to lr_token.

1999-11-03 Ulrich Drepper <drepper@cygnus.com>

* Versions.def: Add version for libthread_db.
Expand Down
15 changes: 14 additions & 1 deletion locale/programs/ld-ctype.c
Original file line number Diff line number Diff line change
Expand Up @@ -836,13 +836,15 @@ ctype_output (struct localedef_t *locale, struct charmap_t *charmap,
iov[2 + elem + offset].iov_len = sizeof (uint32_t);
*(uint32_t *) iov[2 + elem + offset].iov_base =
ctype->mbdigits_act / 10;
idx[elem + 1] = idx[elem] + sizeof (uint32_t);
break;

case _NL_ITEM_INDEX (_NL_CTYPE_INDIGITS_WC_LEN):
iov[2 + elem + offset].iov_base = alloca (sizeof (uint32_t));
iov[2 + elem + offset].iov_len = sizeof (uint32_t);
*(uint32_t *) iov[2 + elem + offset].iov_base =
ctype->wcdigits_act / 10;
idx[elem + 1] = idx[elem] + sizeof (uint32_t);
break;

case _NL_ITEM_INDEX (_NL_CTYPE_INDIGITS0_MB) ... _NL_ITEM_INDEX (_NL_CTYPE_INDIGITS9_MB):
Expand All @@ -865,6 +867,7 @@ ctype_output (struct localedef_t *locale, struct charmap_t *charmap,
ctype->mbdigits[cnt]->nbytes);
*cp++ = '\0';
}
idx[elem + 1] = idx[elem] + iov[2 + elem + offset].iov_len;
break;

case _NL_ITEM_INDEX (_NL_CTYPE_OUTDIGIT0_MB) ... _NL_ITEM_INDEX (_NL_CTYPE_OUTDIGIT9_MB):
Expand All @@ -880,6 +883,7 @@ ctype_output (struct localedef_t *locale, struct charmap_t *charmap,
*(char *) mempcpy (iov[2 + elem + offset].iov_base,
ctype->mbdigits[cnt]->bytes,
ctype->mbdigits[cnt]->nbytes) = '\0';
idx[elem + 1] = idx[elem] + iov[2 + elem + offset].iov_len;
break;

case _NL_ITEM_INDEX (_NL_CTYPE_INDIGITS0_WC) ... _NL_ITEM_INDEX (_NL_CTYPE_INDIGITS9_WC):
Expand All @@ -893,12 +897,14 @@ ctype_output (struct localedef_t *locale, struct charmap_t *charmap,
cnt < ctype->wcdigits_act; cnt += 10)
((uint32_t *) iov[2 + elem + offset].iov_base)[cnt / 10]
= ctype->wcdigits[cnt];
idx[elem + 1] = idx[elem] + iov[2 + elem + offset].iov_len;
break;

case _NL_ITEM_INDEX (_NL_CTYPE_OUTDIGIT0_WC) ... _NL_ITEM_INDEX (_NL_CTYPE_OUTDIGIT9_WC):
cnt = elem - _NL_CTYPE_OUTDIGIT0_WC;
iov[2 + elem + offset].iov_base = &ctype->wcoutdigits[cnt];
iov[2 + elem + offset].iov_len = sizeof (uint32_t);
idx[elem + 1] = idx[elem] + iov[2 + elem + offset].iov_len;
break;

default:
Expand Down Expand Up @@ -2933,6 +2939,12 @@ Computing table size for character classes might take a while..."),

/* EOF must map to EOF. */
ctype->map[idx][127] = EOF;

/* The 32 bit map collection. */
for (idx2 = 0; idx2 < ctype->map_collection_act[idx]; ++idx2)
if (ctype->map_collection[idx][idx2] != 0)
ctype->map[idx][128 + ctype->charnames[idx2]]
= ctype->map_collection[idx][idx2];
}

/* Extra array for class and map names. */
Expand Down Expand Up @@ -3041,7 +3053,8 @@ Computing table size for character classes might take a while..."),
}

/* Next we allocate an array large enough and fill in the values. */
sorted = alloca (number * sizeof (struct translit_t **));
sorted = (struct translit_t **) alloca (number
* sizeof (struct translit_t **));
runp = ctype->translit;
number = 0;
do
Expand Down
52 changes: 24 additions & 28 deletions locale/programs/ld-time.c
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ time_startup (struct linereader *lr, struct localedef_t *locale,
if (time != NULL)
{
lr->translate_strings = 1;
lr->return_widestr = 0;
lr->return_widestr = 1;
}
}

Expand Down Expand Up @@ -432,12 +432,12 @@ time_finish (struct localedef_t *locale, struct charmap_t *charmap)
}

/* Now generate the wide character name and format. */
wstr = wcschr ((wchar_t *) time->wera, L':'); /* end direction */
wstr = wstr ? wcschr (wstr, L':') : NULL; /* end offset */
wstr = wstr ? wcschr (wstr, L':') : NULL; /* end start */
wstr = wstr ? wcschr (wstr, L':') : NULL; /* end end */
wstr = wcschr ((wchar_t *) time->wera[idx], L':');/* end direction */
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;
wstr = wstr ? wcschr (wstr, L':') : NULL; /* end name */
wstr = wstr ? wcschr (wstr + 1, L':') : NULL; /* end name */
time->era_entries[idx].wformat = (uint32_t *) wstr;
}
}
Expand Down Expand Up @@ -670,12 +670,11 @@ time_output (struct localedef_t *locale, struct charmap_t *charmap,
assert (idx[1 + last_idx] % 4 == 0);

iov[2 + cnt].iov_base = (void *) time->era_entries[num].wname;
iov[2 + cnt].iov_len = ((wcschr ((wchar_t *) time->era_entries[cnt].wformat, L'\0')
iov[2 + cnt].iov_len = ((wcschr ((wchar_t *) time->era_entries[num].wformat, L'\0')
- (wchar_t *) time->era_entries[num].wname + 1)
* sizeof (uint32_t));
++cnt;

idx[1 + last_idx] += iov[2 + cnt].iov_len;
++cnt;
}
++last_idx;

Expand Down Expand Up @@ -869,7 +868,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,

do
{
now = lr_token (ldfile, charmap, NULL);
now = lr_token (ldfile, charmap, repertoire);
nowtok = now->tok;
}
while (nowtok == tok_eol);
Expand All @@ -895,7 +894,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
/* Ingore empty lines. */
if (nowtok == tok_eol)
{
now = lr_token (ldfile, charmap, NULL);
now = lr_token (ldfile, charmap, repertoire);
nowtok = now->tok;
continue;
}
Expand Down Expand Up @@ -946,7 +945,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
} \
\
/* Match the semicolon. */ \
now = lr_token (ldfile, charmap, NULL); \
now = lr_token (ldfile, charmap, repertoire); \
if (now->tok != tok_semicolon && now->tok != tok_eol) \
break; \
} \
Expand All @@ -960,7 +959,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
\
if (now->tok == tok_semicolon) \
{ \
now = lr_token (ldfile, charmap, NULL); \
now = lr_token (ldfile, charmap, repertoire); \
if (now->tok == tok_eol) \
lr_error (ldfile, _("extra trailing semicolon")); \
else if (now->tok == tok_string) \
Expand Down Expand Up @@ -994,10 +993,9 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
lr_ignore_rest (ldfile, 0);
break;
}

do
{
now = lr_token (ldfile, charmap, NULL);
now = lr_token (ldfile, charmap, repertoire);
if (now->tok != tok_string)
goto err_label;
if (!ignore_content && (now->val.str.startmb == NULL
Expand All @@ -1008,7 +1006,6 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
lr_ignore_rest (ldfile, 0);
break;
}

if (!ignore_content)
{
time->era = xrealloc (time->era,
Expand All @@ -1020,9 +1017,8 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
* sizeof (char *));
time->wera[time->num_era++] = now->val.str.startwc;
}

now = lr_token (ldfile, charmap, NULL);
if (now->tok != tok_eof && now->tok != tok_semicolon)
now = lr_token (ldfile, charmap, repertoire);
if (now->tok != tok_eol && now->tok != tok_semicolon)
goto err_label;
}
while (now->tok == tok_semicolon);
Expand All @@ -1038,7 +1034,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
break; \
} \
\
now = lr_token (ldfile, charmap, NULL); \
now = lr_token (ldfile, charmap, repertoire); \
if (now->tok != tok_string) \
goto err_label; \
else if (time->cat != NULL) \
Expand Down Expand Up @@ -1079,7 +1075,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
break; \
} \
\
now = lr_token (ldfile, charmap, NULL); \
now = lr_token (ldfile, charmap, repertoire); \
if (now->tok != tok_number) \
goto err_label; \
else if (time->cat != 0) \
Expand All @@ -1102,25 +1098,25 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
break;
}

now = lr_token (ldfile, charmap, NULL);
now = lr_token (ldfile, charmap, repertoire);
if (now->tok != tok_number)
goto err_label;
time->week_ndays = now->val.num;

now = lr_token (ldfile, charmap, NULL);
now = lr_token (ldfile, charmap, repertoire);
if (now->tok != tok_semicolon)
goto err_label;

now = lr_token (ldfile, charmap, NULL);
now = lr_token (ldfile, charmap, repertoire);
if (now->tok != tok_number)
goto err_label;
time->week_1stday = now->val.num;

now = lr_token (ldfile, charmap, NULL);
now = lr_token (ldfile, charmap, repertoire);
if (now->tok != tok_semicolon)
goto err_label;

now = lr_token (ldfile, charmap, NULL);
now = lr_token (ldfile, charmap, repertoire);
if (now->tok != tok_number)
goto err_label;
time->week_1stweek = now->val.num;
Expand All @@ -1130,7 +1126,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,

case tok_end:
/* Next we assume `LC_TIME'. */
now = lr_token (ldfile, charmap, NULL);
now = lr_token (ldfile, charmap, repertoire);
if (now->tok == tok_eof)
break;
if (now->tok == tok_eol)
Expand All @@ -1147,7 +1143,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
}

/* Prepare for the next round. */
now = lr_token (ldfile, charmap, NULL);
now = lr_token (ldfile, charmap, repertoire);
nowtok = now->tok;
}

Expand Down
2 changes: 1 addition & 1 deletion locale/programs/linereader.c
Original file line number Diff line number Diff line change
Expand Up @@ -535,7 +535,7 @@ get_string (struct linereader *lr, const struct charmap_t *charmap,
{
int return_widestr = lr->return_widestr;
char *buf;
char *buf2 = NULL;
wchar_t *buf2 = NULL;
size_t bufact;
size_t bufmax = 56;

Expand Down
15 changes: 15 additions & 0 deletions posix/wordexp-test.c
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,9 @@ struct test_case_struct
{ 0, "foo", "\"$var\"\"$var\"", 0, 1, { "foofoo", }, IFS },
{ 0, NULL, "'singly-quoted'", 0, 1, { "singly-quoted", }, IFS },
{ 0, NULL, "contin\\\nuation", 0, 1, { "continuation", }, IFS },
{ 0, NULL, "explicit ''", 0, 2, { "explicit", "", }, IFS },
{ 0, NULL, "explicit \"\"", 0, 2, { "explicit", "", }, IFS },
{ 0, NULL, "explicit ``", 0, 1, { "explicit", }, IFS },

/* Simple command substitution */
{ 0, NULL, "$(echo hello)", 0, 1, { "hello", }, IFS },
Expand Down Expand Up @@ -244,6 +247,7 @@ main (int argc, char *argv[])
if (testit (&test_case[test]))
++fail;

/* Tilde-expansion tests. */
pw = getpwnam ("root");
if (pw != NULL)
{
Expand All @@ -257,6 +261,17 @@ main (int argc, char *argv[])
ts.wordv[0] = pw->pw_dir;
ts.ifs = IFS;

if (testit (&ts))
++fail;

ts.retval = 0;
ts.env = pw->pw_dir;
ts.words = "${var#~root}x";
ts.flags = 0;
ts.wordc = 1;
ts.wordv[0] = "x";
ts.ifs = IFS;

if (testit (&ts))
++fail;
}
Expand Down
16 changes: 16 additions & 0 deletions posix/wordexp.c
Original file line number Diff line number Diff line change
Expand Up @@ -2236,6 +2236,14 @@ wordexp (const char *words, wordexp_t *pwordexp, int flags)
if (error)
goto do_error;

if (!word_length)
{
error = w_addword (pwordexp, NULL);

if (error)
return error;
}

break;

case '\'':
Expand All @@ -2246,6 +2254,14 @@ wordexp (const char *words, wordexp_t *pwordexp, int flags)
if (error)
goto do_error;

if (!word_length)
{
error = w_addword (pwordexp, NULL);

if (error)
return error;
}

break;

case '~':
Expand Down
8 changes: 4 additions & 4 deletions sysdeps/unix/sysv/linux/bits/resource.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* Bit values & structures for resource limits. Linux version.
Copyright (C) 1994, 1996, 1997, 1998 Free Software Foundation, Inc.
Copyright (C) 1994, 1996, 1997, 1998, 1999 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
Expand Down Expand Up @@ -106,13 +106,13 @@ enum __rlimit_resource

/* Value to indicate that there is no limit. */
#ifndef __USE_FILE_OFFSET64
# define RLIM_INFINITY ((long int)(~0UL >> 1))
# define RLIM_INFINITY ((unsigned long int)(~0UL))
#else
# define RLIM_INFINITY 0x7fffffffffffffffLL
# define RLIM_INFINITY 0xffffffffffffffffuLL
#endif

#ifdef __USE_LARGEFILE64
# define RLIM64_INFINITY 0x7fffffffffffffffLL
# define RLIM64_INFINITY 0xffffffffffffffffuLL
#endif

/* We can represent all limits. */
Expand Down
4 changes: 2 additions & 2 deletions sysdeps/unix/sysv/linux/bits/types.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,8 @@ typedef long int __off_t; /* Type of file sizes and offsets. */
typedef __quad_t __loff_t; /* Type of file sizes and offsets. */
typedef int __pid_t; /* Type of process identifications. */
typedef int __ssize_t; /* Type of a byte count, or error. */
typedef long int __rlim_t; /* Type of resource counts. */
typedef __quad_t __rlim64_t; /* Type of resource counts (LFS). */
typedef __u_long __rlim_t; /* Type of resource counts. */
typedef __u_quad_t __rlim64_t; /* Type of resource counts (LFS). */
typedef __u_int __id_t; /* General type for ID. */

typedef struct
Expand Down

0 comments on commit a9c27b3

Please sign in to comment.