mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 12:30:06 +00:00
Update.
* gnulib/Makefile (tests): Add tst-gcc. * gnulib/tst-gcc.c: New file. * assert/Makefile (routines): Add __assert. * assert/Versions: Export __assert for glibc 2.2. * assert/__assert.c: New file. * assert/assert.h: Declare __assert. 2000-07-27 Bruno Haible <haible@clisp.cons.org> * locale/localeinfo.h (_ISCTYPE): New macro. * posix/fnmatch_loop.c (internal_fnmatch): Use it, support new LC_CTYPE locale format. * locale/programs/ld-ctype.c (locale_ctype_t): New field class_b. (ctype_output): Output class_b[nr] right before class_3level[nr]. (allocate_arrays): Fill class_b, similarly to class_3level. 2000-08-01 Ulrich Drepper <drepper@redhat.com>
This commit is contained in:
parent
925e31d9c2
commit
8fb81470d9
19
ChangeLog
19
ChangeLog
@ -1,3 +1,22 @@
|
|||||||
|
2000-08-01 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
|
* gnulib/Makefile (tests): Add tst-gcc.
|
||||||
|
* gnulib/tst-gcc.c: New file.
|
||||||
|
|
||||||
|
* assert/Makefile (routines): Add __assert.
|
||||||
|
* assert/Versions: Export __assert for glibc 2.2.
|
||||||
|
* assert/__assert.c: New file.
|
||||||
|
* assert/assert.h: Declare __assert.
|
||||||
|
|
||||||
|
2000-07-27 Bruno Haible <haible@clisp.cons.org>
|
||||||
|
|
||||||
|
* locale/localeinfo.h (_ISCTYPE): New macro.
|
||||||
|
* posix/fnmatch_loop.c (internal_fnmatch): Use it, support new
|
||||||
|
LC_CTYPE locale format.
|
||||||
|
* locale/programs/ld-ctype.c (locale_ctype_t): New field class_b.
|
||||||
|
(ctype_output): Output class_b[nr] right before class_3level[nr].
|
||||||
|
(allocate_arrays): Fill class_b, similarly to class_3level.
|
||||||
|
|
||||||
2000-08-01 Ulrich Drepper <drepper@redhat.com>
|
2000-08-01 Ulrich Drepper <drepper@redhat.com>
|
||||||
Joseph S. Myers <jsm28@cam.ac.uk>
|
Joseph S. Myers <jsm28@cam.ac.uk>
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
subdir := assert
|
subdir := assert
|
||||||
headers := assert.h
|
headers := assert.h
|
||||||
|
|
||||||
routines := assert assert-perr
|
routines := assert assert-perr __assert
|
||||||
tests := test-assert test-assert-perr
|
tests := test-assert test-assert-perr
|
||||||
|
|
||||||
include ../Rules
|
include ../Rules
|
||||||
|
@ -3,4 +3,8 @@ libc {
|
|||||||
# functions used in inline functions or macros
|
# functions used in inline functions or macros
|
||||||
__assert_fail; __assert_perror_fail;
|
__assert_fail; __assert_perror_fail;
|
||||||
}
|
}
|
||||||
|
GLIBC_2.2 {
|
||||||
|
# just for standard compliance
|
||||||
|
__assert;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
25
assert/__assert.c
Normal file
25
assert/__assert.c
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
/* Copyright (C) 2000 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 Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 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
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
void
|
||||||
|
__assert (const char *assertion, const char *file, int line)
|
||||||
|
{
|
||||||
|
__assert_fail (assertion, file, line, (const char *) 0);
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1991,92,94,95,96,97,98,99 Free Software Foundation, Inc.
|
/* Copyright (C) 1991,92,94,95,96,97,98,99,2000 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -68,6 +68,13 @@ extern void __assert_perror_fail (int __errnum, __const char *__file,
|
|||||||
__const char *__function)
|
__const char *__function)
|
||||||
__THROW __attribute__ ((__noreturn__));
|
__THROW __attribute__ ((__noreturn__));
|
||||||
|
|
||||||
|
|
||||||
|
/* The following is not at all used here but needed for standard
|
||||||
|
compliance. */
|
||||||
|
extern void __assert (const char *__assertion, const char *__file, int __line)
|
||||||
|
__THROW __attribute__ ((__noreturn__));
|
||||||
|
|
||||||
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
# define assert(expr) \
|
# define assert(expr) \
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Copyright (C) 1991, 1997 Free Software Foundation, Inc.
|
# Copyright (C) 1991, 1997, 2000 Free Software Foundation, Inc.
|
||||||
# This file is part of the GNU C Library.
|
# This file is part of the GNU C Library.
|
||||||
|
|
||||||
# The GNU C Library is free software; you can redistribute it and/or
|
# The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -18,6 +18,9 @@
|
|||||||
|
|
||||||
subdir := gnulib
|
subdir := gnulib
|
||||||
|
|
||||||
|
# Maybe this is the right place for a test of gcc's interface.
|
||||||
|
tests = tst-gcc
|
||||||
|
|
||||||
# Which routines are required is machine-dependent.
|
# Which routines are required is machine-dependent.
|
||||||
|
|
||||||
include ../Rules
|
include ../Rules
|
||||||
|
74
gnulib/tst-gcc.c
Normal file
74
gnulib/tst-gcc.c
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
/* Test program for the gcc interface.
|
||||||
|
Copyright (C) 2000 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>.
|
||||||
|
|
||||||
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 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
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#define __no_type_class -1
|
||||||
|
#define __void_type_class 0
|
||||||
|
#define __integer_type_class 1
|
||||||
|
#define __char_type_class 2
|
||||||
|
#define __enumeral_type_class 3
|
||||||
|
#define __boolean_type_class 4
|
||||||
|
#define __pointer_type_class 5
|
||||||
|
#define __reference_type_class 6
|
||||||
|
#define __offset_type_class 7
|
||||||
|
#define __real_type_class 8
|
||||||
|
#define __complex_type_class 9
|
||||||
|
#define __function_type_class 10
|
||||||
|
#define __method_type_class 11
|
||||||
|
#define __record_type_class 12
|
||||||
|
#define __union_type_class 13
|
||||||
|
#define __array_type_class 14
|
||||||
|
#define __string_type_class 15
|
||||||
|
#define __set_type_class 16
|
||||||
|
#define __file_type_class 17
|
||||||
|
#define __lang_type_class 18
|
||||||
|
|
||||||
|
|
||||||
|
#define TEST(var) \
|
||||||
|
({ int wrong = (__builtin_classify_type (__##var##_type) \
|
||||||
|
!= __##var##_type_class); \
|
||||||
|
printf ("%-15s is %d: %s\n", \
|
||||||
|
#var, __builtin_classify_type (__##var##_type), \
|
||||||
|
wrong ? "WRONG" : "OK"); \
|
||||||
|
wrong; \
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
main (void)
|
||||||
|
{
|
||||||
|
int result = 0;
|
||||||
|
int __integer_type;
|
||||||
|
void *__pointer_type;
|
||||||
|
double __real_type;
|
||||||
|
__complex__ double __complex_type;
|
||||||
|
struct { int a; } __record_type;
|
||||||
|
union { int a; int b; } __union_type;
|
||||||
|
|
||||||
|
result |= TEST (integer);
|
||||||
|
result |= TEST (pointer);
|
||||||
|
result |= TEST (real);
|
||||||
|
result |= TEST (complex);
|
||||||
|
result |= TEST (record);
|
||||||
|
result |= TEST (union);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
@ -130,6 +130,14 @@ enum
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* LC_CTYPE specific:
|
||||||
|
Access a wide character class with a single character index.
|
||||||
|
_ISCTYPE (c, desc) = iswctype (btowc (c), desc).
|
||||||
|
c must be an `unsigned char'. desc must be a nonzero wctype_t. */
|
||||||
|
#define _ISCTYPE(c, desc) \
|
||||||
|
(((((const uint32_t *) (desc)) - 8)[(c) >> 5] >> ((c) & 0x1f)) & 1)
|
||||||
|
|
||||||
|
|
||||||
/* For each category declare the variable for the current locale data. */
|
/* For each category declare the variable for the current locale data. */
|
||||||
#define DEFINE_CATEGORY(category, category_name, items, a) \
|
#define DEFINE_CATEGORY(category, category_name, items, a) \
|
||||||
extern struct locale_data *_nl_current_##category;
|
extern struct locale_data *_nl_current_##category;
|
||||||
|
@ -170,6 +170,7 @@ struct locale_ctype_t
|
|||||||
uint32_t *names;
|
uint32_t *names;
|
||||||
uint32_t **map;
|
uint32_t **map;
|
||||||
uint32_t **map32;
|
uint32_t **map32;
|
||||||
|
uint32_t **class_b;
|
||||||
struct iovec *class_3level;
|
struct iovec *class_3level;
|
||||||
struct iovec *map_3level;
|
struct iovec *map_3level;
|
||||||
uint32_t *class_name_ptr;
|
uint32_t *class_name_ptr;
|
||||||
@ -842,7 +843,7 @@ ctype_output (struct localedef_t *locale, struct charmap_t *charmap,
|
|||||||
+ (oldstyle_tables
|
+ (oldstyle_tables
|
||||||
? (ctype->map_collection_nr - 2)
|
? (ctype->map_collection_nr - 2)
|
||||||
: (ctype->nr_charclass + ctype->map_collection_nr)));
|
: (ctype->nr_charclass + ctype->map_collection_nr)));
|
||||||
struct iovec iov[2 + nelems + ctype->nr_charclass
|
struct iovec iov[2 + nelems + 2 * ctype->nr_charclass
|
||||||
+ ctype->map_collection_nr + 2];
|
+ ctype->map_collection_nr + 2];
|
||||||
struct locale_file data;
|
struct locale_file data;
|
||||||
uint32_t idx[nelems + 1];
|
uint32_t idx[nelems + 1];
|
||||||
@ -1169,6 +1170,12 @@ ctype_output (struct localedef_t *locale, struct charmap_t *charmap,
|
|||||||
size_t nr = elem - _NL_ITEM_INDEX (_NL_CTYPE_EXTRA_MAP_1);
|
size_t nr = elem - _NL_ITEM_INDEX (_NL_CTYPE_EXTRA_MAP_1);
|
||||||
if (nr < ctype->nr_charclass)
|
if (nr < ctype->nr_charclass)
|
||||||
{
|
{
|
||||||
|
iov[2 + elem + offset].iov_base = ctype->class_b[nr];
|
||||||
|
iov[2 + elem + offset].iov_len = 256 / 32
|
||||||
|
* sizeof (uint32_t);
|
||||||
|
idx[elem] += iov[2 + elem + offset].iov_len;
|
||||||
|
++offset;
|
||||||
|
|
||||||
iov[2 + elem + offset] = ctype->class_3level[nr];
|
iov[2 + elem + offset] = ctype->class_3level[nr];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1182,7 +1189,7 @@ ctype_output (struct localedef_t *locale, struct charmap_t *charmap,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
assert (2 + elem + offset == (nelems + ctype->nr_charclass
|
assert (2 + elem + offset == (nelems + 2 * ctype->nr_charclass
|
||||||
+ ctype->map_collection_nr + 2 + 2));
|
+ ctype->map_collection_nr + 2 + 2));
|
||||||
|
|
||||||
write_locale_data (output_path, "LC_CTYPE", 2 + elem + offset, iov);
|
write_locale_data (output_path, "LC_CTYPE", 2 + elem + offset, iov);
|
||||||
@ -4083,8 +4090,12 @@ Computing table size for character classes might take a while..."),
|
|||||||
xcalloc ((oldstyle_tables ? ctype->plane_size * ctype->plane_cnt : 256),
|
xcalloc ((oldstyle_tables ? ctype->plane_size * ctype->plane_cnt : 256),
|
||||||
sizeof (char_class32_t));
|
sizeof (char_class32_t));
|
||||||
if (!oldstyle_tables)
|
if (!oldstyle_tables)
|
||||||
ctype->class_3level = (struct iovec *)
|
{
|
||||||
xmalloc (ctype->nr_charclass * sizeof (struct iovec));
|
ctype->class_b = (uint32_t **)
|
||||||
|
xmalloc (ctype->nr_charclass * sizeof (uint32_t *));
|
||||||
|
ctype->class_3level = (struct iovec *)
|
||||||
|
xmalloc (ctype->nr_charclass * sizeof (struct iovec));
|
||||||
|
}
|
||||||
|
|
||||||
/* This is the array accessed using the multibyte string elements. */
|
/* This is the array accessed using the multibyte string elements. */
|
||||||
for (idx = 0; idx < 256; ++idx)
|
for (idx = 0; idx < 256; ++idx)
|
||||||
@ -4113,6 +4124,16 @@ Computing table size for character classes might take a while..."),
|
|||||||
{
|
{
|
||||||
size_t nr;
|
size_t nr;
|
||||||
|
|
||||||
|
for (nr = 0; nr < ctype->nr_charclass; nr++)
|
||||||
|
{
|
||||||
|
ctype->class_b[nr] = (uint32_t *)
|
||||||
|
xcalloc (256 / 32, sizeof (uint32_t));
|
||||||
|
|
||||||
|
for (idx = 0; idx < 256; ++idx)
|
||||||
|
if (ctype->class256_collection[idx] & _ISbit (nr))
|
||||||
|
ctype->class_b[nr][idx >> 5] |= (uint32_t)1 << (idx & 0x1f);
|
||||||
|
}
|
||||||
|
|
||||||
for (nr = 0; nr < ctype->nr_charclass; nr++)
|
for (nr = 0; nr < ctype->nr_charclass; nr++)
|
||||||
{
|
{
|
||||||
struct wctype_table t;
|
struct wctype_table t;
|
||||||
|
@ -256,35 +256,41 @@ FCT (pattern, string, no_leading_period, flags)
|
|||||||
/* Invalid character class name. */
|
/* Invalid character class name. */
|
||||||
return FNM_NOMATCH;
|
return FNM_NOMATCH;
|
||||||
|
|
||||||
/* The following code is glibc specific but does
|
|
||||||
there a good job in sppeding up the code since
|
|
||||||
we can avoid the btowc() call. The
|
|
||||||
IS_CHAR_CLASS call will return a bit mask for
|
|
||||||
the 32-bit table. We have to convert it to a
|
|
||||||
bitmask for the __ctype_b table. This has to
|
|
||||||
be done based on the byteorder as can be seen
|
|
||||||
below. In any case we will fall back on the
|
|
||||||
code using btowc() if the class is not one of
|
|
||||||
the standard classes. */
|
|
||||||
# if defined _LIBC && ! WIDE_CHAR_VERSION
|
# if defined _LIBC && ! WIDE_CHAR_VERSION
|
||||||
|
/* The following code is glibc specific but does
|
||||||
|
there a good job in speeding up the code since
|
||||||
|
we can avoid the btowc() call. */
|
||||||
|
if (_NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_HASH_SIZE) != 0)
|
||||||
|
{
|
||||||
|
/* Old locale format. */
|
||||||
# if __BYTE_ORDER == __LITTLE_ENDIAN
|
# if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||||
if ((wt & 0xf0ffff) == 0)
|
if ((wt & 0xf0ffff) == 0)
|
||||||
{
|
{
|
||||||
wt >>= 16;
|
wt >>= 16;
|
||||||
if ((__ctype_b[(UCHAR) *n] & wt) != 0)
|
if ((__ctype_b[(UCHAR) *n] & wt) != 0)
|
||||||
goto matched;
|
goto matched;
|
||||||
}
|
}
|
||||||
# else
|
# else
|
||||||
if (wt <= 0x800)
|
if (wt <= 0x800)
|
||||||
|
{
|
||||||
|
if ((__ctype_b[(UCHAR) *n] & wt) != 0)
|
||||||
|
goto matched;
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
else
|
||||||
|
if (ISWCTYPE (BTOWC ((UCHAR) *n), wt))
|
||||||
|
goto matched;
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
if ((__ctype_b[(UCHAR) *n] & wt) != 0)
|
/* New locale format. */
|
||||||
|
if (_ISCTYPE ((UCHAR) *n, wt))
|
||||||
goto matched;
|
goto matched;
|
||||||
}
|
}
|
||||||
# endif
|
# else
|
||||||
else
|
if (ISWCTYPE (BTOWC ((UCHAR) *n), wt))
|
||||||
|
goto matched;
|
||||||
# endif
|
# endif
|
||||||
if (ISWCTYPE (BTOWC ((UCHAR) *n), wt))
|
|
||||||
goto matched;
|
|
||||||
#else
|
#else
|
||||||
if ((STREQ (str, L("alnum")) && ISALNUM ((UCHAR) *n))
|
if ((STREQ (str, L("alnum")) && ISALNUM ((UCHAR) *n))
|
||||||
|| (STREQ (str, L("alpha")) && ISALPHA ((UCHAR) *n))
|
|| (STREQ (str, L("alpha")) && ISALPHA ((UCHAR) *n))
|
||||||
|
Loading…
Reference in New Issue
Block a user