Skip to content

Commit 5b7266d

Browse files
Rock Libehackett
authored andcommitted
INT2STRING to use Stack based solution
1 parent baf53be commit 5b7266d

File tree

1 file changed

+14
-25
lines changed

1 file changed

+14
-25
lines changed

bson/_cbsonmodule.c

Lines changed: 14 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -82,29 +82,23 @@ static struct module_state _state;
8282
* must be explicitly free'd when done being used.
8383
*/
8484
#if defined(_MSC_VER) && (_MSC_VER >= 1400)
85-
#define INT2STRING(buffer, i) \
86-
*(buffer) = malloc(_scprintf("%d", (i)) + 1), \
87-
(!(buffer) ? \
88-
-1 : \
89-
_snprintf_s(*(buffer), \
90-
_scprintf("%d", (i)) + 1, \
91-
_scprintf("%d", (i)) + 1, \
92-
"%d", \
93-
(i)))
85+
#define INT2STRING(buffer, i) \
86+
_snprintf_s((buffer), \
87+
_scprintf("%d", (i)) + 1, \
88+
_scprintf("%d", (i)) + 1, \
89+
"%d", \
90+
(i))
9491
#define STRCAT(dest, n, src) strcat_s((dest), (n), (src))
9592
#else
96-
#define INT2STRING(buffer, i) \
97-
*(buffer) = malloc(_scprintf("%d", (i)) + 1), \
98-
(!(buffer) ? \
99-
-1 : \
100-
_snprintf(*(buffer), \
101-
_scprintf("%d", (i)) + 1, \
102-
"%d", \
103-
(i)))
93+
#define INT2STRING(buffer, i) \
94+
_snprintf((buffer), \
95+
_scprintf("%d", (i)) + 1, \
96+
"%d", \
97+
(i))
10498
#define STRCAT(dest, n, src) strcat((dest), (src))
10599
#endif
106100
#else
107-
#define INT2STRING(buffer, i) asprintf((buffer), "%d", (i))
101+
#define INT2STRING(buffer, i) snprintf((buffer), sizeof((buffer)), "%d", (i))
108102
#define STRCAT(dest, n, src) strcat((dest), (src))
109103
#endif
110104

@@ -464,22 +458,17 @@ static int _write_element_to_buffer(PyObject* self, buffer_t buffer, int type_by
464458
}
465459
for(i = 0; i < items; i++) {
466460
int list_type_byte = buffer_save_space(buffer, 1);
467-
char* name = NULL;
461+
char name[16];
468462
PyObject* item_value;
469463

470464
if (list_type_byte == -1) {
471465
PyErr_NoMemory();
472466
return 0;
473467
}
474-
if (INT2STRING(&name, (int)i) < 0 || !name) {
475-
PyErr_NoMemory();
476-
return 0;
477-
}
468+
INT2STRING(name, (int)i);
478469
if (!buffer_write_bytes(buffer, name, (int)strlen(name) + 1)) {
479-
free(name);
480470
return 0;
481471
}
482-
free(name);
483472

484473
if (!(item_value = PySequence_GetItem(value, i)))
485474
return 0;

0 commit comments

Comments
 (0)