From: Michael Tremer Date: Thu, 8 Jul 2021 17:02:47 +0000 (+0000) Subject: _pakfire: Add function to simply open archives X-Git-Tag: 0.9.28~1071 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=36c98595f44a0feccfe58aa4654c60b78663caa5;p=pakfire.git _pakfire: Add function to simply open archives Signed-off-by: Michael Tremer --- diff --git a/src/_pakfire/archive.c b/src/_pakfire/archive.c index 3eda9d8da..6675eaaf7 100644 --- a/src/_pakfire/archive.c +++ b/src/_pakfire/archive.c @@ -29,6 +29,15 @@ #include "errors.h" #include "package.h" +PyObject* new_archive(PyTypeObject* type, PakfireArchive archive) { + ArchiveObject* self = (ArchiveObject *)type->tp_alloc(type, 0); + if (self) { + self->archive = pakfire_archive_ref(archive); + } + + return (PyObject*)self; +} + static PyObject* Archive_new(PyTypeObject* type, PyObject* args, PyObject* kwds) { ArchiveObject* self = (ArchiveObject *)type->tp_alloc(type, 0); if (self) { diff --git a/src/_pakfire/archive.h b/src/_pakfire/archive.h index a750842d2..25e72df0f 100644 --- a/src/_pakfire/archive.h +++ b/src/_pakfire/archive.h @@ -32,4 +32,6 @@ typedef struct { extern PyTypeObject ArchiveType; +PyObject* new_archive(PyTypeObject* type, PakfireArchive archive); + #endif /* PYTHON_PAKFIRE_ARCHIVE_H */ diff --git a/src/_pakfire/pakfire.c b/src/_pakfire/pakfire.c index 4c83e1700..8e476b45c 100644 --- a/src/_pakfire/pakfire.c +++ b/src/_pakfire/pakfire.c @@ -21,6 +21,7 @@ #include #include +#include #include #include #include @@ -34,6 +35,7 @@ #include #include +#include "archive.h" #include "errors.h" #include "key.h" #include "pakfire.h" @@ -975,6 +977,26 @@ static PyObject* Pakfire_sync(PakfireObject* self, PyObject* args, PyObject* kwa Py_RETURN_NONE; } +static PyObject* Pakfire_open(PakfireObject* self, PyObject* args) { + PakfireArchive archive = NULL; + const char* path = NULL; + + if (!PyArg_ParseTuple(args, "s", &path)) + return NULL; + + int r = pakfire_archive_open(&archive, self->pakfire, path); + if (r) { + PyErr_SetFromErrno(PyExc_OSError); + return NULL; + } + + // Create Python object + PyObject* object = new_archive(&ArchiveType, archive); + pakfire_archive_unref(archive); + + return object; +} + static struct PyMethodDef Pakfire_methods[] = { { "bind", @@ -1066,6 +1088,12 @@ static struct PyMethodDef Pakfire_methods[] = { METH_VARARGS|METH_KEYWORDS, NULL, }, + { + "open", + (PyCFunction)Pakfire_open, + METH_VARARGS, + NULL + }, { "refresh", (PyCFunction)Pakfire_refresh,