RPM Package Manager, CVS Repository
http://rpm5.org/cvs/
____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson
Root: /v/rpm/cvs Email: jbj@rpm5.org
Module: rpm Date: 18-Oct-2007 17:59:06
Branch: HEAD Handle: 2007101816590501
Modified files:
rpm CHANGES
rpm/rpmdb hdrfmt.c header.c header.h
Log:
- fix: trigger conditions not displayed correctly w multiple triggers.
- trade-in element overload hack for another, less egregious, hack.
- eliminate element arg in (*headerTagFormatFunction).
Summary:
Revision Changes Path
1.1728 +3 -0 rpm/CHANGES
1.18 +19 -32 rpm/rpmdb/hdrfmt.c
1.89 +32 -25 rpm/rpmdb/header.c
1.44 +3 -10 rpm/rpmdb/header.h
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: rpm/CHANGES
============================================================================
$ cvs diff -u -r1.1727 -r1.1728 CHANGES
--- rpm/CHANGES 18 Oct 2007 15:03:40 -0000 1.1727
+++ rpm/CHANGES 18 Oct 2007 15:59:05 -0000 1.1728
@@ -1,4 +1,7 @@
4.5 -> 5.0:
+ - jbj: fix: trigger conditions not displayed correctly.
+ - jbj: trade-in element overload hack for another, less egregious, hack.
+ - jbj: eliminate element arg in (*headerTagFormatFunction).
- jbj: eliminate type arg in (*headerTagFormatFunction), use he->t instead.
- jbj: drill HE_t through (*headerTagFormatFunction).
- jbj: debugedit segfault (#336951,#337011) see #337051 too.
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/hdrfmt.c
============================================================================
$ cvs diff -u -r1.17 -r1.18 hdrfmt.c
--- rpm/rpmdb/hdrfmt.c 18 Oct 2007 15:03:40 -0000 1.17
+++ rpm/rpmdb/hdrfmt.c 18 Oct 2007 15:59:06 -0000 1.18
@@ -74,13 +74,10 @@
* @param data tag value
* @param formatPrefix (unused)
* @param padding (unused)
- * @param element (unused)
* @return formatted string
*/
static /*@only@*/ char * triggertypeFormat(HE_t he, hPTR_t data,
- /*@unused@*/ char * formatPrefix, /*@unused@*/ int padding,
- /*@unused@*/ int element)
- /*@requires maxRead(data) >= 0 @*/
+ /*@unused@*/ char * formatPrefix, /*@unused@*/ int padding)
{
const int_32 * item = (*data).i32p;
char * val;
@@ -106,11 +103,10 @@
* @param data tag value
* @param formatPrefix
* @param padding
- * @param element (unused)
* @return formatted string
*/
static /*@only@*/ char * permsFormat(HE_t he, hPTR_t data,
- char * formatPrefix, int padding, /*@unused@*/ int element)
+ char * formatPrefix, int padding)
/*@modifies formatPrefix @*/
/*@requires maxRead(data) >= 0 @*/
{
@@ -138,11 +134,10 @@
* @param data tag value
* @param formatPrefix
* @param padding
- * @param element (unused)
* @return formatted string
*/
static /*@only@*/ char * fflagsFormat(HE_t he, hPTR_t data,
- char * formatPrefix, int padding, /*@unused@*/ int element)
+ char * formatPrefix, int padding)
/*@modifies formatPrefix @*/
/*@requires maxRead(data) >= 0 @*/
{
@@ -188,12 +183,10 @@
* @param data tag value
* @param formatPrefix (unused)
* @param padding (unused)
- * @param element no. bytes of binary data
* @return formatted string
*/
static /*@only@*/ char * armorFormat(HE_t he, hPTR_t data,
- /*@unused@*/ char * formatPrefix, /*@unused@*/ int padding,
- int element)
+ /*@unused@*/ char * formatPrefix, /*@unused@*/ int padding)
/*@*/
{
const char * enc;
@@ -207,8 +200,7 @@
case RPM_ASN1_TYPE: /* XXX WRONG */
case RPM_BIN_TYPE:
s = (*data).ui8p;
- /* XXX HACK ALERT: element field abused as no. bytes of binary data. */
- ns = element;
+ ns = he->c;
atype = PGPARMOR_SIGNATURE; /* XXX check pkt for signature */
break;
case RPM_STRING_TYPE:
@@ -248,11 +240,10 @@
* @param data tag value
* @param formatPrefix (unused)
* @param padding
- * @param element
* @return formatted string
*/
static /*@only@*/ char * base64Format(HE_t he, hPTR_t data,
- /*@unused@*/ char * formatPrefix, int padding, int element)
+ /*@unused@*/ char * formatPrefix, int padding)
/*@*/
{
char * val;
@@ -263,8 +254,7 @@
const char * enc;
char * t;
int lc;
- /* XXX HACK ALERT: element field abused as no. bytes of binary data. */
- size_t ns = element;
+ size_t ns = he->c;
size_t nt = ((ns + 2) / 3) * 4;
/*@-globs@*/
@@ -351,12 +341,10 @@
* @param data tag value
* @param formatPrefix
* @param padding
- * @param element (unused)
* @return formatted string
*/
static /*@only@*/ char * xmlFormat(HE_t he, hPTR_t data,
- char * formatPrefix, int padding,
- /*@unused@*/ int element)
+ char * formatPrefix, int padding)
/*@modifies formatPrefix @*/
{
const char * xtag = NULL;
@@ -385,7 +373,7 @@
{ int cpl = b64encode_chars_per_line;
b64encode_chars_per_line = 0;
/*@-formatconst@*/
- s = base64Format(he, data, formatPrefix, padding, element);
+ s = base64Format(he, data, formatPrefix, padding);
/*@=formatconst@*/
b64encode_chars_per_line = cpl;
xtag = "base64";
@@ -514,14 +502,13 @@
* @param data tag value
* @param formatPrefix
* @param padding
- * @param element element index (or -1 for non-array).
* @return formatted string
*/
static /*@only@*/ char * yamlFormat(HE_t he, hPTR_t data,
- char * formatPrefix, int padding,
- int element)
+ char * formatPrefix, int padding)
/*@modifies formatPrefix @*/
{
+ int element = he->freeData; /* XXX HACK: he->freeData for element index. */
const char * xtag = NULL;
const char * ytag = NULL;
size_t nb;
@@ -582,7 +569,7 @@
{ int cpl = b64encode_chars_per_line;
b64encode_chars_per_line = 0;
/*@-formatconst@*/
- s = base64Format(he, data, formatPrefix, padding, element);
+ s = base64Format(he, data, formatPrefix, padding);
element = -element; /* XXX skip " " indent. */
/*@=formatconst@*/
b64encode_chars_per_line = cpl;
@@ -670,12 +657,10 @@
* @param data tag value
* @param formatPrefix (unused)
* @param padding
- * @param element (unused)
* @return formatted string
*/
static /*@only@*/ char * pgpsigFormat(HE_t he, hPTR_t data,
- /*@unused@*/ char * formatPrefix, /*@unused@*/ int padding,
- /*@unused@*/ int element)
+ /*@unused@*/ char * formatPrefix, /*@unused@*/ int padding)
/*@globals fileSystem, internalState @*/
/*@modifies fileSystem, internalState @*/
{
@@ -779,11 +764,10 @@
* @param data tag value
* @param formatPrefix
* @param padding
- * @param element (unused)
* @return formatted string
*/
static /*@only@*/ char * depflagsFormat(HE_t he, hPTR_t data,
- char * formatPrefix, int padding, /*@unused@*/ int element)
+ char * formatPrefix, int padding)
/*@modifies formatPrefix @*/
/*@requires maxRead(data) >= 0 @*/
{
@@ -792,7 +776,9 @@
if (he->t != RPM_INT32_TYPE) {
val = xstrdup(_("(invalid type)"));
} else {
- int anint = *((int_32 *) data);
+ /* XXX HACK: he->freeData for element index. */
+ int element = he->freeData;
+ int anint = (*data).i32p[element];
char *t, *buf;
t = buf = alloca(32);
@@ -913,7 +899,8 @@
_he->t = RPM_INT32_TYPE;
_he->p = &flags;
_he->c = 1;
- flagsStr = depflagsFormat(_he, he->p, buf, 0, j);
+ he->freeData = j;/* XXX HACK: he->freeData for element index. */
+ flagsStr = depflagsFormat(_he, he->p, buf, 0);
sprintf(item, "%s %s %s", names.argv[j], flagsStr, versions.argv[j]);
flagsStr = _free(flagsStr);
} else
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/header.c
============================================================================
$ cvs diff -u -r1.88 -r1.89 header.c
--- rpm/rpmdb/header.c 18 Oct 2007 15:03:40 -0000 1.88
+++ rpm/rpmdb/header.c 18 Oct 2007 15:59:06 -0000 1.89
@@ -3270,8 +3270,11 @@
case RPM_STRING_ARRAY_TYPE:
strarray.argv = he_p.argv;
- if (tag->fmt)
- val = tag->fmt(he, (hPTR_t) strarray.argv[element], buf, tag->pad, (he->c > 1 ? element : -1)); /* NOCAST */
+ if (tag->fmt) {
+ /* XXX HACK: he->freeData for element index. */
+ he->freeData = (he->c > 1 ? element : -1);
+ val = tag->fmt(he, (hPTR_t) strarray.argv[element], buf, tag->pad); /* NOCAST */
+ }
if (val) {
need = strlen(val);
@@ -3287,8 +3290,11 @@
break;
case RPM_STRING_TYPE:
- if (tag->fmt)
- val = tag->fmt(he, he_p.ptr, buf, tag->pad, -1);
+ if (tag->fmt) {
+ /* XXX HACK: he->freeData for element index. */
+ he->freeData = -1;
+ val = tag->fmt(he, he_p.ptr, buf, tag->pad);
+ }
if (val) {
need = strlen(val);
@@ -3304,8 +3310,11 @@
case RPM_INT64_TYPE:
llVal = he_p.i64p[element];
- if (tag->fmt)
- val = tag->fmt(he, (hPTR_t) &llVal, buf, tag->pad, (he->c > 1 ? element : -1)); /* NOCAST */
+ if (tag->fmt) {
+ /* XXX HACK: he->freeData for element index. */
+ he->freeData = (he->c > 1 ? element : -1);
+ val = tag->fmt(he, (hPTR_t) &llVal, buf, tag->pad); /* NOCAST */
+ }
if (val) {
need = strlen(val);
} else {
@@ -3344,7 +3353,9 @@
_he->t = RPM_INT32_TYPE;
(*_he->p).ui32p = &intVal;
_he->c = 1;
- val = tag->fmt(_he, he->p, buf, tag->pad, (he->c > 1 ? element : -1));
+ /* XXX HACK: he->freeData for element index. */
+ he->freeData = -1;
+ val = tag->fmt(_he, he->p, buf, tag->pad);
}
if (val) {
@@ -3362,9 +3373,11 @@
case RPM_OPENPGP_TYPE: /* XXX W2DO? */
case RPM_ASN1_TYPE: /* XXX W2DO? */
case RPM_BIN_TYPE:
- /* XXX HACK ALERT: element field abused as no. bytes of binary data. */
- if (tag->fmt)
- val = tag->fmt(he, he_p.ptr, buf, tag->pad, he->c);
+ if (tag->fmt) {
+ /* XXX HACK: he->freeData for element index. */
+ he->freeData = -1;
+ val = tag->fmt(he, he_p.ptr, buf, tag->pad);
+ }
if (val) {
need = strlen(val);
@@ -3771,11 +3784,10 @@
* @param data tag value
* @param formatPrefix sprintf format string
* @param padding no. additional bytes needed by format string
- * @param element (unused)
* @return formatted string
*/
-static char * octalFormat(HE_t he, hPTR_t data,
- char * formatPrefix, int padding, /*@unused@*/int element)
+static char * octalFormat(HE_t he, hPTR_t data,
+ char * formatPrefix, int padding)
/*@modifies formatPrefix @*/
{
char * val;
@@ -3804,11 +3816,10 @@
* @param data tag value
* @param formatPrefix sprintf format string
* @param padding no. additional bytes needed by format string
- * @param element (unused)
* @return formatted string
*/
static char * hexFormat(HE_t he, hPTR_t data,
- char * formatPrefix, int padding, /*@unused@*/int element)
+ char * formatPrefix, int padding)
/*@modifies formatPrefix @*/
{
char * val;
@@ -3837,12 +3848,11 @@
* @param data tag value
* @param formatPrefix sprintf format string
* @param padding no. additional bytes needed by format string
- * @param element (unused)
* @param strftimeFormat strftime(3) format
* @return formatted string
*/
static char * realDateFormat(HE_t he, hPTR_t data,
- char * formatPrefix, int padding, /*@unused@*/int element,
+ char * formatPrefix, int padding,
const char * strftimeFormat)
/*@modifies formatPrefix @*/
{
@@ -3878,14 +3888,13 @@
* @param data tag value
* @param formatPrefix sprintf format string
* @param padding no. additional bytes needed by format string
- * @param element (unused)
* @return formatted string
*/
static char * dateFormat(HE_t he, hPTR_t data,
- char * formatPrefix, int padding, int element)
+ char * formatPrefix, int padding)
/*@modifies formatPrefix @*/
{
- return realDateFormat(he, data, formatPrefix, padding, element,
+ return realDateFormat(he, data, formatPrefix, padding,
_("%c"));
}
@@ -3895,14 +3904,13 @@
* @param data tag value
* @param formatPrefix sprintf format string
* @param padding no. additional bytes needed by format string
- * @param element (unused)
* @return formatted string
*/
static char * dayFormat(HE_t he, hPTR_t data,
- char * formatPrefix, int padding, int element)
+ char * formatPrefix, int padding)
/*@modifies formatPrefix @*/
{
- return realDateFormat(he, data, formatPrefix, padding, element,
+ return realDateFormat(he, data, formatPrefix, padding,
_("%a %b %d %Y"));
}
@@ -3912,11 +3920,10 @@
* @param data tag value
* @param formatPrefix sprintf format string
* @param padding no. additional bytes needed by format string
- * @param element (unused)
* @return formatted string
*/
static char * shescapeFormat(HE_t he, hPTR_t data,
- char * formatPrefix, int padding, /*@unused@*/int element)
+ char * formatPrefix, int padding)
/*@modifies formatPrefix @*/
{
char * result, * dst, * src, * buf;
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/header.h
============================================================================
$ cvs diff -u -r1.43 -r1.44 header.h
--- rpm/rpmdb/header.h 18 Oct 2007 15:03:40 -0000 1.43
+++ rpm/rpmdb/header.h 18 Oct 2007 15:59:06 -0000 1.44
@@ -244,19 +244,15 @@
/** \ingroup header
* HEADER_EXT_TAG format function prototype.
- * This will only ever be passed RPM_INT32_TYPE or RPM_STRING_TYPE to
- * help keep things simple.
*
* @param he tag container
* @param data tag value
* @param formatPrefix
* @param padding
- * @param element RPM_BIN_TYPE: no. bytes of data
* @return formatted string
*/
-typedef /*only@*/ char * (*headerTagFormatFunction)(HE_t he,
- rpmTagData * data, char * formatPrefix,
- int padding, int element)
+typedef /*only@*/ char * (*headerTagFormatFunction)(HE_t he, rpmTagData * data,
+ char * formatPrefix, int padding)
/*@requires maxSet(data) >= 0 @*/;
/** \ingroup header
@@ -264,10 +260,7 @@
* This is allowed to fail, which indicates the tag doesn't exist.
*
* @param h header
- * @retval *type tag type
- * @retval *data tag value
- * @retval *count no. of data items
- * @retval *freedata data-was-malloc'ed indicator
+ * @retval he tag container
* @return 0 on success
*/
typedef int (*headerTagTagFunction) (Header h, HE_t he)
@@ .
Received on Thu Oct 18 17:59:06 2007