19 #if Py_TPFLAGS_HAVE_ITER
62 result = PyTuple_New(13);
65 PyTuple_SET_ITEM(result, 0,
Py_None);
68 PyTuple_SET_ITEM(result, 1, PyInt_FromLong(FSize));
69 PyTuple_SET_ITEM(result, 2, PyInt_FromLong(FMode));
70 PyTuple_SET_ITEM(result, 3, PyInt_FromLong(FMtime));
71 PyTuple_SET_ITEM(result, 4, PyInt_FromLong(FFlags));
72 PyTuple_SET_ITEM(result, 5, PyInt_FromLong(FRdev));
73 PyTuple_SET_ITEM(result, 6, PyInt_FromLong(FInode));
74 PyTuple_SET_ITEM(result, 7, PyInt_FromLong(FNlink));
75 PyTuple_SET_ITEM(result, 8, PyInt_FromLong(FState));
76 PyTuple_SET_ITEM(result, 9, PyInt_FromLong(VFlags));
79 PyTuple_SET_ITEM(result, 10,
Py_None);
84 PyTuple_SET_ITEM(result, 11,
Py_None);
87 PyTuple_SET_ITEM(result, 12, rpmfi_Digest(s));
104 PyObject * result =
NULL;
106 result = rpmfi_iternext(s);
145 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"i", kwlist, &
_rpmfi_debug))
253 if (digest ==
NULL || dlen == 0) {
258 for (i = 0; i <
dlen; i++, t += 2)
336 static struct PyMethodDef rpmfi_methods[] = {
337 {
"Debug", (PyCFunction)
rpmfi_Debug, METH_VARARGS|METH_KEYWORDS,
339 {
"FC", (PyCFunction)rpmfi_FC, METH_NOARGS,
341 {
"FX", (PyCFunction)rpmfi_FX, METH_NOARGS,
343 {
"DC", (PyCFunction)rpmfi_DC, METH_NOARGS,
345 {
"DX", (PyCFunction)rpmfi_DX, METH_NOARGS,
347 {
"BN", (PyCFunction)rpmfi_BN, METH_NOARGS,
349 {
"DN", (PyCFunction)rpmfi_DN, METH_NOARGS,
351 {
"FN", (PyCFunction)rpmfi_FN, METH_NOARGS,
353 {
"FFlags", (PyCFunction)rpmfi_FFlags, METH_NOARGS,
355 {
"VFlags", (PyCFunction)rpmfi_VFlags, METH_NOARGS,
357 {
"FMode", (PyCFunction)rpmfi_FMode, METH_NOARGS,
359 {
"FState", (PyCFunction)rpmfi_FState, METH_NOARGS,
361 {
"MD5", (PyCFunction)rpmfi_Digest, METH_NOARGS,
363 {
"Digest", (PyCFunction)rpmfi_Digest, METH_NOARGS,
365 {
"FLink", (PyCFunction)rpmfi_FLink, METH_NOARGS,
367 {
"FSize", (PyCFunction)rpmfi_FSize, METH_NOARGS,
369 {
"FRdev", (PyCFunction)rpmfi_FRdev, METH_NOARGS,
371 {
"FMtime", (PyCFunction)rpmfi_FMtime, METH_NOARGS,
373 {
"FUser", (PyCFunction)rpmfi_FUser, METH_NOARGS,
375 {
"FGroup", (PyCFunction)rpmfi_FGroup, METH_NOARGS,
377 {
"FColor", (PyCFunction)rpmfi_FColor, METH_NOARGS,
379 {
"FClass", (PyCFunction)rpmfi_FClass, METH_NOARGS,
381 {
"next", (PyCFunction)rpmfi_Next, METH_NOARGS,
382 "fi.next() -> (FN, FSize, FMode, FMtime, FFlags, FRdev, FInode, FNlink, FState, VFlags, FUser, FGroup, Digest))\n\
383 - Retrieve next file info tuple.\n" },
385 {
"NextD", (PyCFunction)rpmfi_NextD, METH_NOARGS,
387 {
"InitD", (PyCFunction)rpmfi_InitD, METH_NOARGS,
420 static PyObject * rpmfi_getattro(PyObject *
o, PyObject *
n)
423 return PyObject_GenericGetAttr(o, n);
426 static int rpmfi_setattro(PyObject *
o, PyObject *
n, PyObject * v)
429 return PyObject_GenericSetAttr(o, n, v);
446 if (!PyInt_Check(key)) {
447 PyErr_SetString(PyExc_TypeError,
"integer expected");
451 ix = (
int) PyInt_AsLong(key);
457 static PyMappingMethods rpmfi_as_mapping = {
458 (lenfunc) rpmfi_length,
459 (binaryfunc) rpmfi_subscript,
470 PyObject * to =
NULL;
474 char *
kwlist[] = {
"header",
"tag",
"flags",
NULL};
477 fprintf(stderr,
"*** rpmfi_init(%p,%p,%p)\n", s, args, kwds);
479 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"O!|Oi:rpmfi_init", kwlist,
486 PyErr_SetString(PyExc_KeyError,
"unknown header tag");
502 fprintf(stderr,
"%p -- fi %p\n", s, s->
fi);
513 PyObject * s = PyType_GenericAlloc(subtype, nitems);
516 fprintf(stderr,
"*** rpmfi_alloc(%p,%d) ret %p\n", subtype, nitems, s);
523 static PyObject *
rpmfi_new(PyTypeObject * subtype, PyObject *
args, PyObject *kwds)
536 fprintf(stderr,
"%p ++ fi %p\n", s, s->
fi);
538 return (PyObject *)
s;
549 PyObject_HEAD_INIT(&PyType_Type)
555 (destructor) rpmfi_dealloc,
556 (printfunc) rpmfi_print,
567 (getattrofunc) rpmfi_getattro,
568 (setattrofunc) rpmfi_setattro,
572 #if Py_TPFLAGS_HAVE_ITER
577 (getiterfunc) rpmfi_iter,
578 (iternextfunc) rpmfi_iternext,
619 PyObject * to =
NULL;
625 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"|Oi:fiFromHeader", kwlist,
632 PyErr_SetString(PyExc_KeyError,
"unknown header tag");
rpmuint32_t rpmfiFFlags(rpmfi fi)
Return current file flags from file info set.
int rpmfiDX(rpmfi fi)
Return current directory index from file info set.
rpmuint32_t rpmfiVFlags(rpmfi fi)
Return current file verify flags from file info set.
rpmuint32_t rpmfiFNlink(rpmfi fi)
Return (calculated) current file nlink count from file info set.
char * xstrdup(const char *str)
struct rpmts_s * rpmts
The RPM Transaction Set.
int rpmfiSetFX(rpmfi fi, int fx)
Set current file index in file info set.
rpmuint16_t rpmfiFRdev(rpmfi fi)
Return current file rdev from file info set.
rpmfi rpmfiFree(rpmfi fi)
Destroy a file info set.
const char * rpmfiFN(rpmfi fi)
Return current file name from file info set.
const char * rpmfiFUser(rpmfi fi)
Return current file owner from file info set.
const char * rpmfiFGroup(rpmfi fi)
Return current file group from file info set.
rpmfi rpmfiNew(const void *_ts, Header h, rpmTag tagN, int flags)
Create and load a file info set.
rpmuint32_t rpmfiFColor(rpmfi fi)
Return current file color bits from file info set.
const char * rpmfiBN(rpmfi fi)
Return current base name from file info set.
static hdrObject *hdrObject * ho
int rpmfiFC(rpmfi fi)
Return file count from file info set.
rpmuint32_t rpmfiFSize(rpmfi fi)
Return current file size from file info set.
rpmfi fiFromFi(rpmfiObject *s)
sprintf(t," (%u)",(unsigned) dig->nbytes)
static PyObject * rpmfi_new(PyTypeObject *subtype, PyObject *args, PyObject *kwds)
memset(_r, 0, sizeof(*_r))
static PyObject *static PyObject *static PyObject *static PyObject *static PyObject *static PyObject *static PyObject *static PyObject *static PyObject *static PyObject *static PyObject *static PyObject *size_t dlen
const char * rpmfiDN(rpmfi fi)
Return current directory name from file info set.
fprintf(stderr,"--> %s(%p,%p,%p) sig %p sigp %p\n", __FUNCTION__, dig, t, rsactx, sig, sigp)
static int rpmfi_init(rpmfiObject *s, PyObject *args, PyObject *kwds)
rpmuint16_t rpmfiFMode(rpmfi fi)
Return current file mode from file info set.
rpmTag tagNumFromPyObject(PyObject *item)
rpmfiObject * hdr_fiFromHeader(PyObject *s, PyObject *args, PyObject *kwds)
rpmuint32_t rpmfiFMtime(rpmfi fi)
Return current file modify time from file info set.
static PyObject * rpmfi_Debug(rpmfiObject *s, PyObject *args, PyObject *kwds)
int rpmfiNext(rpmfi fi)
Return next file iterator index.
int rpmfiDC(rpmfi fi)
Return directory count from file info set.
rpmfi rpmfiInit(rpmfi fi, int fx)
Initialize file iterator index.
const char * rpmfiFClass(rpmfi fi)
Return current file class from file info set.
return Py_BuildValue("i", pkgKey)
struct rpmfiObject_s rpmfiObject
const char * rpmfiFLink(rpmfi fi)
Return current file linkto (i.e.
Header hdrGetHeader(hdrObject *s)
rpmfileState rpmfiFState(rpmfi fi)
Return current file state from file info set.
const unsigned char * rpmfiDigest(rpmfi fi, int *algop, size_t *lenp)
Return current file (binary) digest from file info set.
int
Save source and expand field into target.
struct rpmfi_s * rpmfi
File info tag sets from a header, so that a header can be discarded early.
rpmuint32_t rpmfiFInode(rpmfi fi)
Return current file inode from file info set.
int rpmfiFX(rpmfi fi)
Return current file index from file info set.
rpmfiObject * rpmfi_Wrap(rpmfi fi)
static PyObject * rpmfi_alloc(PyTypeObject *subtype, int nitems)
static void rpmfi_free(rpmfiObject *s)
const unsigned char * digest