static PyObject * hdrWrite(hdrObject *s, PyObject *args, PyObject *kwds)
{
- PyObject *fo = NULL;
char *kwlist[] = { "file", "magic", NULL };
int magic = 1;
FD_t fd = NULL;
int rc;
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|i", kwlist, &fo, &magic))
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O&|i", kwlist,
+ rpmFdFromPyObject, &fd, &magic))
return NULL;
- if ((fd = rpmFdFromPyObject(fo)) == NULL) return NULL;
-
Py_BEGIN_ALLOW_THREADS;
rc = headerWrite(fd, s->h, magic ? HEADER_MAGIC_YES : HEADER_MAGIC_NO);
Py_END_ALLOW_THREADS;
h = headerCopy(hdrGetHeader((hdrObject*) obj));
} else if (PyString_Check(obj)) {
h = headerCopyLoad(PyString_AsString(obj));
- } else if ((fd = rpmFdFromPyObject(obj)) != NULL) {
+ } else if (rpmFdFromPyObject(obj, &fd)) {
Py_BEGIN_ALLOW_THREADS;
h = headerRead(fd, HEADER_MAGIC_YES);
Fclose(fd);
PyObject * rpmHeaderFromFD(PyObject * self, PyObject * args, PyObject * kwds)
{
FD_t fd;
- PyObject *fo;
PyObject * list;
char * kwlist[] = {"fd", NULL};
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "O", kwlist, &fo))
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O&", kwlist,
+ rpmFdFromPyObject, &fd))
return NULL;
- if ((fd = rpmFdFromPyObject(fo)) == NULL) return NULL;
-
list = rpmReadHeaders (fd);
Fclose(fd);
#include "rpmsystem-py.h"
#include "rpmfd-py.h"
-FD_t rpmFdFromPyObject(PyObject *obj)
+int rpmFdFromPyObject(PyObject *obj, FD_t *fdp)
{
FD_t fd = NULL;
fd = fdDup(fileno(fp));
} else {
PyErr_SetString(PyExc_TypeError, "integer or file object expected");
- return NULL;
+ return 0;
}
if (fd == NULL || Ferror(fd)) {
PyErr_SetFromErrno(PyExc_IOError);
+ Fclose(fd);
+ return 0;
}
- return fd;
+ *fdp = fd;
+ return 1;
}
rpmts_HdrFromFdno(rpmtsObject * s, PyObject * args, PyObject * kwds)
{
PyObject * result = NULL;
- PyObject * fo = NULL;
Header h;
FD_t fd;
rpmRC rpmrc;
char * kwlist[] = {"fd", NULL};
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "O:HdrFromFdno", kwlist, &fo))
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O&:HdrFromFdno", kwlist,
+ rpmFdFromPyObject, &fd))
return NULL;
- if ((fd = rpmFdFromPyObject(fo)) == NULL) return NULL;
rpmrc = rpmReadPackageFile(s->ts, fd, "rpmts_HdrFromFdno", &h);
Fclose(fd);