| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -143,23 +143,23 @@ read_multiple(pysqlite_Blob *self, Py_ssize_t length, Py_ssize_t offset) | |||
| 143 | 143 | assert(length <= sqlite3_blob_bytes(self->blob)); | |
| 144 | 144 | assert(offset < sqlite3_blob_bytes(self->blob)); | |
| 145 | 145 | ||
| 146 | - PyObject *buffer = PyBytes_FromStringAndSize(NULL, length); | ||
| 147 | - if (buffer == NULL) { | ||
| 146 | + PyBytesWriter *writer = PyBytesWriter_Create(length); | ||
| 147 | + if (writer == NULL) { | ||
| 148 | 148 | return NULL; | |
| 149 | 149 | } | |
| 150 | + char *raw_buffer = PyBytesWriter_GetData(writer); | ||
| 150 | 151 | ||
| 151 | - char *raw_buffer = PyBytes_AS_STRING(buffer); | ||
| 152 | 152 | int rc; | |
| 153 | 153 | Py_BEGIN_ALLOW_THREADS | |
| 154 | 154 | rc = sqlite3_blob_read(self->blob, raw_buffer, (int)length, (int)offset); | |
| 155 | 155 | Py_END_ALLOW_THREADS | |
| 156 | 156 | ||
| 157 | 157 | if (rc != SQLITE_OK) { | |
| 158 | - Py_DECREF(buffer); | ||
| 158 | + PyBytesWriter_Discard(writer); | ||
| 159 | 159 | blob_seterror(self, rc); | |
| 160 | 160 | return NULL; | |
| 161 | 161 | } | |
| 162 | - return buffer; | ||
| 162 | + return PyBytesWriter_Finish(writer); | ||
| 163 | 163 | } | |
| 164 | 164 | ||
| 165 | 165 | ||
@@ -196,7 +196,7 @@ blob_read_impl(pysqlite_Blob *self, int length) | |||
| 196 | 196 | ||
| 197 | 197 | assert(length >= 0); | |
| 198 | 198 | if (length == 0) { | |
| 199 | - return PyBytes_FromStringAndSize(NULL, 0); | ||
| 199 | + return Py_GetConstant(Py_CONSTANT_EMPTY_BYTES); | ||
| 200 | 200 | } | |
| 201 | 201 | ||
| 202 | 202 | PyObject *buffer = read_multiple(self, length, self->offset); | |
@@ -440,20 +440,25 @@ subscript_slice(pysqlite_Blob *self, PyObject *item) | |||
| 440 | 440 | if (step == 1) { | |
| 441 | 441 | return read_multiple(self, len, start); | |
| 442 | 442 | } | |
| 443 | + | ||
| 443 | 444 | PyObject *blob = read_multiple(self, stop - start, start); | |
| 444 | 445 | if (blob == NULL) { | |
| 445 | 446 | return NULL; | |
| 446 | 447 | } | |
| 447 | - PyObject *result = PyBytes_FromStringAndSize(NULL, len); | ||
| 448 | - if (result != NULL) { | ||
| 449 | - char *blob_buf = PyBytes_AS_STRING(blob); | ||
| 450 | - char *res_buf = PyBytes_AS_STRING(result); | ||
| 451 | - for (Py_ssize_t i = 0, j = 0; i < len; i++, j += step) { | ||
| 452 | - res_buf[i] = blob_buf[j]; | ||
| 453 | - } | ||
| 448 | + | ||
| 449 | + PyBytesWriter *writer = PyBytesWriter_Create(len); | ||
| 450 | + if (writer == NULL) { | ||
| 454 | 451 | Py_DECREF(blob); | |
| 452 | + return NULL; | ||
| 453 | + } | ||
| 454 | + char *res_buf = PyBytesWriter_GetData(writer); | ||
| 455 | + | ||
| 456 | + char *blob_buf = PyBytes_AS_STRING(blob); | ||
| 457 | + for (Py_ssize_t i = 0, j = 0; i < len; i++, j += step) { | ||
| 458 | + res_buf[i] = blob_buf[j]; | ||
| 455 | 459 | } | |
| 456 | - return result; | ||
| 460 | + Py_DECREF(blob); | ||
| 461 | + return PyBytesWriter_Finish(writer); | ||
| 457 | 462 | } | |
| 458 | 463 | ||
| 459 | 464 | static PyObject * | |
| Back | FazBrowse Home | New Git URL |
0 commit comments