Skip to content

Commit 0df9a40

Browse files
Use more modern C API.
1 parent a241356 commit 0df9a40

File tree

1 file changed

+20
-25
lines changed

1 file changed

+20
-25
lines changed

Modules/binascii.c

Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -692,13 +692,11 @@ binascii_a2b_ascii85_impl(PyObject *module, Py_buffer *data, int fold_spaces,
692692
/*[clinic end generated code: output=6ab30f2a26d301a1 input=11c60c016d4f334b]*/
693693
{
694694
const unsigned char *ascii_data, *ignore_data;
695-
unsigned char *bin_data;
696695
int group_pos = 0;
697696
unsigned char this_ch, this_digit;
698697
unsigned char ignore_map[256] = {0};
699698
uint32_t leftchar = 0;
700699
Py_ssize_t ascii_len, bin_len, chunk_len, ignore_len;
701-
_PyBytesWriter writer;
702700
binascii_state *state;
703701

704702
ascii_data = data->buf;
@@ -737,8 +735,11 @@ binascii_a2b_ascii85_impl(PyObject *module, Py_buffer *data, int fold_spaces,
737735
}
738736
bin_len = 4 * ((bin_len + 4) / 5);
739737

740-
_PyBytesWriter_Init(&writer);
741-
bin_data = _PyBytesWriter_Alloc(&writer, bin_len);
738+
PyBytesWriter *writer = PyBytesWriter_Create(bin_len);
739+
if (writer == NULL) {
740+
return NULL;
741+
}
742+
unsigned char *bin_data = PyBytesWriter_GetData(writer);
742743
if (bin_data == NULL) {
743744
return NULL;
744745
}
@@ -808,10 +809,10 @@ binascii_a2b_ascii85_impl(PyObject *module, Py_buffer *data, int fold_spaces,
808809
leftchar = 0;
809810
}
810811

811-
return _PyBytesWriter_Finish(&writer, bin_data);
812+
return PyBytesWriter_FinishWithPointer(writer, bin_data);
812813

813814
error_end:
814-
_PyBytesWriter_Dealloc(&writer);
815+
PyBytesWriter_Discard(writer);
815816
return NULL;
816817
}
817818

@@ -838,14 +839,12 @@ binascii_b2a_ascii85_impl(PyObject *module, Py_buffer *data, int fold_spaces,
838839
int wrap, unsigned int width, int pad)
839840
/*[clinic end generated code: output=78426392ad3fc75b input=d5122dbab4dbb9f2]*/
840841
{
841-
unsigned char *ascii_data;
842842
const unsigned char *bin_data;
843843
int chunk_pos = 0;
844844
unsigned char this_group[5];
845845
uint32_t leftchar = 0;
846846
unsigned int line_len = 0;
847847
Py_ssize_t bin_len, group_len, out_len;
848-
_PyBytesWriter writer;
849848

850849
bin_data = data->buf;
851850
bin_len = data->len;
@@ -864,11 +863,11 @@ binascii_b2a_ascii85_impl(PyObject *module, Py_buffer *data, int fold_spaces,
864863
if (!pad && (bin_len % 4)) out_len -= 4 - (bin_len % 4);
865864
if (width && out_len) out_len += (out_len - 1) / width;
866865

867-
_PyBytesWriter_Init(&writer);
868-
ascii_data = _PyBytesWriter_Alloc(&writer, out_len);
869-
if (ascii_data == NULL) {
866+
PyBytesWriter *writer = PyBytesWriter_Create(out_len);
867+
if (writer == NULL) {
870868
return NULL;
871869
}
870+
unsigned char *ascii_data = PyBytesWriter_GetData(writer);
872871

873872
if (wrap) {
874873
*ascii_data++ = BASE85_A85_PREFIX;
@@ -923,7 +922,7 @@ binascii_b2a_ascii85_impl(PyObject *module, Py_buffer *data, int fold_spaces,
923922
*ascii_data++ = BASE85_A85_SUFFIX;
924923
}
925924

926-
return _PyBytesWriter_Finish(&writer, ascii_data);
925+
return PyBytesWriter_FinishWithPointer(writer, ascii_data);
927926
}
928927

929928
/*[clinic input]
@@ -948,12 +947,10 @@ binascii_a2b_base85_impl(PyObject *module, Py_buffer *data, int strict_mode,
948947
/*[clinic end generated code: output=c5b9118ffe77f1cb input=65c2a532ad64ebd5]*/
949948
{
950949
const unsigned char *ascii_data, *table_a2b;
951-
unsigned char *bin_data;
952950
int group_pos = 0;
953951
unsigned char this_ch, this_digit;
954952
uint32_t leftchar = 0;
955953
Py_ssize_t ascii_len, bin_len, chunk_len;
956-
_PyBytesWriter writer;
957954
binascii_state *state;
958955

959956
table_a2b = z85 ? table_a2b_base85_z85 : table_a2b_base85;
@@ -965,11 +962,11 @@ binascii_a2b_base85_impl(PyObject *module, Py_buffer *data, int strict_mode,
965962
/* Allocate output buffer. */
966963
bin_len = 4 * ((ascii_len + 4) / 5);
967964

968-
_PyBytesWriter_Init(&writer);
969-
bin_data = _PyBytesWriter_Alloc(&writer, bin_len);
970-
if (bin_data == NULL) {
965+
PyBytesWriter *writer = PyBytesWriter_Create(bin_len);
966+
if (writer == NULL) {
971967
return NULL;
972968
}
969+
unsigned char *bin_data = PyBytesWriter_GetData(writer);
973970

974971
for (; ascii_len > 0 || group_pos != 0; ascii_len--, ascii_data++) {
975972
/* Shift (in radix-85) data or padding into our buffer. */
@@ -1018,10 +1015,10 @@ binascii_a2b_base85_impl(PyObject *module, Py_buffer *data, int strict_mode,
10181015
leftchar = 0;
10191016
}
10201017

1021-
return _PyBytesWriter_Finish(&writer, bin_data);
1018+
return PyBytesWriter_FinishWithPointer(writer, bin_data);
10221019

10231020
error_end:
1024-
_PyBytesWriter_Dealloc(&writer);
1021+
PyBytesWriter_Discard(writer);
10251022
return NULL;
10261023
}
10271024

@@ -1046,11 +1043,9 @@ binascii_b2a_base85_impl(PyObject *module, Py_buffer *data, int pad,
10461043
int newline, int z85)
10471044
/*[clinic end generated code: output=d3740e9a20c8e071 input=e4e07591f7a11ae4]*/
10481045
{
1049-
unsigned char *ascii_data;
10501046
const unsigned char *bin_data, *table_b2a;
10511047
uint32_t leftchar = 0;
10521048
Py_ssize_t bin_len, group_len, out_len;
1053-
_PyBytesWriter writer;
10541049

10551050
table_b2a = z85 ? table_b2a_base85_z85 : table_b2a_base85;
10561051
bin_data = data->buf;
@@ -1063,11 +1058,11 @@ binascii_b2a_base85_impl(PyObject *module, Py_buffer *data, int pad,
10631058
if (!pad && (bin_len % 4)) out_len -= 4 - (bin_len % 4);
10641059
if (newline) out_len++;
10651060

1066-
_PyBytesWriter_Init(&writer);
1067-
ascii_data = _PyBytesWriter_Alloc(&writer, out_len);
1068-
if (ascii_data == NULL) {
1061+
PyBytesWriter *writer = PyBytesWriter_Create(out_len);
1062+
if (writer == NULL) {
10691063
return NULL;
10701064
}
1065+
unsigned char *ascii_data = PyBytesWriter_GetData(writer);
10711066

10721067
/* Encode all full-length chunks. */
10731068
for (; bin_len >= 4; bin_len -= 4, bin_data += 4) {
@@ -1109,7 +1104,7 @@ binascii_b2a_base85_impl(PyObject *module, Py_buffer *data, int pad,
11091104
*ascii_data++ = '\n';
11101105
}
11111106

1112-
return _PyBytesWriter_Finish(&writer, ascii_data);
1107+
return PyBytesWriter_FinishWithPointer(writer, ascii_data);
11131108
}
11141109

11151110
/*[clinic input]

0 commit comments

Comments
 (0)