[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug-gnulib] new gnulib modules c-strtod, c-strtold
From: |
Paul Eggert |
Subject: |
[Bug-gnulib] new gnulib modules c-strtod, c-strtold |
Date: |
Thu, 05 Aug 2004 16:30:24 -0700 |
User-agent: |
Gnus/5.1006 (Gnus v5.10.6) Emacs/21.3 (gnu/linux) |
I installed these two new modules from coreutils.
They act like strtod and strtold, except they always use the C locale.
On recent glibc hosts they do this reentrantly.
2004-08-05 Paul Eggert <address@hidden>
* lib/c-strtod.h, lib/c-strtod.c, lib/c-strtold.c, m4/c-strtod.m4,
modules/c-strtod, modules/c-strtold: New files.
--- /dev/null 2003-03-18 13:55:57 -0800
+++ lib/c-strtod.h 2004-08-04 16:58:01 -0700
@@ -0,0 +1,2 @@
+double c_strtod (char const *, char **);
+long double c_strtold (char const *, char **);
--- /dev/null 2003-03-18 13:55:57 -0800
+++ lib/c-strtod.c 2004-08-04 16:58:01 -0700
@@ -0,0 +1,81 @@
+/* Convert string to double, using the C locale.
+
+ Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+/* Written by Paul Eggert. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "c-strtod.h"
+
+#include <locale.h>
+#include <stdlib.h>
+
+#include "xalloc.h"
+
+#if LONG
+# define C_STRTOD c_strtold
+# define DOUBLE long double
+# define STRTOD_L strtold_l
+#else
+# define C_STRTOD c_strtod
+# define DOUBLE double
+# define STRTOD_L strtod_l
+#endif
+
+/* c_strtold falls back on strtod if strtold isn't declared. */
+#if LONG && HAVE_DECL_STRTOLD
+# define STRTOD strtold
+#else
+# define STRTOD strtod
+#endif
+
+DOUBLE
+C_STRTOD (char const *nptr, char **endptr)
+{
+ DOUBLE r;
+
+#ifdef LC_ALL_MASK
+
+ locale_t c_locale = newlocale (LC_ALL_MASK, "C", 0);
+ r = STRTOD_L (nptr, endptr, c_locale);
+ freelocale (c_locale);
+
+#else
+
+ char *saved_locale = setlocale (LC_NUMERIC, NULL);
+
+ if (saved_locale)
+ {
+ saved_locale = xstrdup (saved_locale);
+ setlocale (LC_NUMERIC, "C");
+ }
+
+ r = STRTOD (nptr, endptr);
+
+ if (saved_locale)
+ {
+ setlocale (LC_NUMERIC, saved_locale);
+ free (saved_locale);
+ }
+
+#endif
+
+ return r;
+}
--- /dev/null 2003-03-18 13:55:57 -0800
+++ lib/c-strtold.c 2004-08-04 16:58:01 -0700
@@ -0,0 +1,2 @@
+#define LONG 1
+#include "c-strtod.c"
--- /dev/null 2003-03-18 13:55:57 -0800
+++ m4/c-strtod.m4 2004-08-04 16:18:00 -0700
@@ -0,0 +1,33 @@
+# c-strtod.m4 serial 3
+
+# Copyright (C) 2004 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program 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 General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# Written by Paul Eggert.
+
+AC_DEFUN([gl_C_STRTOD],
+[
+ dnl Prerequisites of lib/c-strtod.c.
+ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+ :
+])
+
+AC_DEFUN([gl_C_STRTOLD],
+[
+ dnl Prerequisites of lib/c-strtold.c.
+ AC_REQUIRE([gl_C_STRTOD])
+ AC_CHECK_DECLS_ONCE([strtold])
+])
--- /dev/null 2003-03-18 13:55:57 -0800
+++ modules/c-strtod 2004-08-05 16:22:05 -0700
@@ -0,0 +1,22 @@
+Description:
+Convert string to double in C locale.
+
+Files:
+lib/c-strtod.h
+lib/c-strtod.c
+
+Depends-on:
+extensions
+
+configure.ac:
+gl_C_STRTOD
+
+Makefile.am:
+lib_SOURCES += c-strtod.h c-strtod.c
+
+Include:
+"c-strtod.h"
+
+Maintainer:
+Paul Eggert, Jim Meyering
+
--- /dev/null 2003-03-18 13:55:57 -0800
+++ modules/c-strtold 2004-08-05 16:22:18 -0700
@@ -0,0 +1,23 @@
+Description:
+Convert string to long double in C locale.
+
+Files:
+lib/c-strtod.h
+lib/c-strtod.c
+lib/c-strtold.c
+
+Depends-on:
+extensions
+
+configure.ac:
+gl_C_STRTOLD
+
+Makefile.am:
+lib_SOURCES += c-strtod.h c-strtod.c c-strtold.c
+
+Include:
+"c-strtod.h"
+
+Maintainer:
+Paul Eggert, Jim Meyering
+
- [Bug-gnulib] new gnulib modules c-strtod, c-strtold,
Paul Eggert <=