}
static void Package_dealloc(PackageObject* self) {
- pakfire_package_unref(self->package);
-
+ if (self->package)
+ pakfire_package_unref(self->package);
if (self->ctx)
pakfire_ctx_unref(self->ctx);
}
static int Package_init(PackageObject* self, PyObject* args, PyObject* kwds) {
- PakfireObject* pakfire;
- RepoObject* repo;
+ PakfireObject* pakfire = NULL;
+ RepoObject* repo = NULL;
const char* name = NULL;
const char* evr = NULL;
const char* arch = NULL;
+ int r;
- if (!PyArg_ParseTuple(args, "O!O!sss", &PakfireType, &pakfire, &RepoType, &repo,
- &name, &evr, &arch))
+ if (!PyArg_ParseTuple(args, "O!O!sss",
+ &PakfireType, &pakfire, &RepoType, &repo, &name, &evr, &arch))
return -1;
// Store a reference to the context
self->ctx = pakfire_ctx_ref(pakfire->ctx);
- int r = pakfire_package_create(&self->package, pakfire->pakfire, repo->repo, name, evr, arch);
- if (r) {
+ // Create the package object
+ r = pakfire_package_create(&self->package, pakfire->pakfire, repo->repo, name, evr, arch);
+ if (r < 0) {
PyErr_SetFromErrno(PyExc_OSError);
return -1;
}
static PyObject* Package_repr(PackageObject* self) {
const char* nevra = pakfire_package_get_string(self->package, PAKFIRE_PKG_NEVRA);
+ if (!nevra) {
+ PyErr_SetFromErrno(PyExc_OSError);
+ return NULL;
+ }
return PyUnicode_FromFormat("<_pakfire.Package %s>", nevra);
}
static PyObject* Package_str(PackageObject* self) {
const char* nevra = pakfire_package_get_string(self->package, PAKFIRE_PKG_NEVRA);
+ if (!nevra) {
+ PyErr_SetFromErrno(PyExc_OSError);
+ return NULL;
+ }
return PyUnicode_FromString(nevra);
}
-static PyObject* Package_richcompare(PackageObject* self, PyObject* _other, int op) {
- if (!PyType_IsSubtype(_other->ob_type, &PackageType)) {
+static PyObject* Package_richcompare(PackageObject* self, PyObject* o, int op) {
+ PackageObject* other = (PackageObject *)o;
+
+ // Check if the other object is of the correct type
+ if (!PyType_IsSubtype(o->ob_type, &PackageType)) {
PyErr_SetString(PyExc_TypeError, "Expected a Package object");
return NULL;
}
- PackageObject* other = (PackageObject *)_other;
-
long result = pakfire_package_cmp(self->package, other->package);
- switch (op) {
+ switch (result) {
case Py_EQ:
if (result == 0)
Py_RETURN_TRUE;
Py_RETURN_FALSE;
}
-static const char* PyUnicode_FromValue(PyObject* value) {
- if (value == Py_None)
- return NULL;
-
- return PyUnicode_AsUTF8(value);
-}
-
static PyObject* Package_get_name(PackageObject* self) {
const char* name = pakfire_package_get_string(self->package, PAKFIRE_PKG_NAME);
if (!name)