Module Name:    src
Committed By:   joerg
Date:           Tue Apr 16 16:52:13 UTC 2013

Modified Files:
        src/include: inttypes.h wchar.h
        src/lib/libc/locale: _wcstol.h _wcstoul.h

Log Message:
Add support for wcstoimax_l and friends.


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/include/inttypes.h
cvs rdiff -u -r1.31 -r1.32 src/include/wchar.h
cvs rdiff -u -r1.4 -r1.5 src/lib/libc/locale/_wcstol.h \
    src/lib/libc/locale/_wcstoul.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/include/inttypes.h
diff -u src/include/inttypes.h:1.7 src/include/inttypes.h:1.8
--- src/include/inttypes.h:1.7	Sun Nov 15 22:21:03 2009
+++ src/include/inttypes.h	Tue Apr 16 16:52:13 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: inttypes.h,v 1.7 2009/11/15 22:21:03 christos Exp $	*/
+/*	$NetBSD: inttypes.h,v 1.8 2013/04/16 16:52:13 joerg Exp $	*/
 
 /*-
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -59,6 +59,17 @@ typedef struct {
 } imaxdiv_t;
 
 imaxdiv_t	imaxdiv(intmax_t, intmax_t);
+
+#if (_POSIX_C_SOURCE - 0) >= 200809L || defined(_NETBSD_SOURCE)
+#  ifndef __LOCALE_T_DECLARED
+typedef struct _locale		*locale_t;
+#  define __LOCALE_T_DECLARED
+#  endif
+intmax_t	wcstoimax_l(const wchar_t * __restrict,
+		    wchar_t ** __restrict, int, locale_t);
+uintmax_t	wcstoumax_l(const wchar_t * __restrict,
+		    wchar_t ** __restrict, int, locale_t);
+#endif
 __END_DECLS
 
 #endif /* !_INTTYPES_H_ */

Index: src/include/wchar.h
diff -u src/include/wchar.h:1.31 src/include/wchar.h:1.32
--- src/include/wchar.h:1.31	Tue Apr 16 11:55:02 2013
+++ src/include/wchar.h	Tue Apr 16 16:52:13 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: wchar.h,v 1.31 2013/04/16 11:55:02 joerg Exp $	*/
+/*	$NetBSD: wchar.h,v 1.32 2013/04/16 16:52:13 joerg Exp $	*/
 
 /*-
  * Copyright (c)1999 Citrus Project,
@@ -211,6 +211,16 @@ __END_DECLS
 typedef struct _locale		*locale_t;
 #  define __LOCALE_T_DECLARED
 #  endif
+long int wcstol_l(const wchar_t * __restrict, wchar_t ** __restrict, int,
+		  locale_t);
+unsigned long int wcstoul_l(const wchar_t * __restrict,
+	wchar_t ** __restrict, int, locale_t);
+/* LONGLONG */
+long long int wcstoll_l(const wchar_t * __restrict, wchar_t ** __restrict, int,
+			locale_t);
+/* LONGLONG */
+unsigned long long int wcstoull_l(const wchar_t * __restrict,
+				  wchar_t ** __restrict, int, locale_t);
 int	wcwidth_l(wchar_t, locale_t);
 int	wcswidth_l(const wchar_t *, size_t, locale_t);
 #endif

Index: src/lib/libc/locale/_wcstol.h
diff -u src/lib/libc/locale/_wcstol.h:1.4 src/lib/libc/locale/_wcstol.h:1.5
--- src/lib/libc/locale/_wcstol.h:1.4	Mon Jun 25 22:32:44 2012
+++ src/lib/libc/locale/_wcstol.h	Tue Apr 16 16:52:13 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: _wcstol.h,v 1.4 2012/06/25 22:32:44 abs Exp $ */
+/* $NetBSD: _wcstol.h,v 1.5 2013/04/16 16:52:13 joerg Exp $ */
 
 /*-
  * Copyright (c) 1990, 1993
@@ -44,8 +44,14 @@
  *      __INT_MAX : upper limit of the return type
  */
 
-__INT
-_FUNCNAME(const wchar_t *nptr, wchar_t **endptr, int base)
+#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 wchar_t *nptr, wchar_t **endptr,
+				   int base, locale_t loc)
 {
 	const wchar_t *s;
 	__INT acc, cutoff;
@@ -74,7 +80,7 @@ _FUNCNAME(const wchar_t *nptr, wchar_t *
 	s = nptr;
 	do {
 		wc = (wchar_t) *s++;
-	} while (iswspace(wc));
+	} while (iswspace_l(wc, loc));
 	if (wc == L'-') {
 		neg = 1;
 		wc = *s++;
@@ -139,3 +145,19 @@ _FUNCNAME(const wchar_t *nptr, wchar_t *
 		*endptr = __UNCONST(any ? s - 1 : nptr);
 	return (acc);
 }
+
+__INT
+_FUNCNAME(const wchar_t *nptr, wchar_t **endptr, int base)
+{
+	return INT_FUNCNAME(_int_, _FUNCNAME, _l)(nptr, endptr, base,
+						  *_current_locale());
+}
+
+__INT
+INT_FUNCNAME(, _FUNCNAME, _l)(const wchar_t *nptr, wchar_t **endptr,
+			      int base, locale_t loc)
+{
+	if (loc == NULL)
+		loc = _C_locale;
+	return INT_FUNCNAME(_int_, _FUNCNAME, _l)(nptr, endptr, base, loc);
+}
Index: src/lib/libc/locale/_wcstoul.h
diff -u src/lib/libc/locale/_wcstoul.h:1.4 src/lib/libc/locale/_wcstoul.h:1.5
--- src/lib/libc/locale/_wcstoul.h:1.4	Mon Jun 25 22:32:44 2012
+++ src/lib/libc/locale/_wcstoul.h	Tue Apr 16 16:52:13 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: _wcstoul.h,v 1.4 2012/06/25 22:32:44 abs Exp $ */
+/* $NetBSD: _wcstoul.h,v 1.5 2013/04/16 16:52:13 joerg Exp $ */
 
 /*
  * Copyright (c) 1990, 1993
@@ -43,8 +43,14 @@
  *      __UINT_MAX : upper limit of the return type
  */
 
-__UINT
-_FUNCNAME(const wchar_t *nptr, wchar_t **endptr, int base)
+#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 wchar_t *nptr, wchar_t **endptr,
+				   int base, locale_t loc)
 {
 	const wchar_t *s;
 	__UINT acc, cutoff;
@@ -68,7 +74,7 @@ _FUNCNAME(const wchar_t *nptr, wchar_t *
 	s = nptr;
 	do {
 		wc = (wchar_t) *s++;
-	} while (iswspace(wc));
+	} while (iswspace_l(wc, loc));
 	if (wc == L'-') {
 		neg = 1;
 		wc = *s++;
@@ -115,3 +121,19 @@ _FUNCNAME(const wchar_t *nptr, wchar_t *
 		*endptr = __UNCONST(any ? s - 1 : nptr);
 	return (acc);
 }
+
+__UINT
+_FUNCNAME(const wchar_t *nptr, wchar_t **endptr, int base)
+{
+	return INT_FUNCNAME(_int_, _FUNCNAME, _l)(nptr, endptr, base,
+						  *_current_locale());
+}
+
+__UINT
+INT_FUNCNAME(, _FUNCNAME, _l)(const wchar_t *nptr, wchar_t **endptr,
+			      int base, locale_t loc)
+{
+	if (loc == NULL)
+		loc = _C_locale;
+	return INT_FUNCNAME(_int_, _FUNCNAME, _l)(nptr, endptr, base, loc);
+}

Reply via email to