Commit: a40c2568ab607a7531633dbd6f7678778f1c2a0e
Author: Bastien Montagne
Date:   Mon Jun 16 20:17:22 2014 +0200
https://developer.blender.org/rBa40c2568ab607a7531633dbd6f7678778f1c2a0e

Some minor tweaking on temps buffers...

===================================================================

M       source/blender/python/intern/bpy_utils_units.c

===================================================================

diff --git a/source/blender/python/intern/bpy_utils_units.c 
b/source/blender/python/intern/bpy_utils_units.c
index b78e035..3fef39c 100644
--- a/source/blender/python/intern/bpy_utils_units.c
+++ b/source/blender/python/intern/bpy_utils_units.c
@@ -267,7 +267,6 @@ static PyObject *utils_units_to_string(BlenderUtilsUnits 
*UNUSED(self), PyObject
        double value = 0.0;
        int precision = 3, split_unit = false, compatible_unit = false;
 
-       char buf1[512], buf2[512], *str;
        int usys, ucat;
 
        if (!PyArg_ParseTupleAndKeywords(args, kw, 
"ssd|ipp:bpy.utils.units.to_string", (char **)kwlist,
@@ -280,17 +279,37 @@ static PyObject *utils_units_to_string(BlenderUtilsUnits 
*UNUSED(self), PyObject
                return NULL;
        }
 
-       bUnit_AsString(buf1, sizeof(buf1), value, precision, usys, ucat, 
(bool)split_unit, false);
+       {
+               /* Maximum expected length of string result:
+                *     * number itself: precision + decimal dot + up to four 
'above dot' digits.
+                *     * unit: up to ten chars (six currently, let's be 
conservative, also because we use some utf8 chars).
+                * This can be repeated twice (e.g. 1m20cm), and we add ten 
more spare chars (spaces, trailing '\0'...).
+                */
+               const size_t buflen = (precision + 5 + 10) * 2 + 10;
+               char *buf1 = MEM_mallocN(sizeof(char) * buflen, __func__), 
*buf2 = NULL, *str;
+               PyObject *result;
+
+               bUnit_AsString(buf1, buflen, value, precision, usys, ucat, 
(bool)split_unit, false);
+
+               if (compatible_unit) {
+                       buf2 = MEM_mallocN(sizeof(char) * buflen, __func__);
+                       bUnit_ToUnitAltName(buf2, buflen, buf1, usys, ucat);
+                       str = buf2;
+               }
+               else {
+                       str = buf1;
+               }
 
-       if (compatible_unit) {
-               bUnit_ToUnitAltName(buf2, sizeof(buf2), buf1, usys, ucat);
-               str = buf2;
-       }
-       else {
-               str = buf1;
-       }
+               /* Just for test, to remove before final commit! */
+               printf("%d for %d used...\n", (int)buflen, (int)strlen(str));
+
+               result = PyUnicode_FromString(str);
 
-       return PyUnicode_FromString(str);
+               MEM_SAFE_FREE(buf1);
+               MEM_SAFE_FREE(buf2);
+
+               return result;
+       }
 }
 
 static PyMethodDef utils_units_methods[] = {

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to