bug-gnulib
[Top][All Lists]
Advanced

[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
+




reply via email to

[Prev in Thread] Current Thread [Next in Thread]