RPM Community Forums

Mailing List Message of <rpm-cvs>

[CVS] RPM: rpm/ CHANGES rpm/rpmdb/ hdrfmt.c header.c header.h

From: Jeff Johnson <jbj@rpm5.org>
Date: Thu 18 Oct 2007 - 17:59:06 CEST
Message-Id: <20071018155906.B052E34845C@rpm5.org>
  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
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.