Skip to content

Commit be3008a

Browse files
bcwarnerBen Warner
andauthored
PYTHON-2110 Refactored some C to avoid symbol conflicts (#968)
* Refactored to avoid symbol conflicts * Forgot a replacement * Found a symbol * Undid symbol replacement for PyInit__cmessage * Changed cbson too Co-authored-by: Ben Warner <[email protected]>
1 parent b8653b0 commit be3008a

File tree

9 files changed

+156
-155
lines changed

9 files changed

+156
-155
lines changed

bson/_cbsonmodule.c

Lines changed: 45 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ static PyObject* datetime_from_millis(long long millis) {
153153
int microseconds = diff * 1000;
154154
Time64_T seconds = (millis - diff) / 1000;
155155
struct TM timeinfo;
156-
gmtime64_r(&seconds, &timeinfo);
156+
cbson_gmtime64_r(&seconds, &timeinfo);
157157

158158
return PyDateTime_FromDateAndTime(timeinfo.tm_year + 1900,
159159
timeinfo.tm_mon + 1,
@@ -175,14 +175,14 @@ static long long millis_from_datetime(PyObject* datetime) {
175175
timeinfo.tm_min = PyDateTime_DATE_GET_MINUTE(datetime);
176176
timeinfo.tm_sec = PyDateTime_DATE_GET_SECOND(datetime);
177177

178-
millis = timegm64(&timeinfo) * 1000;
178+
millis = cbson_timegm64(&timeinfo) * 1000;
179179
millis += PyDateTime_DATE_GET_MICROSECOND(datetime) / 1000;
180180
return millis;
181181
}
182182

183183
/* Just make this compatible w/ the old API. */
184184
int buffer_write_bytes(buffer_t buffer, const char* data, int size) {
185-
if (buffer_write(buffer, data, size)) {
185+
if (pymongo_buffer_write(buffer, data, size)) {
186186
return 0;
187187
}
188188
return 1;
@@ -207,7 +207,7 @@ void buffer_write_int32_at_position(buffer_t buffer,
207207
int position,
208208
int32_t data) {
209209
uint32_t data_le = BSON_UINT32_TO_LE(data);
210-
memcpy(buffer_get_buffer(buffer) + position, &data_le, 4);
210+
memcpy(pymongo_buffer_get_buffer(buffer) + position, &data_le, 4);
211211
}
212212

213213
static int write_unicode(buffer_t buffer, PyObject* py_string) {
@@ -419,7 +419,7 @@ static long _type_marker(PyObject* object) {
419419
* Return 1 on success. options->document_class is a new reference.
420420
* Return 0 on failure.
421421
*/
422-
int convert_type_registry(PyObject* registry_obj, type_registry_t* registry) {
422+
int cbson_convert_type_registry(PyObject* registry_obj, type_registry_t* registry) {
423423
registry->encoder_map = NULL;
424424
registry->decoder_map = NULL;
425425
registry->fallback_encoder = NULL;
@@ -481,7 +481,7 @@ int convert_codec_options(PyObject* options_obj, void* p) {
481481
return 0;
482482
}
483483

484-
if (!convert_type_registry(type_registry_obj,
484+
if (!cbson_convert_type_registry(type_registry_obj,
485485
&options->type_registry)) {
486486
return 0;
487487
}
@@ -597,7 +597,7 @@ static int _write_regex_to_buffer(
597597
Py_DECREF(encoded_pattern);
598598
return 0;
599599
}
600-
status = check_string((const unsigned char*)pattern_data,
600+
status = cbson_check_string((const unsigned char*)pattern_data,
601601
pattern_length, check_utf8, 1);
602602
if (status == NOT_UTF_8) {
603603
PyObject* InvalidStringData = _error("InvalidStringData");
@@ -649,7 +649,7 @@ static int _write_regex_to_buffer(
649649
if (!buffer_write_bytes(buffer, flags, flags_length)) {
650650
return 0;
651651
}
652-
*(buffer_get_buffer(buffer) + type_byte) = 0x0B;
652+
*(pymongo_buffer_get_buffer(buffer) + type_byte) = 0x0B;
653653
return 1;
654654
}
655655

@@ -687,7 +687,7 @@ static int _write_element_to_buffer(PyObject* self, buffer_t buffer,
687687
const char* data;
688688
int size;
689689

690-
*(buffer_get_buffer(buffer) + type_byte) = 0x05;
690+
*(pymongo_buffer_get_buffer(buffer) + type_byte) = 0x05;
691691
subtype_object = PyObject_GetAttrString(value, "subtype");
692692
if (!subtype_object) {
693693
return 0;
@@ -750,7 +750,7 @@ static int _write_element_to_buffer(PyObject* self, buffer_t buffer,
750750
return 0;
751751
}
752752
Py_DECREF(pystring);
753-
*(buffer_get_buffer(buffer) + type_byte) = 0x07;
753+
*(pymongo_buffer_get_buffer(buffer) + type_byte) = 0x07;
754754
return 1;
755755
}
756756
case 11:
@@ -772,15 +772,15 @@ static int _write_element_to_buffer(PyObject* self, buffer_t buffer,
772772

773773
if (scope == Py_None) {
774774
Py_DECREF(scope);
775-
*(buffer_get_buffer(buffer) + type_byte) = 0x0D;
775+
*(pymongo_buffer_get_buffer(buffer) + type_byte) = 0x0D;
776776
return write_string(buffer, value);
777777
}
778778

779-
*(buffer_get_buffer(buffer) + type_byte) = 0x0F;
779+
*(pymongo_buffer_get_buffer(buffer) + type_byte) = 0x0F;
780780

781-
start_position = buffer_get_position(buffer);
781+
start_position = pymongo_buffer_get_position(buffer);
782782
/* save space for length */
783-
length_location = buffer_save_space(buffer, 4);
783+
length_location = pymongo_buffer_save_space(buffer, 4);
784784
if (length_location == -1) {
785785
Py_DECREF(scope);
786786
return 0;
@@ -797,7 +797,7 @@ static int _write_element_to_buffer(PyObject* self, buffer_t buffer,
797797
}
798798
Py_DECREF(scope);
799799

800-
length = buffer_get_position(buffer) - start_position;
800+
length = pymongo_buffer_get_position(buffer) - start_position;
801801
buffer_write_int32_at_position(
802802
buffer, length_location, (int32_t)length);
803803
return 1;
@@ -834,7 +834,7 @@ static int _write_element_to_buffer(PyObject* self, buffer_t buffer,
834834
return 0;
835835
}
836836

837-
*(buffer_get_buffer(buffer) + type_byte) = 0x11;
837+
*(pymongo_buffer_get_buffer(buffer) + type_byte) = 0x11;
838838
return 1;
839839
}
840840
case 18:
@@ -849,7 +849,7 @@ static int _write_element_to_buffer(PyObject* self, buffer_t buffer,
849849
if (!buffer_write_int64(buffer, (int64_t)ll)) {
850850
return 0;
851851
}
852-
*(buffer_get_buffer(buffer) + type_byte) = 0x12;
852+
*(pymongo_buffer_get_buffer(buffer) + type_byte) = 0x12;
853853
return 1;
854854
}
855855
case 19:
@@ -870,7 +870,7 @@ static int _write_element_to_buffer(PyObject* self, buffer_t buffer,
870870
return 0;
871871
}
872872
Py_DECREF(pystring);
873-
*(buffer_get_buffer(buffer) + type_byte) = 0x13;
873+
*(pymongo_buffer_get_buffer(buffer) + type_byte) = 0x13;
874874
return 1;
875875
}
876876
case 100:
@@ -885,7 +885,7 @@ static int _write_element_to_buffer(PyObject* self, buffer_t buffer,
885885
return 0;
886886
}
887887
Py_DECREF(as_doc);
888-
*(buffer_get_buffer(buffer) + type_byte) = 0x03;
888+
*(pymongo_buffer_get_buffer(buffer) + type_byte) = 0x03;
889889
return 1;
890890
}
891891
case 101:
@@ -894,19 +894,19 @@ static int _write_element_to_buffer(PyObject* self, buffer_t buffer,
894894
if (!write_raw_doc(buffer, value)) {
895895
return 0;
896896
}
897-
*(buffer_get_buffer(buffer) + type_byte) = 0x03;
897+
*(pymongo_buffer_get_buffer(buffer) + type_byte) = 0x03;
898898
return 1;
899899
}
900900
case 255:
901901
{
902902
/* MinKey */
903-
*(buffer_get_buffer(buffer) + type_byte) = 0xFF;
903+
*(pymongo_buffer_get_buffer(buffer) + type_byte) = 0xFF;
904904
return 1;
905905
}
906906
case 127:
907907
{
908908
/* MaxKey */
909-
*(buffer_get_buffer(buffer) + type_byte) = 0x7F;
909+
*(pymongo_buffer_get_buffer(buffer) + type_byte) = 0x7F;
910910
return 1;
911911
}
912912
}
@@ -915,7 +915,7 @@ static int _write_element_to_buffer(PyObject* self, buffer_t buffer,
915915

916916
if (PyBool_Check(value)) {
917917
const char c = (value == Py_True) ? 0x01 : 0x00;
918-
*(buffer_get_buffer(buffer) + type_byte) = 0x08;
918+
*(pymongo_buffer_get_buffer(buffer) + type_byte) = 0x08;
919919
return buffer_write_bytes(buffer, &c, 1);
920920
}
921921
else if (PyLong_Check(value)) {
@@ -931,20 +931,20 @@ static int _write_element_to_buffer(PyObject* self, buffer_t buffer,
931931
"MongoDB can only handle up to 8-byte ints");
932932
return 0;
933933
}
934-
*(buffer_get_buffer(buffer) + type_byte) = 0x12;
934+
*(pymongo_buffer_get_buffer(buffer) + type_byte) = 0x12;
935935
return buffer_write_int64(buffer, (int64_t)long_long_value);
936936
}
937-
*(buffer_get_buffer(buffer) + type_byte) = 0x10;
937+
*(pymongo_buffer_get_buffer(buffer) + type_byte) = 0x10;
938938
return buffer_write_int32(buffer, (int32_t)int_value);
939939
} else if (PyFloat_Check(value)) {
940940
const double d = PyFloat_AsDouble(value);
941-
*(buffer_get_buffer(buffer) + type_byte) = 0x01;
941+
*(pymongo_buffer_get_buffer(buffer) + type_byte) = 0x01;
942942
return buffer_write_double(buffer, d);
943943
} else if (value == Py_None) {
944-
*(buffer_get_buffer(buffer) + type_byte) = 0x0A;
944+
*(pymongo_buffer_get_buffer(buffer) + type_byte) = 0x0A;
945945
return 1;
946946
} else if (PyDict_Check(value)) {
947-
*(buffer_get_buffer(buffer) + type_byte) = 0x03;
947+
*(pymongo_buffer_get_buffer(buffer) + type_byte) = 0x03;
948948
return write_dict(self, buffer, value, check_keys, options, 0);
949949
} else if (PyList_Check(value) || PyTuple_Check(value)) {
950950
Py_ssize_t items, i;
@@ -953,11 +953,11 @@ static int _write_element_to_buffer(PyObject* self, buffer_t buffer,
953953
length;
954954
char zero = 0;
955955

956-
*(buffer_get_buffer(buffer) + type_byte) = 0x04;
957-
start_position = buffer_get_position(buffer);
956+
*(pymongo_buffer_get_buffer(buffer) + type_byte) = 0x04;
957+
start_position = pymongo_buffer_get_position(buffer);
958958

959959
/* save space for length */
960-
length_location = buffer_save_space(buffer, 4);
960+
length_location = pymongo_buffer_save_space(buffer, 4);
961961
if (length_location == -1) {
962962
return 0;
963963
}
@@ -972,7 +972,7 @@ static int _write_element_to_buffer(PyObject* self, buffer_t buffer,
972972
return 0;
973973
}
974974
for(i = 0; i < items; i++) {
975-
int list_type_byte = buffer_save_space(buffer, 1);
975+
int list_type_byte = pymongo_buffer_save_space(buffer, 1);
976976
char name[16];
977977
PyObject* item_value;
978978

@@ -999,7 +999,7 @@ static int _write_element_to_buffer(PyObject* self, buffer_t buffer,
999999
if (!buffer_write_bytes(buffer, &zero, 1)) {
10001000
return 0;
10011001
}
1002-
length = buffer_get_position(buffer) - start_position;
1002+
length = pymongo_buffer_get_position(buffer) - start_position;
10031003
buffer_write_int32_at_position(
10041004
buffer, length_location, (int32_t)length);
10051005
return 1;
@@ -1012,7 +1012,7 @@ static int _write_element_to_buffer(PyObject* self, buffer_t buffer,
10121012
return 0;
10131013
if ((size = _downcast_and_check(PyBytes_GET_SIZE(value), 0)) == -1)
10141014
return 0;
1015-
*(buffer_get_buffer(buffer) + type_byte) = 0x05;
1015+
*(pymongo_buffer_get_buffer(buffer) + type_byte) = 0x05;
10161016
if (!buffer_write_int32(buffer, (int32_t)size)) {
10171017
return 0;
10181018
}
@@ -1024,7 +1024,7 @@ static int _write_element_to_buffer(PyObject* self, buffer_t buffer,
10241024
}
10251025
return 1;
10261026
} else if (PyUnicode_Check(value)) {
1027-
*(buffer_get_buffer(buffer) + type_byte) = 0x02;
1027+
*(pymongo_buffer_get_buffer(buffer) + type_byte) = 0x02;
10281028
return write_unicode(buffer, value);
10291029
} else if (PyDateTime_Check(value)) {
10301030
long long millis;
@@ -1042,7 +1042,7 @@ static int _write_element_to_buffer(PyObject* self, buffer_t buffer,
10421042
} else {
10431043
millis = millis_from_datetime(value);
10441044
}
1045-
*(buffer_get_buffer(buffer) + type_byte) = 0x09;
1045+
*(pymongo_buffer_get_buffer(buffer) + type_byte) = 0x09;
10461046
return buffer_write_int64(buffer, (int64_t)millis);
10471047
} else if (PyObject_TypeCheck(value, state->REType)) {
10481048
return _write_regex_to_buffer(buffer, type_byte, value);
@@ -1059,7 +1059,7 @@ static int _write_element_to_buffer(PyObject* self, buffer_t buffer,
10591059
if (PyErr_Occurred()) {
10601060
return 0;
10611061
}
1062-
*(buffer_get_buffer(buffer) + type_byte) = 0x03;
1062+
*(pymongo_buffer_get_buffer(buffer) + type_byte) = 0x03;
10631063
return write_dict(self, buffer, value, check_keys, options, 0);
10641064
}
10651065

@@ -1189,7 +1189,7 @@ int write_pair(PyObject* self, buffer_t buffer, const char* name, int name_lengt
11891189
return 1;
11901190
}
11911191

1192-
type_byte = buffer_save_space(buffer, 1);
1192+
type_byte = pymongo_buffer_save_space(buffer, 1);
11931193
if (type_byte == -1) {
11941194
return 0;
11951195
}
@@ -1362,7 +1362,7 @@ int write_dict(PyObject* self, buffer_t buffer,
13621362
}
13631363
}
13641364

1365-
length_location = buffer_save_space(buffer, 4);
1365+
length_location = pymongo_buffer_save_space(buffer, 4);
13661366
if (length_location == -1) {
13671367
return 0;
13681368
}
@@ -1429,7 +1429,7 @@ int write_dict(PyObject* self, buffer_t buffer,
14291429
if (!buffer_write_bytes(buffer, &zero, 1)) {
14301430
return 0;
14311431
}
1432-
length = buffer_get_position(buffer) - length_location;
1432+
length = pymongo_buffer_get_position(buffer) - length_location;
14331433
buffer_write_int32_at_position(
14341434
buffer, length_location, (int32_t)length);
14351435
return length;
@@ -1464,23 +1464,23 @@ static PyObject* _cbson_dict_to_bson(PyObject* self, PyObject* args) {
14641464
return raw_bson_document_bytes_obj;
14651465
}
14661466

1467-
buffer = buffer_new();
1467+
buffer = pymongo_buffer_new();
14681468
if (!buffer) {
14691469
destroy_codec_options(&options);
14701470
return NULL;
14711471
}
14721472

14731473
if (!write_dict(self, buffer, dict, check_keys, &options, top_level)) {
14741474
destroy_codec_options(&options);
1475-
buffer_free(buffer);
1475+
pymongo_buffer_free(buffer);
14761476
return NULL;
14771477
}
14781478

14791479
/* objectify buffer */
1480-
result = Py_BuildValue("y#", buffer_get_buffer(buffer),
1481-
(Py_ssize_t)buffer_get_position(buffer));
1480+
result = Py_BuildValue("y#", pymongo_buffer_get_buffer(buffer),
1481+
(Py_ssize_t)pymongo_buffer_get_position(buffer));
14821482
destroy_codec_options(&options);
1483-
buffer_free(buffer);
1483+
pymongo_buffer_free(buffer);
14841484
return result;
14851485
}
14861486

bson/buffer.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ static void set_memory_error(void) {
3939

4040
/* Allocate and return a new buffer.
4141
* Return NULL and sets MemoryError on allocation failure. */
42-
buffer_t buffer_new(void) {
42+
buffer_t pymongo_buffer_new(void) {
4343
buffer_t buffer;
4444
buffer = (buffer_t)malloc(sizeof(struct buffer));
4545
if (buffer == NULL) {
@@ -61,7 +61,7 @@ buffer_t buffer_new(void) {
6161

6262
/* Free the memory allocated for `buffer`.
6363
* Return non-zero on failure. */
64-
int buffer_free(buffer_t buffer) {
64+
int pymongo_buffer_free(buffer_t buffer) {
6565
if (buffer == NULL) {
6666
return 1;
6767
}
@@ -122,7 +122,7 @@ static int buffer_assure_space(buffer_t buffer, int size) {
122122
/* Save `size` bytes from the current position in `buffer` (and grow if needed).
123123
* Return offset for writing, or -1 on failure.
124124
* Sets MemoryError or ValueError on failure. */
125-
buffer_position buffer_save_space(buffer_t buffer, int size) {
125+
buffer_position pymongo_buffer_save_space(buffer_t buffer, int size) {
126126
int position = buffer->position;
127127
if (buffer_assure_space(buffer, size) != 0) {
128128
return -1;
@@ -134,7 +134,7 @@ buffer_position buffer_save_space(buffer_t buffer, int size) {
134134
/* Write `size` bytes from `data` to `buffer` (and grow if needed).
135135
* Return non-zero on failure.
136136
* Sets MemoryError or ValueError on failure. */
137-
int buffer_write(buffer_t buffer, const char* data, int size) {
137+
int pymongo_buffer_write(buffer_t buffer, const char* data, int size) {
138138
if (buffer_assure_space(buffer, size) != 0) {
139139
return 1;
140140
}
@@ -144,14 +144,14 @@ int buffer_write(buffer_t buffer, const char* data, int size) {
144144
return 0;
145145
}
146146

147-
int buffer_get_position(buffer_t buffer) {
147+
int pymongo_buffer_get_position(buffer_t buffer) {
148148
return buffer->position;
149149
}
150150

151-
char* buffer_get_buffer(buffer_t buffer) {
151+
char* pymongo_buffer_get_buffer(buffer_t buffer) {
152152
return buffer->buffer;
153153
}
154154

155-
void buffer_update_position(buffer_t buffer, buffer_position new_position) {
155+
void pymongo_buffer_update_position(buffer_t buffer, buffer_position new_position) {
156156
buffer->position = new_position;
157157
}

0 commit comments

Comments
 (0)