blob: da17cf8c3c83617db486f50bc8c8f4d79671e1f8 [file] [log] [blame]
Serhiy Storchaka1009bf12015-04-03 23:53:51 +03001/*[clinic input]
2preserve
3[clinic start generated code]*/
4
5PyDoc_STRVAR(bytes_split__doc__,
6"split($self, /, sep=None, maxsplit=-1)\n"
7"--\n"
8"\n"
9"Return a list of the sections in the bytes, using sep as the delimiter.\n"
10"\n"
11" sep\n"
12" The delimiter according which to split the bytes.\n"
13" None (the default value) means split on ASCII whitespace characters\n"
14" (space, tab, return, newline, formfeed, vertical tab).\n"
15" maxsplit\n"
16" Maximum number of splits to do.\n"
17" -1 (the default value) means no limit.");
18
19#define BYTES_SPLIT_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -070020 {"split", (PyCFunction)bytes_split, METH_FASTCALL, bytes_split__doc__},
Serhiy Storchaka1009bf12015-04-03 23:53:51 +030021
22static PyObject *
Serhiy Storchaka7a9579c2016-05-02 13:45:20 +030023bytes_split_impl(PyBytesObject *self, PyObject *sep, Py_ssize_t maxsplit);
Serhiy Storchaka1009bf12015-04-03 23:53:51 +030024
25static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -070026bytes_split(PyBytesObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +030027{
28 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +030029 static const char * const _keywords[] = {"sep", "maxsplit", NULL};
30 static _PyArg_Parser _parser = {"|On:split", _keywords, 0};
Serhiy Storchaka1009bf12015-04-03 23:53:51 +030031 PyObject *sep = Py_None;
32 Py_ssize_t maxsplit = -1;
33
Victor Stinner3e1fad62017-01-17 01:29:01 +010034 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030035 &sep, &maxsplit)) {
Serhiy Storchaka1009bf12015-04-03 23:53:51 +030036 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030037 }
Serhiy Storchaka1009bf12015-04-03 23:53:51 +030038 return_value = bytes_split_impl(self, sep, maxsplit);
39
40exit:
41 return return_value;
42}
43
44PyDoc_STRVAR(bytes_partition__doc__,
45"partition($self, sep, /)\n"
46"--\n"
47"\n"
48"Partition the bytes into three parts using the given separator.\n"
49"\n"
50"This will search for the separator sep in the bytes. If the separator is found,\n"
51"returns a 3-tuple containing the part before the separator, the separator\n"
52"itself, and the part after it.\n"
53"\n"
54"If the separator is not found, returns a 3-tuple containing the original bytes\n"
55"object and two empty bytes objects.");
56
57#define BYTES_PARTITION_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +030058 {"partition", (PyCFunction)bytes_partition, METH_O, bytes_partition__doc__},
Serhiy Storchaka1009bf12015-04-03 23:53:51 +030059
60static PyObject *
61bytes_partition_impl(PyBytesObject *self, Py_buffer *sep);
62
63static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +030064bytes_partition(PyBytesObject *self, PyObject *arg)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +030065{
66 PyObject *return_value = NULL;
67 Py_buffer sep = {NULL, NULL};
68
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030069 if (!PyArg_Parse(arg, "y*:partition", &sep)) {
Serhiy Storchaka1009bf12015-04-03 23:53:51 +030070 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030071 }
Serhiy Storchaka1009bf12015-04-03 23:53:51 +030072 return_value = bytes_partition_impl(self, &sep);
73
74exit:
75 /* Cleanup for sep */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030076 if (sep.obj) {
Serhiy Storchaka1009bf12015-04-03 23:53:51 +030077 PyBuffer_Release(&sep);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030078 }
Serhiy Storchaka1009bf12015-04-03 23:53:51 +030079
80 return return_value;
81}
82
83PyDoc_STRVAR(bytes_rpartition__doc__,
84"rpartition($self, sep, /)\n"
85"--\n"
86"\n"
87"Partition the bytes into three parts using the given separator.\n"
88"\n"
89"This will search for the separator sep in the bytes, starting and the end. If\n"
90"the separator is found, returns a 3-tuple containing the part before the\n"
91"separator, the separator itself, and the part after it.\n"
92"\n"
93"If the separator is not found, returns a 3-tuple containing two empty bytes\n"
94"objects and the original bytes object.");
95
96#define BYTES_RPARTITION_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +030097 {"rpartition", (PyCFunction)bytes_rpartition, METH_O, bytes_rpartition__doc__},
Serhiy Storchaka1009bf12015-04-03 23:53:51 +030098
99static PyObject *
100bytes_rpartition_impl(PyBytesObject *self, Py_buffer *sep);
101
102static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300103bytes_rpartition(PyBytesObject *self, PyObject *arg)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300104{
105 PyObject *return_value = NULL;
106 Py_buffer sep = {NULL, NULL};
107
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300108 if (!PyArg_Parse(arg, "y*:rpartition", &sep)) {
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300109 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300110 }
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300111 return_value = bytes_rpartition_impl(self, &sep);
112
113exit:
114 /* Cleanup for sep */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300115 if (sep.obj) {
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300116 PyBuffer_Release(&sep);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300117 }
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300118
119 return return_value;
120}
121
122PyDoc_STRVAR(bytes_rsplit__doc__,
123"rsplit($self, /, sep=None, maxsplit=-1)\n"
124"--\n"
125"\n"
126"Return a list of the sections in the bytes, using sep as the delimiter.\n"
127"\n"
128" sep\n"
129" The delimiter according which to split the bytes.\n"
130" None (the default value) means split on ASCII whitespace characters\n"
131" (space, tab, return, newline, formfeed, vertical tab).\n"
132" maxsplit\n"
133" Maximum number of splits to do.\n"
134" -1 (the default value) means no limit.\n"
135"\n"
136"Splitting is done starting at the end of the bytes and working to the front.");
137
138#define BYTES_RSPLIT_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700139 {"rsplit", (PyCFunction)bytes_rsplit, METH_FASTCALL, bytes_rsplit__doc__},
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300140
141static PyObject *
Serhiy Storchaka7a9579c2016-05-02 13:45:20 +0300142bytes_rsplit_impl(PyBytesObject *self, PyObject *sep, Py_ssize_t maxsplit);
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300143
144static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700145bytes_rsplit(PyBytesObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300146{
147 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300148 static const char * const _keywords[] = {"sep", "maxsplit", NULL};
149 static _PyArg_Parser _parser = {"|On:rsplit", _keywords, 0};
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300150 PyObject *sep = Py_None;
151 Py_ssize_t maxsplit = -1;
152
Victor Stinner3e1fad62017-01-17 01:29:01 +0100153 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300154 &sep, &maxsplit)) {
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300155 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300156 }
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300157 return_value = bytes_rsplit_impl(self, sep, maxsplit);
158
159exit:
160 return return_value;
161}
162
163PyDoc_STRVAR(bytes_join__doc__,
164"join($self, iterable_of_bytes, /)\n"
165"--\n"
166"\n"
167"Concatenate any number of bytes objects.\n"
168"\n"
169"The bytes whose method is called is inserted in between each pair.\n"
170"\n"
171"The result is returned as a new bytes object.\n"
172"\n"
173"Example: b\'.\'.join([b\'ab\', b\'pq\', b\'rs\']) -> b\'ab.pq.rs\'.");
174
175#define BYTES_JOIN_METHODDEF \
176 {"join", (PyCFunction)bytes_join, METH_O, bytes_join__doc__},
177
178PyDoc_STRVAR(bytes_strip__doc__,
179"strip($self, bytes=None, /)\n"
180"--\n"
181"\n"
182"Strip leading and trailing bytes contained in the argument.\n"
183"\n"
184"If the argument is omitted or None, strip leading and trailing ASCII whitespace.");
185
186#define BYTES_STRIP_METHODDEF \
Victor Stinner0c4a8282017-01-17 02:21:47 +0100187 {"strip", (PyCFunction)bytes_strip, METH_FASTCALL, bytes_strip__doc__},
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300188
189static PyObject *
190bytes_strip_impl(PyBytesObject *self, PyObject *bytes);
191
192static PyObject *
Victor Stinner0c4a8282017-01-17 02:21:47 +0100193bytes_strip(PyBytesObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300194{
195 PyObject *return_value = NULL;
196 PyObject *bytes = Py_None;
197
Sylvain74453812017-06-10 06:51:48 +0200198 if (!_PyArg_NoStackKeywords("strip", kwnames)) {
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300199 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300200 }
Victor Stinner0c4a8282017-01-17 02:21:47 +0100201
Sylvain74453812017-06-10 06:51:48 +0200202 if (!_PyArg_UnpackStack(args, nargs, "strip",
203 0, 1,
204 &bytes)) {
Victor Stinner0c4a8282017-01-17 02:21:47 +0100205 goto exit;
206 }
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300207 return_value = bytes_strip_impl(self, bytes);
208
209exit:
210 return return_value;
211}
212
213PyDoc_STRVAR(bytes_lstrip__doc__,
214"lstrip($self, bytes=None, /)\n"
215"--\n"
216"\n"
217"Strip leading bytes contained in the argument.\n"
218"\n"
219"If the argument is omitted or None, strip leading ASCII whitespace.");
220
221#define BYTES_LSTRIP_METHODDEF \
Victor Stinner0c4a8282017-01-17 02:21:47 +0100222 {"lstrip", (PyCFunction)bytes_lstrip, METH_FASTCALL, bytes_lstrip__doc__},
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300223
224static PyObject *
225bytes_lstrip_impl(PyBytesObject *self, PyObject *bytes);
226
227static PyObject *
Victor Stinner0c4a8282017-01-17 02:21:47 +0100228bytes_lstrip(PyBytesObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300229{
230 PyObject *return_value = NULL;
231 PyObject *bytes = Py_None;
232
Sylvain74453812017-06-10 06:51:48 +0200233 if (!_PyArg_NoStackKeywords("lstrip", kwnames)) {
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300234 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300235 }
Victor Stinner0c4a8282017-01-17 02:21:47 +0100236
Sylvain74453812017-06-10 06:51:48 +0200237 if (!_PyArg_UnpackStack(args, nargs, "lstrip",
238 0, 1,
239 &bytes)) {
Victor Stinner0c4a8282017-01-17 02:21:47 +0100240 goto exit;
241 }
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300242 return_value = bytes_lstrip_impl(self, bytes);
243
244exit:
245 return return_value;
246}
247
248PyDoc_STRVAR(bytes_rstrip__doc__,
249"rstrip($self, bytes=None, /)\n"
250"--\n"
251"\n"
252"Strip trailing bytes contained in the argument.\n"
253"\n"
254"If the argument is omitted or None, strip trailing ASCII whitespace.");
255
256#define BYTES_RSTRIP_METHODDEF \
Victor Stinner0c4a8282017-01-17 02:21:47 +0100257 {"rstrip", (PyCFunction)bytes_rstrip, METH_FASTCALL, bytes_rstrip__doc__},
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300258
259static PyObject *
260bytes_rstrip_impl(PyBytesObject *self, PyObject *bytes);
261
262static PyObject *
Victor Stinner0c4a8282017-01-17 02:21:47 +0100263bytes_rstrip(PyBytesObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300264{
265 PyObject *return_value = NULL;
266 PyObject *bytes = Py_None;
267
Sylvain74453812017-06-10 06:51:48 +0200268 if (!_PyArg_NoStackKeywords("rstrip", kwnames)) {
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300269 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300270 }
Victor Stinner0c4a8282017-01-17 02:21:47 +0100271
Sylvain74453812017-06-10 06:51:48 +0200272 if (!_PyArg_UnpackStack(args, nargs, "rstrip",
273 0, 1,
274 &bytes)) {
Victor Stinner0c4a8282017-01-17 02:21:47 +0100275 goto exit;
276 }
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300277 return_value = bytes_rstrip_impl(self, bytes);
278
279exit:
280 return return_value;
281}
282
283PyDoc_STRVAR(bytes_translate__doc__,
Martin Panter1b6c6da2016-08-27 08:35:02 +0000284"translate($self, table, /, delete=b\'\')\n"
285"--\n"
286"\n"
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300287"Return a copy with each character mapped by the given translation table.\n"
288"\n"
289" table\n"
290" Translation table, which must be a bytes object of length 256.\n"
291"\n"
Martin Panter1b6c6da2016-08-27 08:35:02 +0000292"All characters occurring in the optional argument delete are removed.\n"
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300293"The remaining characters are mapped through the given translation table.");
294
295#define BYTES_TRANSLATE_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700296 {"translate", (PyCFunction)bytes_translate, METH_FASTCALL, bytes_translate__doc__},
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300297
298static PyObject *
Martin Panter1b6c6da2016-08-27 08:35:02 +0000299bytes_translate_impl(PyBytesObject *self, PyObject *table,
Larry Hastings89964c42015-04-14 18:07:59 -0400300 PyObject *deletechars);
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300301
302static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700303bytes_translate(PyBytesObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300304{
305 PyObject *return_value = NULL;
Martin Panter1b6c6da2016-08-27 08:35:02 +0000306 static const char * const _keywords[] = {"", "delete", NULL};
307 static _PyArg_Parser _parser = {"O|O:translate", _keywords, 0};
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300308 PyObject *table;
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300309 PyObject *deletechars = NULL;
310
Victor Stinner3e1fad62017-01-17 01:29:01 +0100311 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Martin Panter1b6c6da2016-08-27 08:35:02 +0000312 &table, &deletechars)) {
313 goto exit;
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300314 }
Martin Panter1b6c6da2016-08-27 08:35:02 +0000315 return_value = bytes_translate_impl(self, table, deletechars);
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300316
317exit:
318 return return_value;
319}
320
321PyDoc_STRVAR(bytes_maketrans__doc__,
322"maketrans(frm, to, /)\n"
323"--\n"
324"\n"
325"Return a translation table useable for the bytes or bytearray translate method.\n"
326"\n"
327"The returned table will be one where each byte in frm is mapped to the byte at\n"
328"the same position in to.\n"
329"\n"
330"The bytes objects frm and to must be of the same length.");
331
332#define BYTES_MAKETRANS_METHODDEF \
Victor Stinner259f0e42017-01-17 01:35:17 +0100333 {"maketrans", (PyCFunction)bytes_maketrans, METH_FASTCALL|METH_STATIC, bytes_maketrans__doc__},
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300334
335static PyObject *
336bytes_maketrans_impl(Py_buffer *frm, Py_buffer *to);
337
338static PyObject *
Victor Stinner259f0e42017-01-17 01:35:17 +0100339bytes_maketrans(void *null, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300340{
341 PyObject *return_value = NULL;
342 Py_buffer frm = {NULL, NULL};
343 Py_buffer to = {NULL, NULL};
344
Sylvain74453812017-06-10 06:51:48 +0200345 if (!_PyArg_NoStackKeywords("maketrans", kwnames)) {
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300346 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300347 }
Victor Stinner259f0e42017-01-17 01:35:17 +0100348
Sylvain74453812017-06-10 06:51:48 +0200349 if (!_PyArg_ParseStack(args, nargs, "y*y*:maketrans",
350 &frm, &to)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100351 goto exit;
352 }
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300353 return_value = bytes_maketrans_impl(&frm, &to);
354
355exit:
356 /* Cleanup for frm */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300357 if (frm.obj) {
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300358 PyBuffer_Release(&frm);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300359 }
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300360 /* Cleanup for to */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300361 if (to.obj) {
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300362 PyBuffer_Release(&to);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300363 }
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300364
365 return return_value;
366}
367
368PyDoc_STRVAR(bytes_replace__doc__,
369"replace($self, old, new, count=-1, /)\n"
370"--\n"
371"\n"
372"Return a copy with all occurrences of substring old replaced by new.\n"
373"\n"
374" count\n"
375" Maximum number of occurrences to replace.\n"
376" -1 (the default value) means replace all occurrences.\n"
377"\n"
378"If the optional argument count is given, only the first count occurrences are\n"
379"replaced.");
380
381#define BYTES_REPLACE_METHODDEF \
Victor Stinner259f0e42017-01-17 01:35:17 +0100382 {"replace", (PyCFunction)bytes_replace, METH_FASTCALL, bytes_replace__doc__},
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300383
384static PyObject *
Serhiy Storchaka7a9579c2016-05-02 13:45:20 +0300385bytes_replace_impl(PyBytesObject *self, Py_buffer *old, Py_buffer *new,
Larry Hastings89964c42015-04-14 18:07:59 -0400386 Py_ssize_t count);
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300387
388static PyObject *
Victor Stinner259f0e42017-01-17 01:35:17 +0100389bytes_replace(PyBytesObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300390{
391 PyObject *return_value = NULL;
392 Py_buffer old = {NULL, NULL};
393 Py_buffer new = {NULL, NULL};
394 Py_ssize_t count = -1;
395
Sylvain74453812017-06-10 06:51:48 +0200396 if (!_PyArg_NoStackKeywords("replace", kwnames)) {
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300397 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300398 }
Victor Stinner259f0e42017-01-17 01:35:17 +0100399
Sylvain74453812017-06-10 06:51:48 +0200400 if (!_PyArg_ParseStack(args, nargs, "y*y*|n:replace",
401 &old, &new, &count)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100402 goto exit;
403 }
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300404 return_value = bytes_replace_impl(self, &old, &new, count);
405
406exit:
407 /* Cleanup for old */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300408 if (old.obj) {
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300409 PyBuffer_Release(&old);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300410 }
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300411 /* Cleanup for new */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300412 if (new.obj) {
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300413 PyBuffer_Release(&new);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300414 }
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300415
416 return return_value;
417}
418
419PyDoc_STRVAR(bytes_decode__doc__,
420"decode($self, /, encoding=\'utf-8\', errors=\'strict\')\n"
421"--\n"
422"\n"
423"Decode the bytes using the codec registered for encoding.\n"
424"\n"
425" encoding\n"
426" The encoding with which to decode the bytes.\n"
427" errors\n"
428" The error handling scheme to use for the handling of decoding errors.\n"
429" The default is \'strict\' meaning that decoding errors raise a\n"
430" UnicodeDecodeError. Other possible values are \'ignore\' and \'replace\'\n"
431" as well as any other name registered with codecs.register_error that\n"
432" can handle UnicodeDecodeErrors.");
433
434#define BYTES_DECODE_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700435 {"decode", (PyCFunction)bytes_decode, METH_FASTCALL, bytes_decode__doc__},
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300436
437static PyObject *
Serhiy Storchaka7a9579c2016-05-02 13:45:20 +0300438bytes_decode_impl(PyBytesObject *self, const char *encoding,
Larry Hastings89964c42015-04-14 18:07:59 -0400439 const char *errors);
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300440
441static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700442bytes_decode(PyBytesObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300443{
444 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300445 static const char * const _keywords[] = {"encoding", "errors", NULL};
446 static _PyArg_Parser _parser = {"|ss:decode", _keywords, 0};
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300447 const char *encoding = NULL;
448 const char *errors = NULL;
449
Victor Stinner3e1fad62017-01-17 01:29:01 +0100450 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300451 &encoding, &errors)) {
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300452 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300453 }
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300454 return_value = bytes_decode_impl(self, encoding, errors);
455
456exit:
457 return return_value;
458}
459
460PyDoc_STRVAR(bytes_splitlines__doc__,
461"splitlines($self, /, keepends=False)\n"
462"--\n"
463"\n"
464"Return a list of the lines in the bytes, breaking at line boundaries.\n"
465"\n"
466"Line breaks are not included in the resulting list unless keepends is given and\n"
467"true.");
468
469#define BYTES_SPLITLINES_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700470 {"splitlines", (PyCFunction)bytes_splitlines, METH_FASTCALL, bytes_splitlines__doc__},
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300471
472static PyObject *
Serhiy Storchaka7a9579c2016-05-02 13:45:20 +0300473bytes_splitlines_impl(PyBytesObject *self, int keepends);
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300474
475static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700476bytes_splitlines(PyBytesObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300477{
478 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300479 static const char * const _keywords[] = {"keepends", NULL};
480 static _PyArg_Parser _parser = {"|i:splitlines", _keywords, 0};
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300481 int keepends = 0;
482
Victor Stinner3e1fad62017-01-17 01:29:01 +0100483 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300484 &keepends)) {
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300485 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300486 }
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300487 return_value = bytes_splitlines_impl(self, keepends);
488
489exit:
490 return return_value;
491}
492
493PyDoc_STRVAR(bytes_fromhex__doc__,
494"fromhex($type, string, /)\n"
495"--\n"
496"\n"
497"Create a bytes object from a string of hexadecimal numbers.\n"
498"\n"
499"Spaces between two numbers are accepted.\n"
500"Example: bytes.fromhex(\'B9 01EF\') -> b\'\\\\xb9\\\\x01\\\\xef\'.");
501
502#define BYTES_FROMHEX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300503 {"fromhex", (PyCFunction)bytes_fromhex, METH_O|METH_CLASS, bytes_fromhex__doc__},
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300504
505static PyObject *
506bytes_fromhex_impl(PyTypeObject *type, PyObject *string);
507
508static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300509bytes_fromhex(PyTypeObject *type, PyObject *arg)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300510{
511 PyObject *return_value = NULL;
512 PyObject *string;
513
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300514 if (!PyArg_Parse(arg, "U:fromhex", &string)) {
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300515 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300516 }
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300517 return_value = bytes_fromhex_impl(type, string);
518
519exit:
520 return return_value;
521}
Sylvain74453812017-06-10 06:51:48 +0200522/*[clinic end generated code: output=a82999760469bbec input=a9049054013a1b77]*/