16 #if Py_TPFLAGS_HAVE_ITER
32 PyObject * result = NULL;
57 const unsigned char * digest =
rpmfiDigest(s->
fi, &dalgo, &dlen);
58 const unsigned char * s = digest;
62 static const char hex[] =
"0123456789abcdef";
65 fdigest = t = memset(
alloca(dlen), 0, dlen);
68 for (i = 0; i < 16; i++) {
70 *t++ = hex[ (*s >> 4) & 0xf ];
71 *t++ = hex[ (*s++ ) & 0xf ];
75 result = PyTuple_New(13);
78 PyTuple_SET_ITEM(result, 0, Py_None);
80 PyTuple_SET_ITEM(result, 0, Py_BuildValue(
"s", FN));
81 PyTuple_SET_ITEM(result, 1, PyInt_FromLong(FSize));
82 PyTuple_SET_ITEM(result, 2, PyInt_FromLong(FMode));
83 PyTuple_SET_ITEM(result, 3, PyInt_FromLong(FMtime));
84 PyTuple_SET_ITEM(result, 4, PyInt_FromLong(FFlags));
85 PyTuple_SET_ITEM(result, 5, PyInt_FromLong(FRdev));
86 PyTuple_SET_ITEM(result, 6, PyInt_FromLong(FInode));
87 PyTuple_SET_ITEM(result, 7, PyInt_FromLong(FNlink));
88 PyTuple_SET_ITEM(result, 8, PyInt_FromLong(FState));
89 PyTuple_SET_ITEM(result, 9, PyInt_FromLong(VFlags));
92 PyTuple_SET_ITEM(result, 10, Py_None);
94 PyTuple_SET_ITEM(result, 10, Py_BuildValue(
"s", FUser));
97 PyTuple_SET_ITEM(result, 11, Py_None);
99 PyTuple_SET_ITEM(result, 11, Py_BuildValue(
"s", FGroup));
102 PyTuple_SET_ITEM(result, 12, Py_None);
104 PyTuple_SET_ITEM(result, 12, Py_BuildValue(
"s", fdigest));
122 PyObject * result = NULL;
126 if (result == NULL) {
160 char * kwlist[] = {
"debugLevel", NULL};
162 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"i", kwlist, &
_rpmfi_debug))
174 return Py_BuildValue(
"i",
rpmfiFC(s->
fi));
182 return Py_BuildValue(
"i",
rpmfiFX(s->
fi));
190 return Py_BuildValue(
"i",
rpmfiDC(s->
fi));
198 return Py_BuildValue(
"i",
rpmfiDX(s->
fi));
265 const unsigned char * digest;
266 const char * fdigest;
271 if (digest == NULL || dlen == 0)
273 fdigest = t = memset(
alloca(dlen), 0, dlen);
274 for (i = 0; i < dlen; i++, t += 2)
275 sprintf(t,
"%02x", digest[i]);
277 return Py_BuildValue(
"s",
xstrdup(fdigest));
345 return Py_BuildValue(
"s",
xstrdup(FClass));
353 {
"Debug", (PyCFunction)
rpmfi_Debug, METH_VARARGS|METH_KEYWORDS,
355 {
"FC", (PyCFunction)
rpmfi_FC, METH_NOARGS,
357 {
"FX", (PyCFunction)
rpmfi_FX, METH_NOARGS,
359 {
"DC", (PyCFunction)
rpmfi_DC, METH_NOARGS,
361 {
"DX", (PyCFunction)
rpmfi_DX, METH_NOARGS,
363 {
"BN", (PyCFunction)
rpmfi_BN, METH_NOARGS,
365 {
"DN", (PyCFunction)
rpmfi_DN, METH_NOARGS,
367 {
"FN", (PyCFunction)
rpmfi_FN, METH_NOARGS,
377 {
"MD5", (PyCFunction)
rpmfi_MD5, METH_NOARGS,
395 {
"next", (PyCFunction)
rpmfi_Next, METH_NOARGS,
396 "fi.next() -> (FN, FSize, FMode, FMtime, FFlags, FRdev, FInode, FNlink, FState, VFlags, FUser, FGroup, FMD5))\n\
397 - Retrieve next file info tuple.\n" },
399 {
"NextD", (PyCFunction)rpmfi_NextD, METH_NOARGS,
401 {
"InitD", (PyCFunction)rpmfi_InitD, METH_NOARGS,
437 return PyObject_GenericGetAttr(o, n);
443 return PyObject_GenericSetAttr(o, n, v);
460 if (!PyInt_Check(key)) {
461 PyErr_SetString(PyExc_TypeError,
"integer expected");
465 ix = (int) PyInt_AsLong(key);
484 PyObject * to = NULL;
488 char * kwlist[] = {
"header",
"tag",
"flags", NULL};
491 fprintf(stderr,
"*** rpmfi_init(%p,%p,%p)\n", s, args, kwds);
493 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"O!|Oi:rpmfi_init", kwlist,
500 PyErr_SetString(PyExc_KeyError,
"unknown header tag");
516 fprintf(stderr,
"%p -- fi %p\n", s, s->
fi);
519 PyObject_Del((PyObject *)s);
527 PyObject * s = PyType_GenericAlloc(subtype, nitems);
530 fprintf(stderr,
"*** rpmfi_alloc(%p,%d) ret %p\n", subtype, nitems, s);
537 static PyObject *
rpmfi_new(PyTypeObject * subtype, PyObject *args, PyObject *kwds)
550 fprintf(stderr,
"%p ++ fi %p\n", s, s->
fi);
552 return (PyObject *)s;
563 PyObject_HEAD_INIT(&PyType_Type)
586 #if Py_TPFLAGS_HAVE_ITER
633 PyObject * to = NULL;
637 char * kwlist[] = {
"tag",
"flags", NULL};
639 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"|Oi:fiFromHeader", kwlist,
646 PyErr_SetString(PyExc_KeyError,
"unknown header tag");