17db96d56Sopenharmony_ci/*[clinic input]
27db96d56Sopenharmony_cipreserve
37db96d56Sopenharmony_ci[clinic start generated code]*/
47db96d56Sopenharmony_ci
57db96d56Sopenharmony_ciPyDoc_STRVAR(blob_close__doc__,
67db96d56Sopenharmony_ci"close($self, /)\n"
77db96d56Sopenharmony_ci"--\n"
87db96d56Sopenharmony_ci"\n"
97db96d56Sopenharmony_ci"Close the blob.");
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ci#define BLOB_CLOSE_METHODDEF    \
127db96d56Sopenharmony_ci    {"close", (PyCFunction)blob_close, METH_NOARGS, blob_close__doc__},
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_cistatic PyObject *
157db96d56Sopenharmony_ciblob_close_impl(pysqlite_Blob *self);
167db96d56Sopenharmony_ci
177db96d56Sopenharmony_cistatic PyObject *
187db96d56Sopenharmony_ciblob_close(pysqlite_Blob *self, PyObject *Py_UNUSED(ignored))
197db96d56Sopenharmony_ci{
207db96d56Sopenharmony_ci    return blob_close_impl(self);
217db96d56Sopenharmony_ci}
227db96d56Sopenharmony_ci
237db96d56Sopenharmony_ciPyDoc_STRVAR(blob_read__doc__,
247db96d56Sopenharmony_ci"read($self, length=-1, /)\n"
257db96d56Sopenharmony_ci"--\n"
267db96d56Sopenharmony_ci"\n"
277db96d56Sopenharmony_ci"Read data at the current offset position.\n"
287db96d56Sopenharmony_ci"\n"
297db96d56Sopenharmony_ci"  length\n"
307db96d56Sopenharmony_ci"    Read length in bytes.\n"
317db96d56Sopenharmony_ci"\n"
327db96d56Sopenharmony_ci"If the end of the blob is reached, the data up to end of file will be returned.\n"
337db96d56Sopenharmony_ci"When length is not specified, or is negative, Blob.read() will read until the\n"
347db96d56Sopenharmony_ci"end of the blob.");
357db96d56Sopenharmony_ci
367db96d56Sopenharmony_ci#define BLOB_READ_METHODDEF    \
377db96d56Sopenharmony_ci    {"read", _PyCFunction_CAST(blob_read), METH_FASTCALL, blob_read__doc__},
387db96d56Sopenharmony_ci
397db96d56Sopenharmony_cistatic PyObject *
407db96d56Sopenharmony_ciblob_read_impl(pysqlite_Blob *self, int length);
417db96d56Sopenharmony_ci
427db96d56Sopenharmony_cistatic PyObject *
437db96d56Sopenharmony_ciblob_read(pysqlite_Blob *self, PyObject *const *args, Py_ssize_t nargs)
447db96d56Sopenharmony_ci{
457db96d56Sopenharmony_ci    PyObject *return_value = NULL;
467db96d56Sopenharmony_ci    int length = -1;
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("read", nargs, 0, 1)) {
497db96d56Sopenharmony_ci        goto exit;
507db96d56Sopenharmony_ci    }
517db96d56Sopenharmony_ci    if (nargs < 1) {
527db96d56Sopenharmony_ci        goto skip_optional;
537db96d56Sopenharmony_ci    }
547db96d56Sopenharmony_ci    length = _PyLong_AsInt(args[0]);
557db96d56Sopenharmony_ci    if (length == -1 && PyErr_Occurred()) {
567db96d56Sopenharmony_ci        goto exit;
577db96d56Sopenharmony_ci    }
587db96d56Sopenharmony_ciskip_optional:
597db96d56Sopenharmony_ci    return_value = blob_read_impl(self, length);
607db96d56Sopenharmony_ci
617db96d56Sopenharmony_ciexit:
627db96d56Sopenharmony_ci    return return_value;
637db96d56Sopenharmony_ci}
647db96d56Sopenharmony_ci
657db96d56Sopenharmony_ciPyDoc_STRVAR(blob_write__doc__,
667db96d56Sopenharmony_ci"write($self, data, /)\n"
677db96d56Sopenharmony_ci"--\n"
687db96d56Sopenharmony_ci"\n"
697db96d56Sopenharmony_ci"Write data at the current offset.\n"
707db96d56Sopenharmony_ci"\n"
717db96d56Sopenharmony_ci"This function cannot change the blob length.  Writing beyond the end of the\n"
727db96d56Sopenharmony_ci"blob will result in an exception being raised.");
737db96d56Sopenharmony_ci
747db96d56Sopenharmony_ci#define BLOB_WRITE_METHODDEF    \
757db96d56Sopenharmony_ci    {"write", (PyCFunction)blob_write, METH_O, blob_write__doc__},
767db96d56Sopenharmony_ci
777db96d56Sopenharmony_cistatic PyObject *
787db96d56Sopenharmony_ciblob_write_impl(pysqlite_Blob *self, Py_buffer *data);
797db96d56Sopenharmony_ci
807db96d56Sopenharmony_cistatic PyObject *
817db96d56Sopenharmony_ciblob_write(pysqlite_Blob *self, PyObject *arg)
827db96d56Sopenharmony_ci{
837db96d56Sopenharmony_ci    PyObject *return_value = NULL;
847db96d56Sopenharmony_ci    Py_buffer data = {NULL, NULL};
857db96d56Sopenharmony_ci
867db96d56Sopenharmony_ci    if (PyObject_GetBuffer(arg, &data, PyBUF_SIMPLE) != 0) {
877db96d56Sopenharmony_ci        goto exit;
887db96d56Sopenharmony_ci    }
897db96d56Sopenharmony_ci    if (!PyBuffer_IsContiguous(&data, 'C')) {
907db96d56Sopenharmony_ci        _PyArg_BadArgument("write", "argument", "contiguous buffer", arg);
917db96d56Sopenharmony_ci        goto exit;
927db96d56Sopenharmony_ci    }
937db96d56Sopenharmony_ci    return_value = blob_write_impl(self, &data);
947db96d56Sopenharmony_ci
957db96d56Sopenharmony_ciexit:
967db96d56Sopenharmony_ci    /* Cleanup for data */
977db96d56Sopenharmony_ci    if (data.obj) {
987db96d56Sopenharmony_ci       PyBuffer_Release(&data);
997db96d56Sopenharmony_ci    }
1007db96d56Sopenharmony_ci
1017db96d56Sopenharmony_ci    return return_value;
1027db96d56Sopenharmony_ci}
1037db96d56Sopenharmony_ci
1047db96d56Sopenharmony_ciPyDoc_STRVAR(blob_seek__doc__,
1057db96d56Sopenharmony_ci"seek($self, offset, origin=0, /)\n"
1067db96d56Sopenharmony_ci"--\n"
1077db96d56Sopenharmony_ci"\n"
1087db96d56Sopenharmony_ci"Set the current access position to offset.\n"
1097db96d56Sopenharmony_ci"\n"
1107db96d56Sopenharmony_ci"The origin argument defaults to os.SEEK_SET (absolute blob positioning).\n"
1117db96d56Sopenharmony_ci"Other values for origin are os.SEEK_CUR (seek relative to the current position)\n"
1127db96d56Sopenharmony_ci"and os.SEEK_END (seek relative to the blob\'s end).");
1137db96d56Sopenharmony_ci
1147db96d56Sopenharmony_ci#define BLOB_SEEK_METHODDEF    \
1157db96d56Sopenharmony_ci    {"seek", _PyCFunction_CAST(blob_seek), METH_FASTCALL, blob_seek__doc__},
1167db96d56Sopenharmony_ci
1177db96d56Sopenharmony_cistatic PyObject *
1187db96d56Sopenharmony_ciblob_seek_impl(pysqlite_Blob *self, int offset, int origin);
1197db96d56Sopenharmony_ci
1207db96d56Sopenharmony_cistatic PyObject *
1217db96d56Sopenharmony_ciblob_seek(pysqlite_Blob *self, PyObject *const *args, Py_ssize_t nargs)
1227db96d56Sopenharmony_ci{
1237db96d56Sopenharmony_ci    PyObject *return_value = NULL;
1247db96d56Sopenharmony_ci    int offset;
1257db96d56Sopenharmony_ci    int origin = 0;
1267db96d56Sopenharmony_ci
1277db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("seek", nargs, 1, 2)) {
1287db96d56Sopenharmony_ci        goto exit;
1297db96d56Sopenharmony_ci    }
1307db96d56Sopenharmony_ci    offset = _PyLong_AsInt(args[0]);
1317db96d56Sopenharmony_ci    if (offset == -1 && PyErr_Occurred()) {
1327db96d56Sopenharmony_ci        goto exit;
1337db96d56Sopenharmony_ci    }
1347db96d56Sopenharmony_ci    if (nargs < 2) {
1357db96d56Sopenharmony_ci        goto skip_optional;
1367db96d56Sopenharmony_ci    }
1377db96d56Sopenharmony_ci    origin = _PyLong_AsInt(args[1]);
1387db96d56Sopenharmony_ci    if (origin == -1 && PyErr_Occurred()) {
1397db96d56Sopenharmony_ci        goto exit;
1407db96d56Sopenharmony_ci    }
1417db96d56Sopenharmony_ciskip_optional:
1427db96d56Sopenharmony_ci    return_value = blob_seek_impl(self, offset, origin);
1437db96d56Sopenharmony_ci
1447db96d56Sopenharmony_ciexit:
1457db96d56Sopenharmony_ci    return return_value;
1467db96d56Sopenharmony_ci}
1477db96d56Sopenharmony_ci
1487db96d56Sopenharmony_ciPyDoc_STRVAR(blob_tell__doc__,
1497db96d56Sopenharmony_ci"tell($self, /)\n"
1507db96d56Sopenharmony_ci"--\n"
1517db96d56Sopenharmony_ci"\n"
1527db96d56Sopenharmony_ci"Return the current access position for the blob.");
1537db96d56Sopenharmony_ci
1547db96d56Sopenharmony_ci#define BLOB_TELL_METHODDEF    \
1557db96d56Sopenharmony_ci    {"tell", (PyCFunction)blob_tell, METH_NOARGS, blob_tell__doc__},
1567db96d56Sopenharmony_ci
1577db96d56Sopenharmony_cistatic PyObject *
1587db96d56Sopenharmony_ciblob_tell_impl(pysqlite_Blob *self);
1597db96d56Sopenharmony_ci
1607db96d56Sopenharmony_cistatic PyObject *
1617db96d56Sopenharmony_ciblob_tell(pysqlite_Blob *self, PyObject *Py_UNUSED(ignored))
1627db96d56Sopenharmony_ci{
1637db96d56Sopenharmony_ci    return blob_tell_impl(self);
1647db96d56Sopenharmony_ci}
1657db96d56Sopenharmony_ci
1667db96d56Sopenharmony_ciPyDoc_STRVAR(blob_enter__doc__,
1677db96d56Sopenharmony_ci"__enter__($self, /)\n"
1687db96d56Sopenharmony_ci"--\n"
1697db96d56Sopenharmony_ci"\n"
1707db96d56Sopenharmony_ci"Blob context manager enter.");
1717db96d56Sopenharmony_ci
1727db96d56Sopenharmony_ci#define BLOB_ENTER_METHODDEF    \
1737db96d56Sopenharmony_ci    {"__enter__", (PyCFunction)blob_enter, METH_NOARGS, blob_enter__doc__},
1747db96d56Sopenharmony_ci
1757db96d56Sopenharmony_cistatic PyObject *
1767db96d56Sopenharmony_ciblob_enter_impl(pysqlite_Blob *self);
1777db96d56Sopenharmony_ci
1787db96d56Sopenharmony_cistatic PyObject *
1797db96d56Sopenharmony_ciblob_enter(pysqlite_Blob *self, PyObject *Py_UNUSED(ignored))
1807db96d56Sopenharmony_ci{
1817db96d56Sopenharmony_ci    return blob_enter_impl(self);
1827db96d56Sopenharmony_ci}
1837db96d56Sopenharmony_ci
1847db96d56Sopenharmony_ciPyDoc_STRVAR(blob_exit__doc__,
1857db96d56Sopenharmony_ci"__exit__($self, type, val, tb, /)\n"
1867db96d56Sopenharmony_ci"--\n"
1877db96d56Sopenharmony_ci"\n"
1887db96d56Sopenharmony_ci"Blob context manager exit.");
1897db96d56Sopenharmony_ci
1907db96d56Sopenharmony_ci#define BLOB_EXIT_METHODDEF    \
1917db96d56Sopenharmony_ci    {"__exit__", _PyCFunction_CAST(blob_exit), METH_FASTCALL, blob_exit__doc__},
1927db96d56Sopenharmony_ci
1937db96d56Sopenharmony_cistatic PyObject *
1947db96d56Sopenharmony_ciblob_exit_impl(pysqlite_Blob *self, PyObject *type, PyObject *val,
1957db96d56Sopenharmony_ci               PyObject *tb);
1967db96d56Sopenharmony_ci
1977db96d56Sopenharmony_cistatic PyObject *
1987db96d56Sopenharmony_ciblob_exit(pysqlite_Blob *self, PyObject *const *args, Py_ssize_t nargs)
1997db96d56Sopenharmony_ci{
2007db96d56Sopenharmony_ci    PyObject *return_value = NULL;
2017db96d56Sopenharmony_ci    PyObject *type;
2027db96d56Sopenharmony_ci    PyObject *val;
2037db96d56Sopenharmony_ci    PyObject *tb;
2047db96d56Sopenharmony_ci
2057db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("__exit__", nargs, 3, 3)) {
2067db96d56Sopenharmony_ci        goto exit;
2077db96d56Sopenharmony_ci    }
2087db96d56Sopenharmony_ci    type = args[0];
2097db96d56Sopenharmony_ci    val = args[1];
2107db96d56Sopenharmony_ci    tb = args[2];
2117db96d56Sopenharmony_ci    return_value = blob_exit_impl(self, type, val, tb);
2127db96d56Sopenharmony_ci
2137db96d56Sopenharmony_ciexit:
2147db96d56Sopenharmony_ci    return return_value;
2157db96d56Sopenharmony_ci}
2167db96d56Sopenharmony_ci/*[clinic end generated code: output=382cbf0977bb158a input=a9049054013a1b77]*/
217