@@ -981,6 +981,56 @@ char *__append_to_string(char *p, char **buffer, size_t *buffersize,
981
981
return p;
982
982
}
983
983
984
+
985
+ char *__add_number (double val, const char *format, int precision,
986
+ char **buffer, char *p, size_t *buffersize)
987
+ {
988
+ char *result;
989
+
990
+ #if PY_VERSION_HEX >= 0x02070000
991
+ char *str;
992
+ str = PyOS_double_to_string (val, format[0 ], precision, 0 , NULL );
993
+ #else
994
+ char str[64 ];
995
+ PyOS_ascii_formatd (str, 64 , format, val);
996
+ #endif
997
+
998
+ // Delete trailing zeros and decimal point
999
+ char *q = str;
1000
+ for (; *q != 0 ; ++q) {
1001
+ // Find the end of the string
1002
+ }
1003
+
1004
+ --q;
1005
+ for (; q >= str && *q == ' 0' ; --q) {
1006
+ // Rewind through all the zeros
1007
+ }
1008
+
1009
+ // If the end is a decimal qoint, delete that too
1010
+ if (q >= str && *q == ' .' ) {
1011
+ --q;
1012
+ }
1013
+
1014
+ // Truncate the string
1015
+ ++q;
1016
+ *q = 0 ;
1017
+
1018
+ #if PY_VERSION_HEX >= 0x02070000
1019
+ if ((result = __append_to_string (p, buffer, buffersize, str)) == NULL ) {
1020
+ PyMem_Free (str);
1021
+ return NULL ;
1022
+ }
1023
+ PyMem_Free (str);
1024
+ #else
1025
+ if ((result = __append_to_string (p, buffer, buffersize, str)) == NULL ) {
1026
+ return NULL ;
1027
+ }
1028
+ #endif
1029
+
1030
+ return result;
1031
+ }
1032
+
1033
+
984
1034
template <class PathIterator >
985
1035
int __convert_to_string (PathIterator &path,
986
1036
int precision,
@@ -989,7 +1039,9 @@ int __convert_to_string(PathIterator &path,
989
1039
char **buffer,
990
1040
size_t *buffersize)
991
1041
{
992
- #if PY_VERSION_HEX < 0x02070000
1042
+ #if PY_VERSION_HEX >= 0x02070000
1043
+ const char *format = " f" ;
1044
+ #else
993
1045
char format[64 ];
994
1046
snprintf (format, 64 , " %s.%df" , " %" , precision);
995
1047
#endif
@@ -1031,31 +1083,10 @@ int __convert_to_string(PathIterator &path,
1031
1083
}
1032
1084
1033
1085
for (int i = 0 ; i < size; ++i) {
1034
- #if PY_VERSION_HEX >= 0x02070000
1035
- char *str;
1036
- str = PyOS_double_to_string (x[i], ' f' , precision, 0 , NULL );
1037
- if ((p = __append_to_string (p, buffer, buffersize, str)) == NULL ) {
1038
- PyMem_Free (str);
1039
- return 1 ;
1040
- }
1041
- PyMem_Free (str);
1042
- if ((p = __append_to_string (p, buffer, buffersize, " " )) == NULL ) return 1 ;
1043
- str = PyOS_double_to_string (y[i], ' f' , precision, 0 , NULL );
1044
- if ((p = __append_to_string (p, buffer, buffersize, str)) == NULL ) {
1045
- PyMem_Free (str);
1046
- return 1 ;
1047
- }
1048
- PyMem_Free (str);
1049
- if ((p = __append_to_string (p, buffer, buffersize, " " )) == NULL ) return 1 ;
1050
- #else
1051
- char str[64 ];
1052
- PyOS_ascii_formatd (str, 64 , format, x[i]);
1053
- if ((p = __append_to_string (p, buffer, buffersize, str)) == NULL ) return 1 ;
1086
+ if ((p = __add_number (x[i], format, precision, buffer, p, buffersize)) == NULL ) return 1 ;
1054
1087
if ((p = __append_to_string (p, buffer, buffersize, " " )) == NULL ) return 1 ;
1055
- PyOS_ascii_formatd (str, 64 , format, y[i]);
1056
- if ((p = __append_to_string (p, buffer, buffersize, str)) == NULL ) return 1 ;
1088
+ if ((p = __add_number (y[i], format, precision, buffer, p, buffersize)) == NULL ) return 1 ;
1057
1089
if ((p = __append_to_string (p, buffer, buffersize, " " )) == NULL ) return 1 ;
1058
- #endif
1059
1090
}
1060
1091
1061
1092
if (postfix) {
0 commit comments