Module Name: src Committed By: joerg Date: Tue Apr 16 21:44:08 UTC 2013
Modified Files: src/common/lib/libc/stdlib: _strtol.h _strtoul.h strtoll.c strtoull.c strtoumax.c src/include: inttypes.h stdlib.h src/lib/libc: shlib_version src/lib/libc/citrus: citrus_bcs_strtol.c citrus_bcs_strtoul.c src/lib/libc/include: namespace.h src/lib/libc/stdlib: strtoimax.c Log Message: Add strtol_l and friends. Switch _citrus_bcs_strtol to use plain strtol_l unless in tools mode. Add note to retire the BCS code on the next libc major bump. To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/common/lib/libc/stdlib/_strtol.h \ src/common/lib/libc/stdlib/_strtoul.h cvs rdiff -u -r1.6 -r1.7 src/common/lib/libc/stdlib/strtoll.c cvs rdiff -u -r1.5 -r1.6 src/common/lib/libc/stdlib/strtoull.c \ src/common/lib/libc/stdlib/strtoumax.c cvs rdiff -u -r1.8 -r1.9 src/include/inttypes.h cvs rdiff -u -r1.100 -r1.101 src/include/stdlib.h cvs rdiff -u -r1.239 -r1.240 src/lib/libc/shlib_version cvs rdiff -u -r1.2 -r1.3 src/lib/libc/citrus/citrus_bcs_strtol.c cvs rdiff -u -r1.3 -r1.4 src/lib/libc/citrus/citrus_bcs_strtoul.c cvs rdiff -u -r1.157 -r1.158 src/lib/libc/include/namespace.h cvs rdiff -u -r1.7 -r1.8 src/lib/libc/stdlib/strtoimax.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/common/lib/libc/stdlib/_strtol.h diff -u src/common/lib/libc/stdlib/_strtol.h:1.4 src/common/lib/libc/stdlib/_strtol.h:1.5 --- src/common/lib/libc/stdlib/_strtol.h:1.4 Tue Apr 16 19:34:57 2013 +++ src/common/lib/libc/stdlib/_strtol.h Tue Apr 16 21:44:06 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: _strtol.h,v 1.4 2013/04/16 19:34:57 joerg Exp $ */ +/* $NetBSD: _strtol.h,v 1.5 2013/04/16 21:44:06 joerg Exp $ */ /*- * Copyright (c) 1990, 1993 @@ -41,9 +41,19 @@ * __INT_MIN : lower limit of the return type * __INT_MAX : upper limit of the return type */ - +#if defined(_KERNEL) || defined(_STANDALONE) || defined(HAVE_NBTOOL_CONFIG_H) __INT _FUNCNAME(const char *nptr, char **endptr, int base) +#else +#include <locale.h> +#include "setlocale_local.h" +#define INT_FUNCNAME_(pre, name, post) pre ## name ## post +#define INT_FUNCNAME(pre, name, post) INT_FUNCNAME_(pre, name, post) + +static __INT +INT_FUNCNAME(_int_, _FUNCNAME, _l)(const char *nptr, char **endptr, + int base, locale_t loc) +#endif { const char *s; __INT acc, cutoff; @@ -72,9 +82,15 @@ _FUNCNAME(const char *nptr, char **endpt * assume decimal; if base is already 16, allow 0x. */ s = nptr; +#if defined(_KERNEL) || defined(_STANDALONE) || defined(HAVE_NBTOOL_CONFIG_H) do { c = *s++; } while (isspace(c)); +#else + do { + c = *s++; + } while (isspace_l(c, loc)); +#endif if (c == '-') { neg = 1; c = *s++; @@ -169,3 +185,19 @@ _FUNCNAME(const char *nptr, char **endpt *endptr = __UNCONST(any ? s - 1 : nptr); return(acc); } + +#if !defined(_KERNEL) && !defined(_STANDALONE) && !defined(HAVE_NBTOOL_CONFIG_H) +__INT +_FUNCNAME(const char *nptr, char **endptr, int base) +{ + return INT_FUNCNAME(_int_, _FUNCNAME, _l)(nptr, endptr, base, *_current_locale()); +} + +__INT +INT_FUNCNAME(, _FUNCNAME, _l)(const char *nptr, char **endptr, int base, locale_t loc) +{ + if (loc == NULL) + loc = _C_locale; + return INT_FUNCNAME(_int_, _FUNCNAME, _l)(nptr, endptr, base, loc); +} +#endif Index: src/common/lib/libc/stdlib/_strtoul.h diff -u src/common/lib/libc/stdlib/_strtoul.h:1.4 src/common/lib/libc/stdlib/_strtoul.h:1.5 --- src/common/lib/libc/stdlib/_strtoul.h:1.4 Tue Apr 16 19:34:58 2013 +++ src/common/lib/libc/stdlib/_strtoul.h Tue Apr 16 21:44:06 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: _strtoul.h,v 1.4 2013/04/16 19:34:58 joerg Exp $ */ +/* $NetBSD: _strtoul.h,v 1.5 2013/04/16 21:44:06 joerg Exp $ */ /*- * Copyright (c) 1990, 1993 @@ -40,9 +40,19 @@ * __UINT : return type * __UINT_MAX : upper limit of the return type */ - +#if defined(_KERNEL) || defined(_STANDALONE) || defined(HAVE_NBTOOL_CONFIG_H) __UINT _FUNCNAME(const char *nptr, char **endptr, int base) +#else +#include <locale.h> +#include "setlocale_local.h" +#define INT_FUNCNAME_(pre, name, post) pre ## name ## post +#define INT_FUNCNAME(pre, name, post) INT_FUNCNAME_(pre, name, post) + +static __UINT +INT_FUNCNAME(_int_, _FUNCNAME, _l)(const char *nptr, char **endptr, + int base, locale_t loc) +#endif { const char *s; __UINT acc, cutoff; @@ -68,9 +78,15 @@ _FUNCNAME(const char *nptr, char **endpt * assume decimal; if base is already 16, allow 0x. */ s = nptr; +#if defined(_KERNEL) || defined(_STANDALONE) || defined(HAVE_NBTOOL_CONFIG_H) do { c = *s++; } while (isspace(c)); +#else + do { + c = *s++; + } while (isspace_l(c, loc)); +#endif if (c == '-') { neg = 1; c = *s++; @@ -128,3 +144,19 @@ _FUNCNAME(const char *nptr, char **endpt *endptr = __UNCONST(any ? s - 1 : nptr); return(acc); } + +#if !defined(_KERNEL) && !defined(_STANDALONE) && !defined(HAVE_NBTOOL_CONFIG_H) +__UINT +_FUNCNAME(const char *nptr, char **endptr, int base) +{ + return INT_FUNCNAME(_int_, _FUNCNAME, _l)(nptr, endptr, base, *_current_locale()); +} + +__UINT +INT_FUNCNAME(, _FUNCNAME, _l)(const char *nptr, char **endptr, int base, locale_t loc) +{ + if (loc == NULL) + loc = _C_locale; + return INT_FUNCNAME(_int_, _FUNCNAME, _l)(nptr, endptr, base, loc); +} +#endif Index: src/common/lib/libc/stdlib/strtoll.c diff -u src/common/lib/libc/stdlib/strtoll.c:1.6 src/common/lib/libc/stdlib/strtoll.c:1.7 --- src/common/lib/libc/stdlib/strtoll.c:1.6 Fri Aug 22 03:00:02 2008 +++ src/common/lib/libc/stdlib/strtoll.c Tue Apr 16 21:44:06 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: strtoll.c,v 1.6 2008/08/22 03:00:02 matt Exp $ */ +/* $NetBSD: strtoll.c,v 1.7 2013/04/16 21:44:06 joerg Exp $ */ /*- * Copyright (c) 2005 The DragonFly Project. All rights reserved. @@ -32,7 +32,7 @@ #endif #include <sys/cdefs.h> -__RCSID("$NetBSD: strtoll.c,v 1.6 2008/08/22 03:00:02 matt Exp $"); +__RCSID("$NetBSD: strtoll.c,v 1.7 2013/04/16 21:44:06 joerg Exp $"); #ifdef _LIBC #include "namespace.h" @@ -63,4 +63,5 @@ __RCSID("$NetBSD: strtoll.c,v 1.6 2008/0 #ifdef _LIBC __weak_alias(strtoll, _strtoll) +__weak_alias(strtoll_l, _strtoll_l) #endif Index: src/common/lib/libc/stdlib/strtoull.c diff -u src/common/lib/libc/stdlib/strtoull.c:1.5 src/common/lib/libc/stdlib/strtoull.c:1.6 --- src/common/lib/libc/stdlib/strtoull.c:1.5 Wed Sep 10 18:08:58 2008 +++ src/common/lib/libc/stdlib/strtoull.c Tue Apr 16 21:44:06 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: strtoull.c,v 1.5 2008/09/10 18:08:58 joerg Exp $ */ +/* $NetBSD: strtoull.c,v 1.6 2013/04/16 21:44:06 joerg Exp $ */ /*- * Copyright (c) 2005 The DragonFly Project. All rights reserved. @@ -32,7 +32,7 @@ #endif #include <sys/cdefs.h> -__RCSID("$NetBSD: strtoull.c,v 1.5 2008/09/10 18:08:58 joerg Exp $"); +__RCSID("$NetBSD: strtoull.c,v 1.6 2013/04/16 21:44:06 joerg Exp $"); #ifdef _LIBC #include "namespace.h" @@ -62,4 +62,5 @@ __RCSID("$NetBSD: strtoull.c,v 1.5 2008/ #ifdef _LIBC __weak_alias(strtoull, _strtoull) +__weak_alias(strtoull_l, _strtoull_l) #endif Index: src/common/lib/libc/stdlib/strtoumax.c diff -u src/common/lib/libc/stdlib/strtoumax.c:1.5 src/common/lib/libc/stdlib/strtoumax.c:1.6 --- src/common/lib/libc/stdlib/strtoumax.c:1.5 Wed Sep 10 18:08:58 2008 +++ src/common/lib/libc/stdlib/strtoumax.c Tue Apr 16 21:44:06 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: strtoumax.c,v 1.5 2008/09/10 18:08:58 joerg Exp $ */ +/* $NetBSD: strtoumax.c,v 1.6 2013/04/16 21:44:06 joerg Exp $ */ /*- * Copyright (c) 2005 The DragonFly Project. All rights reserved. @@ -32,7 +32,7 @@ #endif #include <sys/cdefs.h> -__RCSID("$NetBSD: strtoumax.c,v 1.5 2008/09/10 18:08:58 joerg Exp $"); +__RCSID("$NetBSD: strtoumax.c,v 1.6 2013/04/16 21:44:06 joerg Exp $"); #ifdef _LIBC #include "namespace.h" @@ -63,4 +63,5 @@ __RCSID("$NetBSD: strtoumax.c,v 1.5 2008 #ifdef _LIBC __weak_alias(strtoumax, _strtoumax) +__weak_alias(strtoumax_l, _strtoumax_l) #endif Index: src/include/inttypes.h diff -u src/include/inttypes.h:1.8 src/include/inttypes.h:1.9 --- src/include/inttypes.h:1.8 Tue Apr 16 16:52:13 2013 +++ src/include/inttypes.h Tue Apr 16 21:44:06 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: inttypes.h,v 1.8 2013/04/16 16:52:13 joerg Exp $ */ +/* $NetBSD: inttypes.h,v 1.9 2013/04/16 21:44:06 joerg Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -65,6 +65,10 @@ imaxdiv_t imaxdiv(intmax_t, intmax_t); typedef struct _locale *locale_t; # define __LOCALE_T_DECLARED # endif +intmax_t strtoimax_l(const char * __restrict, + char ** __restrict, int, locale_t); +uintmax_t strtoumax_l(const char * __restrict, + char ** __restrict, int, locale_t); intmax_t wcstoimax_l(const wchar_t * __restrict, wchar_t ** __restrict, int, locale_t); uintmax_t wcstoumax_l(const wchar_t * __restrict, Index: src/include/stdlib.h diff -u src/include/stdlib.h:1.100 src/include/stdlib.h:1.101 --- src/include/stdlib.h:1.100 Thu Jun 21 21:13:29 2012 +++ src/include/stdlib.h Tue Apr 16 21:44:06 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: stdlib.h,v 1.100 2012/06/21 21:13:29 christos Exp $ */ +/* $NetBSD: stdlib.h,v 1.101 2013/04/16 21:44:06 joerg Exp $ */ /*- * Copyright (c) 1990, 1993 @@ -328,6 +328,28 @@ size_t shquotev(int, char * const *, cha #if defined(_NETBSD_SOURCE) qdiv_t qdiv(quad_t, quad_t); #endif + +#if (_POSIX_C_SOURCE - 0) >= 200809L || defined(_NETBSD_SOURCE) +# ifndef __LOCALE_T_DECLARED +typedef struct _locale *locale_t; +# define __LOCALE_T_DECLARED +# endif +long strtol_l(const char * __restrict, char ** __restrict, int, locale_t); +unsigned long + strtoul_l(const char * __restrict, char ** __restrict, int, locale_t); +/* LONGLONG */ +long long int + strtoll_l(const char * __restrict, char ** __restrict, int, locale_t); +/* LONGLONG */ +unsigned long long int + strtoull_l(const char * __restrict, char ** __restrict, int, locale_t); + +# if defined(_NETBSD_SOURCE) +quad_t strtoq_l(const char * __restrict, char ** __restrict, int, locale_t); +u_quad_t strtouq_l(const char * __restrict, char ** __restrict, int, locale_t); +# endif +#endif /* _POSIX_C_SOURCE >= 200809 || _NETBSD_SOURCE */ + __END_DECLS #endif /* !_STDLIB_H_ */ Index: src/lib/libc/shlib_version diff -u src/lib/libc/shlib_version:1.239 src/lib/libc/shlib_version:1.240 --- src/lib/libc/shlib_version:1.239 Sat Apr 13 10:21:20 2013 +++ src/lib/libc/shlib_version Tue Apr 16 21:44:07 2013 @@ -1,8 +1,9 @@ -# $NetBSD: shlib_version,v 1.239 2013/04/13 10:21:20 joerg Exp $ +# $NetBSD: shlib_version,v 1.240 2013/04/16 21:44:07 joerg Exp $ # Remember to update distrib/sets/lists/base/shl.* when changing # # things we wish to do on next major version bump: # - remove code under BUILD_LEGACY +# - remove BCS code in citrus and replace it with use of the C locale # - libc/net/rcmd.c: make __ivaliduser() and __ivaliduser_sa() static # - libc/net: resolver update to BIND8/9? # - md2, md4, md5, rmd160 & sha1 functions should take the same arguments AFAP Index: src/lib/libc/citrus/citrus_bcs_strtol.c diff -u src/lib/libc/citrus/citrus_bcs_strtol.c:1.2 src/lib/libc/citrus/citrus_bcs_strtol.c:1.3 --- src/lib/libc/citrus/citrus_bcs_strtol.c:1.2 Sun Jan 11 02:46:24 2009 +++ src/lib/libc/citrus/citrus_bcs_strtol.c Tue Apr 16 21:44:07 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: citrus_bcs_strtol.c,v 1.2 2009/01/11 02:46:24 christos Exp $ */ +/* $NetBSD: citrus_bcs_strtol.c,v 1.3 2013/04/16 21:44:07 joerg Exp $ */ /*- * Copyright (c) 2005 The DragonFly Project. All rights reserved. @@ -28,7 +28,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: citrus_bcs_strtol.c,v 1.2 2009/01/11 02:46:24 christos Exp $"); +__RCSID("$NetBSD: citrus_bcs_strtol.c,v 1.3 2013/04/16 21:44:07 joerg Exp $"); #include <assert.h> #include <errno.h> @@ -39,21 +39,12 @@ __RCSID("$NetBSD: citrus_bcs_strtol.c,v #include "citrus_namespace.h" #include "citrus_bcs.h" -#define _FUNCNAME _bcs_strtol -#define __INT long int -#define __INT_MIN LONG_MIN -#define __INT_MAX LONG_MAX - -#undef isspace -#define isspace(c) _bcs_isspace(c) - -#undef isdigit -#define isdigit(c) _bcs_isdigit(c) - -#undef isalpha -#define isalpha(c) _bcs_isalpha(c) - -#undef isupper -#define isupper(c) _bcs_isupper(c) - -#include "_strtol.h" +long int +_bcs_strtol(const char * __restrict nptr, char ** __restrict endptr, int base) +{ +#if defined(HAVE_NBTOOL_CONFIG_H) + return strtol(nptr, endptr, base); +#else + return strtol_l(nptr, endptr, base, 0); +#endif +} Index: src/lib/libc/citrus/citrus_bcs_strtoul.c diff -u src/lib/libc/citrus/citrus_bcs_strtoul.c:1.3 src/lib/libc/citrus/citrus_bcs_strtoul.c:1.4 --- src/lib/libc/citrus/citrus_bcs_strtoul.c:1.3 Sun Jan 11 02:46:24 2009 +++ src/lib/libc/citrus/citrus_bcs_strtoul.c Tue Apr 16 21:44:07 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: citrus_bcs_strtoul.c,v 1.3 2009/01/11 02:46:24 christos Exp $ */ +/* $NetBSD: citrus_bcs_strtoul.c,v 1.4 2013/04/16 21:44:07 joerg Exp $ */ /*- * Copyright (c) 2005 The DragonFly Project. All rights reserved. @@ -33,7 +33,7 @@ #include <sys/cdefs.h> #if !defined(lint) -__RCSID("$NetBSD: citrus_bcs_strtoul.c,v 1.3 2009/01/11 02:46:24 christos Exp $"); +__RCSID("$NetBSD: citrus_bcs_strtoul.c,v 1.4 2013/04/16 21:44:07 joerg Exp $"); #endif /* not lint */ #include <assert.h> @@ -45,20 +45,12 @@ __RCSID("$NetBSD: citrus_bcs_strtoul.c,v #include "citrus_namespace.h" #include "citrus_bcs.h" -#define _FUNCNAME _bcs_strtoul -#define __UINT unsigned long int -#define __UINT_MAX ULONG_MAX - -#undef isspace -#define isspace(c) _bcs_isspace(c) - -#undef isdigit -#define isdigit(c) _bcs_isdigit(c) - -#undef isalpha -#define isalpha(c) _bcs_isalpha(c) - -#undef isupper -#define isupper(c) _bcs_isupper(c) - -#include "_strtoul.h" +unsigned long int +_bcs_strtoul(const char * __restrict nptr, char ** __restrict endptr, int base) +{ +#if defined(HAVE_NBTOOL_CONFIG_H) + return strtoul(nptr, endptr, base); +#else + return strtoul_l(nptr, endptr, base, 0); +#endif +} Index: src/lib/libc/include/namespace.h diff -u src/lib/libc/include/namespace.h:1.157 src/lib/libc/include/namespace.h:1.158 --- src/lib/libc/include/namespace.h:1.157 Tue Apr 16 11:39:13 2013 +++ src/lib/libc/include/namespace.h Tue Apr 16 21:44:07 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: namespace.h,v 1.157 2013/04/16 11:39:13 joerg Exp $ */ +/* $NetBSD: namespace.h,v 1.158 2013/04/16 21:44:07 joerg Exp $ */ /*- * Copyright (c) 1997-2004 The NetBSD Foundation, Inc. @@ -61,10 +61,14 @@ #define strlcpy _strlcpy #define strtof _strtof #define strtoimax _strtoimax +#define strtoimax_l _strtoimax_l #define strtold _strtold #define strtoll _strtoll +#define strtoll_l _strtoll_l #define strtoull _strtoull +#define strtoull_l _strtoull_l #define strtoumax _strtoumax +#define strtoumax_l _strtoumax_l #define sys_errlist _sys_errlist #define sys_nerr _sys_nerr #define sys_siglist _sys_siglist Index: src/lib/libc/stdlib/strtoimax.c diff -u src/lib/libc/stdlib/strtoimax.c:1.7 src/lib/libc/stdlib/strtoimax.c:1.8 --- src/lib/libc/stdlib/strtoimax.c:1.7 Wed Sep 10 18:08:58 2008 +++ src/lib/libc/stdlib/strtoimax.c Tue Apr 16 21:44:08 2013 @@ -32,7 +32,7 @@ #endif #include <sys/cdefs.h> -__RCSID("$NetBSD: strtoimax.c,v 1.7 2008/09/10 18:08:58 joerg Exp $"); +__RCSID("$NetBSD: strtoimax.c,v 1.8 2013/04/16 21:44:08 joerg Exp $"); #include <assert.h> #include <ctype.h> @@ -50,3 +50,4 @@ __RCSID("$NetBSD: strtoimax.c,v 1.7 2008 #include "_strtol.h" __strong_alias(_strtoimax, strtoimax) +__strong_alias(_strtoimax_l, strtoimax_l)