[prev in list] [next in list] [prev in thread] [next in thread] 

List:       rpm-cvs
Subject:    [CVS] RPM: rpm-4_5: rpm/ CHANGES rpm/rpmdb/ header.c
From:       "Jeff Johnson" <jbj () rpm5 ! org>
Date:       2007-10-25 23:28:35
Message-ID: 20071025232835.863C934845E () rpm5 ! org
[Download RAW message or body]

  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:   26-Oct-2007 01:28:35
  Branch: rpm-4_5                          Handle: 2007102600283401

  Modified files:           (Branch: rpm-4_5)
    rpm                     CHANGES
    rpm/rpmdb               header.c

  Log:
    - jbj: hmmm, RPM_BIN_TYPE not displayed correctly with --xml, todo++.
    - jbj: eliminate unused end-of-array check.
    - jbj: display RPM_I18NSTRING_TYPE as an array with --xml.
    - jbj: update doxygen for recent changes.

  Summary:
    Revision    Changes     Path
    1.1360.2.50 +4  -0      rpm/CHANGES
    1.48.2.17   +31 -46     rpm/rpmdb/header.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.1360.2.49 -r1.1360.2.50 CHANGES
  --- rpm/CHANGES	25 Oct 2007 20:53:09 -0000	1.1360.2.49
  +++ rpm/CHANGES	25 Oct 2007 23:28:34 -0000	1.1360.2.50
  @@ -1,4 +1,8 @@
   4.4.9 -> 4.5:
  +    - jbj: hmmm, RPM_BIN_TYPE not displayed correctly with --xml, todo++.
  +    - jbj: eliminate unused end-of-array check.
  +    - jbj: display RPM_I18NSTRING_TYPE as an array with --xml.
  +    - jbj: update doxygen for recent changes.
       - jbj: pass rpmTagData internally by reference, not by value.
       - jbj: fix a memory leak while iterating query tags.
       - jbj: handle RPM_I18NSTRING_TYPE as argv internally.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/header.c
  ============================================================================
  $ cvs diff -u -r1.48.2.16 -r1.48.2.17 header.c
  --- rpm/rpmdb/header.c	25 Oct 2007 20:53:09 -0000	1.48.2.16
  +++ rpm/rpmdb/header.c	25 Oct 2007 23:28:35 -0000	1.48.2.17
  @@ -375,10 +375,10 @@
   /**
    * Return length of entry data.
    * @param type		entry data type
  - * @param *p		entry data
  + * @param *p		tag container data
    * @param count		entry item count
    * @param onDisk	data is concatenated strings (with NUL's))?
  - * @param *pend		pointer to end of data (or NULL)
  + * @param *pend		pointer to end of tag container data (or NULL)
    * @return		no. bytes in data, -1 on failure
    */
   static int dataLength(rpmTagType type, rpmTagData * p, rpmTagCount count,
  @@ -409,7 +409,7 @@
   		length++;       /* count nul terminator too */
                  while (*s++) {
   		    if (se && s > se)
  -			return -1;
  +			return -1;	/* XXX change errret, use size_t */
   		    length++;
   		}
   	    }
  @@ -421,13 +421,12 @@
   	    }
   	}
   	break;
  -
       default:
   	if (typeSizes[type] == -1)
  -	    return -1;
  +	    return -1;		/* XXX change errret, use size_t */
   	length = typeSizes[(type & 0xf)] * count;
   	if (length < 0 || (se && (s + length) > se))
  -	    return -1;
  +	    return -1;		/* XXX change errret, use size_t */
   	break;
       }
   
  @@ -1840,8 +1839,8 @@
   /**
    */
   static void copyData(rpmTagType type, rpmTagData * dest, rpmTagData * src,
  -		rpmTagCount cnt, int len)
  -	/*@modifies *dstPtr @*/
  +		rpmTagCount cnt, size_t len)
  +	/*@modifies *dest @*/
   {
       switch (type) {
       case RPM_I18NSTRING_TYPE:
  @@ -1858,7 +1857,6 @@
   	    } while (s[-1] && --len > 0);
   	}
       }	break;
  -
       default:
   	memmove((*dest).ptr, (*src).ptr, len);
   	break;
  @@ -1868,7 +1866,7 @@
   /**
    * Return (malloc'ed) copy of entry data.
    * @param type		entry data type
  - * @param p		entry data
  + * @param *p		tag container data
    * @param c		entry item count
    * @retval *lenp	no. bytes in returned data
    * @return 		(malloc'ed) copy of entry data, NULL on error
  @@ -2277,8 +2275,8 @@
   static HE_t rpmheClean(/*@null@*/ HE_t he)
   	/*@modifies he @*/
   {
  -    if (he && he->p.ptr) {
  -	if (he->freeData)
  +    if (he) {
  +	if (he->freeData && he->p.ptr != NULL)
   	    he->p.ptr = _free(he->p.ptr);
   	memset(he, 0, sizeof(*he));
       }
  @@ -2516,12 +2514,13 @@
   	    hsa->i++;
   	} else {
   	    HE_t he = rpmheClean(&tag->he);
  -	    if (!headerNextIterator(hsa->hi, &he->tag, (hTAG_t)&he->t, (hPTR_t *)&he->p.ptr, &he->c)) {
  -		fmt = NULL;
  -	    } else {
  -		he = rpmheMark(he);
  -		he->avail = 1;
  +	    if (!headerNextIterator(hsa->hi, &he->tag, (hTAG_t)&he->t, (hPTR_t *)&he->p.ptr, &he->c))
  +	    {
  +		tag->tagno = 0;
  +		return NULL;
   	    }
  +	    he = rpmheMark(he);
  +	    he->avail = 1;
   	    tag->tagno = he->tag;
   	}
       }
  @@ -3295,39 +3294,25 @@
       unsigned int intVal;
       uint_64 llVal;
       rpmTagCount countBuf;
  +    int xx;
   
       memset(buf, 0, sizeof(buf));
  -    if (tag->ext) {
  -	if (getExtension(hsa, tag->ext, he, hsa->ec + tag->extNum))
  -	{
  -	    he->t = RPM_STRING_TYPE;	
  -	    he->c = 1;
  -	    he->p.str = "(none)";
  -	}
  -    } else
       if (!he->avail) {
   	he->tag = tag->tagno;
  -	if (!headerGetEntry(hsa->h, he->tag, (hTYP_t)&he->t, &he->p, &he->c)) {
  -	    he->c = 1;
  +	if (tag->ext) {
  +	    xx = getExtension(hsa, tag->ext, he, hsa->ec + tag->extNum);
  +	} else {
  +	    xx = headerGetEntry(hsa->h, he->tag,(hTYP_t)&he->t, &he->p, &he->c);
  +	    if (xx)	/* XXX 1 on success */
  +		(void) rpmheMark(he);
  +	    xx = (xx == 0);	/* XXX invert headerGetEntry return. */
  +	}
  +	if (!xx) {
  +	    (void) rpmheClean(he);
   	    he->t = RPM_STRING_TYPE;	
   	    he->p.str = "(none)";
  +	    he->c = 1;
   	}
  -	/* XXX this test is unnecessary, array sizes are checked */
  -	switch (he->t) {
  -	default:
  -	    if (element >= he->c) {
  -		he = rpmheClean(he);
  -		hsa->errmsg = _("(index out of range)");
  -		return NULL;
  -	    }
  -	    break;
  -	case RPM_OPENPGP_TYPE:
  -	case RPM_ASN1_TYPE:
  -	case RPM_BIN_TYPE:
  -	case RPM_STRING_TYPE:
  -	    break;
  -	}
  -	(void) rpmheMark(he);
       }
   
       if (tag->arrayCount) {
  @@ -3336,7 +3321,6 @@
   	he->t = RPM_INT32_TYPE;
   	he->p.i32p = &countBuf;
   	he->c = 1;
  -	he->freeData = 0;
       }
       he->avail = 1;
   
  @@ -3344,12 +3328,12 @@
   
       if (he->p.ptr)
       switch (he->t) {
  -    case RPM_I18NSTRING_TYPE:	/* XXX this should never be seen. */
       default:
   	val = xstrdup("(unknown type)");
   	need = strlen(val) + 1;
   	goto exit;
   	/*@notreached@*/ break;
  +    case RPM_I18NSTRING_TYPE:
       case RPM_STRING_ARRAY_TYPE:
   	if (tag->fmt)
   	    val = tag->fmt(RPM_STRING_TYPE, he->p.argv[element], buf, tag->pad, (he->c > 1 ? element : -1));
  @@ -3559,13 +3543,14 @@
   		    xx = getExtension(hsa, tag->ext, he, hsa->ec + tag->extNum);
   		else {
   		    xx = headerGetEntry(hsa->h, he->tag, (hTYP_t)&he->t, &he->p, &he->c);
  +		    if (xx)	/* XXX 1 on success */
  +			(void) rpmheMark(he);
   		    xx = (xx == 0);	/* XXX invert headerGetEntry return. */
   		}
   		if (xx) {
   		    (void) rpmheClean(he);
   		    continue;
   		}
  -		(void) rpmheMark(he);
   		he->avail = 1;
   	    }
   
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic