diff options
author | Panu Matilainen <pmatilai@redhat.com> | 2007-09-20 13:23:58 +0300 |
---|---|---|
committer | Panu Matilainen <pmatilai@redhat.com> | 2007-09-20 13:23:58 +0300 |
commit | f65d670f023616f472f4451c08f5e3ee298a9ddc (patch) | |
tree | 57b6cd2272d3042fc45dd21d7f13bb9d57b8802c /python/header-py.c | |
parent | 4df06c5df7dadab2baa85d80522044da9dbe5733 (diff) | |
download | rpm-f65d670f023616f472f4451c08f5e3ee298a9ddc.tar.gz rpm-f65d670f023616f472f4451c08f5e3ee298a9ddc.tar.bz2 rpm-f65d670f023616f472f4451c08f5e3ee298a9ddc.zip |
Remove the "dressed" rpmHeaderGetEntry() from API
- only used by the python bindings, move it there...
Diffstat (limited to 'python/header-py.c')
-rw-r--r-- | python/header-py.c | 62 |
1 files changed, 61 insertions, 1 deletions
diff --git a/python/header-py.c b/python/header-py.c index 96fb82f28..4e2b83070 100644 --- a/python/header-py.c +++ b/python/header-py.c @@ -363,6 +363,66 @@ long tagNumFromPyObject (PyObject *item) } /** \ingroup py_c + * Retrieve tag info from header. + * This is a "dressed" entry to headerGetEntry to do: + * 1) DIRNAME/BASENAME/DIRINDICES -> FILENAMES tag conversions. + * 2) i18n lookaside (if enabled). + * + * @param h header + * @param tag tag + * @retval type address of tag value data type + * @retval p address of pointer to tag value(s) + * @retval c address of number of values + * @return 0 on success, 1 on bad magic, 2 on error + */ +static int dressedHeaderGetEntry(Header h, int_32 tag, int_32 *type, + void **p, int_32 *c) +{ + switch (tag) { + case RPMTAG_OLDFILENAMES: + { const char ** fl = NULL; + int count; + rpmfiBuildFNames(h, RPMTAG_BASENAMES, &fl, &count); + if (count > 0) { + *p = fl; + if (c) *c = count; + if (type) *type = RPM_STRING_ARRAY_TYPE; + return 1; + } + if (c) *c = 0; + return 0; + } break; + + case RPMTAG_GROUP: + case RPMTAG_DESCRIPTION: + case RPMTAG_SUMMARY: + { char fmt[128]; + const char * msgstr; + const char * errstr; + + fmt[0] = '\0'; + (void) stpcpy( stpcpy( stpcpy( fmt, "%{"), tagName(tag)), "}\n"); + + /* XXX FIXME: memory leak. */ + msgstr = headerSprintf(h, fmt, rpmTagTable, rpmHeaderFormats, &errstr); + if (msgstr) { + *p = (void *) msgstr; + if (type) *type = RPM_STRING_TYPE; + if (c) *c = 1; + return 1; + } else { + if (c) *c = 0; + return 0; + } + } break; + + default: + return headerGetEntry(h, tag, type, p, c); + break; + } +} + +/** \ingroup py_c */ static PyObject * hdr_subscript(hdrObject * s, PyObject * item) { @@ -402,7 +462,7 @@ static PyObject * hdr_subscript(hdrObject * s, PyObject * item) return NULL; } - if (!rpmHeaderGetEntry(s->h, tag, &type, &data, &count)) { + if (!dressedHeaderGetEntry(s->h, tag, &type, &data, &count)) { switch (tag) { case RPMTAG_EPOCH: case RPMTAG_NAME: |