Wed May 1 09:10:04 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* time/strftime.c: Use canonical autoconf nugget for time.h+sys/time.h include. Mon Apr 29 02:48:26 1996 Ulrich Drepper <drepper@cygnus.com> * ctype/ctype-info.c: (__ctype_width): New variable. (__ctype_names): Initialize correctly without offset. * locale/C-collate.c, locale/C-ctype.c, locale/C-messages.c, locale/C-monetary.c, locale/C-numeric.c, locale/C-time.c: Change copyright. * locale/C-ctype.c (_nl_C_LC_CTYPE_class32): Correct endianess for initialization value. * locale/lc-ctype.c (current): Add parameter for offset. (__ctype32_b, __ctype_width): Add initialization for these variables. * locale/programs/charmap.c: Finish support for WIDTH information. (new_width): New function. * locale/programs/charset.h (width_rule): new data structure. (charset_t): Add elements for width information. * locale/programs/ld-ctype.c (locale_ctype_t): Add element for width information. (allocate_arrays): Add new argument for charset. (ctype_finish): Make sure all characters named in charset width table are known to name table. (ctype_output): Correct handling of class and map name information and write out width information. (find_idx): Prepare for being called with NULL pointer as TABLE argument. This means only allocate name entry. (allocate_arrays): Correct handling of array element -1. Because EOF == -1 the value of element 127 must *not* be mirrored here. Fill width information from charset tables. * locale/programs/localedef.c (main): Correct loop over all categories after change of order from Thu Mar 28 14:22:51 1996. Add new charset argument to call of `write_all_categories'. * locale/programs/locales.h (ctype_finish, ctype_output): New charset argument. * locale/programs/locfile.c (write_all_categories): Call `ctype_output' with additional argument charset. * posix/getconf.c (vars): Add _POSIX_SYNC_IO, _POSIX_ASYNC_IO, and _POSIX_PRIO_IO definitions. * posix/posix2_lim.h: Add definition of _POSIX2_CHARCLASS_NAME_MAX and CHARCLASS_NAME_MAX. * posix/unistd.h: Document _POSIX_SYNC_IO, _POSIX_ASYNC_IO, and _POSIX_PRIO_IO. * stdlib/grouping.h: Prepare for use in wide string functions. * stdlib/stdlib.h: Correct prototypes for __strto*_internal functions. * stdlib/strtod.c: Extend for use as `wcsto{f,d,ld}'. * stdlib/strtol.c: Extend for use as `wcsto{l,ul,q,uq}'. * string/strcoll.c: Extend for use as `wcscoll'. * string/strxfrm.c: Extend for use as `wcsxfrm'. * sysdeps/generic/confname.h: Add definition of _PC_SYNC_IO, _PC_ASYNC_IO, _PC_PRIO_IO and _SC_CHARCLASS_NAME_MAX. * sysdeps/generic/stpncpy.c: Correct return value. * sysdeps/posix/fpathconf.c: Add handling of _PC_SYNC_IO, _PC_ASYNC_IO, and _PC_PRIO_IO. * sysdeps/posix/sysconf.c: Add handling of _SC_REALTIME_SIGNALS, _SC_PRIORITY_SCHEDULING, _SC_TIMERS, _SC_ASYNCHRONOUS_IO, _SC_PRIORITIZED_IO, _SC_SYNCHRONIZED_IO, _SC_FSYNC, _SC_MAPPED_FILES, _SC_MEMLOCK, _SC_MEMLOCK_RANGE, _SC_MEMORY_PROTECTION, _SC_MESSAGE_PASSING, _SC_SEMAPHORES, _SC_SHARED_MEMORY_OBJECTS, and _SC_CHARCLASS_NAME_MAX. * sysdeps/stub/sysconf.c: Ditto. * sysdeps/unix/sysv/sysv4/sysconf.c: Ditto. * sysdeps/unix/sysv/linux/Dist: Add sys/sysctl.h. * sysdeps/unix/sysv/linux/Makefile [subdir == misc] (sysdep_routines): Add s_sysctl and sysctl. * sysdeps/unix/sysv/linux/sys/mman.h: Add declaration of mremap. * sysdeps/unix/sysv/linux/sys/socket.h: New file. Wrapper around kernel header. * sysdeps/unix/sysv/linux/sys/sysctl.h: New file. Define interface to `sysctl' function. * sysdeps/unix/sysv/linux/syscalls.list: Add mremap and _sysctl. * sysdeps/unix/sysv/linux/sysconf.c: Add handling of _SC_CHARCLASS_NAME_MAX. * sysdeps/unix/sysv/linux/sysctl.c: new file. Implement caller of _sysctl system call. * sysvipc/Makefile (routines): Add ftok. * sysvipc/ftok.c: use variable `proj_id' not `id'. Patch by David Mosberger-Tang. * wcsmbs/Makefile (routines): Add wcpcpy, wcpncpy, wcstol, wcstoul, wcstoq, wcstouq, wcstod, wcstold, wcstof, wcscoll, wcsxfrm, wcwidth, and wcswidth. * wcsmbs/wchar.h: Add declarations for wcpcpy, wcpncpy, wcstol, wcstoul, wcstoq, wcstouq, wcstod, wcstold, wcstof, wcscoll, wcsxfrm, wcwidth, and wcswidth. Declare internal interfaces for wcsto* functions. [OPTIMIZE]: Define inline functions for wcsto* functions to call internal interface functions. * wcsmbs/wcpcpy.c, wcsmbs/wcpncpy.c: New files. Implement non- standard function equivalent to stpcpy/stpncpy. * wcsmbs/wcscoll.c: Implement `wcscoll' function by using `strcoll' implementation. * wcsmbs/wcscpy.c, wcsmbs/wcsncpy.c: Use wint_t instead of wchar_t. * wcsmbs/wcstod.c: Implement `wcstod' function by using `strtod' implementation. * wcsmbs/wcstof.c: Same for `wcstof'. * wcsmbs/wcstold.c: Same for `strtold'. * wcsmbs/wcstol.c: Implement `wcstol' function by using `strtol' implementation. * wcsmbs/wcstoq.c: Same for `wcstoq'. * wcsmbs/wcstoul.c: Same for `wcstoul'. * wcsmbs/wcstouq.c: Same for `wcstouq'. * wcsmbs/wcswidth.c: Implement `wcswidth' function from X/Open CAE. * wcsmbs/wcwidth.c: Ditto for `wcwidth'. * wcsmbs/wcwidth.h: Common function for definitions of above two functions. * wcsmbs/wcsxfrm.c: Implement `wcsxfrm function by using `strxfrm implementation. * wctype/wctype.c: Remove case for `wctype_t' being 16 bit type. * wctype/wctype.h (wint_t): Protect against multiple definition. (wctype_t): Always define as `unsigned long int'. * wctype.h: New file. Wrapper around wctype/wctype.h. * hurd/hurdstartup.c (_hurd_split_args): Function removed. (_hurd_startup): Use argz functions. * hurd/hurdexec.c: Use argz functions.
This commit is contained in:
parent
5bd4495594
commit
75cd5204dd
168
ChangeLog
168
ChangeLog
@ -1,3 +1,166 @@
|
||||
Wed May 1 09:10:04 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
|
||||
|
||||
* time/strftime.c: Use canonical autoconf nugget for time.h+sys/time.h
|
||||
include.
|
||||
|
||||
Mon Apr 29 02:48:26 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* ctype/ctype-info.c: (__ctype_width): New variable.
|
||||
(__ctype_names): Initialize correctly without offset.
|
||||
|
||||
* locale/C-collate.c, locale/C-ctype.c,
|
||||
locale/C-messages.c, locale/C-monetary.c,
|
||||
locale/C-numeric.c, locale/C-time.c: Change copyright.
|
||||
|
||||
* locale/C-ctype.c (_nl_C_LC_CTYPE_class32): Correct
|
||||
endianess for initialization value.
|
||||
|
||||
* locale/lc-ctype.c (current): Add parameter for offset.
|
||||
(__ctype32_b, __ctype_width): Add initialization for these
|
||||
variables.
|
||||
|
||||
* locale/programs/charmap.c: Finish support for WIDTH information.
|
||||
(new_width): New function.
|
||||
|
||||
* locale/programs/charset.h (width_rule): new data structure.
|
||||
(charset_t): Add elements for width information.
|
||||
|
||||
* locale/programs/ld-ctype.c (locale_ctype_t): Add element
|
||||
for width information.
|
||||
(allocate_arrays): Add new argument for charset.
|
||||
(ctype_finish): Make sure all characters named in charset
|
||||
width table are known to name table.
|
||||
(ctype_output): Correct handling of class and map name
|
||||
information and write out width information.
|
||||
(find_idx): Prepare for being called with NULL pointer as
|
||||
TABLE argument. This means only allocate name entry.
|
||||
(allocate_arrays): Correct handling of array element -1.
|
||||
Because EOF == -1 the value of element 127 must *not* be
|
||||
mirrored here.
|
||||
Fill width information from charset tables.
|
||||
|
||||
* locale/programs/localedef.c (main): Correct loop over all
|
||||
categories after change of order from Thu Mar 28 14:22:51 1996.
|
||||
Add new charset argument to call of `write_all_categories'.
|
||||
|
||||
* locale/programs/locales.h (ctype_finish, ctype_output): New
|
||||
charset argument.
|
||||
|
||||
* locale/programs/locfile.c (write_all_categories): Call
|
||||
`ctype_output' with additional argument charset.
|
||||
|
||||
* posix/getconf.c (vars): Add _POSIX_SYNC_IO, _POSIX_ASYNC_IO,
|
||||
and _POSIX_PRIO_IO definitions.
|
||||
|
||||
* posix/posix2_lim.h: Add definition of _POSIX2_CHARCLASS_NAME_MAX
|
||||
and CHARCLASS_NAME_MAX.
|
||||
|
||||
* posix/unistd.h: Document _POSIX_SYNC_IO, _POSIX_ASYNC_IO,
|
||||
and _POSIX_PRIO_IO.
|
||||
|
||||
* stdlib/grouping.h: Prepare for use in wide string functions.
|
||||
|
||||
* stdlib/stdlib.h: Correct prototypes for __strto*_internal
|
||||
functions.
|
||||
|
||||
* stdlib/strtod.c: Extend for use as `wcsto{f,d,ld}'.
|
||||
|
||||
* stdlib/strtol.c: Extend for use as `wcsto{l,ul,q,uq}'.
|
||||
|
||||
* string/strcoll.c: Extend for use as `wcscoll'.
|
||||
|
||||
* string/strxfrm.c: Extend for use as `wcsxfrm'.
|
||||
|
||||
* sysdeps/generic/confname.h: Add definition of _PC_SYNC_IO,
|
||||
_PC_ASYNC_IO, _PC_PRIO_IO and _SC_CHARCLASS_NAME_MAX.
|
||||
|
||||
* sysdeps/generic/stpncpy.c: Correct return value.
|
||||
|
||||
* sysdeps/posix/fpathconf.c: Add handling of _PC_SYNC_IO,
|
||||
_PC_ASYNC_IO, and _PC_PRIO_IO.
|
||||
|
||||
* sysdeps/posix/sysconf.c: Add handling of _SC_REALTIME_SIGNALS,
|
||||
_SC_PRIORITY_SCHEDULING, _SC_TIMERS, _SC_ASYNCHRONOUS_IO,
|
||||
_SC_PRIORITIZED_IO, _SC_SYNCHRONIZED_IO, _SC_FSYNC,
|
||||
_SC_MAPPED_FILES, _SC_MEMLOCK, _SC_MEMLOCK_RANGE,
|
||||
_SC_MEMORY_PROTECTION, _SC_MESSAGE_PASSING, _SC_SEMAPHORES,
|
||||
_SC_SHARED_MEMORY_OBJECTS, and _SC_CHARCLASS_NAME_MAX.
|
||||
* sysdeps/stub/sysconf.c: Ditto.
|
||||
* sysdeps/unix/sysv/sysv4/sysconf.c: Ditto.
|
||||
|
||||
* sysdeps/unix/sysv/linux/Dist: Add sys/sysctl.h.
|
||||
|
||||
* sysdeps/unix/sysv/linux/Makefile [subdir == misc]
|
||||
(sysdep_routines): Add s_sysctl and sysctl.
|
||||
|
||||
* sysdeps/unix/sysv/linux/sys/mman.h: Add declaration of mremap.
|
||||
|
||||
* sysdeps/unix/sysv/linux/sys/socket.h: New file. Wrapper
|
||||
around kernel header.
|
||||
|
||||
* sysdeps/unix/sysv/linux/sys/sysctl.h: New file. Define
|
||||
interface to `sysctl' function.
|
||||
|
||||
* sysdeps/unix/sysv/linux/syscalls.list: Add mremap and _sysctl.
|
||||
|
||||
* sysdeps/unix/sysv/linux/sysconf.c: Add handling of
|
||||
_SC_CHARCLASS_NAME_MAX.
|
||||
|
||||
* sysdeps/unix/sysv/linux/sysctl.c: new file. Implement caller
|
||||
of _sysctl system call.
|
||||
|
||||
* sysvipc/Makefile (routines): Add ftok.
|
||||
|
||||
* sysvipc/ftok.c: use variable `proj_id' not `id'. Patch by
|
||||
David Mosberger-Tang.
|
||||
|
||||
* wcsmbs/Makefile (routines): Add wcpcpy, wcpncpy, wcstol,
|
||||
wcstoul, wcstoq, wcstouq, wcstod, wcstold, wcstof, wcscoll,
|
||||
wcsxfrm, wcwidth, and wcswidth.
|
||||
|
||||
* wcsmbs/wchar.h: Add declarations for wcpcpy, wcpncpy, wcstol,
|
||||
wcstoul, wcstoq, wcstouq, wcstod, wcstold, wcstof, wcscoll,
|
||||
wcsxfrm, wcwidth, and wcswidth.
|
||||
Declare internal interfaces for wcsto* functions.
|
||||
[OPTIMIZE]: Define inline functions for wcsto* functions to
|
||||
call internal interface functions.
|
||||
|
||||
* wcsmbs/wcpcpy.c, wcsmbs/wcpncpy.c: New files. Implement non-
|
||||
standard function equivalent to stpcpy/stpncpy.
|
||||
|
||||
* wcsmbs/wcscoll.c: Implement `wcscoll' function by using
|
||||
`strcoll' implementation.
|
||||
|
||||
* wcsmbs/wcscpy.c, wcsmbs/wcsncpy.c: Use wint_t instead of
|
||||
wchar_t.
|
||||
|
||||
* wcsmbs/wcstod.c: Implement `wcstod' function by using `strtod'
|
||||
implementation.
|
||||
* wcsmbs/wcstof.c: Same for `wcstof'.
|
||||
* wcsmbs/wcstold.c: Same for `strtold'.
|
||||
|
||||
* wcsmbs/wcstol.c: Implement `wcstol' function by using `strtol'
|
||||
implementation.
|
||||
* wcsmbs/wcstoq.c: Same for `wcstoq'.
|
||||
* wcsmbs/wcstoul.c: Same for `wcstoul'.
|
||||
* wcsmbs/wcstouq.c: Same for `wcstouq'.
|
||||
|
||||
* wcsmbs/wcswidth.c: Implement `wcswidth' function from X/Open
|
||||
CAE.
|
||||
* wcsmbs/wcwidth.c: Ditto for `wcwidth'.
|
||||
* wcsmbs/wcwidth.h: Common function for definitions of above two
|
||||
functions.
|
||||
|
||||
* wcsmbs/wcsxfrm.c: Implement `wcsxfrm function by using
|
||||
`strxfrm implementation.
|
||||
|
||||
* wctype/wctype.c: Remove case for `wctype_t' being 16 bit type.
|
||||
|
||||
* wctype/wctype.h (wint_t): Protect against multiple definition.
|
||||
(wctype_t): Always define as `unsigned long int'.
|
||||
|
||||
* wctype.h: New file. Wrapper around wctype/wctype.h.
|
||||
|
||||
Tue Apr 30 17:30:46 1996 Miles Bader <miles@gnu.ai.mit.edu>
|
||||
|
||||
* hurd/hurdsig.c (_hurdsig_abort_rpcs): Add timeout argument to
|
||||
@ -9,6 +172,11 @@ Tue Apr 30 17:30:46 1996 Miles Bader <miles@gnu.ai.mit.edu>
|
||||
|
||||
Mon Apr 29 00:11:59 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
|
||||
|
||||
* hurd/hurdstartup.c (_hurd_split_args): Function removed.
|
||||
(_hurd_startup): Use argz functions.
|
||||
|
||||
* hurd/hurdexec.c: Use argz functions.
|
||||
|
||||
* errno.h [!__error_t_defined] (error_t): New type.
|
||||
* sysdeps/mach/hurd/errnos.awk: #define __error_t_defined after the
|
||||
typedef in errnos.h.
|
||||
|
@ -25,11 +25,13 @@ extern const char _nl_C_LC_CTYPE_class32[];
|
||||
extern const char _nl_C_LC_CTYPE_toupper[];
|
||||
extern const char _nl_C_LC_CTYPE_tolower[];
|
||||
extern const char _nl_C_LC_CTYPE_names[];
|
||||
extern const char _nl_C_LC_CTYPE_width[];
|
||||
|
||||
#define b(u,x,o) (((const u int *) _nl_C_LC_CTYPE_##x) + o);
|
||||
#define b(t,x,o) (((const t *) _nl_C_LC_CTYPE_##x) + o);
|
||||
|
||||
const unsigned short int *__ctype_b = b (unsigned short, class, 128);
|
||||
const unsigned int *__ctype32_b = b (unsigned, class32, 0);
|
||||
const int *__ctype_tolower = b (, tolower, 128);
|
||||
const int *__ctype_toupper = b (, toupper, 128);
|
||||
const unsigned int *__ctype_names = b (unsigned, names, 0);
|
||||
const unsigned short int *__ctype_b = b (unsigned short int, class, 128);
|
||||
const unsigned int *__ctype32_b = b (unsigned int, class32, 0);
|
||||
const int *__ctype_tolower = b (int, tolower, 128);
|
||||
const int *__ctype_toupper = b (int, toupper, 128);
|
||||
const unsigned int *__ctype_names = b (unsigned int, names, 0);
|
||||
const unsigned char *__ctype_width = b (unsigned char, width, 0);
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 92, 93, 94, 95, 96 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
|
||||
@ -25,6 +25,7 @@ Cambridge, MA 02139, USA. */
|
||||
#include <hurd.h>
|
||||
#include <hurd/fd.h>
|
||||
#include <hurd/signal.h>
|
||||
#include <argz.h>
|
||||
|
||||
/* Overlay TASK, executing FILE with arguments ARGV and environment ENVP.
|
||||
If TASK == mach_task_self (), some ports are dealloc'd by the exec server.
|
||||
@ -47,36 +48,10 @@ _hurd_exec (task_t task, file_t file,
|
||||
struct hurd_sigstate *ss;
|
||||
mach_port_t *please_dealloc, *pdp;
|
||||
|
||||
|
||||
/* Pack the arguments into an array with nulls separating the elements. */
|
||||
argslen = 0;
|
||||
if (argv != NULL)
|
||||
{
|
||||
p = argv;
|
||||
while (*p != NULL)
|
||||
argslen += strlen (*p++) + 1;
|
||||
args = __alloca (argslen);
|
||||
ap = args;
|
||||
for (p = argv; *p != NULL; ++p)
|
||||
ap = __memccpy (ap, *p, '\0', ULONG_MAX);
|
||||
}
|
||||
else
|
||||
args = NULL;
|
||||
|
||||
/* Pack the environment into an array with nulls separating elements. */
|
||||
envlen = 0;
|
||||
if (envp != NULL)
|
||||
{
|
||||
p = envp;
|
||||
while (*p != NULL)
|
||||
envlen += strlen (*p++) + 1;
|
||||
env = __alloca (envlen);
|
||||
ap = env;
|
||||
for (p = envp; *p != NULL; ++p)
|
||||
ap = __memccpy (ap, *p, '\0', ULONG_MAX);
|
||||
}
|
||||
else
|
||||
env = NULL;
|
||||
if (err = __argz_create (argv, &args, &argslen))
|
||||
return err;
|
||||
if (err = __argz_create (envp, &env, &envlen))
|
||||
goto outargs;
|
||||
|
||||
/* Load up the ports to give to the new program. */
|
||||
for (i = 0; i < _hurd_nports; ++i)
|
||||
@ -88,7 +63,7 @@ _hurd_exec (task_t task, file_t file,
|
||||
{
|
||||
while (--i > 0)
|
||||
_hurd_port_free (&_hurd_ports[i], &ulink_ports[i], ports[i]);
|
||||
return err;
|
||||
goto outenv;
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -254,5 +229,9 @@ _hurd_exec (task_t task, file_t file,
|
||||
__msg_sig_post (_hurd_msgport, 0, __mach_task_self ());
|
||||
}
|
||||
|
||||
outargs:
|
||||
free (args);
|
||||
outenv:
|
||||
free (env);
|
||||
return err;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Initial program startup for running under the GNU Hurd.
|
||||
Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
|
||||
Copyright (C) 1991, 92, 93, 94, 95, 96 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
|
||||
@ -30,6 +30,7 @@ Cambridge, MA 02139, USA. */
|
||||
#include "set-hooks.h"
|
||||
#include "hurdmalloc.h" /* XXX */
|
||||
#include "hurdstartup.h"
|
||||
#include <argz.h>
|
||||
|
||||
mach_port_t *_hurd_init_dtable;
|
||||
mach_msg_type_number_t _hurd_init_dtablesize;
|
||||
@ -45,9 +46,6 @@ unsigned long int *__hurd_sigthread_variables;
|
||||
|
||||
extern void __mach_init (void);
|
||||
|
||||
int _hurd_split_args (char *, size_t, char **);
|
||||
|
||||
|
||||
/* Entry point. This is the first thing in the text segment.
|
||||
|
||||
The exec server started the initial thread in our task with this spot the
|
||||
@ -125,9 +123,9 @@ _hurd_startup (void **argptr, void (*main) (int *data))
|
||||
arguments and environment into vectors of pointers to strings. */
|
||||
|
||||
/* Count up the arguments so we can allocate ARGV. */
|
||||
argc = _hurd_split_args (args, argslen, NULL);
|
||||
argc = __argz_count (args, argslen);
|
||||
/* Count up the environment variables so we can allocate ENVP. */
|
||||
envc = _hurd_split_args (env, envlen, NULL);
|
||||
envc = __argz_count (env, envlen);
|
||||
|
||||
/* There were some arguments. Allocate space for the vectors of
|
||||
pointers and fill them in. We allocate the space for the
|
||||
@ -138,11 +136,11 @@ _hurd_startup (void **argptr, void (*main) (int *data))
|
||||
sizeof (struct hurd_startup_data));
|
||||
*argcptr = argc;
|
||||
argv = (void *) (argcptr + 1);
|
||||
_hurd_split_args (args, argslen, argv);
|
||||
__argz_extract (args, argslen, argv);
|
||||
|
||||
/* There was some environment. */
|
||||
envp = &argv[argc + 1];
|
||||
_hurd_split_args (env, envlen, envp);
|
||||
__argz_extract (env, envlen, envp);
|
||||
}
|
||||
|
||||
if (err || in_bootstrap == MACH_PORT_NULL)
|
||||
@ -197,35 +195,3 @@ _hurd_startup (void **argptr, void (*main) (int *data))
|
||||
LOSE;
|
||||
abort ();
|
||||
}
|
||||
|
||||
/* Split ARGSLEN bytes at ARGS into words, breaking at NUL characters. If
|
||||
ARGV is not a null pointer, store a pointer to the start of each word in
|
||||
ARGV[n], and null-terminate ARGV. Return the number of words split. */
|
||||
|
||||
int
|
||||
_hurd_split_args (char *args, size_t argslen, char **argv)
|
||||
{
|
||||
char *p = args;
|
||||
size_t n = argslen;
|
||||
int argc = 0;
|
||||
|
||||
while (n > 0)
|
||||
{
|
||||
char *end = memchr (p, '\0', n);
|
||||
|
||||
if (argv)
|
||||
argv[argc] = p;
|
||||
++argc;
|
||||
|
||||
if (end == NULL)
|
||||
/* The last argument is unterminated. */
|
||||
break;
|
||||
|
||||
n -= end + 1 - p;
|
||||
p = end + 1;
|
||||
}
|
||||
|
||||
if (argv)
|
||||
argv[argc] = NULL;
|
||||
return argc;
|
||||
}
|
||||
|
@ -1,8 +1,21 @@
|
||||
/* Generated by GNU locale 0.1.
|
||||
Copyright (C) 1995 Free Software Foundation, Inc.
|
||||
This is free software; see the source for copying conditions.
|
||||
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. */
|
||||
/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
||||
|
||||
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 "localeinfo.h"
|
||||
|
||||
|
191
locale/C-ctype.c
191
locale/C-ctype.c
@ -1,4 +1,21 @@
|
||||
/* Generated by GNU locale 0.1. */
|
||||
/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
||||
|
||||
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 "localeinfo.h"
|
||||
#include <endian.h>
|
||||
@ -70,92 +87,92 @@ const char _nl_C_LC_CTYPE_class[768] =
|
||||
/* 0xfa */ "\002\000" "\002\000" "\002\000" "\002\000" "\002\000" "\002\000"
|
||||
;
|
||||
const char _nl_C_LC_CTYPE_class32[1024] =
|
||||
/* 0x00 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0x03 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0x06 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0x09 */ "\003\040\000\000" "\002\040\000\000" "\002\040\000\000"
|
||||
/* 0x0c */ "\002\040\000\000" "\002\040\000\000" "\002\000\000\000"
|
||||
/* 0x0f */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0x12 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0x15 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0x18 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0x1b */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0x1e */ "\002\000\000\000" "\002\000\000\000" "\001\140\000\000"
|
||||
/* 0x21 */ "\004\300\000\000" "\004\300\000\000" "\004\300\000\000"
|
||||
/* 0x24 */ "\004\300\000\000" "\004\300\000\000" "\004\300\000\000"
|
||||
/* 0x27 */ "\004\300\000\000" "\004\300\000\000" "\004\300\000\000"
|
||||
/* 0x2a */ "\004\300\000\000" "\004\300\000\000" "\004\300\000\000"
|
||||
/* 0x2d */ "\004\300\000\000" "\004\300\000\000" "\004\300\000\000"
|
||||
/* 0x30 */ "\010\330\000\000" "\010\330\000\000" "\010\330\000\000"
|
||||
/* 0x33 */ "\010\330\000\000" "\010\330\000\000" "\010\330\000\000"
|
||||
/* 0x36 */ "\010\330\000\000" "\010\330\000\000" "\010\330\000\000"
|
||||
/* 0x39 */ "\010\330\000\000" "\004\300\000\000" "\004\300\000\000"
|
||||
/* 0x3c */ "\004\300\000\000" "\004\300\000\000" "\004\300\000\000"
|
||||
/* 0x3f */ "\004\300\000\000" "\004\300\000\000" "\010\325\000\000"
|
||||
/* 0x42 */ "\010\325\000\000" "\010\325\000\000" "\010\325\000\000"
|
||||
/* 0x45 */ "\010\325\000\000" "\010\325\000\000" "\010\305\000\000"
|
||||
/* 0x48 */ "\010\305\000\000" "\010\305\000\000" "\010\305\000\000"
|
||||
/* 0x4b */ "\010\305\000\000" "\010\305\000\000" "\010\305\000\000"
|
||||
/* 0x4e */ "\010\305\000\000" "\010\305\000\000" "\010\305\000\000"
|
||||
/* 0x51 */ "\010\305\000\000" "\010\305\000\000" "\010\305\000\000"
|
||||
/* 0x54 */ "\010\305\000\000" "\010\305\000\000" "\010\305\000\000"
|
||||
/* 0x57 */ "\010\305\000\000" "\010\305\000\000" "\010\305\000\000"
|
||||
/* 0x5a */ "\010\305\000\000" "\004\300\000\000" "\004\300\000\000"
|
||||
/* 0x5d */ "\004\300\000\000" "\004\300\000\000" "\004\300\000\000"
|
||||
/* 0x60 */ "\004\300\000\000" "\010\326\000\000" "\010\326\000\000"
|
||||
/* 0x63 */ "\010\326\000\000" "\010\326\000\000" "\010\326\000\000"
|
||||
/* 0x66 */ "\010\326\000\000" "\010\306\000\000" "\010\306\000\000"
|
||||
/* 0x69 */ "\010\306\000\000" "\010\306\000\000" "\010\306\000\000"
|
||||
/* 0x6c */ "\010\306\000\000" "\010\306\000\000" "\010\306\000\000"
|
||||
/* 0x6f */ "\010\306\000\000" "\010\306\000\000" "\010\306\000\000"
|
||||
/* 0x72 */ "\010\306\000\000" "\010\306\000\000" "\010\306\000\000"
|
||||
/* 0x75 */ "\010\306\000\000" "\010\306\000\000" "\010\306\000\000"
|
||||
/* 0x78 */ "\010\306\000\000" "\010\306\000\000" "\010\306\000\000"
|
||||
/* 0x7b */ "\004\300\000\000" "\004\300\000\000" "\004\300\000\000"
|
||||
/* 0x7e */ "\004\300\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0x81 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0x84 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0x87 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0x8a */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0x8d */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0x90 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0x93 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0x96 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0x99 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0x9c */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0x9f */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xa2 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xa5 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xa8 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xab */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xae */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xb1 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xb4 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xb7 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xba */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xbd */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xc0 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xc3 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xc6 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xc9 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xcc */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xcf */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xd2 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xd5 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xd8 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xdb */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xde */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xe1 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xe4 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xe7 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xea */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xed */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xf0 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xf3 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xf6 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xf9 */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xfc */ "\002\000\000\000" "\002\000\000\000" "\002\000\000\000"
|
||||
/* 0xff */ "\002\000\000\000"
|
||||
/* 0x00 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0x03 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0x06 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0x09 */ "\000\000\003\040" "\000\000\002\040" "\000\000\002\040"
|
||||
/* 0x0c */ "\000\000\002\040" "\000\000\002\040" "\000\000\002\000"
|
||||
/* 0x0f */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0x12 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0x15 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0x18 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0x1b */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0x1e */ "\000\000\002\000" "\000\000\002\000" "\000\000\001\140"
|
||||
/* 0x21 */ "\000\000\004\300" "\000\000\004\300" "\000\000\004\300"
|
||||
/* 0x24 */ "\000\000\004\300" "\000\000\004\300" "\000\000\004\300"
|
||||
/* 0x27 */ "\000\000\004\300" "\000\000\004\300" "\000\000\004\300"
|
||||
/* 0x2a */ "\000\000\004\300" "\000\000\004\300" "\000\000\004\300"
|
||||
/* 0x2d */ "\000\000\004\300" "\000\000\004\300" "\000\000\004\300"
|
||||
/* 0x30 */ "\000\000\010\330" "\000\000\010\330" "\000\000\010\330"
|
||||
/* 0x33 */ "\000\000\010\330" "\000\000\010\330" "\000\000\010\330"
|
||||
/* 0x36 */ "\000\000\010\330" "\000\000\010\330" "\000\000\010\330"
|
||||
/* 0x39 */ "\000\000\010\330" "\000\000\004\300" "\000\000\004\300"
|
||||
/* 0x3c */ "\000\000\004\300" "\000\000\004\300" "\000\000\004\300"
|
||||
/* 0x3f */ "\000\000\004\300" "\000\000\004\300" "\000\000\010\325"
|
||||
/* 0x42 */ "\000\000\010\325" "\000\000\010\325" "\000\000\010\325"
|
||||
/* 0x45 */ "\000\000\010\325" "\000\000\010\325" "\000\000\010\305"
|
||||
/* 0x48 */ "\000\000\010\305" "\000\000\010\305" "\000\000\010\305"
|
||||
/* 0x4b */ "\000\000\010\305" "\000\000\010\305" "\000\000\010\305"
|
||||
/* 0x4e */ "\000\000\010\305" "\000\000\010\305" "\000\000\010\305"
|
||||
/* 0x51 */ "\000\000\010\305" "\000\000\010\305" "\000\000\010\305"
|
||||
/* 0x54 */ "\000\000\010\305" "\000\000\010\305" "\000\000\010\305"
|
||||
/* 0x57 */ "\000\000\010\305" "\000\000\010\305" "\000\000\010\305"
|
||||
/* 0x5a */ "\000\000\010\305" "\000\000\004\300" "\000\000\004\300"
|
||||
/* 0x5d */ "\000\000\004\300" "\000\000\004\300" "\000\000\004\300"
|
||||
/* 0x60 */ "\000\000\004\300" "\000\000\010\326" "\000\000\010\326"
|
||||
/* 0x63 */ "\000\000\010\326" "\000\000\010\326" "\000\000\010\326"
|
||||
/* 0x66 */ "\000\000\010\326" "\000\000\010\306" "\000\000\010\306"
|
||||
/* 0x69 */ "\000\000\010\306" "\000\000\010\306" "\000\000\010\306"
|
||||
/* 0x6c */ "\000\000\010\306" "\000\000\010\306" "\000\000\010\306"
|
||||
/* 0x6f */ "\000\000\010\306" "\000\000\010\306" "\000\000\010\306"
|
||||
/* 0x72 */ "\000\000\010\306" "\000\000\010\306" "\000\000\010\306"
|
||||
/* 0x75 */ "\000\000\010\306" "\000\000\010\306" "\000\000\010\306"
|
||||
/* 0x78 */ "\000\000\010\306" "\000\000\010\306" "\000\000\010\306"
|
||||
/* 0x7b */ "\000\000\004\300" "\000\000\004\300" "\000\000\004\300"
|
||||
/* 0x7e */ "\000\000\004\300" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0x81 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0x84 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0x87 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0x8a */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0x8d */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0x90 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0x93 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0x96 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0x99 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0x9c */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0x9f */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xa2 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xa5 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xa8 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xab */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xae */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xb1 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xb4 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xb7 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xba */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xbd */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xc0 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xc3 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xc6 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xc9 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xcc */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xcf */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xd2 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xd5 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xd8 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xdb */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xde */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xe1 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xe4 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xe7 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xea */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xed */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xf0 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xf3 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xf6 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xf9 */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xfc */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
|
||||
/* 0xff */ "\000\000\002\000"
|
||||
;
|
||||
#if BYTE_ORDER == LITTLE_ENDIAN
|
||||
const char _nl_C_LC_CTYPE_toupper[1536] =
|
||||
|
@ -1,8 +1,21 @@
|
||||
/* Generated by GNU locale 0.1.
|
||||
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
This is free software; see the source for copying conditions.
|
||||
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. */
|
||||
/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
||||
|
||||
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 "localeinfo.h"
|
||||
|
||||
|
@ -1,8 +1,21 @@
|
||||
/* Generated by GNU locale 0.1.
|
||||
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
This is free software; see the source for copying conditions.
|
||||
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. */
|
||||
/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
||||
|
||||
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 "localeinfo.h"
|
||||
|
||||
|
@ -1,8 +1,21 @@
|
||||
/* Generated by GNU locale 0.1.
|
||||
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
This is free software; see the source for copying conditions.
|
||||
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. */
|
||||
/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
||||
|
||||
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 "localeinfo.h"
|
||||
|
||||
|
@ -1,8 +1,21 @@
|
||||
/* Generated by GNU locale 0.1.
|
||||
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
This is free software; see the source for copying conditions.
|
||||
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. */
|
||||
/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
||||
|
||||
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 "localeinfo.h"
|
||||
|
||||
|
@ -43,14 +43,17 @@ _nl_postload_ctype (void)
|
||||
#define paste(a,b) paste1(a,b)
|
||||
#define paste1(a,b) a##b
|
||||
|
||||
#define current(unsigned,x) \
|
||||
((const unsigned int *) _NL_CURRENT (LC_CTYPE, paste(_NL_CTYPE_,x)) \
|
||||
+ 128)
|
||||
#define current(type,x,offset) \
|
||||
((const type *) _NL_CURRENT (LC_CTYPE, paste(_NL_CTYPE_,x)) + offset)
|
||||
|
||||
extern const unsigned int *__ctype32_b;
|
||||
extern const unsigned int *__ctype_names;
|
||||
extern const unsigned char *__ctype_width;
|
||||
|
||||
__ctype_b = current (unsigned short, CLASS);
|
||||
__ctype_toupper = current (, bo (TOUPPER));
|
||||
__ctype_tolower = current (, bo (TOLOWER));
|
||||
__ctype_names = current (unsigned, bo (NAMES));
|
||||
__ctype_b = current (unsigned short int, CLASS, 128);
|
||||
__ctype_toupper = current (int, bo (TOUPPER), 128);
|
||||
__ctype_tolower = current (int, bo (TOLOWER), 128);
|
||||
__ctype32_b = current (unsigned int, CLASS32, 0);
|
||||
__ctype_names = current (unsigned int, bo (NAMES), 0);
|
||||
__ctype_width = current (unsigned char, WIDTH, 0);
|
||||
}
|
||||
|
@ -47,7 +47,9 @@ void *xmalloc (size_t __n);
|
||||
|
||||
/* Prototypes for local functions. */
|
||||
static struct charset_t *parse_charmap (const char *filename);
|
||||
|
||||
static void new_width (struct linereader *cmfile, struct charset_t *result,
|
||||
const char *from, const char *to,
|
||||
unsigned long int width);
|
||||
|
||||
|
||||
struct charset_t *
|
||||
@ -123,6 +125,8 @@ parse_charmap (const char *filename)
|
||||
/* Allocate room for result. */
|
||||
result = (struct charset_t *) xmalloc (sizeof (struct charset_t));
|
||||
memset (result, '\0', sizeof (struct charset_t));
|
||||
/* The default DEFAULT_WIDTH is 1. */
|
||||
result->width_default = 1;
|
||||
|
||||
#define obstack_chunk_alloc xmalloc
|
||||
#define obstack_chunk_free free
|
||||
@ -399,6 +403,10 @@ argument to <%s> must be a single character"),
|
||||
|
||||
case 91:
|
||||
/* Waiting for WIDTH... */
|
||||
if (nowtok == tok_eol)
|
||||
/* Ignore empty lines. */
|
||||
continue;
|
||||
|
||||
if (nowtok == tok_width_default)
|
||||
{
|
||||
state = 92;
|
||||
@ -474,7 +482,10 @@ only WIDTH definitions are allowed to follow the CHARMAP definition"));
|
||||
|
||||
case 94:
|
||||
if (nowtok == tok_ellipsis)
|
||||
state = 95;
|
||||
{
|
||||
state = 95;
|
||||
continue;
|
||||
}
|
||||
|
||||
case 96:
|
||||
if (nowtok != tok_number)
|
||||
@ -482,8 +493,11 @@ only WIDTH definitions are allowed to follow the CHARMAP definition"));
|
||||
"WIDTH");
|
||||
else
|
||||
{
|
||||
/* XXX Store width for chars. */
|
||||
/* Store width for chars. */
|
||||
new_width (cmfile, result, from_name, to_name, now->val.num);
|
||||
|
||||
from_name = NULL;
|
||||
to_name = NULL;
|
||||
}
|
||||
|
||||
lr_ignore_rest (cmfile, nowtok == tok_number);
|
||||
@ -507,8 +521,6 @@ only WIDTH definitions are allowed to follow the CHARMAP definition"));
|
||||
now->val.str.start,
|
||||
now->val.str.len);
|
||||
|
||||
lr_ignore_rest (cmfile, 1);
|
||||
|
||||
state = 96;
|
||||
continue;
|
||||
|
||||
@ -591,3 +603,50 @@ only WIDTH definitions are allowed to follow the CHARMAP definition"));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
new_width (struct linereader *cmfile, struct charset_t *result,
|
||||
const char *from, const char *to, unsigned long int width)
|
||||
{
|
||||
unsigned int from_val, to_val;
|
||||
|
||||
from_val = charset_find_value (result, from, strlen (from));
|
||||
if (from_val == ILLEGAL_CHAR_VALUE)
|
||||
{
|
||||
lr_error (cmfile, _("unknown character `%s'"), from);
|
||||
return;
|
||||
}
|
||||
|
||||
if (to == NULL)
|
||||
to_val = from_val;
|
||||
else
|
||||
{
|
||||
to_val = charset_find_value (result, to, strlen (to));
|
||||
if (to_val == ILLEGAL_CHAR_VALUE)
|
||||
{
|
||||
lr_error (cmfile, _("unknown character `%s'"), to);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (result->nwidth_rules >= result->nwidth_rules_max)
|
||||
{
|
||||
size_t new_size = result->nwidth_rules + 32;
|
||||
struct width_rule *new_rules =
|
||||
(struct width_rule *) obstack_alloc (&result->mem_pool,
|
||||
(new_size
|
||||
* sizeof (struct width_rule)));
|
||||
|
||||
memcpy (new_rules, result->width_rules,
|
||||
result->nwidth_rules_max * sizeof (struct width_rule));
|
||||
|
||||
result->width_rules = new_rules;
|
||||
result->nwidth_rules_max = new_size;
|
||||
}
|
||||
|
||||
result->width_rules[result->nwidth_rules].from = from_val;
|
||||
result->width_rules[result->nwidth_rules].to = to_val;
|
||||
result->width_rules[result->nwidth_rules].width = (unsigned int) width;
|
||||
++result->nwidth_rules;
|
||||
}
|
||||
|
@ -26,11 +26,23 @@ Boston, MA 02111-1307, USA. */
|
||||
#include "linereader.h"
|
||||
|
||||
|
||||
struct width_rule
|
||||
{
|
||||
unsigned int from;
|
||||
unsigned int to;
|
||||
unsigned int width;
|
||||
};
|
||||
|
||||
|
||||
struct charset_t
|
||||
{
|
||||
const char *code_set_name;
|
||||
int mb_cur_min;
|
||||
int mb_cur_max;
|
||||
|
||||
struct width_rule *width_rules;
|
||||
size_t nwidth_rules;
|
||||
size_t nwidth_rules_max;
|
||||
int width_default;
|
||||
|
||||
struct obstack mem_pool;
|
||||
|
@ -107,6 +107,7 @@ struct locale_ctype_t
|
||||
u32_t **map_el;
|
||||
u32_t *class_name_ptr;
|
||||
u32_t *map_name_ptr;
|
||||
unsigned char *width;
|
||||
};
|
||||
|
||||
|
||||
@ -120,7 +121,8 @@ static u32_t *find_idx (struct locale_ctype_t *ctype, u32_t **table,
|
||||
size_t *max, size_t *act, unsigned int idx);
|
||||
static void set_class_defaults (struct locale_ctype_t *ctype,
|
||||
struct charset_t *charset);
|
||||
static void allocate_arrays (struct locale_ctype_t *ctype);
|
||||
static void allocate_arrays (struct locale_ctype_t *ctype,
|
||||
struct charset_t *charset);
|
||||
|
||||
|
||||
void
|
||||
@ -321,20 +323,33 @@ character %s'%s' in class `%s' must not be in class `%s'"),
|
||||
valid_table[cnt].name);
|
||||
else
|
||||
ELEM (ctype, class_collection, , space_value) |= BIT (tok_print);
|
||||
|
||||
/* Now that the tests are done make sure the name array contains all
|
||||
characters which are handled in the WIDTH section of the
|
||||
character set definition file. */
|
||||
if (charset->width_rules != NULL)
|
||||
for (cnt = 0; cnt < charset->nwidth_rules; ++cnt)
|
||||
{
|
||||
size_t inner;
|
||||
for (inner = charset->width_rules[cnt].from;
|
||||
inner <= charset->width_rules[cnt].to; ++inner)
|
||||
(void) find_idx (ctype, NULL, NULL, NULL, inner);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ctype_output (struct localedef_t *locale, const char *output_path)
|
||||
ctype_output (struct localedef_t *locale, struct charset_t *charset,
|
||||
const char *output_path)
|
||||
{
|
||||
struct locale_ctype_t *ctype = locale->categories[LC_CTYPE].ctype;
|
||||
const size_t nelems = (_NL_ITEM_INDEX (_NL_NUM_LC_CTYPE)
|
||||
+ 2 * (ctype->map_collection_nr - 2));
|
||||
struct iovec iov[2 + nelems + (ctype->nr_charclass + 1)
|
||||
+ (ctype->map_collection_nr + 1)];
|
||||
struct iovec iov[2 + nelems + ctype->nr_charclass
|
||||
+ ctype->map_collection_nr];
|
||||
struct locale_file data;
|
||||
u32_t idx[nelems];
|
||||
size_t elem, cnt, offset;
|
||||
size_t elem, cnt, offset, total;
|
||||
|
||||
|
||||
if ((locale->binary & (1 << LC_CTYPE)) != 0)
|
||||
@ -349,7 +364,7 @@ ctype_output (struct localedef_t *locale, const char *output_path)
|
||||
|
||||
|
||||
/* Now prepare the output: Find the sizes of the table we can use. */
|
||||
allocate_arrays (ctype);
|
||||
allocate_arrays (ctype, charset);
|
||||
|
||||
data.magic = LIMAGIC (LC_CTYPE);
|
||||
data.n = nelems;
|
||||
@ -369,8 +384,10 @@ ctype_output (struct localedef_t *locale, const char *output_path)
|
||||
{
|
||||
#define CTYPE_DATA(name, base, len) \
|
||||
case _NL_ITEM_INDEX (name): \
|
||||
iov[2 + elem].iov_base = base; \
|
||||
iov[2 + elem].iov_len = len; \
|
||||
iov[2 + elem + offset].iov_base = base; \
|
||||
iov[2 + elem + offset].iov_len = len; \
|
||||
if (elem + 1 < nelems) \
|
||||
idx[elem + 1] = idx[elem] + iov[2 + elem + offset].iov_len; \
|
||||
break
|
||||
|
||||
CTYPE_DATA (_NL_CTYPE_CLASS,
|
||||
@ -412,15 +429,46 @@ ctype_output (struct localedef_t *locale, const char *output_path)
|
||||
CTYPE_DATA (_NL_CTYPE_HASH_LAYERS,
|
||||
&ctype->plane_cnt, sizeof (u32_t));
|
||||
|
||||
CTYPE_DATA (_NL_CTYPE_CLASS_NAMES,
|
||||
ctype->class_name_ptr,
|
||||
ctype->nr_charclass * sizeof (u32_t));
|
||||
CTYPE_DATA (_NL_CTYPE_MAP_NAMES,
|
||||
ctype->map_name_ptr,
|
||||
ctype->map_collection_nr * sizeof (u32_t));
|
||||
case _NL_ITEM_INDEX (_NL_CTYPE_CLASS_NAMES):
|
||||
/* The class name array. */
|
||||
total = 0;
|
||||
for (cnt = 0; cnt < ctype->nr_charclass; ++cnt, ++offset)
|
||||
{
|
||||
iov[2 + elem + offset].iov_base
|
||||
= (void *) ctype->classnames[cnt];
|
||||
iov[2 + elem + offset].iov_len
|
||||
= strlen (ctype->classnames[cnt]) + 1;
|
||||
total += iov[2 + elem + offset].iov_len;
|
||||
}
|
||||
iov[2 + elem + offset].iov_base = (void *) "";
|
||||
iov[2 + elem + offset].iov_len = 1;
|
||||
++total;
|
||||
|
||||
if (elem + 1 < nelems)
|
||||
idx[elem + 1] = idx[elem] + total;
|
||||
break;
|
||||
|
||||
case _NL_ITEM_INDEX (_NL_CTYPE_MAP_NAMES):
|
||||
/* The class name array. */
|
||||
total = 0;
|
||||
for (cnt = 0; cnt < ctype->map_collection_nr; ++cnt, ++offset)
|
||||
{
|
||||
iov[2 + elem + offset].iov_base
|
||||
= (void *) ctype->mapnames[cnt];
|
||||
iov[2 + elem + offset].iov_len
|
||||
= strlen (ctype->mapnames[cnt]) + 1;
|
||||
total += iov[2 + elem + offset].iov_len;
|
||||
}
|
||||
iov[2 + elem + offset].iov_base = (void *) "";
|
||||
iov[2 + elem + offset].iov_len = 1;
|
||||
++total;
|
||||
|
||||
if (elem + 1 < nelems)
|
||||
idx[elem + 1] = idx[elem] + total;
|
||||
break;
|
||||
|
||||
CTYPE_DATA (_NL_CTYPE_WIDTH,
|
||||
NULL, 0); /* Not yet implemented. */
|
||||
ctype->width, ctype->plane_size * ctype->plane_cnt);
|
||||
|
||||
default:
|
||||
assert (! "unknown CTYPE element");
|
||||
@ -431,49 +479,23 @@ ctype_output (struct localedef_t *locale, const char *output_path)
|
||||
size_t nr = (elem - _NL_ITEM_INDEX (_NL_NUM_LC_CTYPE)) >> 1;
|
||||
|
||||
if (((elem - _NL_ITEM_INDEX (_NL_NUM_LC_CTYPE)) & 1) == 0)
|
||||
iov[2 + elem].iov_base = ctype->map_eb[nr];
|
||||
iov[2 + elem + offset].iov_base = ctype->map_eb[nr];
|
||||
else
|
||||
iov[2 + elem].iov_base = ctype->map_el[nr];
|
||||
iov[2 + elem + offset].iov_base = ctype->map_el[nr];
|
||||
|
||||
iov[2 + elem].iov_len = ((ctype->plane_size * ctype->plane_cnt + 128)
|
||||
* sizeof (u32_t));
|
||||
iov[2 + elem + offset].iov_len = ((ctype->plane_size
|
||||
* ctype->plane_cnt + 128)
|
||||
* sizeof (u32_t));
|
||||
|
||||
if (elem + 1 < nelems)
|
||||
idx[elem + 1] = idx[elem] + iov[2 + elem + offset].iov_len;
|
||||
}
|
||||
|
||||
if (elem + 1 < nelems)
|
||||
idx[elem + 1] = idx[elem] + iov[2 + elem].iov_len;
|
||||
}
|
||||
|
||||
offset = idx[elem - 1] + iov[2 + elem - 1].iov_len;
|
||||
assert (2 + elem + offset == (nelems + ctype->nr_charclass
|
||||
+ ctype->map_collection_nr + 2));
|
||||
|
||||
/* The class name array. */
|
||||
for (cnt = 0; cnt < ctype->nr_charclass; ++cnt, ++elem)
|
||||
{
|
||||
iov[2 + elem].iov_base = (void *) ctype->classnames[cnt];
|
||||
iov[2 + elem].iov_len = strlen (ctype->classnames[cnt]) + 1;
|
||||
|
||||
ctype->class_name_ptr[cnt] = offset;
|
||||
offset += iov[2 + elem].iov_len;
|
||||
}
|
||||
iov[2 + elem].iov_base = (void *) "";
|
||||
iov[2 + elem].iov_len = 1;
|
||||
++elem;
|
||||
|
||||
/* The map name array. */
|
||||
for (cnt = 0; cnt < ctype->map_collection_nr; ++cnt, ++elem)
|
||||
{
|
||||
iov[2 + elem].iov_base = (void *) ctype->mapnames[cnt];
|
||||
iov[2 + elem].iov_len = strlen (ctype->mapnames[cnt]) + 1;
|
||||
|
||||
ctype->map_name_ptr[cnt] = offset;
|
||||
offset += iov[2 + elem].iov_len;
|
||||
}
|
||||
iov[2 + elem].iov_base = (void *) "";
|
||||
iov[2 + elem].iov_len = 1;
|
||||
++elem;
|
||||
|
||||
assert (elem == nelems + ctype->nr_charclass + ctype->map_collection_nr + 2);
|
||||
|
||||
write_locale_data (output_path, "LC_CTYPE", 2 + elem, iov);
|
||||
write_locale_data (output_path, "LC_CTYPE", 2 + elem + offset, iov);
|
||||
}
|
||||
|
||||
|
||||
@ -813,6 +835,8 @@ implementation limit: no more than %d character maps allowed"),
|
||||
}
|
||||
|
||||
|
||||
/* We have to be prepared that TABLE, MAX, and ACT can be NULL. This
|
||||
is possible if we only want ot extend the name array. */
|
||||
static u32_t *
|
||||
find_idx (struct locale_ctype_t *ctype, u32_t **table, size_t *max,
|
||||
size_t *act, unsigned int idx)
|
||||
@ -820,7 +844,7 @@ find_idx (struct locale_ctype_t *ctype, u32_t **table, size_t *max,
|
||||
size_t cnt;
|
||||
|
||||
if (idx < 256)
|
||||
return &(*table)[idx];
|
||||
return table == NULL ? NULL : &(*table)[idx];
|
||||
|
||||
for (cnt = 256; cnt < ctype->charnames_act; ++cnt)
|
||||
if (ctype->charnames[cnt] == idx)
|
||||
@ -840,6 +864,10 @@ find_idx (struct locale_ctype_t *ctype, u32_t **table, size_t *max,
|
||||
ctype->charnames[ctype->charnames_act++] = idx;
|
||||
}
|
||||
|
||||
if (table == NULL)
|
||||
/* We have done everything we are asked to do. */
|
||||
return NULL;
|
||||
|
||||
if (cnt >= *act)
|
||||
{
|
||||
if (cnt >= *max)
|
||||
@ -1126,7 +1154,7 @@ character `%s' not defined while needed as default value"),
|
||||
|
||||
|
||||
static void
|
||||
allocate_arrays (struct locale_ctype_t *ctype)
|
||||
allocate_arrays (struct locale_ctype_t *ctype, struct charset_t *charset)
|
||||
{
|
||||
size_t idx;
|
||||
|
||||
@ -1182,6 +1210,7 @@ Computing table size for character classes might take a while..."),
|
||||
|
||||
fprintf (stderr, _(" done\n"));
|
||||
|
||||
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
# define NAMES_B1 ctype->names_el
|
||||
# define NAMES_B2 ctype->names_eb
|
||||
@ -1246,8 +1275,9 @@ Computing table size for character classes might take a while..."),
|
||||
ctype->ctype_b[128 + ctype->charnames[idx]]
|
||||
= TRANS (ctype->class_collection[idx]);
|
||||
|
||||
/* Mirror first 128 entries. */
|
||||
for (idx = 0; idx < 128; ++idx)
|
||||
/* Mirror first 127 entries. We must take care that entry -1 is not
|
||||
mirrored because EOF == -1. */
|
||||
for (idx = 0; idx < 127; ++idx)
|
||||
ctype->ctype_b[idx] = ctype->ctype_b[256 + idx];
|
||||
|
||||
/* The 32 bit array contains all characters. */
|
||||
@ -1292,10 +1322,13 @@ Computing table size for character classes might take a while..."),
|
||||
MAP_B1[idx][128 + ctype->charnames[idx2]] =
|
||||
ctype->map_collection[idx][idx2];
|
||||
|
||||
/* Mirror first 128 entries. */
|
||||
for (idx2 = 0; idx2 < 128; ++idx2)
|
||||
/* Mirror first 127 entries. We must take care not to map entry
|
||||
-1 because EOF == -1. */
|
||||
for (idx2 = 0; idx2 < 127; ++idx2)
|
||||
MAP_B1[idx][idx2] = MAP_B1[idx][256 + idx2];
|
||||
|
||||
/* EOF must map to EOF. */
|
||||
MAP_B1[idx][127] = EOF;
|
||||
|
||||
/* And now the other byte order. */
|
||||
for (idx2 = 0; idx2 < ctype->plane_size * ctype->plane_cnt + 128; ++idx2)
|
||||
@ -1307,4 +1340,33 @@ Computing table size for character classes might take a while..."),
|
||||
* sizeof (u32_t));
|
||||
ctype->map_name_ptr = (u32_t *) xmalloc (ctype->map_collection_nr
|
||||
* sizeof (u32_t));
|
||||
|
||||
/* Array for width information. Because the expected width are very
|
||||
small we use only one single byte. This save space and we need
|
||||
not provide the information twice with both endianesses. */
|
||||
ctype->width = (unsigned char *) xmalloc (ctype->plane_size
|
||||
* ctype->plane_cnt);
|
||||
/* Initialize with default width value. */
|
||||
memset (ctype->width, charset->width_default,
|
||||
ctype->plane_size * ctype->plane_cnt);
|
||||
if (charset->width_rules != NULL)
|
||||
{
|
||||
size_t cnt;
|
||||
|
||||
for (cnt = 0; cnt < charset->nwidth_rules; ++cnt)
|
||||
if (charset->width_rules[cnt].width != charset->width_default)
|
||||
for (idx = charset->width_rules[cnt].from;
|
||||
idx <= charset->width_rules[cnt].to; ++idx)
|
||||
{
|
||||
size_t nr = idx % ctype->plane_size;
|
||||
size_t depth = 0;
|
||||
|
||||
while (NAMES_B1[nr + depth * ctype->plane_size] != nr)
|
||||
++depth;
|
||||
assert (depth < ctype->plane_cnt);
|
||||
|
||||
ctype->width[nr + depth * ctype->plane_size]
|
||||
= charset->width_rules[cnt].width;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -231,7 +231,7 @@ main (int argc, char *argv[])
|
||||
for (act_add_locdef = copy_list; act_add_locdef != NULL;
|
||||
act_add_locdef = act_add_locdef->next)
|
||||
{
|
||||
for (cat = LC_COLLATE; cat <= LC_MESSAGES; ++cat)
|
||||
for (cat = LC_CTYPE; cat <= LC_MESSAGES; ++cat)
|
||||
if ((act_add_locdef->mask & (1 << cat)) != 0)
|
||||
{
|
||||
act_add_locdef->mask &= ~(1 << cat);
|
||||
@ -335,7 +335,7 @@ cannot `stat' locale file `%s'"),
|
||||
error (4, cannot_write_why, _("cannot write output files to `%s'"),
|
||||
output_path);
|
||||
else
|
||||
write_all_categories (localedef, output_path);
|
||||
write_all_categories (localedef, charset, output_path);
|
||||
}
|
||||
else
|
||||
error (4, 0, _("no output file produced because warning were issued"));
|
||||
|
@ -79,129 +79,130 @@ charclass_to_bit (enum token_t tok)
|
||||
|
||||
/* Remember name of newly created charclass. */
|
||||
void ctype_startup (struct linereader *lr, struct localedef_t *locale,
|
||||
struct charset_t *__charset);
|
||||
void ctype_finish (struct localedef_t *__locale, struct charset_t *__charset);
|
||||
struct charset_t *charset);
|
||||
void ctype_finish (struct localedef_t *locale, struct charset_t *charset);
|
||||
|
||||
void ctype_output (struct localedef_t *locale, const char *output_path);
|
||||
void ctype_output (struct localedef_t *locale, struct charset_t *charset,
|
||||
const char *output_path);
|
||||
|
||||
int ctype_is_charclass (struct linereader *lr, struct localedef_t *locale,
|
||||
const char *__name);
|
||||
const char *name);
|
||||
void ctype_class_new (struct linereader *lr, struct localedef_t *locale,
|
||||
enum token_t __tok, struct token *__code,
|
||||
struct charset_t *__charset);
|
||||
enum token_t tok, struct token *code,
|
||||
struct charset_t *charset);
|
||||
void ctype_class_start (struct linereader *lr, struct localedef_t *locale,
|
||||
enum token_t __tok, const char *__name,
|
||||
struct charset_t *__charset);
|
||||
enum token_t tok, const char *name,
|
||||
struct charset_t *charset);
|
||||
void ctype_class_from (struct linereader *lr, struct localedef_t *locale,
|
||||
struct token *__code, struct charset_t *__charset);
|
||||
struct token *code, struct charset_t *charset);
|
||||
void ctype_class_to (struct linereader *lr, struct localedef_t *locale,
|
||||
struct token *__code, struct charset_t *__charset);
|
||||
struct token *code, struct charset_t *charset);
|
||||
void ctype_class_end (struct linereader *lr, struct localedef_t *locale);
|
||||
|
||||
int ctype_is_charmap (struct linereader *lr, struct localedef_t *locale,
|
||||
const char *__name);
|
||||
const char *name);
|
||||
void ctype_map_new (struct linereader *lr, struct localedef_t *locale,
|
||||
enum token_t __tok, struct token *__code,
|
||||
struct charset_t *__charset);
|
||||
enum token_t tok, struct token *code,
|
||||
struct charset_t *charset);
|
||||
void ctype_map_start (struct linereader *lr, struct localedef_t *locale,
|
||||
enum token_t __tok, const char *__name,
|
||||
struct charset_t *__charset);
|
||||
enum token_t tok, const char *name,
|
||||
struct charset_t *charset);
|
||||
void ctype_map_from (struct linereader *lr, struct localedef_t *locale,
|
||||
struct token *__code, struct charset_t *__charset);
|
||||
struct token *code, struct charset_t *charset);
|
||||
void ctype_map_to (struct linereader *lr, struct localedef_t *locale,
|
||||
struct token *__code, struct charset_t *__charset);
|
||||
struct token *code, struct charset_t *charset);
|
||||
void ctype_map_end (struct linereader *lr, struct localedef_t *locale);
|
||||
|
||||
|
||||
/* Handle LC_COLLATE category. */
|
||||
|
||||
void collate_startup (struct linereader *__lr, struct localedef_t *__locale,
|
||||
struct charset_t *__charset);
|
||||
void collate_startup (struct linereader *lr, struct localedef_t *locale,
|
||||
struct charset_t *charset);
|
||||
|
||||
void collate_finish (struct localedef_t *__locale,
|
||||
struct charset_t *__charset);
|
||||
void collate_finish (struct localedef_t *locale,
|
||||
struct charset_t *charset);
|
||||
|
||||
void collate_output (struct localedef_t *locale, const char *output_path);
|
||||
|
||||
void collate_element_to (struct linereader *__lr, struct localedef_t *__locale,
|
||||
struct token *__code, struct charset_t *__charset);
|
||||
void collate_element_from (struct linereader *__lr,
|
||||
struct localedef_t *__locale, struct token *__code,
|
||||
struct charset_t *__charset);
|
||||
void collate_symbol (struct linereader *__lr, struct localedef_t *__locale,
|
||||
struct token *__code, struct charset_t *__charset);
|
||||
void collate_new_order (struct linereader *__lr, struct localedef_t *__locale,
|
||||
enum coll_sort_rule __sort_rule);
|
||||
void collate_build_arrays (struct linereader *__lr,
|
||||
struct localedef_t *__locale);
|
||||
int collate_order_elem (struct linereader *__lr, struct localedef_t *__locale,
|
||||
struct token *__code, struct charset_t *__charset);
|
||||
int collate_weight_bsymbol (struct linereader *__lr,
|
||||
struct localedef_t *__locale,
|
||||
struct token *__code, struct charset_t *__charset);
|
||||
int collate_next_weight (struct linereader *__lr,
|
||||
struct localedef_t *__locale);
|
||||
int collate_simple_weight (struct linereader *__lr,
|
||||
struct localedef_t *__locale,
|
||||
struct token *__code, struct charset_t *__charset);
|
||||
void collate_end_weight (struct linereader *__lr,
|
||||
struct localedef_t *__locale);
|
||||
void collate_element_to (struct linereader *lr, struct localedef_t *locale,
|
||||
struct token *code, struct charset_t *charset);
|
||||
void collate_element_from (struct linereader *lr,
|
||||
struct localedef_t *locale, struct token *code,
|
||||
struct charset_t *charset);
|
||||
void collate_symbol (struct linereader *lr, struct localedef_t *locale,
|
||||
struct token *code, struct charset_t *charset);
|
||||
void collate_new_order (struct linereader *lr, struct localedef_t *locale,
|
||||
enum coll_sort_rule sort_rule);
|
||||
void collate_build_arrays (struct linereader *lr,
|
||||
struct localedef_t *locale);
|
||||
int collate_order_elem (struct linereader *lr, struct localedef_t *locale,
|
||||
struct token *code, struct charset_t *charset);
|
||||
int collate_weight_bsymbol (struct linereader *lr,
|
||||
struct localedef_t *locale,
|
||||
struct token *code, struct charset_t *charset);
|
||||
int collate_next_weight (struct linereader *lr,
|
||||
struct localedef_t *locale);
|
||||
int collate_simple_weight (struct linereader *lr,
|
||||
struct localedef_t *locale,
|
||||
struct token *code, struct charset_t *charset);
|
||||
void collate_end_weight (struct linereader *lr,
|
||||
struct localedef_t *locale);
|
||||
|
||||
|
||||
/* Handle LC_MONETARY category. */
|
||||
|
||||
void monetary_startup (struct linereader *__lr, struct localedef_t *__locale,
|
||||
struct charset_t *__charset);
|
||||
void monetary_startup (struct linereader *lr, struct localedef_t *locale,
|
||||
struct charset_t *charset);
|
||||
|
||||
void monetary_finish (struct localedef_t *__locale);
|
||||
void monetary_finish (struct localedef_t *locale);
|
||||
|
||||
void monetary_output (struct localedef_t *locale, const char *output_path);
|
||||
|
||||
void monetary_add (struct linereader *lr, struct localedef_t *locale,
|
||||
enum token_t __tok, struct token *__code,
|
||||
struct charset_t *__charset);
|
||||
enum token_t tok, struct token *code,
|
||||
struct charset_t *charset);
|
||||
|
||||
|
||||
/* Handle LC_NUMERIC category. */
|
||||
|
||||
void numeric_startup (struct linereader *__lr, struct localedef_t *__locale,
|
||||
struct charset_t *__charset);
|
||||
void numeric_startup (struct linereader *lr, struct localedef_t *locale,
|
||||
struct charset_t *charset);
|
||||
|
||||
void numeric_finish (struct localedef_t *__locale);
|
||||
void numeric_finish (struct localedef_t *locale);
|
||||
|
||||
void numeric_output (struct localedef_t *locale, const char *output_path);
|
||||
|
||||
void numeric_add (struct linereader *lr, struct localedef_t *locale,
|
||||
enum token_t __tok, struct token *__code,
|
||||
struct charset_t *__charset);
|
||||
enum token_t tok, struct token *code,
|
||||
struct charset_t *charset);
|
||||
|
||||
|
||||
/* Handle LC_TIME category. */
|
||||
|
||||
void time_startup (struct linereader *__lr, struct localedef_t *__locale,
|
||||
struct charset_t *__charset);
|
||||
void time_startup (struct linereader *lr, struct localedef_t *locale,
|
||||
struct charset_t *charset);
|
||||
|
||||
void time_finish (struct localedef_t *__locale);
|
||||
void time_finish (struct localedef_t *locale);
|
||||
|
||||
void time_output (struct localedef_t *locale, const char *output_path);
|
||||
|
||||
void time_add (struct linereader *lr, struct localedef_t *locale,
|
||||
enum token_t __tok, struct token *__code,
|
||||
struct charset_t *__charset);
|
||||
enum token_t tok, struct token *code,
|
||||
struct charset_t *charset);
|
||||
|
||||
|
||||
/* Handle LC_MESSAGES category. */
|
||||
|
||||
void messages_startup (struct linereader *__lr, struct localedef_t *__locale,
|
||||
struct charset_t *__charset);
|
||||
void messages_startup (struct linereader *lr, struct localedef_t *locale,
|
||||
struct charset_t *charset);
|
||||
|
||||
void messages_finish (struct localedef_t *__locale);
|
||||
void messages_finish (struct localedef_t *locale);
|
||||
|
||||
void messages_output (struct localedef_t *locale, const char *output_path);
|
||||
|
||||
void messages_add (struct linereader *lr, struct localedef_t *locale,
|
||||
enum token_t __tok, struct token *__code,
|
||||
struct charset_t *__charset);
|
||||
enum token_t tok, struct token *code,
|
||||
struct charset_t *charset);
|
||||
|
||||
|
||||
#endif /* locales.h */
|
||||
|
@ -25,6 +25,7 @@ Boston, MA 02111-1307, USA. */
|
||||
#include <fcntl.h>
|
||||
#include <locale.h>
|
||||
#include <malloc.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/stat.h>
|
||||
@ -913,10 +914,11 @@ check_all_categories (struct localedef_t *locale, struct charset_t *charset)
|
||||
|
||||
|
||||
void
|
||||
write_all_categories (struct localedef_t *locale, const char *output_path)
|
||||
write_all_categories (struct localedef_t *locale, struct charset_t *charset,
|
||||
const char *output_path)
|
||||
{
|
||||
/* Call all functions to write locale data. */
|
||||
ctype_output (locale, output_path);
|
||||
ctype_output (locale, charset, output_path);
|
||||
collate_output (locale, output_path);
|
||||
monetary_output (locale, output_path);
|
||||
numeric_output (locale, output_path);
|
||||
|
@ -66,7 +66,7 @@ void check_all_categories (struct localedef_t *locale,
|
||||
struct charset_t *charset);
|
||||
|
||||
void write_all_categories (struct localedef_t *locale,
|
||||
const char *output_path);
|
||||
struct charset_t *charset, const char *output_path);
|
||||
|
||||
|
||||
void write_locale_data (const char *output_path, const char *category,
|
||||
|
@ -41,6 +41,9 @@ static struct conf vars[] =
|
||||
{ "_POSIX_CHOWN_RESTRICTED", _PC_CHOWN_RESTRICTED, PATHCONF },
|
||||
{ "_POSIX_NO_TRUNC", _PC_NO_TRUNC, PATHCONF },
|
||||
{ "_POSIX_VDISABLE", _PC_VDISABLE, PATHCONF },
|
||||
{ "_POSIX_SYNC_IO", _PC_SYNC_IO, PATHCONF },
|
||||
{ "_POSIX_ASYNC_IO", _PC_ASYNC_IO, PATHCONF },
|
||||
{ "_POSIX_PRIO_IO", _PC_PRIO_IO, PATHCONF },
|
||||
|
||||
{ "ARG_MAX", _SC_ARG_MAX, SYSCONF },
|
||||
{ "CHILD_MAX", _SC_CHILD_MAX, SYSCONF },
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 1996 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
|
||||
@ -22,31 +22,34 @@ Cambridge, MA 02139, USA. */
|
||||
|
||||
|
||||
/* The maximum `ibase' and `obase' values allowed by the `bc' utility. */
|
||||
#define _POSIX2_BC_BASE_MAX 99
|
||||
#define _POSIX2_BC_BASE_MAX 99
|
||||
|
||||
/* The maximum number of elements allowed in an array by the `bc' utility. */
|
||||
#define _POSIX2_BC_DIM_MAX 2048
|
||||
#define _POSIX2_BC_DIM_MAX 2048
|
||||
|
||||
/* The maximum `scale' value allowed by the `bc' utility. */
|
||||
#define _POSIX2_BC_SCALE_MAX 99
|
||||
#define _POSIX2_BC_SCALE_MAX 99
|
||||
|
||||
/* The maximum length of a string constant accepted by the `bc' utility. */
|
||||
#define _POSIX2_BC_STRING_MAX 1000
|
||||
#define _POSIX2_BC_STRING_MAX 1000
|
||||
|
||||
/* The maximum number of weights that can be assigned to an entry of
|
||||
the LC_COLLATE category `order' keyword in a locale definition. */
|
||||
#define _POSIX2_EQUIV_CLASS_MAX 2
|
||||
#define _POSIX2_EQUIV_CLASS_MAX 2
|
||||
|
||||
/* The maximum number of expressions that can be nested
|
||||
within parentheses by the `expr' utility. */
|
||||
#define _POSIX2_EXPR_NEST_MAX 32
|
||||
#define _POSIX2_EXPR_NEST_MAX 32
|
||||
|
||||
/* The maximum length, in bytes, of an input line. */
|
||||
#define _POSIX2_LINE_MAX 2048
|
||||
#define _POSIX2_LINE_MAX 2048
|
||||
|
||||
/* The maximum number of repeated occurrences of a regular expression
|
||||
permitted when using the interval notation `\{M,N\}'. */
|
||||
#define _POSIX2_RE_DUP_MAX 255
|
||||
#define _POSIX2_RE_DUP_MAX 255
|
||||
|
||||
/* The manimum number of bytes in a character class name. */
|
||||
#define _POSIX2_CHARCLASS_NAME_MAX 14
|
||||
|
||||
|
||||
/* These values are implementation-specific,
|
||||
@ -54,28 +57,31 @@ Cambridge, MA 02139, USA. */
|
||||
Their precise values can be obtained from sysconf. */
|
||||
|
||||
#ifndef BC_BASE_MAX
|
||||
#define BC_BASE_MAX _POSIX2_BC_BASE_MAX
|
||||
#define BC_BASE_MAX _POSIX2_BC_BASE_MAX
|
||||
#endif
|
||||
#ifndef BC_DIM_MAX
|
||||
#define BC_DIM_MAX _POSIX2_BC_DIM_MAX
|
||||
#define BC_DIM_MAX _POSIX2_BC_DIM_MAX
|
||||
#endif
|
||||
#ifndef BC_SCALE_MAX
|
||||
#define BC_SCALE_MAX _POSIX2_BC_SCALE_MAX
|
||||
#define BC_SCALE_MAX _POSIX2_BC_SCALE_MAX
|
||||
#endif
|
||||
#ifndef BC_STRING_MAX
|
||||
#define BC_STRING_MAX _POSIX2_BC_STRING_MAX
|
||||
#define BC_STRING_MAX _POSIX2_BC_STRING_MAX
|
||||
#endif
|
||||
#ifndef EQUIV_CLASS_MAX
|
||||
#define EQUIV_CLASS_MAX _POSIX2_EQUIV_CLASS_MAX
|
||||
#define EQUIV_CLASS_MAX _POSIX2_EQUIV_CLASS_MAX
|
||||
#endif
|
||||
#ifndef EXPR_NEST_MAX
|
||||
#define EXPR_NEST_MAX _POSIX2_EXPR_NEST_MAX
|
||||
#define EXPR_NEST_MAX _POSIX2_EXPR_NEST_MAX
|
||||
#endif
|
||||
#ifndef LINE_MAX
|
||||
#define LINE_MAX _POSIX2_LINE_MAX
|
||||
#define LINE_MAX _POSIX2_LINE_MAX
|
||||
#endif
|
||||
#ifndef RE_DUP_MAX
|
||||
#define RE_DUP_MAX _POSIX2_RE_DUP_MAX
|
||||
#define RE_DUP_MAX _POSIX2_RE_DUP_MAX
|
||||
#endif
|
||||
#ifndef CHARCLASS_NAME_MAX
|
||||
#define CHARCLASS_NAME_MAX _POSIX2_CHARCLASS_NAME_MAX
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -30,8 +30,9 @@ __BEGIN_DECLS
|
||||
/* These may be used to determine what facilities are present at compile time.
|
||||
Their values can be obtained at run time from sysconf. */
|
||||
|
||||
/* POSIX Standard approved as IEEE Std 1003.1 as of August, 1988. */
|
||||
#define _POSIX_VERSION 199009L
|
||||
/* POSIX Standard approved as IEEE Std 1003.1 as of August, 1988 and
|
||||
extended by P1003.1b (aka POSIX.4). */
|
||||
#define _POSIX_VERSION 199309L
|
||||
|
||||
/* These are not #ifdef __USE_POSIX2 because they are
|
||||
in the theoretically application-owned namespace. */
|
||||
@ -94,6 +95,9 @@ __BEGIN_DECLS
|
||||
`c_cc' member of `struct termios' is
|
||||
_POSIX_VDISABLE, no character will have the
|
||||
effect associated with that element.
|
||||
_POSIX_SYNC_IO Synchronous I/O may be performed.
|
||||
_POSIX_ASYNC_IO Asynchronous I/O may be performed.
|
||||
_POSIX_PRIO_IO Prioritized Asynchronous I/O may be performed.
|
||||
*/
|
||||
|
||||
#include <posix_opt.h>
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* Internal header for proving correct grouping in strings of numbers.
|
||||
Copyright (C) 1995 Free Software Foundation, Inc.
|
||||
Contributed by Ulrich Drepper.
|
||||
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
||||
|
||||
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
|
||||
@ -28,16 +28,16 @@ Cambridge, MA 02139, USA. */
|
||||
satisfies the grouping rules. It is assumed that at least one digit
|
||||
follows BEGIN directly. */
|
||||
|
||||
static inline const char *
|
||||
correctly_grouped_prefix (const char *begin, const char *end,
|
||||
static inline const STRING_TYPE *
|
||||
correctly_grouped_prefix (const STRING_TYPE *begin, const STRING_TYPE *end,
|
||||
wchar_t thousands, const char *grouping)
|
||||
{
|
||||
if (! grouping)
|
||||
if (grouping == NULL)
|
||||
return end;
|
||||
|
||||
while (end > begin)
|
||||
{
|
||||
const char *cp = end - 1;
|
||||
const STRING_TYPE *cp = end - 1;
|
||||
const char *gp = grouping;
|
||||
|
||||
/* Check first group. */
|
||||
@ -48,7 +48,7 @@ correctly_grouped_prefix (const char *begin, const char *end,
|
||||
{
|
||||
/* This group matches the specification. */
|
||||
|
||||
const char *new_end;
|
||||
const STRING_TYPE *new_end;
|
||||
|
||||
if (cp < begin)
|
||||
/* There is just one complete group. We are done. */
|
||||
@ -66,7 +66,7 @@ correctly_grouped_prefix (const char *begin, const char *end,
|
||||
/* Get the next grouping rule. */
|
||||
++gp;
|
||||
if (*gp == 0)
|
||||
/* If end is reached use last rule. */
|
||||
/* If end is reached use last rule. */
|
||||
--gp;
|
||||
|
||||
/* Skip the thousands separator. */
|
||||
@ -85,7 +85,7 @@ correctly_grouped_prefix (const char *begin, const char *end,
|
||||
else
|
||||
{
|
||||
/* Check the next group. */
|
||||
const char *group_end = cp;
|
||||
const STRING_TYPE *group_end = cp;
|
||||
|
||||
while (cp >= begin && (wchar_t) *cp != thousands)
|
||||
--cp;
|
||||
@ -120,4 +120,4 @@ correctly_grouped_prefix (const char *begin, const char *end,
|
||||
}
|
||||
|
||||
return MAX (begin, end);
|
||||
}
|
||||
}
|
||||
|
@ -102,22 +102,26 @@ extern unsigned long long int strtouq __P ((__const char *__nptr,
|
||||
/* The internal entry points for `strtoX' take an extra flag argument
|
||||
saying whether or not to parse locale-dependent number grouping. */
|
||||
|
||||
extern double __strtod_internal (__const char *__nptr,
|
||||
char **__endptr, int __group);
|
||||
extern float __strtof_internal (__const char *__nptr, char **__endptr,
|
||||
int __group);
|
||||
extern __long_double_t __strtold_internal (__const char *__nptr,
|
||||
char **__endptr, int __group);
|
||||
extern long int __strtol_internal (__const char *__nptr, char **__endptr,
|
||||
int __base, int __group);
|
||||
extern unsigned long int __strtoul_internal (__const char *__nptr,
|
||||
char **__endptr, int __base,
|
||||
int __group);
|
||||
extern long long int __strtoq_internal (__const char *__nptr, char **__endptr,
|
||||
int __base, int __group);
|
||||
extern unsigned long long int __strtouq_internal (__const char *__nptr,
|
||||
extern double __strtod_internal __P ((__const char *__nptr,
|
||||
char **__endptr, int __group));
|
||||
extern float __strtof_internal __P ((__const char *__nptr, char **__endptr,
|
||||
int __group));
|
||||
extern __long_double_t __strtold_internal __P ((__const char *__nptr,
|
||||
char **__endptr, int __group));
|
||||
extern long int __strtol_internal __P ((__const char *__nptr, char **__endptr,
|
||||
int __base, int __group));
|
||||
extern unsigned long int __strtoul_internal __P ((__const char *__nptr,
|
||||
char **__endptr, int __base,
|
||||
int __group);
|
||||
int __group));
|
||||
#ifdef __GNUC__
|
||||
extern long long int __strtoq_internal __P ((__const char *__nptr,
|
||||
char **__endptr, int __base,
|
||||
int __group));
|
||||
extern unsigned long long int __strtouq_internal __P ((__const char *__nptr,
|
||||
char **__endptr,
|
||||
int __base,
|
||||
int __group));
|
||||
#endif /* GCC */
|
||||
|
||||
#if defined (__OPTIMIZE__) && __GNUC__ >= 2
|
||||
/* Define inline functions which call the internal entry points. */
|
||||
@ -143,7 +147,7 @@ extern __inline long long int strtoq (__const char *__nptr, char **__endptr,
|
||||
int __base)
|
||||
{ return __strtoq_internal (__nptr, __endptr, __base, 0); }
|
||||
extern __inline unsigned long long int strtouq (__const char *__nptr,
|
||||
char **__endptr, int __base)
|
||||
char **__endptr, int __base)
|
||||
{ return __strtouq_internal (__nptr, __endptr, __base, 0); }
|
||||
#endif
|
||||
|
||||
|
126
stdlib/strtod.c
126
stdlib/strtod.c
@ -1,6 +1,6 @@
|
||||
/* Read decimal floating point numbers.
|
||||
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
Contributed by Ulrich Drepper.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
||||
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
@ -15,18 +15,39 @@ 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., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
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. */
|
||||
|
||||
/* Configuration part. These macros are defined by `strtold.c' and `strtof.c'
|
||||
to produce the `long double' and `float' versions of the reader. */
|
||||
/* Configuration part. These macros are defined by `strtold.c',
|
||||
`strtof.c', `wcstod.c', `wcstold.c', and `wcstof.c' to produce the
|
||||
`long double' and `float' versions of the reader. */
|
||||
#ifndef FLOAT
|
||||
#define FLOAT double
|
||||
#define FLT DBL
|
||||
#define STRTOF strtod
|
||||
#define MPN2FLOAT __mpn_construct_double
|
||||
#define FLOAT_HUGE_VAL HUGE_VAL
|
||||
# define FLOAT double
|
||||
# define FLT DBL
|
||||
# ifdef USE_WIDE_CHAR
|
||||
# define STRTOF wcstod
|
||||
# else
|
||||
# define STRTOF strtod
|
||||
# endif
|
||||
# define MPN2FLOAT __mpn_construct_double
|
||||
# define FLOAT_HUGE_VAL HUGE_VAL
|
||||
#endif
|
||||
|
||||
#ifdef USE_WIDE_CHAR
|
||||
# include <wctype.h>
|
||||
# include <wchar.h>
|
||||
# define STRING_TYPE wchar_t
|
||||
# define CHAR_TYPE wint_t
|
||||
# define L_(Ch) L##Ch
|
||||
# define ISSPACE(Ch) iswspace (Ch)
|
||||
# define TOLOWER(Ch) towlower (Ch)
|
||||
#else
|
||||
# define STRING_TYPE char
|
||||
# define CHAR_TYPE char
|
||||
# define L_(Ch) Ch
|
||||
# define ISSPACE(Ch) isspace (Ch)
|
||||
# define TOLOWER(Ch) tolower (Ch)
|
||||
#endif
|
||||
/* End of configuration part. */
|
||||
|
||||
@ -103,8 +124,9 @@ static const mp_limb _tens_in_limb[MAX_DIG_PER_LIMB + 1] =
|
||||
#define NDIG (MAX_10_EXP - MIN_10_EXP + 2 * MANT_DIG)
|
||||
#define RETURN_LIMB_SIZE howmany (MANT_DIG, BITS_PER_MP_LIMB)
|
||||
|
||||
#define RETURN(val,end) \
|
||||
do { if (endptr != 0) *endptr = (char *) (end); return val; } while (0)
|
||||
#define RETURN(val,end) \
|
||||
do { if (endptr != NULL) *endptr = (STRING_TYPE *) (end); \
|
||||
return val; } while (0)
|
||||
|
||||
/* Maximum size necessary for mpn integers to hold floating point numbers. */
|
||||
#define MPNSIZE (howmany (MAX_EXP + 2 * MANT_DIG, BITS_PER_MP_LIMB) \
|
||||
@ -206,8 +228,8 @@ round_and_return (mp_limb *retval, int exponent, int negative,
|
||||
character od the string that is not part of the integer as the function
|
||||
value. If the EXPONENT is small enough to be taken as an additional
|
||||
factor for the resulting number (see code) multiply by it. */
|
||||
static inline const char *
|
||||
str_to_mpn (const char *str, int digcnt, mp_limb *n, mp_size_t *nsize,
|
||||
static inline const STRING_TYPE *
|
||||
str_to_mpn (const STRING_TYPE *str, int digcnt, mp_limb *n, mp_size_t *nsize,
|
||||
int *exponent)
|
||||
{
|
||||
/* Number of digits for actual limb. */
|
||||
@ -239,9 +261,9 @@ str_to_mpn (const char *str, int digcnt, mp_limb *n, mp_size_t *nsize,
|
||||
/* There might be thousands separators or radix characters in the string.
|
||||
But these all can be ignored because we know the format of the number
|
||||
is correct and we have an exact number of characters to read. */
|
||||
while (!isdigit (*str))
|
||||
while (*str < L_('0') || *str > L_('9'))
|
||||
++str;
|
||||
low = low * 10 + *str++ - '0';
|
||||
low = low * 10 + *str++ - L_('0');
|
||||
++cnt;
|
||||
}
|
||||
while (--digcnt > 0);
|
||||
@ -311,8 +333,8 @@ __mpn_lshift_1 (mp_limb *ptr, mp_size_t size, unsigned int count, mp_limb limb)
|
||||
ERANGE and return HUGE_VAL with the approriate sign. */
|
||||
FLOAT
|
||||
INTERNAL (STRTOF) (nptr, endptr, group)
|
||||
const char *nptr;
|
||||
char **endptr;
|
||||
const STRING_TYPE *nptr;
|
||||
STRING_TYPE **endptr;
|
||||
int group;
|
||||
{
|
||||
int negative; /* The sign of the number. */
|
||||
@ -330,15 +352,15 @@ INTERNAL (STRTOF) (nptr, endptr, group)
|
||||
int bits;
|
||||
|
||||
/* Running pointer after the last character processed in the string. */
|
||||
const char *cp, *tp;
|
||||
const STRING_TYPE *cp, *tp;
|
||||
/* Start of significant part of the number. */
|
||||
const char *startp, *start_of_digits;
|
||||
const STRING_TYPE *startp, *start_of_digits;
|
||||
/* Points at the character following the integer and fractional digits. */
|
||||
const char *expp;
|
||||
const STRING_TYPE *expp;
|
||||
/* Total number of digit and number of digits in integer part. */
|
||||
int dig_no, int_no, lead_zero;
|
||||
/* Contains the last character read. */
|
||||
char c;
|
||||
CHAR_TYPE c;
|
||||
|
||||
/* The radix character of the current locale. */
|
||||
wchar_t decimal;
|
||||
@ -386,32 +408,33 @@ INTERNAL (STRTOF) (nptr, endptr, group)
|
||||
/* Ignore leading white space. */
|
||||
do
|
||||
c = *++cp;
|
||||
while (isspace (c));
|
||||
while (ISSPACE (c));
|
||||
|
||||
/* Get sign of the result. */
|
||||
if (c == '-')
|
||||
if (c == L_('-'))
|
||||
{
|
||||
negative = 1;
|
||||
c = *++cp;
|
||||
}
|
||||
else if (c == '+')
|
||||
else if (c == L_('+'))
|
||||
c = *++cp;
|
||||
|
||||
/* Return 0.0 if no legal string is found.
|
||||
No character is used even if a sign was found. */
|
||||
if (!isdigit (c) && (c != decimal || !isdigit (cp[1])))
|
||||
if ((c < L_('0') || c > L_('9'))
|
||||
&& (c != decimal || cp[1] < L_('0') || cp[1] > L_('9')))
|
||||
RETURN (0.0, nptr);
|
||||
|
||||
/* Record the start of the digits, in case we will check their grouping. */
|
||||
start_of_digits = startp = cp;
|
||||
|
||||
/* Ignore leading zeroes. This helps us to avoid useless computations. */
|
||||
while (c == '0' || (thousands != L'\0' && c == thousands))
|
||||
while (c == L_('0') || (thousands != L'\0' && c == thousands))
|
||||
c = *++cp;
|
||||
|
||||
/* If no other digit but a '0' is found the result is 0.0.
|
||||
Return current read pointer. */
|
||||
if (!isdigit (c) && c != decimal)
|
||||
if ((c < L_('0') || c > L_('9')) && c != decimal)
|
||||
{
|
||||
tp = correctly_grouped_prefix (start_of_digits, cp, thousands, grouping);
|
||||
/* If TP is at the start of the digits, there was no correctly
|
||||
@ -428,7 +451,7 @@ INTERNAL (STRTOF) (nptr, endptr, group)
|
||||
so we can check all the grouping separators. */
|
||||
grouping)
|
||||
{
|
||||
if (isdigit (c))
|
||||
if (c >= L_('0') && c <= L_('9'))
|
||||
++dig_no;
|
||||
else if (thousands == L'\0' || c != thousands)
|
||||
/* Not a digit or separator: end of the integer part. */
|
||||
@ -458,7 +481,7 @@ INTERNAL (STRTOF) (nptr, endptr, group)
|
||||
cp = tp;
|
||||
dig_no = 0;
|
||||
for (tp = startp; tp < cp; ++tp)
|
||||
if (isdigit (*tp))
|
||||
if (*tp >= L_('0') && *tp <= L_('9'))
|
||||
++dig_no;
|
||||
|
||||
int_no = dig_no;
|
||||
@ -481,31 +504,35 @@ INTERNAL (STRTOF) (nptr, endptr, group)
|
||||
/* Read the fractional digits. A special case are the 'american style'
|
||||
numbers like `16.' i.e. with decimal but without trailing digits. */
|
||||
if (c == decimal)
|
||||
while (isdigit (c = *++cp))
|
||||
{
|
||||
if (c != '0' && lead_zero == -1)
|
||||
lead_zero = dig_no - int_no;
|
||||
++dig_no;
|
||||
}
|
||||
{
|
||||
c = *++cp;
|
||||
while (c >= L_('0') && c <= L_('9'))
|
||||
{
|
||||
if (c != L_('0') && lead_zero == -1)
|
||||
lead_zero = dig_no - int_no;
|
||||
++dig_no;
|
||||
c = *++cp;
|
||||
}
|
||||
}
|
||||
|
||||
/* Remember start of exponent (if any). */
|
||||
expp = cp;
|
||||
|
||||
/* Read exponent. */
|
||||
if (tolower (c) == 'e')
|
||||
if (TOLOWER (c) == L_('e'))
|
||||
{
|
||||
int exp_negative = 0;
|
||||
|
||||
c = *++cp;
|
||||
if (c == '-')
|
||||
if (c == L_('-'))
|
||||
{
|
||||
exp_negative = 1;
|
||||
c = *++cp;
|
||||
}
|
||||
else if (c == '+')
|
||||
else if (c == L_('+'))
|
||||
c = *++cp;
|
||||
|
||||
if (isdigit (c))
|
||||
if (c >= L_('0') && c <= L_('9'))
|
||||
{
|
||||
int exp_limit;
|
||||
|
||||
@ -532,16 +559,16 @@ INTERNAL (STRTOF) (nptr, endptr, group)
|
||||
/* Accept all following digits as part of the exponent. */
|
||||
do
|
||||
++cp;
|
||||
while (isdigit (*cp));
|
||||
while (*cp >= L_('0') && *cp <= L_('9'));
|
||||
|
||||
RETURN (retval, cp);
|
||||
/* NOTREACHED */
|
||||
}
|
||||
|
||||
exponent += c - '0';
|
||||
exponent += c - L_('0');
|
||||
c = *++cp;
|
||||
}
|
||||
while (isdigit (c));
|
||||
while (c >= L_('0') && c <= L_('9'));
|
||||
|
||||
if (exp_negative)
|
||||
exponent = -exponent;
|
||||
@ -553,7 +580,7 @@ INTERNAL (STRTOF) (nptr, endptr, group)
|
||||
/* We don't want to have to work with trailing zeroes after the radix. */
|
||||
if (dig_no > int_no)
|
||||
{
|
||||
while (expp[-1] == '0')
|
||||
while (expp[-1] == L_('0'))
|
||||
{
|
||||
--expp;
|
||||
--dig_no;
|
||||
@ -565,7 +592,7 @@ INTERNAL (STRTOF) (nptr, endptr, group)
|
||||
|
||||
/* The whole string is parsed. Store the address of the next character. */
|
||||
if (endptr)
|
||||
*endptr = (char *) cp;
|
||||
*endptr = (STRING_TYPE *) cp;
|
||||
|
||||
if (dig_no == 0)
|
||||
return 0.0;
|
||||
@ -573,7 +600,8 @@ INTERNAL (STRTOF) (nptr, endptr, group)
|
||||
if (lead_zero)
|
||||
{
|
||||
/* Find the decimal point */
|
||||
while (*startp != decimal) startp++;
|
||||
while (*startp != decimal)
|
||||
++startp;
|
||||
startp += lead_zero + 1;
|
||||
exponent -= lead_zero;
|
||||
dig_no -= lead_zero;
|
||||
@ -1131,8 +1159,8 @@ INTERNAL (STRTOF) (nptr, endptr, group)
|
||||
|
||||
FLOAT
|
||||
STRTOF (nptr, endptr)
|
||||
const char *nptr;
|
||||
char **endptr;
|
||||
const STRING_TYPE *nptr;
|
||||
STRING_TYPE **endptr;
|
||||
{
|
||||
return INTERNAL (STRTOF) (nptr, endptr, 0);
|
||||
}
|
||||
|
109
stdlib/strtol.c
109
stdlib/strtol.c
@ -1,5 +1,4 @@
|
||||
/* Copyright (C) 1991, 1992, 1994, 1995, 1996 Free Software Foundation, Inc.
|
||||
|
||||
/* Copyright (C) 1991, 92, 94, 95, 96 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
|
||||
@ -56,18 +55,41 @@ extern int errno;
|
||||
# define UNSIGNED 0
|
||||
# define INT LONG int
|
||||
#else
|
||||
# define strtol strtoul
|
||||
# define INT unsigned LONG int
|
||||
#endif
|
||||
|
||||
/* Determine the name. */
|
||||
#if UNSIGNED
|
||||
# ifdef USE_WIDE_CHAR
|
||||
# ifdef QUAD
|
||||
# define strtol wcstouq
|
||||
# else
|
||||
# define strtol wcstoul
|
||||
# endif
|
||||
# else
|
||||
# ifdef QUAD
|
||||
# define strtol strtouq
|
||||
# else
|
||||
# define strtol strtoul
|
||||
# endif
|
||||
# endif
|
||||
#else
|
||||
# ifdef USE_WIDE_CHAR
|
||||
# ifdef QUAD
|
||||
# define strtol wcstoq
|
||||
# else
|
||||
# define strtol wcstol
|
||||
# endif
|
||||
# else
|
||||
# ifdef QUAD
|
||||
# define strtol strtoq
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* If QUAD is defined, we are defining `strtoq' or `strtouq',
|
||||
operating on `long long int's. */
|
||||
#ifdef QUAD
|
||||
# if UNSIGNED
|
||||
# define strtoul strtouq
|
||||
# else
|
||||
# define strtol strtoq
|
||||
# endif
|
||||
# define LONG long long
|
||||
# undef LONG_MIN
|
||||
# define LONG_MIN LONG_LONG_MIN
|
||||
@ -85,6 +107,24 @@ extern int errno;
|
||||
# define LONG long
|
||||
#endif
|
||||
|
||||
#ifdef USE_WIDE_CHAR
|
||||
# include <wchar.h>
|
||||
# include <wctype.h>
|
||||
# define L_(ch) L##ch
|
||||
# define UCHAR_TYPE wint_t
|
||||
# define STRING_TYPE wchar_t
|
||||
# define ISSPACE(ch) iswspace (ch)
|
||||
# define ISALPHA(ch) iswalpha (ch)
|
||||
# define TOUPPER(ch) towupper (ch)
|
||||
#else
|
||||
# define L_(ch) ch
|
||||
# define UCHAR_TYPE unsigned char
|
||||
# define STRING_TYPE char
|
||||
# define ISSPACE(ch) isspace (ch)
|
||||
# define ISALPHA(ch) isalpha (ch)
|
||||
# define TOUPPER(ch) toupper (ch)
|
||||
#endif
|
||||
|
||||
#ifdef __STDC__
|
||||
# define INTERNAL(x) INTERNAL1(x)
|
||||
# define INTERNAL1(x) __##x##_internal
|
||||
@ -107,8 +147,8 @@ extern int errno;
|
||||
|
||||
INT
|
||||
INTERNAL (strtol) (nptr, endptr, base, group)
|
||||
const char *nptr;
|
||||
char **endptr;
|
||||
const STRING_TYPE *nptr;
|
||||
STRING_TYPE **endptr;
|
||||
int base;
|
||||
int group;
|
||||
{
|
||||
@ -116,9 +156,9 @@ INTERNAL (strtol) (nptr, endptr, base, group)
|
||||
register unsigned LONG int cutoff;
|
||||
register unsigned int cutlim;
|
||||
register unsigned LONG int i;
|
||||
register const char *s;
|
||||
register unsigned char c;
|
||||
const char *save, *end;
|
||||
register const STRING_TYPE *s;
|
||||
register UCHAR_TYPE c;
|
||||
const STRING_TYPE *save, *end;
|
||||
int overflow;
|
||||
|
||||
#ifdef USE_NUMBER_GROUPING
|
||||
@ -153,18 +193,18 @@ INTERNAL (strtol) (nptr, endptr, base, group)
|
||||
save = s = nptr;
|
||||
|
||||
/* Skip white space. */
|
||||
while (isspace (*s))
|
||||
while (ISSPACE (*s))
|
||||
++s;
|
||||
if (*s == '\0')
|
||||
if (*s == L_('\0'))
|
||||
goto noconv;
|
||||
|
||||
/* Check for a sign. */
|
||||
if (*s == '-')
|
||||
if (*s == L_('-'))
|
||||
{
|
||||
negative = 1;
|
||||
++s;
|
||||
}
|
||||
else if (*s == '+')
|
||||
else if (*s == L_('+'))
|
||||
{
|
||||
negative = 0;
|
||||
++s;
|
||||
@ -172,14 +212,14 @@ INTERNAL (strtol) (nptr, endptr, base, group)
|
||||
else
|
||||
negative = 0;
|
||||
|
||||
if (base == 16 && s[0] == '0' && toupper (s[1]) == 'X')
|
||||
if (base == 16 && s[0] == L_('0') && TOUPPER (s[1]) == L_('X'))
|
||||
s += 2;
|
||||
|
||||
/* If BASE is zero, figure it out ourselves. */
|
||||
if (base == 0)
|
||||
if (*s == '0')
|
||||
if (*s == L_('0'))
|
||||
{
|
||||
if (toupper (s[1]) == 'X')
|
||||
if (TOUPPER (s[1]) == L_('X'))
|
||||
{
|
||||
s += 2;
|
||||
base = 16;
|
||||
@ -198,9 +238,9 @@ INTERNAL (strtol) (nptr, endptr, base, group)
|
||||
{
|
||||
/* Find the end of the digit string and check its grouping. */
|
||||
end = s;
|
||||
for (c = *end; c != '\0'; c = *++end)
|
||||
if (c != thousands && !isdigit (c) &&
|
||||
(!isalpha (c) || toupper (c) - 'A' + 10 >= base))
|
||||
for (c = *end; c != L_('\0'); c = *++end)
|
||||
if (c != thousands && (c < L_('0') || c > L_('9'))
|
||||
&& (!ISALPHA (c) || TOUPPER (c) - L_('A') + 10 >= base))
|
||||
break;
|
||||
if (*s == thousands)
|
||||
end = s;
|
||||
@ -216,14 +256,14 @@ INTERNAL (strtol) (nptr, endptr, base, group)
|
||||
|
||||
overflow = 0;
|
||||
i = 0;
|
||||
for (c = *s; c != '\0'; c = *++s)
|
||||
for (c = *s; c != L_('\0'); c = *++s)
|
||||
{
|
||||
if (s == end)
|
||||
break;
|
||||
if (isdigit (c))
|
||||
c -= '0';
|
||||
else if (isalpha (c))
|
||||
c = toupper (c) - 'A' + 10;
|
||||
if (c >= L_('0') && c <= L_('9'))
|
||||
c -= L_('0');
|
||||
else if (ISALPHA (c))
|
||||
c = TOUPPER (c) - L_('A') + 10;
|
||||
else
|
||||
break;
|
||||
if (c >= base)
|
||||
@ -245,7 +285,7 @@ INTERNAL (strtol) (nptr, endptr, base, group)
|
||||
/* Store in ENDPTR the address of one character
|
||||
past the last character we converted. */
|
||||
if (endptr != NULL)
|
||||
*endptr = (char *) s;
|
||||
*endptr = (STRING_TYPE *) s;
|
||||
|
||||
#if !UNSIGNED
|
||||
/* Check for a value that is within the range of
|
||||
@ -274,11 +314,12 @@ noconv:
|
||||
hexadecimal digits. This is no error case. We return 0 and
|
||||
ENDPTR points to the `x`. */
|
||||
if (endptr != NULL)
|
||||
if (save - nptr >= 2 && tolower (save[-1]) == 'x' && save[-2] == '0')
|
||||
*endptr = (char *) &save[-1];
|
||||
if (save - nptr >= 2 && TOUPPER (save[-1]) == L_('X')
|
||||
&& save[-2] == L_('0'))
|
||||
*endptr = (STRING_TYPE *) &save[-1];
|
||||
else
|
||||
/* There was no number to convert. */
|
||||
*endptr = (char *) nptr;
|
||||
*endptr = (STRING_TYPE *) nptr;
|
||||
|
||||
return 0L;
|
||||
}
|
||||
@ -287,8 +328,8 @@ noconv:
|
||||
|
||||
INT
|
||||
strtol (nptr, endptr, base)
|
||||
const char *nptr;
|
||||
char **endptr;
|
||||
const STRING_TYPE *nptr;
|
||||
STRING_TYPE **endptr;
|
||||
int base;
|
||||
{
|
||||
return INTERNAL (strtol) (nptr, endptr, base, 0);
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* Routines for dealing with '\0' separated environment vectors
|
||||
|
||||
Copyright (C) 1995 Free Software Foundation, Inc.
|
||||
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
|
||||
Written by Miles Bader <miles@gnu.ai.mit.edu>
|
||||
|
||||
@ -28,11 +28,11 @@
|
||||
#include <argz.h>
|
||||
|
||||
/* Returns a pointer to the entry in ENVZ for NAME, or 0 if there is none. */
|
||||
char *envz_entry (char *envz, unsigned envz_len, char *name);
|
||||
char *envz_entry (const char *envz, size_t envz_len, const char *name);
|
||||
|
||||
/* Returns a pointer to the value portion of the entry in ENVZ for NAME, or 0
|
||||
if there is none. */
|
||||
char *envz_get (char *envz, unsigned envz_len, char *name);
|
||||
char *envz_get (const char *envz, size_t envz_len, const char *name);
|
||||
|
||||
/* Adds an entry for NAME with value VALUE to ENVZ & ENVZ_LEN. If an entry
|
||||
with the same name already exists in ENVZ, it is removed. If VALUE is
|
||||
@ -40,16 +40,17 @@ char *envz_get (char *envz, unsigned envz_len, char *name);
|
||||
return NULL, although envz_entry will still return an entry; this is handy
|
||||
because when merging with another envz, the null entry can override an
|
||||
entry in the other one. Null entries can be removed with envz_strip (). */
|
||||
error_t envz_add (char **envz, unsigned *envz_len, char *name, char *value);
|
||||
error_t envz_add (char **envz, size_t *envz_len,
|
||||
const char *name, const char *value);
|
||||
|
||||
/* Adds each entry in ENVZ2 to ENVZ & ENVZ_LEN, as if with envz_add(). If
|
||||
OVERRIDE is true, then values in ENVZ2 will supercede those with the same
|
||||
name in ENV, otherwise not. */
|
||||
error_t
|
||||
envz_merge (char **envz, unsigned *envz_len, char *envz2, unsigned envz2_len,
|
||||
int override);
|
||||
error_t envz_merge (char **envz, size_t *envz_len,
|
||||
const char *envz2, size_t envz2_len,
|
||||
int override);
|
||||
|
||||
/* Remove null entries. */
|
||||
void envz_strip (char **envz, unsigned *envz_len);
|
||||
void envz_strip (char **envz, size_t *envz_len);
|
||||
|
||||
#endif /* __ENVZ_H__ */
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Written by Ulrich Drepper, <drepper@gnu.ai.mit.edu>.
|
||||
Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
||||
|
||||
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
|
||||
@ -25,6 +25,7 @@ Boston, MA 02111-1307, USA. */
|
||||
# define STRING_TYPE char
|
||||
# define USTRING_TYPE unsigned char
|
||||
# define STRCOLL strcoll
|
||||
# define STRCMP strcmp
|
||||
#endif
|
||||
|
||||
/* Include the shared helper functions. `strxfrm'/`wcsxfrm' also use
|
||||
@ -49,7 +50,7 @@ STRCOLL (s1, s2)
|
||||
/* If the current locale does not specify locale data we use normal
|
||||
8-bit string comparison. */
|
||||
if (collate_nrules == 0)
|
||||
return strcmp (s1, s2);
|
||||
return STRCMP (s1, s2);
|
||||
|
||||
/* Get full information about the strings. This means we get
|
||||
information for all passes in a special data structure. */
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Written by Ulrich Drepper, <drepper@gnu.ai.mit.edu>.
|
||||
Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
||||
|
||||
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
|
||||
@ -36,10 +36,7 @@ Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* Write 32 bit value UTF-8 encoded but only if enough space is left. */
|
||||
static __inline size_t
|
||||
print_val (u_int32_t value,
|
||||
STRING_TYPE *dest,
|
||||
size_t max,
|
||||
size_t act)
|
||||
print_val (u_int32_t value, STRING_TYPE *dest, size_t max, size_t act)
|
||||
{
|
||||
char tmp[6];
|
||||
int idx = 0;
|
||||
@ -101,10 +98,7 @@ print_val (u_int32_t value,
|
||||
their transformation. The transformed string is put in at
|
||||
most N characters of DEST and its length is returned. */
|
||||
size_t
|
||||
STRXFRM (dest, src, n)
|
||||
STRING_TYPE *dest;
|
||||
const STRING_TYPE *src;
|
||||
size_t n;
|
||||
STRXFRM (STRING_TYPE *dest, const STRING_TYPE *src, size_t n)
|
||||
{
|
||||
weight_t *forw = NULL;
|
||||
weight_t *backw = NULL;
|
||||
|
@ -36,7 +36,13 @@ enum
|
||||
#define _PC_CHOWN_RESTRICTED _PC_CHOWN_RESTRICTED
|
||||
_PC_NO_TRUNC,
|
||||
#define _PC_NO_TRUNC _PC_NO_TRUNC
|
||||
_PC_VDISABLE
|
||||
_PC_VDISABLE,
|
||||
_PC_SYNC_IO,
|
||||
#define _PC_SYNC_IO _PC_SYNC_IO
|
||||
_PC_ASYNC_IO,
|
||||
#define _PC_ASYNC_IO _PC_ASYNC_IO
|
||||
_PC_PRIO_IO
|
||||
#define _PC_PRIO_IO _PC_PRIO_IO
|
||||
};
|
||||
|
||||
/* Values for the argument to `sysconf'. */
|
||||
@ -113,6 +119,8 @@ enum
|
||||
#define _SC_LINE_MAX _SC_LINE_MAX
|
||||
_SC_RE_DUP_MAX,
|
||||
#define _SC_RE_DUP_MAX _SC_RE_DUP_MAX
|
||||
_SC_CHARCLASS_NAME_MAX,
|
||||
#define _SC_CHARCLASS_NAME_MAX _SC_CHARCLASS_NAME_MAX
|
||||
|
||||
_SC_2_VERSION,
|
||||
#define _SC_2_VERSION _SC_2_VERSION
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1993, 1995 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1993, 1995, 1996 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
|
||||
@ -67,7 +67,7 @@ DEFUN(__stpncpy, (dest, src, n), char *dest AND CONST char *src AND size_t n)
|
||||
last_chars:
|
||||
n &= 3;
|
||||
if (n == 0)
|
||||
return s;
|
||||
return dest;
|
||||
|
||||
do
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991, 1995 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 1995, 1996 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
|
||||
@ -107,6 +107,27 @@ DEFUN(__fpathconf, (fd, name), int fd AND int name)
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _PC_SYNC_IO:
|
||||
#ifdef _POSIX_SYNC_IO
|
||||
return _POSIX_SYNC_IO;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _PC_ASYNC_IO:
|
||||
#ifdef _POSIX_ASYNC_IO
|
||||
return _POSIX_ASYNC_IO;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _PC_PRIO_IO:
|
||||
#ifdef _POSIX_PRIO_IO
|
||||
return _POSIX_PRIO_IO;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
}
|
||||
|
||||
errno = ENOSYS;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991, 1993, 1995 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 1993, 1995, 1996 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
|
||||
@ -84,12 +84,112 @@ DEFUN(__sysconf, (name), int name)
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_SAVED_IDS:
|
||||
#ifdef _POSIX_SAVED_IDS
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_REALTIME_SIGNALS:
|
||||
#ifdef _POSIX_REALTIME_SIGNALS
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_PRIORITY_SCHEDULING:
|
||||
#ifdef _POSIX_PRIORITY_SCHEDULING
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_TIMERS:
|
||||
#ifdef _POSIX_TIMERS
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_ASYNCHRONOUS_IO:
|
||||
#ifdef _POSIX_ASYNCHRONOUS_IO
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_PRIORITIZED_IO:
|
||||
#ifdef _POSIX_PRIORITIZED_IO
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_SYNCHRONIZED_IO:
|
||||
#ifdef _POSIX_SYNCHRONIZED_IO
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_FSYNC:
|
||||
#ifdef _POSIX_FSYNC
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_MAPPED_FILES:
|
||||
#ifdef _POSIX_MAPPED_FILES
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_MEMLOCK:
|
||||
#ifdef _POSIX_MEMLOCK
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_MEMLOCK_RANGE:
|
||||
#ifdef _POSIX_MEMLOCK_RANGE
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_MEMORY_PROTECTION:
|
||||
#ifdef _POSIX_MEMORY_PROTECTION
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_MESSAGE_PASSING:
|
||||
#ifdef _POSIX_MESSAGE_PASSING
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_SEMAPHORES:
|
||||
#ifdef _POSIX_SEMAPHORES
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_SHARED_MEMORY_OBJECTS:
|
||||
#ifdef _POSIX_SHARED_MEMORY_OBJECTS
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_VERSION:
|
||||
return _POSIX_VERSION;
|
||||
|
||||
@ -152,6 +252,12 @@ DEFUN(__sysconf, (name), int name)
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_CHARCLASS_NAME_MAX:
|
||||
#ifdef CHARCLASS_NAME_MAX
|
||||
return CHARCLASS_NAME_MAX;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_2_VERSION:
|
||||
/* This is actually supposed to return the version
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991, 1993, 1995 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 1993, 1995, 1996 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
|
||||
@ -43,6 +43,20 @@ DEFUN(__sysconf, (name), int name)
|
||||
case _SC_OPEN_MAX:
|
||||
case _SC_JOB_CONTROL:
|
||||
case _SC_SAVED_IDS:
|
||||
case _SC_REALTIME_SIGNALS:
|
||||
case _SC_PRIORITY_SCHEDULING:
|
||||
case _SC_TIMERS:
|
||||
case _SC_ASYNCHRONOUS_IO:
|
||||
case _SC_PRIORITIZED_IO:
|
||||
case _SC_SYNCHRONIZED_IO:
|
||||
case _SC_FSYNC:
|
||||
case _SC_MAPPED_FILES:
|
||||
case _SC_MEMLOCK:
|
||||
case _SC_MEMLOCK_RANGE:
|
||||
case _SC_MEMORY_PROTECTION:
|
||||
case _SC_MESSAGE_PASSING:
|
||||
case _SC_SEMAPHORES:
|
||||
case _SC_SHARED_MEMORY_OBJECTS:
|
||||
case _SC_VERSION:
|
||||
|
||||
case _SC_BC_BASE_MAX:
|
||||
@ -53,6 +67,7 @@ DEFUN(__sysconf, (name), int name)
|
||||
case _SC_EXPR_NEST_MAX:
|
||||
case _SC_LINE_MAX:
|
||||
case _SC_RE_DUP_MAX:
|
||||
case _SC_CHARCLASS_NAME_MAX:
|
||||
case _SC_2_VERSION:
|
||||
case _SC_2_C_BIND:
|
||||
case _SC_2_C_DEV:
|
||||
|
@ -1,3 +1,4 @@
|
||||
sys/socketcall.h
|
||||
sys/sysctl.h
|
||||
sys/timex.h
|
||||
nfs/nfs.h
|
||||
|
@ -15,7 +15,7 @@ sysdep_routines += fxstat lxstat xstat
|
||||
endif
|
||||
|
||||
ifeq ($(subdir), misc)
|
||||
sysdep_routines += xmknod s_ptrace
|
||||
sysdep_routines += xmknod s_ptrace s_sysctl sysctl
|
||||
headers += sys/mount.h
|
||||
endif
|
||||
|
||||
@ -36,4 +36,3 @@ rtld-installed-name = ld-gnu.so.1
|
||||
|
||||
# Don't compile the ctype glue code, since there is no old non-GNU C library.
|
||||
inhibit-glue = yes
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Definitions for BSD-style memory management. Linux version.
|
||||
Copyright (C) 1994, 1995 Free Software Foundation, Inc.
|
||||
Copyright (C) 1994, 1995, 1996 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
|
||||
@ -88,6 +88,14 @@ int mlock __P ((__caddr_t __addr, size_t __len));
|
||||
/* Unlock whole pages previously mapped by the range [ADDR,ADDR+LEN). */
|
||||
int munlock __P ((__caddr_t __addr, size_t __len));
|
||||
|
||||
/* Remap pages mapped by the range [ADDR,ADDR+OLD_LEN) to new length
|
||||
NEW_LEN. If MAY_MOVE is MREMAP_MAXMOVE the returned address may
|
||||
differ from ADDR. */
|
||||
__caddr_t __mremap __P ((__caddr_t __addr, size_t __old_len, size_t __new_len,
|
||||
int __may_move));
|
||||
__caddr_t mremap __P ((__caddr_t __addr, size_t __old_len, size_t __new_len,
|
||||
int __may_move));
|
||||
|
||||
__END_DECLS
|
||||
|
||||
|
||||
|
2
sysdeps/unix/sysv/linux/sys/socket.h
Normal file
2
sysdeps/unix/sysv/linux/sys/socket.h
Normal file
@ -0,0 +1,2 @@
|
||||
#include <linux/socket.h>
|
||||
#include <linux/socket.h>
|
36
sysdeps/unix/sysv/linux/sys/sysctl.h
Normal file
36
sysdeps/unix/sysv/linux/sys/sysctl.h
Normal file
@ -0,0 +1,36 @@
|
||||
/* Copyright (C) 1996 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. */
|
||||
|
||||
#ifndef _SYS_SYSCTL_H
|
||||
#define _SYS_SYSCTL_H 1
|
||||
|
||||
#include <features.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
#define __need_size_t
|
||||
#include <stddef.h>
|
||||
#include <linux/sysctl.h>
|
||||
|
||||
/* Read or write system parameters. */
|
||||
extern int sysctl __P ((int *__name, int __nlen, void *__oldval,
|
||||
size_t *__oldlenp, void *__newval, size_t __newlen));
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* sys/sysctl.h */
|
@ -13,6 +13,7 @@ ipc msgget ipc 5 __ipc
|
||||
mlock - mlock 2 __mlock mlock
|
||||
mlockall - mlockall 1 __mlockall mlockall
|
||||
mount - mount 5 __mount mount
|
||||
mremap - mremap 4 __mremap mremap
|
||||
munlock - munlock 2 __munlock munlock
|
||||
munlockall - munlockall 0 __munlockall munlockall
|
||||
nanosleep - nanosleep 2 nanosleep
|
||||
@ -32,5 +33,6 @@ sched_rr_gi - sched_rr_get_interval 2 __sched_rr_get_interval sched_rr_get_inter
|
||||
setpgid - setpgid 2 setpgid
|
||||
sigpending - sigpending 1 sigpending
|
||||
sigprocmask - sigprocmask 3 __sigprocmask sigprocmask
|
||||
s_sysctl sysctl _sysctl 1 __syscall__sysctl
|
||||
umount - umount 1 __umount umount
|
||||
wait4 - wait4 4 __wait4 wait4
|
||||
|
@ -251,6 +251,12 @@ DEFUN(__sysconf, (name), int name)
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_CHARCLASS_NAME_MAX:
|
||||
#ifdef CHARCLASS_NAME_MAX
|
||||
return CHARCLASS_NAME_MAX;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_2_VERSION:
|
||||
/* This is actually supposed to return the version
|
||||
|
40
sysdeps/unix/sysv/linux/sysctl.c
Normal file
40
sysdeps/unix/sysv/linux/sysctl.c
Normal file
@ -0,0 +1,40 @@
|
||||
/* sysctl - Read or write system information. Linux version.
|
||||
Copyright (C) 1996 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 <sys/sysctl.h>
|
||||
|
||||
|
||||
extern int __syscall__sysctl (struct __sysctl_args *args);
|
||||
|
||||
int
|
||||
sysctl (int *name, int nlen, void *oldval, size_t *oldlenp,
|
||||
void *newval, size_t newlen)
|
||||
{
|
||||
struct __sysctl_args args =
|
||||
{
|
||||
name: name,
|
||||
nlen: nlen,
|
||||
oldval: oldval,
|
||||
oldlenp: oldlenp,
|
||||
newval: newval,
|
||||
newlen: newlen
|
||||
};
|
||||
|
||||
return __syscall__sysctl (&args);
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1993, 1995 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
|
||||
Contributed by Brendan Kehoe (brendan@zen.org).
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
@ -74,12 +74,112 @@ DEFUN(__sysconf, (name), int name)
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_SAVED_IDS:
|
||||
#ifdef _POSIX_SAVED_IDS
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_REALTIME_SIGNALS:
|
||||
#ifdef _POSIX_REALTIME_SIGNALS
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_PRIORITY_SCHEDULING:
|
||||
#ifdef _POSIX_PRIORITY_SCHEDULING
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_TIMERS:
|
||||
#ifdef _POSIX_TIMERS
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_ASYNCHRONOUS_IO:
|
||||
#ifdef _POSIX_ASYNCHRONOUS_IO
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_PRIORITIZED_IO:
|
||||
#ifdef _POSIX_PRIORITIZED_IO
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_SYNCHRONIZED_IO:
|
||||
#ifdef _POSIX_SYNCHRONIZED_IO
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_FSYNC:
|
||||
#ifdef _POSIX_FSYNC
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_MAPPED_FILES:
|
||||
#ifdef _POSIX_MAPPED_FILES
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_MEMLOCK:
|
||||
#ifdef _POSIX_MEMLOCK
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_MEMLOCK_RANGE:
|
||||
#ifdef _POSIX_MEMLOCK_RANGE
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_MEMORY_PROTECTION:
|
||||
#ifdef _POSIX_MEMORY_PROTECTION
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_MESSAGE_PASSING:
|
||||
#ifdef _POSIX_MESSAGE_PASSING
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_SEMAPHORES:
|
||||
#ifdef _POSIX_SEMAPHORES
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_SHARED_MEMORY_OBJECTS:
|
||||
#ifdef _POSIX_SHARED_MEMORY_OBJECTS
|
||||
return 1;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_VERSION:
|
||||
return _POSIX_VERSION;
|
||||
|
||||
@ -142,6 +242,12 @@ DEFUN(__sysconf, (name), int name)
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_CHARCLASS_NAME_MAX:
|
||||
#ifdef CHARCLASS_NAME_MAX
|
||||
return CHARCLASS_NAME_MAX;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
case _SC_2_VERSION:
|
||||
/* This is actually supposed to return the version
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Copyright (C) 1995 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1995, 1996 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 +24,8 @@ subdir := sysvipc
|
||||
headers := sys/ipc.h sys/msg.h sys/sem.h sys/shm.h \
|
||||
sys/ipc_buf.h sys/msq_buf.h sys/sem_buf.h sys/shm_buf.h
|
||||
|
||||
routines := msgsnd msgrcv msgget msgctl \
|
||||
routines := ftok \
|
||||
msgsnd msgrcv msgget msgctl \
|
||||
semop semget semctl \
|
||||
shmat shmdt shmget shmctl
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1995 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
|
||||
|
||||
@ -31,7 +31,7 @@ ftok (pathname, proj_id)
|
||||
if (__stat (pathname, &st) < 0)
|
||||
return (key_t) -1;
|
||||
|
||||
key = (st.st_ino & 0xffff) | ((st.st_dev & 0xff) << 16) | (id << 24);
|
||||
key = (st.st_ino & 0xffff) | ((st.st_dev & 0xff) << 16) | (proj_id << 24);
|
||||
|
||||
return key;
|
||||
}
|
||||
|
@ -31,7 +31,17 @@ Cambridge, MA 02139, USA. */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h> /* Some systems define `time_t' here. */
|
||||
#include <time.h>
|
||||
|
||||
#ifdef TIME_WITH_SYS_TIME
|
||||
# include <sys/time.h>
|
||||
# include <time.h>
|
||||
#else
|
||||
# ifdef HAVE_SYS_TIME_H
|
||||
# include <sys/time.h>
|
||||
# else
|
||||
# include <time.h>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if HAVE_MBLEN
|
||||
# include <ctype.h>
|
||||
|
@ -22,11 +22,26 @@
|
||||
subdir := wcsmbs
|
||||
|
||||
headers := wchar.h
|
||||
distribute := wcwidth.h
|
||||
|
||||
routines := wcscat wcschr wcscmp wcscpy wcscspn wcsdup wcslen wcsncat \
|
||||
wcsncmp wcsncpy wcspbrk wcsrchr wcsspn wcstok wcsstr wmemchr \
|
||||
wmemcmp wmemcpy wmemmove wmemset \
|
||||
wmemcmp wmemcpy wmemmove wmemset wcpcpy wcpncpy \
|
||||
btowc wctob mbsinit \
|
||||
mbrlen mbrtowc wcrtomb mbsrtowcs wcsrtombs
|
||||
mbrlen mbrtowc wcrtomb mbsrtowcs wcsrtombs \
|
||||
wcstol wcstoul wcstoq wcstouq wcstod wcstold wcstof \
|
||||
wcscoll wcsxfrm \
|
||||
wcwidth wcswidth
|
||||
|
||||
include ../Rules
|
||||
|
||||
CFLAGS-wcwidth.c = -I../wctype
|
||||
CFLAGS-wcswidth.c = -I../wctype
|
||||
|
||||
CFLAGS-wcstol.c = -I../stdlib
|
||||
CFLAGS-wcstoul.c = -I../stdlib
|
||||
CFLAGS-wcstoq.c = -I../stdlib
|
||||
CFLAGS-wcstouq.c = -I../stdlib
|
||||
CFLAGS-wcstod.c = -I../stdlib
|
||||
CFLAGS-wcstold.c = -I../stdlib
|
||||
CFLAGS-wcstof.c = -I../stdlib
|
||||
|
@ -1,63 +0,0 @@
|
||||
/* Copyright (C) 1995 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., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
#include <mbstr.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define __need_wchar_t
|
||||
/* FIXME: should be defined in stddef.h.
|
||||
!!! #define __need_uwchar_t */
|
||||
typedef unsigned int uwchar_t;
|
||||
#include <stddef.h>
|
||||
|
||||
|
||||
/* Compare MBS1 and MBS2. */
|
||||
int
|
||||
mbscmp (mbs1, mbs2)
|
||||
const char *mbs1;
|
||||
const char *mbs2;
|
||||
{
|
||||
int len1 = 0;
|
||||
int len2 = 0;
|
||||
uwchar_t c1;
|
||||
uwchar_t c2;
|
||||
|
||||
/* Reset multibyte characters to their initial state. */
|
||||
(void) mblen ((char *) NULL, 0);
|
||||
|
||||
do
|
||||
{
|
||||
len1 = mbtowc ((wchar_t *) &c1, mbs1, MB_CUR_MAX);
|
||||
len2 = mbtowc ((wchar_t *) &c2, mbs2, MB_CUR_MAX);
|
||||
|
||||
if (len1 == 0)
|
||||
return len2 == 0 ? 0 : -1;
|
||||
if (len2 == 0)
|
||||
return 1;
|
||||
if (len1 < 0 || len2 < 0)
|
||||
/* FIXME: an illegal character appears. What to do? */
|
||||
return c1 - c2;
|
||||
|
||||
mbs1 += len1;
|
||||
mbs2 += len2;
|
||||
}
|
||||
while (c1 == c2);
|
||||
|
||||
return c1 - c2;
|
||||
}
|
||||
|
133
wcsmbs/wchar.h
133
wcsmbs/wchar.h
@ -59,8 +59,12 @@ typedef int mbstate_t; /* FIXME */
|
||||
hold any value corresponding to members of the extended character
|
||||
set, as well as at least one value that does not correspond to any
|
||||
member of the extended character set. */
|
||||
#ifndef __have_wint_t_defined
|
||||
#define __have_wint_t_defined 1
|
||||
/* This is a hack!!! */
|
||||
typedef unsigned int wint_t;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Copy SRC to DEST. */
|
||||
@ -81,6 +85,14 @@ extern int wcscmp __P ((__const wchar_t *__s1, __const wchar_t *__s2));
|
||||
extern int wcsncmp __P ((__const wchar_t *__s1, __const wchar_t *__s2,
|
||||
size_t __n));
|
||||
|
||||
/* Compare S1 and S2, both interpreted as appropriate to the
|
||||
LC_COLLATE category of the current locale. */
|
||||
extern int wcscoll __P ((__const wchar_t *__s1, __const wchar_t *__s2));
|
||||
/* Transform S2 into array pointed to by S1 such that if wcscmp is
|
||||
applied to two transformed strings the result is the as applying
|
||||
`wcscoll' to the original strings. */
|
||||
extern size_t wcsxfrm __P ((wchar_t *__s1, __const wchar_t *__s2, size_t __n));
|
||||
|
||||
/* Duplicate S, returning an identical malloc'd string. */
|
||||
extern wchar_t *wcsdup __P ((__const wchar_t *__s));
|
||||
|
||||
@ -163,6 +175,127 @@ extern size_t mbsrtowcs __P ((wchar_t *__dst, __const char **__src,
|
||||
extern size_t wcsrtombs __P ((char *__dst, __const wchar_t **__src,
|
||||
size_t __len, mbstate_t *__ps));
|
||||
|
||||
|
||||
#ifdef __USE_GNU
|
||||
/* The following functions are extensions found in X/Open CAE. */
|
||||
|
||||
/* Determine number of column positions required for C. */
|
||||
extern int wcwidth __P ((wint_t __c));
|
||||
|
||||
/* Determine number of column positions required for first N wide
|
||||
characters (or fewer if S ends before this) in S. */
|
||||
extern int wcswidth __P ((__const wchar_t *__s, size_t __n));
|
||||
#endif /* use GNU */
|
||||
|
||||
|
||||
/* Convert initial portion of the wide string NPTR to `double'
|
||||
representation. */
|
||||
extern double wcstod __P ((__const wchar_t *__nptr, wchar_t **__endptr));
|
||||
|
||||
#ifdef USE_GNU
|
||||
/* Likewise for `float' and `long double' sizes of floating-point numbers. */
|
||||
extern float wcstof __P ((__const wchar_t *__nptr, wchar_t **__endptr));
|
||||
extern __long_double_t wcstold __P ((__const wchar_t *__nptr,
|
||||
wchar_t **__endptr));
|
||||
#endif /* GNU */
|
||||
|
||||
|
||||
/* Convert initial portion of wide string NPTR to `long int'
|
||||
representation. */
|
||||
extern long int wcstol __P ((__const wchar_t *__nptr, wchar_t **__endptr,
|
||||
int __base));
|
||||
|
||||
/* Convert initial portion of wide string NPTR to `unsigned long int'
|
||||
representation. */
|
||||
extern unsigned long int wcstoul __P ((__const wchar_t *__nptr,
|
||||
wchar_t **__endptr, int __base));
|
||||
|
||||
#if defined (__GNUC__) && defined (__USE_GNU)
|
||||
/* Convert initial portion of wide string NPTR to `long int'
|
||||
representation. */
|
||||
extern long long int wcstoq __P ((__const wchar_t *__nptr, wchar_t **__endptr,
|
||||
int __base));
|
||||
|
||||
/* Convert initial portion of wide string NPTR to `unsigned long long int'
|
||||
representation. */
|
||||
extern unsigned long long int wcstouq __P ((__const wchar_t *__nptr,
|
||||
wchar_t **__endptr, int __base));
|
||||
#endif /* GCC and use GNU. */
|
||||
|
||||
|
||||
/* The internal entry points for `wcstoX' take an extra flag argument
|
||||
saying whether or not to parse locale-dependent number grouping. */
|
||||
extern double __wcstod_internal __P ((__const wchar_t *__nptr,
|
||||
wchar_t **_endptr, int __group));
|
||||
extern float __wcstof_internal __P ((__const wchar_t *__nptr,
|
||||
wchar_t **_endptr, int __group));
|
||||
extern __long_double_t __wcstold_internal __P ((__const wchar_t *__nptr,
|
||||
wchar_t **_endptr,
|
||||
int __group));
|
||||
|
||||
extern long int __wcstol_internal __P ((__const wchar_t *__nptr,
|
||||
wchar_t **__endptr, int __base,
|
||||
int __group));
|
||||
extern unsigned long int __wcstoul_internal __P ((__const wchar_t *__nptr,
|
||||
wchar_t **__endptr,
|
||||
int __base, int __group));
|
||||
#ifdef __GNUC__
|
||||
extern long long int __wcstoq_internal __P ((__const wchar_t *__nptr,
|
||||
wchar_t **__endptr, int __base,
|
||||
int __group));
|
||||
extern unsigned long long int __wcstouq_internal __P ((__const wchar_t *__nptr,
|
||||
wchar_t **__endptr,
|
||||
int __base,
|
||||
int __group));
|
||||
#endif /* GCC */
|
||||
|
||||
|
||||
#if defined (__OPTIMIZE__) && __GNUC__ >= 2
|
||||
/* Define inline functions which call the internal entry points. */
|
||||
|
||||
extern __inline double wcstod (__const wchar_t *__nptr, wchar_t **__endptr)
|
||||
{ return __wcstod_internal (__nptr, __endptr, 0); }
|
||||
extern __inline long int wcstol (__const wchar_t *__nptr,
|
||||
wchar_t **__endptr, int __base)
|
||||
{ return __wcstol_internal (__nptr, __endptr, __base, 0); }
|
||||
extern __inline unsigned long int wcstoul (__const wchar_t *__nptr,
|
||||
wchar_t **__endptr, int __base)
|
||||
{ return __wcstoul_internal (__nptr, __endptr, __base, 0); }
|
||||
|
||||
#ifdef __USE_GNU
|
||||
extern __inline float wcstof (__const wchar_t *__nptr, wchar_t **__endptr)
|
||||
{ return __wcstof_internal (__nptr, __endptr, 0); }
|
||||
extern __inline __long_double_t wcstold (__const wchar_t *__nptr,
|
||||
wchar_t **__endptr)
|
||||
{ return __wcstold_internal (__nptr, __endptr, 0); }
|
||||
#endif
|
||||
|
||||
#ifdef __USE_BSD
|
||||
extern __inline long long int wcstoq (__const wchar_t *__nptr,
|
||||
wchar_t **__endptr, int __base)
|
||||
{ return __wcstoq_internal (__nptr, __endptr, __base, 0); }
|
||||
extern __inline unsigned long long int wcstouq (__const wchar_t *__nptr,
|
||||
wchar_t **__endptr, int __base)
|
||||
{ return __wcstouq_internal (__nptr, __endptr, __base, 0); }
|
||||
#endif
|
||||
#endif /* Optimizing GCC >=2. */
|
||||
|
||||
|
||||
#ifdef __USE_GNU
|
||||
/* Copy SRC to DEST, returning the address of the terminating L'\0' in
|
||||
DEST. */
|
||||
extern wchar_t *__wcpcpy __P ((wchar_t *__dest, __const wchar_t *__src));
|
||||
extern wchar_t *wcpcpy __P ((wchar_t *__dest, __const wchar_t *__src));
|
||||
|
||||
/* Copy no more than N characters of SRC to DEST, returning the address of
|
||||
the last character written into DEST. */
|
||||
extern wchar_t *__wcpncpy __P ((wchar_t *__dest, __const wchar_t *__src,
|
||||
size_t __n));
|
||||
extern wchar_t *wcpncpy __P ((wchar_t *__dest, __const wchar_t *__src,
|
||||
size_t __n));
|
||||
#endif /* use GNU */
|
||||
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* wchar.h */
|
||||
|
47
wcsmbs/wcpcpy.c
Normal file
47
wcsmbs/wcpcpy.c
Normal file
@ -0,0 +1,47 @@
|
||||
/* Copyright (C) 1996 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1996.
|
||||
|
||||
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 <wchar.h>
|
||||
|
||||
#define __need_ptrdiff_t
|
||||
#include <stddef.h>
|
||||
|
||||
|
||||
/* Copy SRC to DEST, returning the address of the terminating L'\0' in
|
||||
DEST. */
|
||||
wchar_t *
|
||||
__wcpcpy (dest, src)
|
||||
wchar_t *dest;
|
||||
const wchar_t *src;
|
||||
{
|
||||
wchar_t *wcp = (wchar_t *) dest - 1;
|
||||
wint_t c;
|
||||
const ptrdiff_t off = src - dest + 1;
|
||||
|
||||
do
|
||||
{
|
||||
c = wcp[off];
|
||||
*++wcp = c;
|
||||
}
|
||||
while (c != L'\0');
|
||||
|
||||
return wcp;
|
||||
}
|
||||
|
||||
weak_alias (__wcpcpy, wcpcpy)
|
89
wcsmbs/wcpncpy.c
Normal file
89
wcsmbs/wcpncpy.c
Normal file
@ -0,0 +1,89 @@
|
||||
/* Copyright (C) 1996 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
||||
|
||||
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 <wchar.h>
|
||||
|
||||
|
||||
/* Copy no more than N wide-characters of SRC to DEST, returning the
|
||||
address of the last character written into DEST. */
|
||||
wchar_t *
|
||||
__wcpncpy (dest, src, n)
|
||||
wchar_t *dest;
|
||||
const wchar_t *src;
|
||||
size_t n;
|
||||
{
|
||||
wint_t c;
|
||||
wchar_t *const s = dest;
|
||||
|
||||
--dest;
|
||||
|
||||
if (n >= 4)
|
||||
{
|
||||
size_t n4 = n >> 2;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
c = *src++;
|
||||
*++dest = c;
|
||||
if (c == L'\0')
|
||||
break;
|
||||
c = *src++;
|
||||
*++dest = c;
|
||||
if (c == L'\0')
|
||||
break;
|
||||
c = *src++;
|
||||
*++dest = c;
|
||||
if (c == L'\0')
|
||||
break;
|
||||
c = *src++;
|
||||
*++dest = c;
|
||||
if (c == L'\0')
|
||||
break;
|
||||
if (--n4 == 0)
|
||||
goto last_chars;
|
||||
}
|
||||
n = n - (dest - s) - 1;
|
||||
if (n == 0)
|
||||
return dest;
|
||||
goto zero_fill;
|
||||
}
|
||||
|
||||
last_chars:
|
||||
n &= 3;
|
||||
if (n == 0)
|
||||
return dest;
|
||||
|
||||
do
|
||||
{
|
||||
c = *src++;
|
||||
*++dest = c;
|
||||
if (--n == 0)
|
||||
return dest;
|
||||
}
|
||||
while (c != L'\0');
|
||||
|
||||
zero_fill:
|
||||
do
|
||||
*++dest = L'\0';
|
||||
while (--n > 0);
|
||||
|
||||
return dest;
|
||||
}
|
||||
|
||||
weak_alias (__wcpncpy, wcpncpy)
|
26
wcsmbs/wcscoll.c
Normal file
26
wcsmbs/wcscoll.c
Normal file
@ -0,0 +1,26 @@
|
||||
/* Copyright (C) 1996 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 <wchar.h>
|
||||
|
||||
#define STRING_TYPE wchar_t
|
||||
#define USTRING_TYPE uwchar_t
|
||||
#define STRCOLL wcscoll
|
||||
#define STRCMP wcscmp
|
||||
|
||||
#include "../string/strcoll.c"
|
@ -1,6 +1,6 @@
|
||||
/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
||||
|
||||
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
|
||||
@ -30,7 +30,7 @@ wcscpy (dest, src)
|
||||
const wchar_t *src;
|
||||
{
|
||||
wchar_t *wcp = (wchar_t *) src;
|
||||
wchar_t c;
|
||||
wint_t c;
|
||||
const ptrdiff_t off = dest - src - 1;
|
||||
|
||||
do
|
||||
@ -42,4 +42,3 @@ wcscpy (dest, src)
|
||||
|
||||
return dest;
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
||||
|
||||
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
|
||||
@ -27,7 +27,7 @@ wcsncpy (dest, src, n)
|
||||
const wchar_t *src;
|
||||
size_t n;
|
||||
{
|
||||
wchar_t c;
|
||||
wint_t c;
|
||||
wchar_t *const s = dest;
|
||||
|
||||
--dest;
|
||||
|
25
wcsmbs/wcstod.c
Normal file
25
wcsmbs/wcstod.c
Normal file
@ -0,0 +1,25 @@
|
||||
/* Copyright (C) 1996 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1996.
|
||||
|
||||
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. */
|
||||
|
||||
|
||||
/* The actual implementation for all floating point sizes is in strtod.c. */
|
||||
|
||||
#define USE_WIDE_CHAR 1
|
||||
|
||||
#include "strtod.c"
|
31
wcsmbs/wcstof.c
Normal file
31
wcsmbs/wcstof.c
Normal file
@ -0,0 +1,31 @@
|
||||
/* Copyright (C) 1996 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1996.
|
||||
|
||||
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. */
|
||||
|
||||
|
||||
/* The actual implementation for all floating point sizes is in strtod.c.
|
||||
These macros tell it to produce the `float' version, `wcstof'. */
|
||||
|
||||
#define FLOAT float
|
||||
#define FLT LDBL
|
||||
#define STRTOF wcstof
|
||||
#define MPN2FLOAT __mpn_construct_float
|
||||
#define FLOAT_HUGE_VAL HUGE_VALf
|
||||
#define USE_WIDE_CHAR 1
|
||||
|
||||
#include "strtod.c"
|
22
wcsmbs/wcstol.c
Normal file
22
wcsmbs/wcstol.c
Normal file
@ -0,0 +1,22 @@
|
||||
/* wcstol - Function to parse a `long int' from text.
|
||||
Copyright (C) 1996 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. */
|
||||
|
||||
#define USE_WIDE_CHAR 1
|
||||
|
||||
#include "strtol.c"
|
31
wcsmbs/wcstold.c
Normal file
31
wcsmbs/wcstold.c
Normal file
@ -0,0 +1,31 @@
|
||||
/* Copyright (C) 1996 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1996.
|
||||
|
||||
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. */
|
||||
|
||||
|
||||
/* The actual implementation for all floating point sizes is in strtod.c.
|
||||
These macros tell it to produce the `long double' version, `wcstold'. */
|
||||
|
||||
#define FLOAT long double
|
||||
#define FLT LDBL
|
||||
#define STRTOF wcstold
|
||||
#define MPN2FLOAT __mpn_construct_long_double
|
||||
#define FLOAT_HUGE_VAL HUGE_VALl
|
||||
#define USE_WIDE_CHAR 1
|
||||
|
||||
#include "strtod.c"
|
22
wcsmbs/wcstoq.c
Normal file
22
wcsmbs/wcstoq.c
Normal file
@ -0,0 +1,22 @@
|
||||
/* wcstoq - Function to parse a `long long int' from text.
|
||||
Copyright (C) 1996 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. */
|
||||
|
||||
#define QUAD 1
|
||||
|
||||
#include "wcstol.c"
|
22
wcsmbs/wcstoul.c
Normal file
22
wcsmbs/wcstoul.c
Normal file
@ -0,0 +1,22 @@
|
||||
/* wcstoul - Function to parse an `unsigned long int' from text.
|
||||
Copyright (C) 1996 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. */
|
||||
|
||||
#define UNSIGNED 1
|
||||
|
||||
#include "wcstol.c"
|
22
wcsmbs/wcstouq.c
Normal file
22
wcsmbs/wcstouq.c
Normal file
@ -0,0 +1,22 @@
|
||||
/* wcstouq - Function to parse an `unsigned long long int' from text.
|
||||
Copyright (C) 1996 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. */
|
||||
|
||||
#define QUAD 1
|
||||
|
||||
#include "wcstoul.c"
|
39
wcsmbs/wcswidth.c
Normal file
39
wcsmbs/wcswidth.c
Normal file
@ -0,0 +1,39 @@
|
||||
/* Copyright (C) 1996 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edi>, 1996.
|
||||
|
||||
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 "wcwidth.h"
|
||||
|
||||
/* Determine number of column positions required for first N wide
|
||||
characters (or fewer if S ends before this) in S. */
|
||||
int
|
||||
wcswidth (const wchar_t *s, size_t n)
|
||||
{
|
||||
int result = 0;
|
||||
|
||||
while (n > 0 && *s != L'\0')
|
||||
{
|
||||
int now = internal_wcwidth (*s);
|
||||
if (now == -1)
|
||||
return -1;
|
||||
result += now;
|
||||
++s;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
27
wcsmbs/wcsxfrm.c
Normal file
27
wcsmbs/wcsxfrm.c
Normal file
@ -0,0 +1,27 @@
|
||||
/* Copyright (C) 1996 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 <wchar.h>
|
||||
|
||||
#define STRING_TYPE wchar_t
|
||||
#define USTRING_TYPE uwchar_t
|
||||
#define STRXFRM wcsxfrm
|
||||
#define STRLEN wcslen
|
||||
#define STPNCPY __wcpncpy
|
||||
|
||||
#include "../string/strxfrm.c"
|
27
wcsmbs/wcwidth.c
Normal file
27
wcsmbs/wcwidth.c
Normal file
@ -0,0 +1,27 @@
|
||||
/* Copyright (C) 1996 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edi>, 1996.
|
||||
|
||||
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 "wcwidth.h"
|
||||
|
||||
/* Determine number of column positions required for CH. */
|
||||
int
|
||||
wcwidth (wint_t ch)
|
||||
{
|
||||
return internal_wcwidth (ch);
|
||||
}
|
40
wcsmbs/wcwidth.h
Normal file
40
wcsmbs/wcwidth.h
Normal file
@ -0,0 +1,40 @@
|
||||
/* Internal header containing implementation of wcwidth() function.
|
||||
Copyright (C) 1996 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edi>, 1996.
|
||||
|
||||
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 <wchar.h>
|
||||
#include "cname-lookup.h"
|
||||
|
||||
/* Array containing width information. */
|
||||
extern unsigned char *__ctype_width;
|
||||
|
||||
static __inline int
|
||||
internal_wcwidth (wint_t ch)
|
||||
{
|
||||
size_t idx;
|
||||
|
||||
if (ch == L'\0')
|
||||
return 0;
|
||||
|
||||
idx = cname_lookup (ch);
|
||||
if (idx == ~((size_t) 0))
|
||||
return -1;
|
||||
|
||||
return (int) __ctype_width[idx];
|
||||
}
|
@ -45,12 +45,6 @@ wctype (const char *property)
|
||||
# define SWAPU32(w) \
|
||||
(((w) << 24) | (((w) & 0xff00) << 8) | (((w) >> 8) & 0xff00) | ((w) >> 24))
|
||||
|
||||
# define SWAPU16(w) \
|
||||
(((w) >> 8) | ((w) << 8))
|
||||
|
||||
if (sizeof (wctype_t) == 4)
|
||||
return SWAPU32 (result);
|
||||
else
|
||||
return SWAPU16 (result);
|
||||
return SWAPU32 (result);
|
||||
#endif
|
||||
}
|
||||
|
@ -38,8 +38,12 @@ __BEGIN_DECLS
|
||||
hold any value corresponding to members of the extended character
|
||||
set, as well as at least one value that does not correspond to any
|
||||
member of the extended character set. */
|
||||
#ifndef __have_wint_t_defined
|
||||
#define __have_wint_t_defined 1
|
||||
/* This is a hack!!! */
|
||||
typedef unsigned int wint_t;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Scalar type that can hold values which represent locale-specific
|
||||
character mappings. */
|
||||
@ -47,13 +51,7 @@ typedef const unsigned int *wctrans_t;
|
||||
|
||||
/* Scalar type that can hold values which represent locale-specific
|
||||
character classifications. */
|
||||
#if 0
|
||||
typedef unsigned long int wctype_t;
|
||||
#else
|
||||
/* For compatibility reasons we have to use shorts for now. */
|
||||
typedef unsigned short int wctype_t;
|
||||
#endif
|
||||
|
||||
|
||||
/* Constant expression of type `wint_t' whose value does not correspond
|
||||
to any member of the extended character set. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user