]> granicus.if.org Git - python/commitdiff
Issue #5835: Deprecate PyOS_ascii_formatd.
authorEric Smith <eric@trueblade.com>
Sun, 26 Apr 2009 21:35:14 +0000 (21:35 +0000)
committerEric Smith <eric@trueblade.com>
Sun, 26 Apr 2009 21:35:14 +0000 (21:35 +0000)
Doc/c-api/conversion.rst
Misc/NEWS
Python/pystrtod.c

index 1c19879007f6d4b25e34dfa74427c73ad2a4db40..a2e25420758a3662144c9d0eba6e3f43993c324b 100644 (file)
@@ -73,6 +73,43 @@ The following functions provide locale-independent string to number conversions.
    The return value is a pointer to *buffer* with the converted string or NULL if
    the conversion failed.
 
+   .. deprecated:: 3.1
+     Use :cfunc:`PyOS_double_to_string` instead.
+
+
+.. cfunction:: char* PyOS_double_to_string(double val, char format_code, int precision, int flags, int *ptype)
+
+   Convert a :ctype:`double` *val* to a string using supplied
+   *format_code*, *precision*, and *flags*.
+
+   *format_code* must be one of ``'e'``, ``'E'``, ``'f'``, ``'F'``, ``'g'``,
+   ``'G'``, ``'s'``, or ``'r'``.  For ``'s'`` and ``'r'``, the supplied
+   *precision* must be 0 and is ignored.  These specify the standard
+   :func:`str` and :func:`repr` formats, respectively.
+
+   *flags* can be zero or more of the values *Py_DTSF_SIGN*,
+   *Py_DTSF_ADD_DOT_0*, or *Py_DTSF_ALT*, or-ed together:
+
+   * *Py_DTSF_SIGN* means to always precede the returned string with a sign
+     character, even if *val* is non-negative.
+
+   * *Py_DTSF_ADD_DOT_0* means to ensure that the returned string will not look
+     like an integer.
+
+   * *Py_DTSF_ALT* means to apply "alternate" formatting rules.  See the
+     documentation for the :cfunc:`PyOS_snprintf` ``'#'`` specifier for
+     details.
+
+   If *ptype* is non-NULL, then the value it points to will be set to one of
+   *Py_DTST_FINITE*, *Py_DTST_INFINITE*, or *Py_DTST_NAN*, signifying that
+   *val* is a finite number, an infinite number, or not a number, respectively.
+
+   The return value is a pointer to *buffer* with the converted string or
+   *NULL* if the conversion failed. The caller is responsible for freeing the
+   returned string by calling :cfunc:`PyMem_Free`.
+
+   .. versionadded:: 3.1
+
 
 .. cfunction:: double PyOS_ascii_atof(const char *nptr)
 
index 8d98720172a9e30afd9976283a0d265468c3c7ed..2240c6210dfd5f29570361c4d3bdd2429163bd23 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,8 @@ What's New in Python 3.1 beta 1?
 Core and Builtins
 -----------------
 
+- Issue #5835: Deprecate PyOS_ascii_formatd.
+
 - Issue #4971: Fix titlecase for characters that are their own
   titlecase, but not their own uppercase.
 
index b5dd93d17a8dcb9449ebec18c7844f013852275c..872cc37ed7c502bb83cfffc0695ba58fb930dd1e 100644 (file)
@@ -433,7 +433,7 @@ ensure_decimal_point(char* buffer, size_t buf_size)
  * Return value: The pointer to the buffer with the converted string.
  **/
 char *
-PyOS_ascii_formatd(char       *buffer, 
+_PyOS_ascii_formatd(char       *buffer, 
                   size_t      buf_size, 
                   const char *format, 
                   double      d)
@@ -508,6 +508,20 @@ PyOS_ascii_formatd(char       *buffer,
        return buffer;
 }
 
+char *
+PyOS_ascii_formatd(char       *buffer, 
+                  size_t      buf_size, 
+                  const char *format, 
+                  double      d)
+{
+       if (PyErr_WarnEx(PyExc_DeprecationWarning,
+                        "PyOS_ascii_formatd is deprecated, "
+                        "use PyOS_double_to_string instead", 1) < 0)
+               return NULL;
+
+       return _PyOS_ascii_formatd(buffer, buf_size, format, d);
+}
+
 #ifdef PY_NO_SHORT_FLOAT_REPR
 
 /* The fallback code to use if _Py_dg_dtoa is not available. */
@@ -638,8 +652,10 @@ PyAPI_FUNC(char *) PyOS_double_to_string(double val,
                if ((flags & Py_DTSF_ADD_DOT_0) && (format_code != 'e'))
                        format_code = 'Z';
 
-               PyOS_snprintf(format, 32, "%%%s.%i%c", (flags & Py_DTSF_ALT ? "#" : ""), precision, format_code);
-               PyOS_ascii_formatd(buf, sizeof(buf), format, val);
+               PyOS_snprintf(format, sizeof(format), "%%%s.%i%c",
+                             (flags & Py_DTSF_ALT ? "#" : ""), precision,
+                             format_code);
+               _PyOS_ascii_formatd(buf, sizeof(buf), format, val);
                /* remove trailing zeros if necessary */
                if (strip_trailing_zeros)
                        remove_trailing_zeros(buf);