[Python-checkins] r75717 - python/trunk/Objects/floatobject.c

eric.smith python-checkins at python.org
Mon Oct 26 15:48:55 CET 2009


Author: eric.smith
Date: Mon Oct 26 15:48:55 2009
New Revision: 75717

Log:
Start to remove _PyOS_double_to_string, as mentioned in issue 7117.

Modified:
   python/trunk/Objects/floatobject.c

Modified: python/trunk/Objects/floatobject.c
==============================================================================
--- python/trunk/Objects/floatobject.c	(original)
+++ python/trunk/Objects/floatobject.c	Mon Oct 26 15:48:55 2009
@@ -335,58 +335,72 @@
 	return 0;
 }
 
-/* XXX PyFloat_AsString and PyFloat_AsReprString should be deprecated:
+/* XXX PyFloat_AsString and PyFloat_AsReprString are deprecated:
    XXX they pass a char buffer without passing a length.
 */
 void
 PyFloat_AsString(char *buf, PyFloatObject *v)
 {
-	_PyOS_double_to_string(buf, 100, v->ob_fval, 'g', PyFloat_STR_PRECISION,
-			       Py_DTSF_ADD_DOT_0, NULL);
+	char *tmp = PyOS_double_to_string(v->ob_fval, 'g',
+			PyFloat_STR_PRECISION,
+			Py_DTSF_ADD_DOT_0, NULL);
+	strcpy(buf, tmp);
+	PyMem_Free(tmp);
 }
 
 void
 PyFloat_AsReprString(char *buf, PyFloatObject *v)
 {
-	_PyOS_double_to_string(buf, 100, v->ob_fval, 'r', 0,
-			       Py_DTSF_ADD_DOT_0, NULL);
+	char * tmp = PyOS_double_to_string(v->ob_fval, 'r', 0,
+			Py_DTSF_ADD_DOT_0, NULL);
+	strcpy(buf, tmp);
+	PyMem_Free(tmp);
 }
 
 /* ARGSUSED */
 static int
 float_print(PyFloatObject *v, FILE *fp, int flags)
 {
-	char buf[100];
-        if (flags & Py_PRINT_RAW)
-            _PyOS_double_to_string(buf, sizeof(buf), v->ob_fval,
-                                   'g', PyFloat_STR_PRECISION,
-                                   Py_DTSF_ADD_DOT_0, NULL);
-        else
-            _PyOS_double_to_string(buf, sizeof(buf), v->ob_fval,
-                                   'r', 0, Py_DTSF_ADD_DOT_0, NULL);
+	char *buf;
+	if (flags & Py_PRINT_RAW)
+		buf = PyOS_double_to_string(v->ob_fval,
+					    'g', PyFloat_STR_PRECISION,
+					    Py_DTSF_ADD_DOT_0, NULL);
+	else
+		buf = PyOS_double_to_string(v->ob_fval,
+				    'r', 0, Py_DTSF_ADD_DOT_0, NULL);
 	Py_BEGIN_ALLOW_THREADS
 	fputs(buf, fp);
 	Py_END_ALLOW_THREADS
+	PyMem_Free(buf);
 	return 0;
 }
 
 static PyObject *
+float_str_or_repr(PyFloatObject *v, int precision, char format_code)
+{
+	PyObject *result;
+	char *buf = PyOS_double_to_string(PyFloat_AS_DOUBLE(v),
+				      format_code, precision,
+				      Py_DTSF_ADD_DOT_0,
+				      NULL);
+	if (!buf)
+		return PyErr_NoMemory();
+	result = PyString_FromString(buf);
+	PyMem_Free(buf);
+	return result;
+}
+
+static PyObject *
 float_repr(PyFloatObject *v)
 {
-	char buf[100];
-	_PyOS_double_to_string(buf, sizeof(buf), v->ob_fval, 'r', 0,
-			       Py_DTSF_ADD_DOT_0, NULL);
-	return PyString_FromString(buf);
+	return float_str_or_repr(v, 0, 'r');
 }
 
 static PyObject *
 float_str(PyFloatObject *v)
 {
-	char buf[100];
-	_PyOS_double_to_string(buf, sizeof(buf), v->ob_fval, 'g',
-                               PyFloat_STR_PRECISION,
-			       Py_DTSF_ADD_DOT_0, NULL);
-	return PyString_FromString(buf);
+	return float_str_or_repr(v, PyFloat_STR_PRECISION, 'g');
 }
 
 /* Comparison is pretty much a nightmare.  When comparing float to float,


More information about the Python-checkins mailing list