Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
char* data = NULL;
size_t data_size = 0;
- int ret = pakfire_archive_read(self->archive, filename, &data, &data_size);
- if (ret) {
- free(data);
+ int r = pakfire_archive_read(self->archive, filename, &data, &data_size);
+ if (r) {
+ PyErr_SetFromErrno(PyExc_OSError);
+ return NULL;
+ }
+ // Return None if there was no data
+ if (!data)
Py_RETURN_NONE;
- }
- // XXX This is not ideal since PyBytes_FromStringAndSize creates a
- // copy of data.
+ // Create a copy of data and return it to the user
PyObject* bytes = PyBytes_FromStringAndSize(data, data_size);
+
free(data);
return bytes;