11 #define _RPMTAG_INTERNAL
14 #define _RPMEVR_INTERNAL
162 HE_t he = memset(
alloca(
sizeof(*he)), 0,
sizeof(*he));
166 list = PyList_New(0);
183 PyList_Append(list, o=PyInt_FromLong(he->
tag));
203 static char *kwlist[] = {
"legacyHeader", NULL};
205 if (!PyArg_ParseTupleAndKeywords(args, keywords,
"|i", kwlist, &legacy))
223 if (buf == NULL || nb == 0) {
224 PyErr_SetString(
pyrpmError,
"can't unload bad header\n");
228 rc = PyString_FromStringAndSize(buf, nb);
239 const char * origin = NULL;
244 return Py_BuildValue(
"s", origin);
254 char * kwlist[] = {
"origin", NULL};
255 const char * origin = NULL;
257 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"s:SetOrigin", kwlist, &origin))
260 if (s->
h != NULL && origin != NULL)
276 char * kwlist[] = {
"format", NULL};
278 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"s", kwlist, &fmt))
287 result = Py_BuildValue(
"s", r);
299 {
"keys", (PyCFunction)
hdrKeyList, METH_NOARGS,
301 {
"unload", (PyCFunction)
hdrUnload, METH_VARARGS|METH_KEYWORDS,
307 {
"sprintf", (PyCFunction)
hdrSprintf, METH_VARARGS|METH_KEYWORDS,
349 if (PyInt_Check(item)) {
350 return (
rpmTag) PyInt_AsLong(item);
351 }
else if (PyString_Check(item) || PyUnicode_Check(item)) {
352 str = PyString_AsString(item);
355 return (
rpmTag)0xffffffff;
363 HE_t he = memset(
alloca(
sizeof(*he)), 0,
sizeof(*he));
366 PyObject * o, * metao;
368 const struct headerSprintfExtension_s * ext = NULL;
371 if (PyCObject_Check (item))
372 ext = PyCObject_AsVoidPtr(item);
376 if (tag == (
rpmTag)0xffffffff && (PyString_Check(item) || PyUnicode_Check(item))) {
381 str = PyString_AsString(item);
382 while (extensions->name) {
383 if (extensions->type == HEADER_EXT_TAG
388 if (extensions->type == HEADER_EXT_MORE)
389 extensions = *extensions->u.more;
395 ext->u.tagFunction(s->
h, he);
397 if (tag == (
rpmTag)0xffffffff) {
398 PyErr_SetString(PyExc_KeyError,
"unknown header tag");
418 return PyList_New(0);
463 o = PyString_FromStringAndSize(he->
p.
str, he->
c);
467 if (he->
c != 1 || forceArray) {
468 metao = PyList_New(0);
469 for (i = 0; i < he->
c; i++) {
470 o = PyInt_FromLong(he->
p.
ui8p[i]);
471 PyList_Append(metao, o);
476 o = PyInt_FromLong(he->
p.
ui8p[0]);
481 if (he->
c != 1 || forceArray) {
482 metao = PyList_New(0);
483 for (i = 0; i < he->
c; i++) {
484 o = PyInt_FromLong(he->
p.
ui16p[i]);
485 PyList_Append(metao, o);
490 o = PyInt_FromLong(he->
p.
ui16p[0]);
495 if (he->
c != 1 || forceArray) {
496 metao = PyList_New(0);
497 for (i = 0; i < he->
c; i++) {
498 o = PyInt_FromLong(he->
p.
ui32p[i]);
499 PyList_Append(metao, o);
504 o = PyInt_FromLong(he->
p.
ui32p[0]);
509 if (he->
c != 1 || forceArray) {
510 metao = PyList_New(0);
511 for (i = 0; i < he->
c; i++) {
512 o = PyInt_FromLong(he->
p.
ui64p[i]);
513 PyList_Append(metao, o);
518 o = PyInt_FromLong(he->
p.
ui64p[0]);
523 metao = PyList_New(0);
524 for (i = 0; i < he->
c; i++) {
525 o = PyString_FromString(he->
p.
argv[i]);
526 PyList_Append(metao, o);
533 if (he->
p.
str != NULL)
534 o = PyString_FromString(he->
p.
str);
536 o = PyString_FromString(
"");
540 PyErr_SetString(PyExc_TypeError,
"unsupported type in header");
562 res = PyObject_GenericGetAttr((PyObject *)o, n);
571 return PyObject_GenericSetAttr((PyObject *)o, n, v);
583 PyObject_HEAD_INIT(&PyType_Type)
605 #if Py_TPFLAGS_HAVE_ITER
642 PyObject *
hdrLoad(PyObject *
self, PyObject * args, PyObject * kwds)
649 char * kwlist[] = {
"headers", NULL};
651 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"s#", kwlist, &obj, &len))
660 memcpy (copy, obj, len);
673 return (PyObject *) hdr;
689 list = PyList_New(0);
690 Py_BEGIN_ALLOW_THREADS
691 {
const char item[] =
"Header";
692 const char * msg = NULL;
699 rpmlog(
RPMLOG_ERR,
"%s: %s: %s : error code: %d\n",
"rpmpkgRead", item, msg, rc);
706 if (PyList_Append(list, (PyObject *) hdr)) {
716 Py_BEGIN_ALLOW_THREADS
717 {
const char item[] =
"Header";
718 const char * msg = NULL;
725 rpmlog(
RPMLOG_ERR,
"%s: %s: %s : error code: %d\n",
"rpmpkgRead", item, msg, rc);
742 char * kwlist[] = {
"fd", NULL};
744 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"i", kwlist, &fileno))
763 char * kwlist[] = {
"file", NULL};
765 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"s", kwlist, &filespec))
768 fd =
Fopen(filespec,
"r.fdio");
792 char * kwlist[] = {
"fd", NULL};
794 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"i", kwlist, &fileno))
797 offset = lseek(fileno, 0,
SEEK_CUR);
806 Py_BEGIN_ALLOW_THREADS
807 {
const char item[] =
"Header";
808 const char * msg = NULL;
815 rpmlog(
RPMLOG_ERR,
"%s: %s: %s : error code: %d\n",
"rpmpkgRead", item, msg, rc);
822 tuple = PyTuple_New(2);
825 PyTuple_SET_ITEM(tuple, 0, (PyObject *)
hdr_Wrap(h));
826 PyTuple_SET_ITEM(tuple, 1, PyLong_FromLong(offset));
832 PyTuple_SET_ITEM(tuple, 0, Py_None);
833 PyTuple_SET_ITEM(tuple, 1, Py_None);
850 for(count = 0; count < PyList_Size(list); count++){
851 Py_BEGIN_ALLOW_THREADS
852 const char item[] =
"Header";
853 const char * msg = NULL;
857 rpmlog(
RPMLOG_ERR,
"%s: %s: %s : error code: %d\n",
"rpmpkgWrite", item, msg, rc);
874 char * kwlist[] = {
"headers",
"fd", NULL};
876 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"Oi", kwlist, &list, &fileno))
896 char * kwlist[] = {
"headers",
"file", NULL};
898 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"Os", kwlist, &list, &filespec))
901 fd =
Fopen(filespec,
"w.fdio");
919 char * kwlist[] = {
"version0",
"version1", NULL};
921 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"O!O!", kwlist, &hdr_Type,
922 &h1, &hdr_Type, &h2))
933 PyObject *aTuple, *bTuple;
935 if (!PyArg_ParseTuple(args,
"OO", &aTuple, &bTuple) ||
936 !PyArg_ParseTuple(aTuple,
"zzz|z",
937 &a->F[RPMEVR_E], &a->F[RPMEVR_V], &a->F[RPMEVR_R], &a->F[RPMEVR_D]) ||
938 !PyArg_ParseTuple(bTuple,
"zzz|z",
939 &b->F[RPMEVR_E], &b->F[RPMEVR_V], &b->F[RPMEVR_R], &b->F[RPMEVR_D]))
947 if (a->F[RPMEVR_E] == NULL) a->F[RPMEVR_E] =
"0";
948 if (b->F[RPMEVR_E] == NULL) b->F[RPMEVR_E] =
"0";
949 if (a->F[RPMEVR_V] == NULL) a->F[RPMEVR_V] =
"";
950 if (b->F[RPMEVR_V] == NULL) b->F[RPMEVR_V] =
"";
951 if (a->F[RPMEVR_R] == NULL) a->F[RPMEVR_R] =
"";
952 if (b->F[RPMEVR_R] == NULL) b->F[RPMEVR_R] =
"";
953 if (a->F[RPMEVR_D] == NULL) a->F[RPMEVR_D] =
"";
954 if (b->F[RPMEVR_D] == NULL) b->F[RPMEVR_D] =
"";
961 return Py_BuildValue(
"i", rc);