static PyObject * rpmts_HdrFromFdno(rpmtsObject * s, PyObject *arg) { PyObject *ho = NULL; rpmfdObject *fdo = NULL; Header h; rpmRC rpmrc; if (!PyArg_Parse(arg, "O&:HdrFromFdno", rpmfdFromPyObject, &fdo)) return NULL; Py_BEGIN_ALLOW_THREADS; rpmrc = rpmReadPackageFile(s->ts, rpmfdGetFd(fdo), "rpmts_HdrFromFdno", &h); Py_END_ALLOW_THREADS; Py_XDECREF(fdo); if (rpmrc == RPMRC_OK) { ho = hdr_Wrap(&hdr_Type, h); h = headerFree(h); /* ref held by python object */ } else { Py_INCREF(Py_None); ho = Py_None; } return Py_BuildValue("(iN)", rpmrc, ho); }
static int rpmts_set_scriptFd(rpmtsObject *s, PyObject *value, void *closure) { rpmfdObject *fdo = NULL; int rc = 0; if (PyArg_Parse(value, "O&", rpmfdFromPyObject, &fdo)) { Py_XDECREF(s->scriptFd); s->scriptFd = fdo; rpmtsSetScriptFd(s->ts, rpmfdGetFd(s->scriptFd)); } else if (value == Py_None) { Py_XDECREF(s->scriptFd); s->scriptFd = NULL; rpmtsSetScriptFd(s->ts, NULL); } else { rc = -1; } return rc; }
static PyObject * hdrWrite(hdrObject *s, PyObject *args, PyObject *kwds) { char *kwlist[] = { "file", "magic", NULL }; int magic = HEADER_MAGIC_YES; rpmfdObject *fdo = NULL; int rc; if (!PyArg_ParseTupleAndKeywords(args, kwds, "O&|i", kwlist, rpmfdFromPyObject, &fdo, &magic)) return NULL; Py_BEGIN_ALLOW_THREADS; rc = headerWrite(rpmfdGetFd(fdo), s->h, magic ? HEADER_MAGIC_YES : HEADER_MAGIC_NO); Py_END_ALLOW_THREADS; if (rc) PyErr_SetFromErrno(PyExc_IOError); Py_XDECREF(fdo); /* avoid messing up errno with file close */ if (rc) return NULL; Py_RETURN_NONE; }
/* TODO: permit keyring check + retrofits on copy/load */ static PyObject *hdr_new(PyTypeObject *subtype, PyObject *args, PyObject *kwds) { PyObject *obj = NULL; rpmfdObject *fdo = NULL; Header h = NULL; char *kwlist[] = { "obj", NULL }; if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O", kwlist, &obj)) { return NULL; } if (obj == NULL) { h = headerNew(); } else if (CAPSULE_CHECK(obj)) { h = CAPSULE_EXTRACT(obj, "rpm._C_Header"); headerLink(h); } else if (hdrObject_Check(obj)) { h = headerCopy(((hdrObject*) obj)->h); } else if (PyBytes_Check(obj)) { h = headerCopyLoad(PyBytes_AsString(obj)); } else if (rpmfdFromPyObject(obj, &fdo)) { Py_BEGIN_ALLOW_THREADS; h = headerRead(rpmfdGetFd(fdo), HEADER_MAGIC_YES); Py_END_ALLOW_THREADS; Py_XDECREF(fdo); } else { PyErr_SetString(PyExc_TypeError, "header, blob or file expected"); return NULL; } if (h == NULL) { PyErr_SetString(pyrpmError, "bad header"); return NULL; } return hdr_Wrap(subtype, h); }