blob: 25d39d2519801a6d5e9c55913a17e9d6b8e8615c [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 Storchaka12785612014-01-25 11:49:49 +020015binascii_a2b_uu_impl(PyModuleDef *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020016
17static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +030018binascii_a2b_uu(PyModuleDef *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 Storchaka92e8af62015-04-04 00:12:11 +030023 if (!PyArg_Parse(arg,
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020024 "O&:a2b_uu",
Serhiy Storchaka12785612014-01-25 11:49:49 +020025 ascii_buffer_converter, &data))
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020026 goto exit;
Serhiy Storchaka12785612014-01-25 11:49:49 +020027 return_value = binascii_a2b_uu_impl(module, &data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020028
29exit:
Benjamin Petersonb62deac2014-01-26 10:41:58 -050030 /* Cleanup for data */
31 if (data.obj)
32 PyBuffer_Release(&data);
33
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020034 return return_value;
35}
36
37PyDoc_STRVAR(binascii_b2a_uu__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -080038"b2a_uu($module, data, /)\n"
39"--\n"
40"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020041"Uuencode line of data.");
42
43#define BINASCII_B2A_UU_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +030044 {"b2a_uu", (PyCFunction)binascii_b2a_uu, METH_O, binascii_b2a_uu__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020045
46static PyObject *
47binascii_b2a_uu_impl(PyModuleDef *module, Py_buffer *data);
48
49static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +030050binascii_b2a_uu(PyModuleDef *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020051{
52 PyObject *return_value = NULL;
53 Py_buffer data = {NULL, NULL};
54
Serhiy Storchaka92e8af62015-04-04 00:12:11 +030055 if (!PyArg_Parse(arg,
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020056 "y*:b2a_uu",
57 &data))
58 goto exit;
59 return_value = binascii_b2a_uu_impl(module, &data);
60
61exit:
62 /* Cleanup for data */
63 if (data.obj)
64 PyBuffer_Release(&data);
65
66 return return_value;
67}
68
69PyDoc_STRVAR(binascii_a2b_base64__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -080070"a2b_base64($module, data, /)\n"
71"--\n"
72"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020073"Decode a line of base64 data.");
74
75#define BINASCII_A2B_BASE64_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +030076 {"a2b_base64", (PyCFunction)binascii_a2b_base64, METH_O, binascii_a2b_base64__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020077
78static PyObject *
Serhiy Storchaka12785612014-01-25 11:49:49 +020079binascii_a2b_base64_impl(PyModuleDef *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020080
81static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +030082binascii_a2b_base64(PyModuleDef *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020083{
84 PyObject *return_value = NULL;
Benjamin Petersonb62deac2014-01-26 10:41:58 -050085 Py_buffer data = {NULL, NULL};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020086
Serhiy Storchaka92e8af62015-04-04 00:12:11 +030087 if (!PyArg_Parse(arg,
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020088 "O&:a2b_base64",
Serhiy Storchaka12785612014-01-25 11:49:49 +020089 ascii_buffer_converter, &data))
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020090 goto exit;
Serhiy Storchaka12785612014-01-25 11:49:49 +020091 return_value = binascii_a2b_base64_impl(module, &data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020092
93exit:
Benjamin Petersonb62deac2014-01-26 10:41:58 -050094 /* Cleanup for data */
95 if (data.obj)
96 PyBuffer_Release(&data);
97
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020098 return return_value;
99}
100
101PyDoc_STRVAR(binascii_b2a_base64__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800102"b2a_base64($module, data, /)\n"
103"--\n"
104"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200105"Base64-code line of data.");
106
107#define BINASCII_B2A_BASE64_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300108 {"b2a_base64", (PyCFunction)binascii_b2a_base64, METH_O, binascii_b2a_base64__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200109
110static PyObject *
111binascii_b2a_base64_impl(PyModuleDef *module, Py_buffer *data);
112
113static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300114binascii_b2a_base64(PyModuleDef *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200115{
116 PyObject *return_value = NULL;
117 Py_buffer data = {NULL, NULL};
118
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300119 if (!PyArg_Parse(arg,
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200120 "y*:b2a_base64",
121 &data))
122 goto exit;
123 return_value = binascii_b2a_base64_impl(module, &data);
124
125exit:
126 /* Cleanup for data */
127 if (data.obj)
128 PyBuffer_Release(&data);
129
130 return return_value;
131}
132
133PyDoc_STRVAR(binascii_a2b_hqx__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800134"a2b_hqx($module, data, /)\n"
135"--\n"
136"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200137"Decode .hqx coding.");
138
139#define BINASCII_A2B_HQX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300140 {"a2b_hqx", (PyCFunction)binascii_a2b_hqx, METH_O, binascii_a2b_hqx__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200141
142static PyObject *
Serhiy Storchaka12785612014-01-25 11:49:49 +0200143binascii_a2b_hqx_impl(PyModuleDef *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200144
145static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300146binascii_a2b_hqx(PyModuleDef *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200147{
148 PyObject *return_value = NULL;
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500149 Py_buffer data = {NULL, NULL};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200150
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300151 if (!PyArg_Parse(arg,
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200152 "O&:a2b_hqx",
Serhiy Storchaka12785612014-01-25 11:49:49 +0200153 ascii_buffer_converter, &data))
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200154 goto exit;
Serhiy Storchaka12785612014-01-25 11:49:49 +0200155 return_value = binascii_a2b_hqx_impl(module, &data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200156
157exit:
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500158 /* Cleanup for data */
159 if (data.obj)
160 PyBuffer_Release(&data);
161
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200162 return return_value;
163}
164
165PyDoc_STRVAR(binascii_rlecode_hqx__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800166"rlecode_hqx($module, data, /)\n"
167"--\n"
168"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200169"Binhex RLE-code binary data.");
170
171#define BINASCII_RLECODE_HQX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300172 {"rlecode_hqx", (PyCFunction)binascii_rlecode_hqx, METH_O, binascii_rlecode_hqx__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200173
174static PyObject *
175binascii_rlecode_hqx_impl(PyModuleDef *module, Py_buffer *data);
176
177static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300178binascii_rlecode_hqx(PyModuleDef *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200179{
180 PyObject *return_value = NULL;
181 Py_buffer data = {NULL, NULL};
182
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300183 if (!PyArg_Parse(arg,
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200184 "y*:rlecode_hqx",
185 &data))
186 goto exit;
187 return_value = binascii_rlecode_hqx_impl(module, &data);
188
189exit:
190 /* Cleanup for data */
191 if (data.obj)
192 PyBuffer_Release(&data);
193
194 return return_value;
195}
196
197PyDoc_STRVAR(binascii_b2a_hqx__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800198"b2a_hqx($module, data, /)\n"
199"--\n"
200"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200201"Encode .hqx data.");
202
203#define BINASCII_B2A_HQX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300204 {"b2a_hqx", (PyCFunction)binascii_b2a_hqx, METH_O, binascii_b2a_hqx__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200205
206static PyObject *
207binascii_b2a_hqx_impl(PyModuleDef *module, Py_buffer *data);
208
209static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300210binascii_b2a_hqx(PyModuleDef *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200211{
212 PyObject *return_value = NULL;
213 Py_buffer data = {NULL, NULL};
214
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300215 if (!PyArg_Parse(arg,
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200216 "y*:b2a_hqx",
217 &data))
218 goto exit;
219 return_value = binascii_b2a_hqx_impl(module, &data);
220
221exit:
222 /* Cleanup for data */
223 if (data.obj)
224 PyBuffer_Release(&data);
225
226 return return_value;
227}
228
229PyDoc_STRVAR(binascii_rledecode_hqx__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800230"rledecode_hqx($module, data, /)\n"
231"--\n"
232"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200233"Decode hexbin RLE-coded string.");
234
235#define BINASCII_RLEDECODE_HQX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300236 {"rledecode_hqx", (PyCFunction)binascii_rledecode_hqx, METH_O, binascii_rledecode_hqx__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200237
238static PyObject *
239binascii_rledecode_hqx_impl(PyModuleDef *module, Py_buffer *data);
240
241static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300242binascii_rledecode_hqx(PyModuleDef *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200243{
244 PyObject *return_value = NULL;
245 Py_buffer data = {NULL, NULL};
246
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300247 if (!PyArg_Parse(arg,
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200248 "y*:rledecode_hqx",
249 &data))
250 goto exit;
251 return_value = binascii_rledecode_hqx_impl(module, &data);
252
253exit:
254 /* Cleanup for data */
255 if (data.obj)
256 PyBuffer_Release(&data);
257
258 return return_value;
259}
260
261PyDoc_STRVAR(binascii_crc_hqx__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800262"crc_hqx($module, data, crc, /)\n"
263"--\n"
264"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200265"Compute hqx CRC incrementally.");
266
267#define BINASCII_CRC_HQX_METHODDEF \
268 {"crc_hqx", (PyCFunction)binascii_crc_hqx, METH_VARARGS, binascii_crc_hqx__doc__},
269
Serhiy Storchaka2ef7c472015-04-20 09:26:49 +0300270static unsigned int
271binascii_crc_hqx_impl(PyModuleDef *module, Py_buffer *data, unsigned int crc);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200272
273static PyObject *
274binascii_crc_hqx(PyModuleDef *module, PyObject *args)
275{
276 PyObject *return_value = NULL;
277 Py_buffer data = {NULL, NULL};
Serhiy Storchaka2ef7c472015-04-20 09:26:49 +0300278 unsigned int crc;
279 unsigned int _return_value;
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200280
281 if (!PyArg_ParseTuple(args,
Serhiy Storchaka2ef7c472015-04-20 09:26:49 +0300282 "y*I:crc_hqx",
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200283 &data, &crc))
284 goto exit;
285 _return_value = binascii_crc_hqx_impl(module, &data, crc);
Serhiy Storchakae3037e12015-04-20 09:31:51 +0300286 if ((_return_value == (unsigned int)-1) && PyErr_Occurred())
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200287 goto exit;
Serhiy Storchaka2ef7c472015-04-20 09:26:49 +0300288 return_value = PyLong_FromUnsignedLong((unsigned long)_return_value);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200289
290exit:
291 /* Cleanup for data */
292 if (data.obj)
293 PyBuffer_Release(&data);
294
295 return return_value;
296}
297
298PyDoc_STRVAR(binascii_crc32__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800299"crc32($module, data, crc=0, /)\n"
300"--\n"
301"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200302"Compute CRC-32 incrementally.");
303
304#define BINASCII_CRC32_METHODDEF \
305 {"crc32", (PyCFunction)binascii_crc32, METH_VARARGS, binascii_crc32__doc__},
306
307static unsigned int
308binascii_crc32_impl(PyModuleDef *module, Py_buffer *data, unsigned int crc);
309
310static PyObject *
311binascii_crc32(PyModuleDef *module, PyObject *args)
312{
313 PyObject *return_value = NULL;
314 Py_buffer data = {NULL, NULL};
315 unsigned int crc = 0;
316 unsigned int _return_value;
317
318 if (!PyArg_ParseTuple(args,
319 "y*|I:crc32",
320 &data, &crc))
321 goto exit;
322 _return_value = binascii_crc32_impl(module, &data, crc);
Larry Hastingsa73cb8a2014-08-05 19:55:21 +1000323 if ((_return_value == (unsigned int)-1) && PyErr_Occurred())
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200324 goto exit;
325 return_value = PyLong_FromUnsignedLong((unsigned long)_return_value);
326
327exit:
328 /* Cleanup for data */
329 if (data.obj)
330 PyBuffer_Release(&data);
331
332 return return_value;
333}
334
335PyDoc_STRVAR(binascii_b2a_hex__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800336"b2a_hex($module, data, /)\n"
337"--\n"
338"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200339"Hexadecimal representation of binary data.\n"
340"\n"
341"The return value is a bytes object. This function is also\n"
342"available as \"hexlify()\".");
343
344#define BINASCII_B2A_HEX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300345 {"b2a_hex", (PyCFunction)binascii_b2a_hex, METH_O, binascii_b2a_hex__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200346
347static PyObject *
348binascii_b2a_hex_impl(PyModuleDef *module, Py_buffer *data);
349
350static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300351binascii_b2a_hex(PyModuleDef *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200352{
353 PyObject *return_value = NULL;
354 Py_buffer data = {NULL, NULL};
355
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300356 if (!PyArg_Parse(arg,
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200357 "y*:b2a_hex",
358 &data))
359 goto exit;
360 return_value = binascii_b2a_hex_impl(module, &data);
361
362exit:
363 /* Cleanup for data */
364 if (data.obj)
365 PyBuffer_Release(&data);
366
367 return return_value;
368}
369
Zachary Wareb176d402015-01-20 13:59:46 -0600370PyDoc_STRVAR(binascii_hexlify__doc__,
371"hexlify($module, data, /)\n"
372"--\n"
373"\n"
374"Hexadecimal representation of binary data.\n"
375"\n"
376"The return value is a bytes object.");
377
378#define BINASCII_HEXLIFY_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300379 {"hexlify", (PyCFunction)binascii_hexlify, METH_O, binascii_hexlify__doc__},
Zachary Wareb176d402015-01-20 13:59:46 -0600380
381static PyObject *
382binascii_hexlify_impl(PyModuleDef *module, Py_buffer *data);
383
384static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300385binascii_hexlify(PyModuleDef *module, PyObject *arg)
Zachary Wareb176d402015-01-20 13:59:46 -0600386{
387 PyObject *return_value = NULL;
388 Py_buffer data = {NULL, NULL};
389
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300390 if (!PyArg_Parse(arg,
Zachary Wareb176d402015-01-20 13:59:46 -0600391 "y*:hexlify",
392 &data))
393 goto exit;
394 return_value = binascii_hexlify_impl(module, &data);
395
396exit:
397 /* Cleanup for data */
398 if (data.obj)
399 PyBuffer_Release(&data);
400
401 return return_value;
402}
403
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200404PyDoc_STRVAR(binascii_a2b_hex__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800405"a2b_hex($module, hexstr, /)\n"
406"--\n"
407"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200408"Binary data of hexadecimal representation.\n"
409"\n"
410"hexstr must contain an even number of hex digits (upper or lower case).\n"
411"This function is also available as \"unhexlify()\".");
412
413#define BINASCII_A2B_HEX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300414 {"a2b_hex", (PyCFunction)binascii_a2b_hex, METH_O, binascii_a2b_hex__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200415
416static PyObject *
417binascii_a2b_hex_impl(PyModuleDef *module, Py_buffer *hexstr);
418
419static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300420binascii_a2b_hex(PyModuleDef *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200421{
422 PyObject *return_value = NULL;
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500423 Py_buffer hexstr = {NULL, NULL};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200424
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300425 if (!PyArg_Parse(arg,
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200426 "O&:a2b_hex",
427 ascii_buffer_converter, &hexstr))
428 goto exit;
429 return_value = binascii_a2b_hex_impl(module, &hexstr);
430
431exit:
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500432 /* Cleanup for hexstr */
433 if (hexstr.obj)
434 PyBuffer_Release(&hexstr);
435
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200436 return return_value;
437}
438
Zachary Wareb176d402015-01-20 13:59:46 -0600439PyDoc_STRVAR(binascii_unhexlify__doc__,
440"unhexlify($module, hexstr, /)\n"
441"--\n"
442"\n"
443"Binary data of hexadecimal representation.\n"
444"\n"
445"hexstr must contain an even number of hex digits (upper or lower case).");
446
447#define BINASCII_UNHEXLIFY_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300448 {"unhexlify", (PyCFunction)binascii_unhexlify, METH_O, binascii_unhexlify__doc__},
Zachary Wareb176d402015-01-20 13:59:46 -0600449
450static PyObject *
451binascii_unhexlify_impl(PyModuleDef *module, Py_buffer *hexstr);
452
453static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300454binascii_unhexlify(PyModuleDef *module, PyObject *arg)
Zachary Wareb176d402015-01-20 13:59:46 -0600455{
456 PyObject *return_value = NULL;
457 Py_buffer hexstr = {NULL, NULL};
458
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300459 if (!PyArg_Parse(arg,
Zachary Wareb176d402015-01-20 13:59:46 -0600460 "O&:unhexlify",
461 ascii_buffer_converter, &hexstr))
462 goto exit;
463 return_value = binascii_unhexlify_impl(module, &hexstr);
464
465exit:
466 /* Cleanup for hexstr */
467 if (hexstr.obj)
468 PyBuffer_Release(&hexstr);
469
470 return return_value;
471}
472
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200473PyDoc_STRVAR(binascii_a2b_qp__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800474"a2b_qp($module, /, data, header=False)\n"
475"--\n"
476"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200477"Decode a string of qp-encoded data.");
478
479#define BINASCII_A2B_QP_METHODDEF \
Serhiy Storchaka12785612014-01-25 11:49:49 +0200480 {"a2b_qp", (PyCFunction)binascii_a2b_qp, METH_VARARGS|METH_KEYWORDS, binascii_a2b_qp__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200481
482static PyObject *
Serhiy Storchaka12785612014-01-25 11:49:49 +0200483binascii_a2b_qp_impl(PyModuleDef *module, Py_buffer *data, int header);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200484
485static PyObject *
Serhiy Storchaka12785612014-01-25 11:49:49 +0200486binascii_a2b_qp(PyModuleDef *module, PyObject *args, PyObject *kwargs)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200487{
488 PyObject *return_value = NULL;
Serhiy Storchaka12785612014-01-25 11:49:49 +0200489 static char *_keywords[] = {"data", "header", NULL};
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500490 Py_buffer data = {NULL, NULL};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200491 int header = 0;
492
Serhiy Storchaka12785612014-01-25 11:49:49 +0200493 if (!PyArg_ParseTupleAndKeywords(args, kwargs,
494 "O&|i:a2b_qp", _keywords,
495 ascii_buffer_converter, &data, &header))
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200496 goto exit;
Serhiy Storchaka12785612014-01-25 11:49:49 +0200497 return_value = binascii_a2b_qp_impl(module, &data, header);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200498
499exit:
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500500 /* Cleanup for data */
501 if (data.obj)
502 PyBuffer_Release(&data);
503
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200504 return return_value;
505}
506
507PyDoc_STRVAR(binascii_b2a_qp__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800508"b2a_qp($module, /, data, quotetabs=False, istext=True, header=False)\n"
509"--\n"
510"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200511"Encode a string using quoted-printable encoding.\n"
512"\n"
513"On encoding, when istext is set, newlines are not encoded, and white\n"
514"space at end of lines is. When istext is not set, \\r and \\n (CR/LF)\n"
515"are both encoded. When quotetabs is set, space and tabs are encoded.");
516
517#define BINASCII_B2A_QP_METHODDEF \
518 {"b2a_qp", (PyCFunction)binascii_b2a_qp, METH_VARARGS|METH_KEYWORDS, binascii_b2a_qp__doc__},
519
520static PyObject *
Larry Hastings89964c42015-04-14 18:07:59 -0400521binascii_b2a_qp_impl(PyModuleDef *module, Py_buffer *data, int quotetabs,
522 int istext, int header);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200523
524static PyObject *
525binascii_b2a_qp(PyModuleDef *module, PyObject *args, PyObject *kwargs)
526{
527 PyObject *return_value = NULL;
528 static char *_keywords[] = {"data", "quotetabs", "istext", "header", NULL};
529 Py_buffer data = {NULL, NULL};
530 int quotetabs = 0;
531 int istext = 1;
532 int header = 0;
533
534 if (!PyArg_ParseTupleAndKeywords(args, kwargs,
535 "y*|iii:b2a_qp", _keywords,
536 &data, &quotetabs, &istext, &header))
537 goto exit;
538 return_value = binascii_b2a_qp_impl(module, &data, quotetabs, istext, header);
539
540exit:
541 /* Cleanup for data */
542 if (data.obj)
543 PyBuffer_Release(&data);
544
545 return return_value;
546}
Serhiy Storchakae3037e12015-04-20 09:31:51 +0300547/*[clinic end generated code: output=5f8d3578618b3432 input=a9049054013a1b77]*/