From b05d3be2f1cd448a67f15bc602a78eb22d678ab2 Mon Sep 17 00:00:00 2001 From: Eric Smith Date: Mon, 26 Oct 2009 15:06:39 +0000 Subject: [PATCH] Continue removing _PyOS_double_to_string, as mentioned in issue 7117. --- Modules/cPickle.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/Modules/cPickle.c b/Modules/cPickle.c index bbc14bf4d49..a2261cc9da3 100644 --- a/Modules/cPickle.c +++ b/Modules/cPickle.c @@ -1170,15 +1170,29 @@ save_float(Picklerobject *self, PyObject *args) return -1; } else { - char c_str[250]; - c_str[0] = FLOAT; - _PyOS_double_to_string(c_str + 1, sizeof(c_str) - 2, x, 'g', - 17, 0, NULL); - /* Extend the formatted string with a newline character */ - strcat(c_str, "\n"); + int result = -1; + char *buf = NULL; + char op = FLOAT; - if (self->write_func(self, c_str, strlen(c_str)) < 0) - return -1; + if (self->write_func(self, &op, 1) < 0) + goto done; + + buf = PyOS_double_to_string(x, 'g', 17, 0, NULL); + if (!buf) { + PyErr_NoMemory(); + goto done; + } + + if (self->write_func(self, buf, strlen(buf)) < 0) + goto done; + + if (self->write_func(self, "\n", 1) < 0) + goto done; + + result = 0; +done: + PyMem_Free(buf); + return result; } return 0;