blob: e20cac24ba6fc708d7200a4c00ead306741408f1 [file] [log] [blame]
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +02001/*[clinic input]
2preserve
3[clinic start generated code]*/
4
5PyDoc_STRVAR(binascii_a2b_uu__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -08006"a2b_uu($module, data, /)\n"
7"--\n"
8"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +02009"Decode a line of uuencoded data.");
10
11#define BINASCII_A2B_UU_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +030012 {"a2b_uu", (PyCFunction)binascii_a2b_uu, METH_O, binascii_a2b_uu__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020013
14static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030015binascii_a2b_uu_impl(PyObject *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020016
17static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030018binascii_a2b_uu(PyObject *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020019{
20 PyObject *return_value = NULL;
Benjamin Petersonb62deac2014-01-26 10:41:58 -050021 Py_buffer data = {NULL, NULL};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020022
Serhiy Storchaka247789c2015-04-24 00:40:51 +030023 if (!PyArg_Parse(arg, "O&:a2b_uu", ascii_buffer_converter, &data))
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020024 goto exit;
Serhiy Storchaka12785612014-01-25 11:49:49 +020025 return_value = binascii_a2b_uu_impl(module, &data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020026
27exit:
Benjamin Petersonb62deac2014-01-26 10:41:58 -050028 /* Cleanup for data */
29 if (data.obj)
30 PyBuffer_Release(&data);
31
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020032 return return_value;
33}
34
35PyDoc_STRVAR(binascii_b2a_uu__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -080036"b2a_uu($module, data, /)\n"
37"--\n"
38"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020039"Uuencode line of data.");
40
41#define BINASCII_B2A_UU_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +030042 {"b2a_uu", (PyCFunction)binascii_b2a_uu, METH_O, binascii_b2a_uu__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020043
44static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030045binascii_b2a_uu_impl(PyObject *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020046
47static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030048binascii_b2a_uu(PyObject *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020049{
50 PyObject *return_value = NULL;
51 Py_buffer data = {NULL, NULL};
52
Serhiy Storchaka247789c2015-04-24 00:40:51 +030053 if (!PyArg_Parse(arg, "y*:b2a_uu", &data))
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020054 goto exit;
55 return_value = binascii_b2a_uu_impl(module, &data);
56
57exit:
58 /* Cleanup for data */
59 if (data.obj)
60 PyBuffer_Release(&data);
61
62 return return_value;
63}
64
65PyDoc_STRVAR(binascii_a2b_base64__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -080066"a2b_base64($module, data, /)\n"
67"--\n"
68"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020069"Decode a line of base64 data.");
70
71#define BINASCII_A2B_BASE64_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +030072 {"a2b_base64", (PyCFunction)binascii_a2b_base64, METH_O, binascii_a2b_base64__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020073
74static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030075binascii_a2b_base64_impl(PyObject *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020076
77static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030078binascii_a2b_base64(PyObject *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020079{
80 PyObject *return_value = NULL;
Benjamin Petersonb62deac2014-01-26 10:41:58 -050081 Py_buffer data = {NULL, NULL};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020082
Serhiy Storchaka247789c2015-04-24 00:40:51 +030083 if (!PyArg_Parse(arg, "O&:a2b_base64", ascii_buffer_converter, &data))
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020084 goto exit;
Serhiy Storchaka12785612014-01-25 11:49:49 +020085 return_value = binascii_a2b_base64_impl(module, &data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020086
87exit:
Benjamin Petersonb62deac2014-01-26 10:41:58 -050088 /* Cleanup for data */
89 if (data.obj)
90 PyBuffer_Release(&data);
91
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020092 return return_value;
93}
94
95PyDoc_STRVAR(binascii_b2a_base64__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -080096"b2a_base64($module, data, /)\n"
97"--\n"
98"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020099"Base64-code line of data.");
100
101#define BINASCII_B2A_BASE64_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300102 {"b2a_base64", (PyCFunction)binascii_b2a_base64, METH_O, binascii_b2a_base64__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200103
104static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300105binascii_b2a_base64_impl(PyObject *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200106
107static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300108binascii_b2a_base64(PyObject *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200109{
110 PyObject *return_value = NULL;
111 Py_buffer data = {NULL, NULL};
112
Serhiy Storchaka247789c2015-04-24 00:40:51 +0300113 if (!PyArg_Parse(arg, "y*:b2a_base64", &data))
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200114 goto exit;
115 return_value = binascii_b2a_base64_impl(module, &data);
116
117exit:
118 /* Cleanup for data */
119 if (data.obj)
120 PyBuffer_Release(&data);
121
122 return return_value;
123}
124
125PyDoc_STRVAR(binascii_a2b_hqx__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800126"a2b_hqx($module, data, /)\n"
127"--\n"
128"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200129"Decode .hqx coding.");
130
131#define BINASCII_A2B_HQX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300132 {"a2b_hqx", (PyCFunction)binascii_a2b_hqx, METH_O, binascii_a2b_hqx__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200133
134static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300135binascii_a2b_hqx_impl(PyObject *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200136
137static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300138binascii_a2b_hqx(PyObject *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200139{
140 PyObject *return_value = NULL;
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500141 Py_buffer data = {NULL, NULL};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200142
Serhiy Storchaka247789c2015-04-24 00:40:51 +0300143 if (!PyArg_Parse(arg, "O&:a2b_hqx", ascii_buffer_converter, &data))
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200144 goto exit;
Serhiy Storchaka12785612014-01-25 11:49:49 +0200145 return_value = binascii_a2b_hqx_impl(module, &data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200146
147exit:
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500148 /* Cleanup for data */
149 if (data.obj)
150 PyBuffer_Release(&data);
151
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200152 return return_value;
153}
154
155PyDoc_STRVAR(binascii_rlecode_hqx__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800156"rlecode_hqx($module, data, /)\n"
157"--\n"
158"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200159"Binhex RLE-code binary data.");
160
161#define BINASCII_RLECODE_HQX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300162 {"rlecode_hqx", (PyCFunction)binascii_rlecode_hqx, METH_O, binascii_rlecode_hqx__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200163
164static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300165binascii_rlecode_hqx_impl(PyObject *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200166
167static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300168binascii_rlecode_hqx(PyObject *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200169{
170 PyObject *return_value = NULL;
171 Py_buffer data = {NULL, NULL};
172
Serhiy Storchaka247789c2015-04-24 00:40:51 +0300173 if (!PyArg_Parse(arg, "y*:rlecode_hqx", &data))
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200174 goto exit;
175 return_value = binascii_rlecode_hqx_impl(module, &data);
176
177exit:
178 /* Cleanup for data */
179 if (data.obj)
180 PyBuffer_Release(&data);
181
182 return return_value;
183}
184
185PyDoc_STRVAR(binascii_b2a_hqx__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800186"b2a_hqx($module, data, /)\n"
187"--\n"
188"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200189"Encode .hqx data.");
190
191#define BINASCII_B2A_HQX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300192 {"b2a_hqx", (PyCFunction)binascii_b2a_hqx, METH_O, binascii_b2a_hqx__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200193
194static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300195binascii_b2a_hqx_impl(PyObject *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200196
197static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300198binascii_b2a_hqx(PyObject *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200199{
200 PyObject *return_value = NULL;
201 Py_buffer data = {NULL, NULL};
202
Serhiy Storchaka247789c2015-04-24 00:40:51 +0300203 if (!PyArg_Parse(arg, "y*:b2a_hqx", &data))
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200204 goto exit;
205 return_value = binascii_b2a_hqx_impl(module, &data);
206
207exit:
208 /* Cleanup for data */
209 if (data.obj)
210 PyBuffer_Release(&data);
211
212 return return_value;
213}
214
215PyDoc_STRVAR(binascii_rledecode_hqx__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800216"rledecode_hqx($module, data, /)\n"
217"--\n"
218"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200219"Decode hexbin RLE-coded string.");
220
221#define BINASCII_RLEDECODE_HQX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300222 {"rledecode_hqx", (PyCFunction)binascii_rledecode_hqx, METH_O, binascii_rledecode_hqx__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200223
224static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300225binascii_rledecode_hqx_impl(PyObject *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200226
227static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300228binascii_rledecode_hqx(PyObject *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200229{
230 PyObject *return_value = NULL;
231 Py_buffer data = {NULL, NULL};
232
Serhiy Storchaka247789c2015-04-24 00:40:51 +0300233 if (!PyArg_Parse(arg, "y*:rledecode_hqx", &data))
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200234 goto exit;
235 return_value = binascii_rledecode_hqx_impl(module, &data);
236
237exit:
238 /* Cleanup for data */
239 if (data.obj)
240 PyBuffer_Release(&data);
241
242 return return_value;
243}
244
245PyDoc_STRVAR(binascii_crc_hqx__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800246"crc_hqx($module, data, crc, /)\n"
247"--\n"
248"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200249"Compute hqx CRC incrementally.");
250
251#define BINASCII_CRC_HQX_METHODDEF \
252 {"crc_hqx", (PyCFunction)binascii_crc_hqx, METH_VARARGS, binascii_crc_hqx__doc__},
253
Serhiy Storchaka2ef7c472015-04-20 09:26:49 +0300254static unsigned int
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300255binascii_crc_hqx_impl(PyObject *module, Py_buffer *data, unsigned int crc);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200256
257static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300258binascii_crc_hqx(PyObject *module, PyObject *args)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200259{
260 PyObject *return_value = NULL;
261 Py_buffer data = {NULL, NULL};
Serhiy Storchaka2ef7c472015-04-20 09:26:49 +0300262 unsigned int crc;
263 unsigned int _return_value;
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200264
Serhiy Storchaka247789c2015-04-24 00:40:51 +0300265 if (!PyArg_ParseTuple(args, "y*I:crc_hqx",
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200266 &data, &crc))
267 goto exit;
268 _return_value = binascii_crc_hqx_impl(module, &data, crc);
Serhiy Storchakae3037e12015-04-20 09:31:51 +0300269 if ((_return_value == (unsigned int)-1) && PyErr_Occurred())
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200270 goto exit;
Serhiy Storchaka2ef7c472015-04-20 09:26:49 +0300271 return_value = PyLong_FromUnsignedLong((unsigned long)_return_value);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200272
273exit:
274 /* Cleanup for data */
275 if (data.obj)
276 PyBuffer_Release(&data);
277
278 return return_value;
279}
280
281PyDoc_STRVAR(binascii_crc32__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800282"crc32($module, data, crc=0, /)\n"
283"--\n"
284"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200285"Compute CRC-32 incrementally.");
286
287#define BINASCII_CRC32_METHODDEF \
288 {"crc32", (PyCFunction)binascii_crc32, METH_VARARGS, binascii_crc32__doc__},
289
290static unsigned int
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300291binascii_crc32_impl(PyObject *module, Py_buffer *data, unsigned int crc);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200292
293static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300294binascii_crc32(PyObject *module, PyObject *args)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200295{
296 PyObject *return_value = NULL;
297 Py_buffer data = {NULL, NULL};
298 unsigned int crc = 0;
299 unsigned int _return_value;
300
Serhiy Storchaka247789c2015-04-24 00:40:51 +0300301 if (!PyArg_ParseTuple(args, "y*|I:crc32",
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200302 &data, &crc))
303 goto exit;
304 _return_value = binascii_crc32_impl(module, &data, crc);
Larry Hastingsa73cb8a2014-08-05 19:55:21 +1000305 if ((_return_value == (unsigned int)-1) && PyErr_Occurred())
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200306 goto exit;
307 return_value = PyLong_FromUnsignedLong((unsigned long)_return_value);
308
309exit:
310 /* Cleanup for data */
311 if (data.obj)
312 PyBuffer_Release(&data);
313
314 return return_value;
315}
316
317PyDoc_STRVAR(binascii_b2a_hex__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800318"b2a_hex($module, data, /)\n"
319"--\n"
320"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200321"Hexadecimal representation of binary data.\n"
322"\n"
323"The return value is a bytes object. This function is also\n"
324"available as \"hexlify()\".");
325
326#define BINASCII_B2A_HEX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300327 {"b2a_hex", (PyCFunction)binascii_b2a_hex, METH_O, binascii_b2a_hex__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200328
329static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300330binascii_b2a_hex_impl(PyObject *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200331
332static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300333binascii_b2a_hex(PyObject *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200334{
335 PyObject *return_value = NULL;
336 Py_buffer data = {NULL, NULL};
337
Serhiy Storchaka247789c2015-04-24 00:40:51 +0300338 if (!PyArg_Parse(arg, "y*:b2a_hex", &data))
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200339 goto exit;
340 return_value = binascii_b2a_hex_impl(module, &data);
341
342exit:
343 /* Cleanup for data */
344 if (data.obj)
345 PyBuffer_Release(&data);
346
347 return return_value;
348}
349
Zachary Wareb176d402015-01-20 13:59:46 -0600350PyDoc_STRVAR(binascii_hexlify__doc__,
351"hexlify($module, data, /)\n"
352"--\n"
353"\n"
354"Hexadecimal representation of binary data.\n"
355"\n"
356"The return value is a bytes object.");
357
358#define BINASCII_HEXLIFY_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300359 {"hexlify", (PyCFunction)binascii_hexlify, METH_O, binascii_hexlify__doc__},
Zachary Wareb176d402015-01-20 13:59:46 -0600360
361static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300362binascii_hexlify_impl(PyObject *module, Py_buffer *data);
Zachary Wareb176d402015-01-20 13:59:46 -0600363
364static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300365binascii_hexlify(PyObject *module, PyObject *arg)
Zachary Wareb176d402015-01-20 13:59:46 -0600366{
367 PyObject *return_value = NULL;
368 Py_buffer data = {NULL, NULL};
369
Serhiy Storchaka247789c2015-04-24 00:40:51 +0300370 if (!PyArg_Parse(arg, "y*:hexlify", &data))
Zachary Wareb176d402015-01-20 13:59:46 -0600371 goto exit;
372 return_value = binascii_hexlify_impl(module, &data);
373
374exit:
375 /* Cleanup for data */
376 if (data.obj)
377 PyBuffer_Release(&data);
378
379 return return_value;
380}
381
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200382PyDoc_STRVAR(binascii_a2b_hex__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800383"a2b_hex($module, hexstr, /)\n"
384"--\n"
385"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200386"Binary data of hexadecimal representation.\n"
387"\n"
388"hexstr must contain an even number of hex digits (upper or lower case).\n"
389"This function is also available as \"unhexlify()\".");
390
391#define BINASCII_A2B_HEX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300392 {"a2b_hex", (PyCFunction)binascii_a2b_hex, METH_O, binascii_a2b_hex__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200393
394static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300395binascii_a2b_hex_impl(PyObject *module, Py_buffer *hexstr);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200396
397static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300398binascii_a2b_hex(PyObject *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200399{
400 PyObject *return_value = NULL;
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500401 Py_buffer hexstr = {NULL, NULL};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200402
Serhiy Storchaka247789c2015-04-24 00:40:51 +0300403 if (!PyArg_Parse(arg, "O&:a2b_hex", ascii_buffer_converter, &hexstr))
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200404 goto exit;
405 return_value = binascii_a2b_hex_impl(module, &hexstr);
406
407exit:
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500408 /* Cleanup for hexstr */
409 if (hexstr.obj)
410 PyBuffer_Release(&hexstr);
411
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200412 return return_value;
413}
414
Zachary Wareb176d402015-01-20 13:59:46 -0600415PyDoc_STRVAR(binascii_unhexlify__doc__,
416"unhexlify($module, hexstr, /)\n"
417"--\n"
418"\n"
419"Binary data of hexadecimal representation.\n"
420"\n"
421"hexstr must contain an even number of hex digits (upper or lower case).");
422
423#define BINASCII_UNHEXLIFY_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300424 {"unhexlify", (PyCFunction)binascii_unhexlify, METH_O, binascii_unhexlify__doc__},
Zachary Wareb176d402015-01-20 13:59:46 -0600425
426static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300427binascii_unhexlify_impl(PyObject *module, Py_buffer *hexstr);
Zachary Wareb176d402015-01-20 13:59:46 -0600428
429static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300430binascii_unhexlify(PyObject *module, PyObject *arg)
Zachary Wareb176d402015-01-20 13:59:46 -0600431{
432 PyObject *return_value = NULL;
433 Py_buffer hexstr = {NULL, NULL};
434
Serhiy Storchaka247789c2015-04-24 00:40:51 +0300435 if (!PyArg_Parse(arg, "O&:unhexlify", ascii_buffer_converter, &hexstr))
Zachary Wareb176d402015-01-20 13:59:46 -0600436 goto exit;
437 return_value = binascii_unhexlify_impl(module, &hexstr);
438
439exit:
440 /* Cleanup for hexstr */
441 if (hexstr.obj)
442 PyBuffer_Release(&hexstr);
443
444 return return_value;
445}
446
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200447PyDoc_STRVAR(binascii_a2b_qp__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800448"a2b_qp($module, /, data, header=False)\n"
449"--\n"
450"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200451"Decode a string of qp-encoded data.");
452
453#define BINASCII_A2B_QP_METHODDEF \
Serhiy Storchaka12785612014-01-25 11:49:49 +0200454 {"a2b_qp", (PyCFunction)binascii_a2b_qp, METH_VARARGS|METH_KEYWORDS, binascii_a2b_qp__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200455
456static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300457binascii_a2b_qp_impl(PyObject *module, Py_buffer *data, int header);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200458
459static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300460binascii_a2b_qp(PyObject *module, PyObject *args, PyObject *kwargs)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200461{
462 PyObject *return_value = NULL;
Serhiy Storchaka12785612014-01-25 11:49:49 +0200463 static char *_keywords[] = {"data", "header", NULL};
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500464 Py_buffer data = {NULL, NULL};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200465 int header = 0;
466
Serhiy Storchaka247789c2015-04-24 00:40:51 +0300467 if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|i:a2b_qp", _keywords,
Serhiy Storchaka12785612014-01-25 11:49:49 +0200468 ascii_buffer_converter, &data, &header))
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200469 goto exit;
Serhiy Storchaka12785612014-01-25 11:49:49 +0200470 return_value = binascii_a2b_qp_impl(module, &data, header);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200471
472exit:
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500473 /* Cleanup for data */
474 if (data.obj)
475 PyBuffer_Release(&data);
476
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200477 return return_value;
478}
479
480PyDoc_STRVAR(binascii_b2a_qp__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800481"b2a_qp($module, /, data, quotetabs=False, istext=True, header=False)\n"
482"--\n"
483"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200484"Encode a string using quoted-printable encoding.\n"
485"\n"
486"On encoding, when istext is set, newlines are not encoded, and white\n"
487"space at end of lines is. When istext is not set, \\r and \\n (CR/LF)\n"
488"are both encoded. When quotetabs is set, space and tabs are encoded.");
489
490#define BINASCII_B2A_QP_METHODDEF \
491 {"b2a_qp", (PyCFunction)binascii_b2a_qp, METH_VARARGS|METH_KEYWORDS, binascii_b2a_qp__doc__},
492
493static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300494binascii_b2a_qp_impl(PyObject *module, Py_buffer *data, int quotetabs,
Larry Hastings89964c42015-04-14 18:07:59 -0400495 int istext, int header);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200496
497static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300498binascii_b2a_qp(PyObject *module, PyObject *args, PyObject *kwargs)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200499{
500 PyObject *return_value = NULL;
501 static char *_keywords[] = {"data", "quotetabs", "istext", "header", NULL};
502 Py_buffer data = {NULL, NULL};
503 int quotetabs = 0;
504 int istext = 1;
505 int header = 0;
506
Serhiy Storchaka247789c2015-04-24 00:40:51 +0300507 if (!PyArg_ParseTupleAndKeywords(args, kwargs, "y*|iii:b2a_qp", _keywords,
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200508 &data, &quotetabs, &istext, &header))
509 goto exit;
510 return_value = binascii_b2a_qp_impl(module, &data, quotetabs, istext, header);
511
512exit:
513 /* Cleanup for data */
514 if (data.obj)
515 PyBuffer_Release(&data);
516
517 return return_value;
518}
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300519/*[clinic end generated code: output=51173fc9718a5edc input=a9049054013a1b77]*/