[CVS] RPM: rpm/ CHANGES rpm/rpmdb/ hdrfmt.c rpm/ rpmpopt.in

2011-04-19 Thread Jeff Johnson
  RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  

  Server: rpm5.org Name:   Jeff Johnson
  Root:   /v/rpm/cvs   Email:  j...@rpm5.org
  Module: rpm  Date:   20-Apr-2011 08:09:42
  Branch: HEAD Handle: 2011042006094101

  Modified files:
rpm CHANGES rpmpopt.in
rpm/rpmdb   hdrfmt.c

  Log:
- mongo: adjust --json spewage to accomodate mongo syntax.

  Summary:
RevisionChanges Path
1.3617  +1  -0  rpm/CHANGES
1.155   +130 -175   rpm/rpmdb/hdrfmt.c
2.95+2  -2  rpm/rpmpopt.in
  

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  
  $ cvs diff -u -r1.3616 -r1.3617 CHANGES
  --- rpm/CHANGES   12 Apr 2011 07:56:13 -  1.3616
  +++ rpm/CHANGES   20 Apr 2011 06:09:41 -  1.3617
  @@ -1,4 +1,5 @@
   5.4.0 -> 5.4.1:
  +- jbj: mongo: adjust --json spewage to accomodate mongo syntax.
   - devzero2000: get rid of rindex everywhere: use SUSv3 strrchr instead
   - jbj: mongo: templating diddle-ups, use new Date(...) in other.mongo.
   - jbj: mongo: wire-up a per-spewage macro expansion, more todo++.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/hdrfmt.c
  
  $ cvs diff -u -r1.154 -r1.155 hdrfmt.c
  --- rpm/rpmdb/hdrfmt.c11 Apr 2011 23:05:24 -  1.154
  +++ rpm/rpmdb/hdrfmt.c20 Apr 2011 06:09:42 -  1.155
  @@ -872,92 +872,79 @@
   #endif
   
   static /*@only@*/ /*@null@*/ char *
  -strdup_locale_convert (/*@null@*/ const char * buffer,
  +strdup_iconv_check (/*@null@*/ const char * buffer,
/*@null@*/ const char * tocode)
/*@*/
   {
  -char *dest_str = NULL;
  +const char *s = buffer;
  +char *t = NULL;
   #if defined(HAVE_ICONV)
  -char *fromcode = _iconv_fromcode;
  +const char *fromcode = _iconv_fromcode;
   iconv_t fd;
  -int is_error = 0;
  -int done = 0;
   
  -if (buffer == NULL)
  - goto exit;
  +assert(buffer != NULL);
   
   if (tocode == NULL)
tocode = _iconv_tocode;
  +assert(tocode != NULL);
   
   #ifdef HAVE_LANGINFO_H
  +/* XXX the current locale's encoding != package data encodings. */
  +if (fromcode == NULL)
   fromcode = nl_langinfo (CODESET);
   #endif
  +assert(fromcode != NULL);
   
  -if (fromcode != NULL && strcmp(tocode, fromcode) != 0
  - && (fd = iconv_open(tocode, fromcode)) != (iconv_t)-1)
  -{
  - const char *pin = buffer;
  - char *pout = NULL;
  - size_t ib, ob, dest_size;
  - size_t err;
  - const char *shift_pin = NULL;
  - int xx;
  -
  - err = iconv(fd, NULL, &ib, &pout, &ob);
  - dest_size = ob = ib = strlen(buffer);
  - dest_str = pout = malloc((dest_size + 1) * sizeof(*dest_str));
  - if (dest_str)
  - *dest_str = '\0';
  - if (pout != NULL)
  - while (done == 0 && is_error == 0) {
  - err = iconv(fd, (char **)&pin, &ib, &pout, &ob);
  +if ((fd = iconv_open(tocode, fromcode)) != (iconv_t)-1) {
  + size_t ileft = strlen(s);
  + size_t nt = ileft;
  + char * te = t = xmalloc((nt + 1) * sizeof(*t));
  + size_t oleft = ileft;
  + size_t err = iconv(fd, NULL, NULL, NULL, NULL);
  + const char *sprev = NULL;
  + int _iconv_errno = 0;
  + int done = 0;
   
  + while (done == 0 && _iconv_errno == 0) {
  + err = iconv(fd, (char **)&s, &ileft, &te, &oleft);
if (err == (size_t)-1) {
switch (errno) {
  - case EINVAL:
  - done = 1;
  - /*@switchbreak@*/ break;
case E2BIG:
  - {   size_t used = (size_t)(pout - dest_str);
  - dest_size *= 2;
  - dest_str = realloc(dest_str, (dest_size + 1) * 
sizeof(*dest_str));
  - if (dest_str == NULL) {
  - is_error = 1;
  - continue;
  - }
  - pout = dest_str + used;
  - ob = dest_size - used;
  + {   size_t used = (size_t)(te - t);
  + nt *= 2;
  + t = xrealloc(t, (nt + 1) * sizeof(*t));
  + te = t + used;
  + oleft = nt - used;
}   /*@switchbreak@*/ break;
  + case EINVAL:
  + done = 1;
  + /*@fallthrough@*/
case EILSEQ:
  - is_error = 1;
  - /*@switchbreak@*/ break;
default:
  - is_error = 1;
  + _iconv_errno = errno;
  

[CVS] RPM: rpm/ CHANGES rpm/rpmdb/ hdrfmt.c rpm/ rpmpopt.in

2009-01-25 Thread Jeff Johnson
  RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  

  Server: rpm5.org Name:   Jeff Johnson
  Root:   /v/rpm/cvs   Email:  j...@rpm5.org
  Module: rpm  Date:   25-Jan-2009 22:21:15
  Branch: HEAD Handle: 2009012521211401

  Modified files:
rpm CHANGES rpmpopt.in
rpm/rpmdb   hdrfmt.c

  Log:
- jbj: finish up yum:{primary,filelists}.yaml header extension tags.

  Summary:
RevisionChanges Path
1.2760  +1  -0  rpm/CHANGES
1.128   +283 -0 rpm/rpmdb/hdrfmt.c
2.76+26 -42 rpm/rpmpopt.in
  

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  
  $ cvs diff -u -r1.2759 -r1.2760 CHANGES
  --- rpm/CHANGES   25 Jan 2009 18:38:00 -  1.2759
  +++ rpm/CHANGES   25 Jan 2009 21:21:14 -  1.2760
  @@ -1,5 +1,6 @@
   
   5.2a2 -> 5.2a3:
  +- jbj: finish up yum:{primary,filelists}.yaml header extension tags.
   - jbj: rpmrepo: compile in queryformat strings.
   - jbj: add doublequotes around queryformats for #include use in 
rpmrepo.c.
   - jbj: blueprint/use yum:{primary,filelists,other}.sqlite queryformats.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/hdrfmt.c
  
  $ cvs diff -u -r1.127 -r1.128 hdrfmt.c
  --- rpm/rpmdb/hdrfmt.c5 Jan 2009 00:34:43 -   1.127
  +++ rpm/rpmdb/hdrfmt.c25 Jan 2009 21:21:15 -  1.128
  @@ -3000,6 +3000,7 @@
   RFhe->p.ptr = _free(RFhe->p.ptr);
   return rc;
   }
  +
   static int PRCOSkip(rpmTag tag, rpmTagData N, rpmTagData EVR, rpmTagData F,
rpmuint32_t i)
/*...@*/
  @@ -3395,6 +3396,133 @@
   return PRCOsqlTag(h, he, RPMTAG_OBSOLETEVERSION, RPMTAG_OBSOLETEFLAGS);
   }
   
  +static int PRCOyamlTag(Header h, HE_t he, rpmTag EVRtag, rpmTag Ftag)
  + /*...@globals internalState @*/
  + /*...@modifies he, internalState @*/
  +{
  +rpmTag tag = he->tag;
  +rpmTagData N = { .ptr = NULL };
  +rpmTagData EVR = { .ptr = NULL };
  +rpmTagData F = { .ptr = NULL };
  +size_t nb;
  +rpmuint32_t ac;
  +rpmuint32_t c;
  +rpmuint32_t i;
  +char *t;
  +int rc = 1;  /* assume failure */
  +int indent = 0;
  +int xx;
  +
  +/*...@-compmempass@*//* use separate HE_t, not rpmTagData, 
containers. */
  +xx = headerGet(h, he, 0);
  +if (xx == 0) goto exit;
  +N.argv = he->p.argv;
  +c = he->c;
  +
  +he->tag = EVRtag;
  +xx = headerGet(h, he, 0);
  +if (xx == 0) goto exit;
  +EVR.argv = he->p.argv;
  +
  +he->tag = Ftag;
  +xx = headerGet(h, he, 0);
  +if (xx == 0) goto exit;
  +F.ui32p = he->p.ui32p;
  +
  +nb = sizeof(*he->p.argv);
  +ac = 0;
  +for (i = 0; i < c; i++) {
  +/*...@-nullstate@*/  /* EVR.argv might be NULL */
  + if (PRCOSkip(tag, N, EVR, F, i))
  + continue;
  +/*...@=nullstate@*/
  + ac++;
  + nb += sizeof(*he->p.argv);
  + nb += sizeof("- ");
  + if (*N.argv[i] == '/')
  + nb += yamlstrlen(N.argv[i], indent);
  + else
  + nb += strlen(N.argv[i]);
  + if (EVR.argv != NULL && EVR.argv[i] != NULL && *EVR.argv[i] != '\0') {
  + nb += sizeof(" >= ") - 1;
  + nb += strlen(EVR.argv[i]);
  + }
  +}
  +
  +he->t = RPM_STRING_ARRAY_TYPE;
  +he->c = ac;
  +he->freeData = 1;
  +he->p.argv = xmalloc(nb + BUFSIZ);   /* XXX hack: leave slop */
  +t = (char *) &he->p.argv[he->c + 1];
  +ac = 0;
  +for (i = 0; i < c; i++) {
  +/*...@-nullstate@*/  /* EVR.argv might be NULL */
  + if (PRCOSkip(tag, N, EVR, F, i))
  + continue;
  +/*...@=nullstate@*/
  + he->p.argv[ac++] = t;
  + t = stpcpy(t, "- ");
  + if (*N.argv[i] == '/') {
  + t = yamlstrcpy(t, N.argv[i], indent);   t += strlen(t);
  + } else
  + t = stpcpy(t, N.argv[i]);
  +/*...@-readonlytrans@*/
  + if (EVR.argv != NULL && EVR.argv[i] != NULL && *EVR.argv[i] != '\0') {
  + static char *Fstr[] = { "?0","<",">","?3","=","<=",">=","?7" };
  + rpmuint32_t Fx = ((F.ui32p[i] >> 1) & 0x7);
  + t = stpcpy( stpcpy( stpcpy(t, " "), Fstr[Fx]), " ");
  + t = stpcpy(t, EVR.argv[i]);
  + }
  +/*...@=readonlytrans@*/
  + *t++ = '\0';
  +}
  +he->p.argv[he->c] = NULL;
  +/*...@=compmempass@*/
  +rc = 0;
  +
  +exit:
  +/*...@-kepttrans@*/  /* N.argv may be kept. */
  +N.argv = _free(N.argv);
  +/*...@=kepttrans@*/
  +/*...@-usereleased@*//* EVR.argv may be dead. */
  +EVR.argv = _free(EVR.argv);
  +/*...@=usereleased

[CVS] RPM: rpm/ CHANGES rpm/rpmdb/ hdrfmt.c rpm/ rpmpopt.in

2008-07-17 Thread Jeff Johnson
  RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  

  Server: rpm5.org Name:   Jeff Johnson
  Root:   /v/rpm/cvs   Email:  [EMAIL PROTECTED]
  Module: rpm  Date:   17-Jul-2008 15:25:24
  Branch: HEAD Handle: 2008071713252301

  Modified files:
rpm CHANGES rpmpopt.in
rpm/rpmdb   hdrfmt.c

  Log:
- band-aid test for tag->tagno != NULL for now. better needs doing.
- fix: --changelog segfault from rpmpopt.in typo.

  Summary:
RevisionChanges Path
1.2489  +2  -0  rpm/CHANGES
1.114   +4  -4  rpm/rpmdb/hdrfmt.c
2.69+2  -2  rpm/rpmpopt.in
  

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  
  $ cvs diff -u -r1.2488 -r1.2489 CHANGES
  --- rpm/CHANGES   17 Jul 2008 06:33:16 -  1.2488
  +++ rpm/CHANGES   17 Jul 2008 13:25:23 -  1.2489
  @@ -1,5 +1,7 @@
   
   5.1.0 -> 5.2a0:
  +- jbj: band-aid test for tag->tagno != NULL for now. better needs doing.
  +- jbj: fix: --changelog segfault from rpmpopt.in typo.
   - rse: fallback to xmalloc+strncpy if strndup is not available in 
filetriggers code
   - pixel: add filetriggers support.
   - rse: configure: do not complain with "python: file not found" on 
platforms without python(1) in PATH
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/hdrfmt.c
  
  $ cvs diff -u -r1.113 -r1.114 hdrfmt.c
  --- rpm/rpmdb/hdrfmt.c3 Jul 2008 18:01:19 -   1.113
  +++ rpm/rpmdb/hdrfmt.c17 Jul 2008 13:25:24 -  1.114
  @@ -5741,7 +5741,7 @@
if (isxml) {
const char * tagN;
/* XXX display "Tag_0x01234567" for arbitrary tags. */
  - if (tag->tagno[0] & 0x4000) {
  + if (tag->tagno != NULL && tag->tagno[0] & 0x4000) {
(void) snprintf(numbuf, sizeof(numbuf), "Tag_0x%08x",
(unsigned) tag->tagno[0]);
numbuf[sizeof(numbuf)-1] = '\0';
  @@ -5757,7 +5757,7 @@
rpmTag tagT = 0;
const char * tagN;
/* XXX display "Tag_0x01234567" for arbitrary tags. */
  - if (tag->tagno[0] & 0x4000) {
  + if (tag->tagno != NULL && tag->tagno[0] & 0x4000) {
(void) snprintf(numbuf, sizeof(numbuf), "Tag_0x%08x",
(unsigned) tag->tagno[0]);
numbuf[sizeof(numbuf)-1] = '\0';
  @@ -5915,9 +5915,9 @@
NULL));
   
   /* XXX Ick: +1 needed to handle :extractor |transformer marking. */
  -isxml = (tag != NULL && tag->tagno[0] == (rpmTag)-2 && tag->av != NULL
  +isxml = (tag != NULL && tag->tagno != NULL && tag->tagno[0] == 
(rpmTag)-2 && tag->av != NULL
&& tag->av[0] != NULL && !strcmp(tag->av[0]+1, "xml"));
  -isyaml = (tag != NULL && tag->tagno[0] == (rpmTag)-2 && tag->av != NULL
  +isyaml = (tag != NULL && tag->tagno != NULL && tag->tagno[0] == 
(rpmTag)-2 && tag->av != NULL
&& tag->av[0] != NULL && !strcmp(tag->av[0]+1, "yaml"));
   
   if (isxml) {
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmpopt.in
  
  $ cvs diff -u -r2.68 -r2.69 rpmpopt.in
  --- rpm/rpmpopt.in7 Jul 2008 22:54:29 -   2.68
  +++ rpm/rpmpopt.in17 Jul 2008 13:25:23 -  2.69
  @@ -2,7 +2,7 @@
   # \verbatim
   #
   # @USRLIBRPM@/@configure_input@
  -# $Id: rpmpopt.in,v 2.68 2008/07/07 22:54:29 jbj Exp $
  +# $Id: rpmpopt.in,v 2.69 2008/07/17 13:25:23 jbj Exp $
   #
   # This file *should not be modified*. Local customizations
   # belong in /etc/popt, not here. This file will be replaced
  @@ -93,7 +93,7 @@
   Description :\n%{DESCRIPTION}\n' \
--POPTdesc=$"list descriptive information from package(s)"
   
  -rpm  alias --changelog --qf '[* %{CHANGELOGTIME:day} 
%{CHANGELOGNAME}\n%{CHANGELOGTEXT}\n\n]' \
  +rpm  alias --changelog --qf '[%{CHANGELOGTIME:day} 
%{CHANGELOGNAME}\n%{CHANGELOGTEXT}\n\n]' \
--POPTdesc=$"list change logs for this package"
   
   
#==
  @@ .
__
RPM Package Managerhttp://rpm5.org
CVS Sources Repositoryrpm-cvs@rpm5.org


[CVS] RPM: rpm/ CHANGES rpm/rpmdb/ hdrfmt.c rpm/ rpmpopt.in

2008-06-13 Thread Jeff Johnson
  RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  

  Server: rpm5.org Name:   Jeff Johnson
  Root:   /v/rpm/cvs   Email:  [EMAIL PROTECTED]
  Module: rpm  Date:   13-Jun-2008 10:32:02
  Branch: HEAD Handle: 2008061308320101

  Modified files:
rpm CHANGES rpmpopt.in
rpm/rpmdb   hdrfmt.c

  Log:
- add --deb:foo aliases for *.deb spewage.

  Summary:
RevisionChanges Path
1.2411  +1  -0  rpm/CHANGES
1.107   +68 -7  rpm/rpmdb/hdrfmt.c
2.66+89 -1  rpm/rpmpopt.in
  

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  
  $ cvs diff -u -r1.2410 -r1.2411 CHANGES
  --- rpm/CHANGES   13 Jun 2008 06:18:56 -  1.2410
  +++ rpm/CHANGES   13 Jun 2008 08:32:01 -  1.2411
  @@ -1,5 +1,6 @@
   
   5.1.0 -> 5.2a0:
  +- jbj: add --deb:foo aliases for *.deb spewage.
   - jbj: rework :strsub find-and-replace to use mire patterns.
   - jbj: mire: add REG_NEWLINE to default regex compilation.
   - jbj: add :strsub format extension find-and-replace using posix RE's.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/hdrfmt.c
  
  $ cvs diff -u -r1.106 -r1.107 hdrfmt.c
  --- rpm/rpmdb/hdrfmt.c13 Jun 2008 06:18:57 -  1.106
  +++ rpm/rpmdb/hdrfmt.c13 Jun 2008 08:32:02 -  1.107
  @@ -20,7 +20,7 @@
*__inbuf, *__inbytesleft, *__outbuf, *__outbytesleft @*/;
   
   extern int iconv_close(/[EMAIL PROTECTED]@*/ iconv_t __cd)
  - /[EMAIL PROTECTED] __cd @*/;
  +/[EMAIL PROTECTED] __cd @*/;
   /[EMAIL PROTECTED] =incondefs @*/
   #endif
   #endif
  @@ -2345,6 +2345,65 @@
   return _fnTag(h, he);
   }
   
  +/**
  + * Retrieve digest/path pairs for --deb:md5sums.
  + * @param h  header
  + * @retval *he   tag container
  + * @return   0 on success
  + */
  +static int debmd5sumsTag(Header h, HE_t he)
  + /[EMAIL PROTECTED] he @*/
  +{
  +HE_t nhe = memset(alloca(sizeof(*nhe)), 0, sizeof(*nhe));
  +HE_t dhe = memset(alloca(sizeof(*dhe)), 0, sizeof(*dhe));
  +char * t, * te;
  +size_t nb = 0;
  +int rc = 1;
  +int xx;
  +int i;
  +
  +nhe->tag = RPMTAG_FILEPATHS;
  +if (!(xx = headerGet(h, nhe, 0)))
  + goto exit;
  +dhe->tag = RPMTAG_FILEDIGESTS;
  +if (!(xx = headerGet(h, dhe, 0)))
  + goto exit;
  +
  +he->tag = tagValue("Debmd5sums");
  +he->t = RPM_STRING_ARRAY_TYPE;
  +he->c = 0;
  +he->freeData = 1;
  +for (i = 0; i < (int)dhe->c; i++) {
  + if (!(dhe->p.argv[i] && *dhe->p.argv[i]))
  + continue;
  + nb += sizeof(*he->p.argv);
  + nb += strlen(dhe->p.argv[i]) + sizeof("  ") + strlen(nhe->p.argv[i]) - 
1;
  + he->c++;
  +}
  +nb += sizeof(*he->p.argv);
  +
  +he->p.argv = xmalloc(nb);
  +te = (char *) &he->p.argv[he->c+1];
  +
  +he->c = 0;
  +for (i = 0; i < (int)dhe->c; i++) {
  + if (!(dhe->p.argv[i] && *dhe->p.argv[i]))
  + continue;
  + he->p.argv[he->c++] = te;
  + t = rpmExpand(dhe->p.argv[i], "  ", nhe->p.argv[i]+1, NULL);
  + te = stpcpy(te, t);
  + te++;
  + t = _free(t);
  +}
  +he->p.argv[he->c] = NULL;
  +rc = 0;
  +
  +exit:
  +nhe->p.ptr = _free(nhe->p.ptr);
  +dhe->p.ptr = _free(dhe->p.ptr);
  +return rc;
  +}
  +
   static int filestatTag(Header h, HE_t he)
/[EMAIL PROTECTED] he @*/
   {
  @@ -3777,6 +3836,8 @@
{ .tagFunction = F1sqlTag } },
   { HEADER_EXT_TAG, "RPMTAG_FILESSQLENTRY2",
{ .tagFunction = F2sqlTag } },
  +{ HEADER_EXT_TAG, "RPMTAG_DEBMD5SUMS",
  + { .tagFunction = debmd5sumsTag } },
   { HEADER_EXT_FORMAT, "armor",
{ .fmtFunction = armorFormat } },
   { HEADER_EXT_FORMAT, "base64",
  @@ -3928,11 +3989,11 @@
*/
   struct sprintfToken_s {
   enum {
  - PTOK_NONE   = 0,
  - PTOK_TAG= 1,
  - PTOK_ARRAY  = 2,
  - PTOK_STRING = 3,
  - PTOK_COND   = 4
  +PTOK_NONE   = 0,
  +PTOK_TAG= 1,
  +PTOK_ARRAY  = 2,
  +PTOK_STRING = 3,
  +PTOK_COND   = 4
   } type;
   union {
struct sprintfTag_s tag;/*!< PTOK_TAG */
  @@ -4624,7 +4685,7 @@
   /[EMAIL PROTECTED]@*/
   
   if (dst != NULL)
  - *dst = '\0';
  +*dst = '\0';
   
   for (i = 0; i < (unsigned) numTokens; i++) {
token = format + i;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmpopt.in
  ==

[CVS] RPM: rpm/ CHANGES rpm/rpmdb/ hdrfmt.c rpm/ rpmpopt.in

2008-03-28 Thread Jeff Johnson
  RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  

  Server: rpm5.org Name:   Jeff Johnson
  Root:   /v/rpm/cvs   Email:  [EMAIL PROTECTED]
  Module: rpm  Date:   28-Mar-2008 15:11:18
  Branch: HEAD Handle: 2008032814111800

  Modified files:
rpm CHANGES rpmpopt.in
rpm/rpmdb   hdrfmt.c

  Log:
- jbj: add :sqlescape for use in SQL statements generated by --qf

  Summary:
RevisionChanges Path
1.2263  +1  -0  rpm/CHANGES
1.74+86 -6  rpm/rpmdb/hdrfmt.c
2.60+48 -49 rpm/rpmpopt.in
  

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  
  $ cvs diff -u -r1.2262 -r1.2263 CHANGES
  --- rpm/CHANGES   27 Mar 2008 21:33:25 -  1.2262
  +++ rpm/CHANGES   28 Mar 2008 14:11:18 -  1.2263
  @@ -1,4 +1,5 @@
   5.0.0 -> 5.1a1:
  +- jbj: add :sqlescape for use in SQL statements generated by --qf.
   - jbj: rework --yum:primary.sqlite to include quoting.
   - jbj: add header extensions similar to xml for sql.
   - jbj: rename the primary.xml et al header extensions, adding "xml".
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/hdrfmt.c
  
  $ cvs diff -u -r1.73 -r1.74 hdrfmt.c
  --- rpm/rpmdb/hdrfmt.c27 Mar 2008 21:33:25 -  1.73
  +++ rpm/rpmdb/hdrfmt.c28 Mar 2008 14:11:18 -  1.74
  @@ -2120,6 +2120,79 @@
   return PRCOxmlTag(h, he, RPMTAG_OBSOLETEVERSION, RPMTAG_OBSOLETEFLAGS);
   }
   
  +/**
  + * Return length of string represented with single quotes doubled.
  + * @param s  string
  + * @return   length of sql string
  + */
  +static size_t sqlstrlen(const char * s)
  + /[EMAIL PROTECTED]/
  +{
  +size_t len = 0;
  +int c;
  +
  +while ((c = (int) *s++) != (int) '\0')
  +{
  + switch (c) {
  + case '\'':  len += 1;   /[EMAIL PROTECTED]@*/
  + default:len += 1;   /[EMAIL PROTECTED]@*/ 
break;
  + }
  +}
  +return len;
  +}
  +
  +/**
  + * Copy source string to target, doubling single quotes.
  + * @param t  target sql string
  + * @param s  source string
  + * @return   target sql string
  + */
  +static char * sqlstrcpy(/[EMAIL PROTECTED]@*/ char * t, const char * s)
  + /[EMAIL PROTECTED] t @*/
  +{
  +char * te = t;
  +int c;
  +
  +while ((c = (int) *s++) != (int) '\0') {
  + switch (c) {
  + case '\'':  *te++ = (char) c;   /[EMAIL PROTECTED]@*/
  + default:*te++ = (char) c;   /[EMAIL PROTECTED]@*/ 
break;
  + }
  +}
  +*te = '\0';
  +return t;
  +}
  +
  +/**
  + * Encode string for use in SQL statements.
  + * @param he tag container
  + * @return   formatted string
  + */
  +static /[EMAIL PROTECTED]@*/ char * sqlescapeFormat(HE_t he)
  + /[EMAIL PROTECTED]/
  +{
  +int ix = (he->ix > 0 ? he->ix : 0);
  +char * val;
  +
  +assert(ix == 0);
  +if (he->t != RPM_STRING_TYPE) {
  + val = xstrdup(_("(not a string)"));
  +} else {
  + const char * s = strdup_locale_to_utf8(he->p.str);
  + size_t nb = sqlstrlen(s);
  + char * t;
  +
  + val = t = xcalloc(1, nb + 1);
  + t = sqlstrcpy(t, s);t += strlen(t);
  + *t = '\0';
  + s = _free(s);
  +}
  +
  +/[EMAIL PROTECTED]@*/
  +return val;
  +/[EMAIL PROTECTED]@*/
  +}
  +
   static int PRCOsqlTag(Header h, HE_t he, rpmTag EVRtag, rpmTag Ftag)
/[EMAIL PROTECTED] he @*/
   {
  @@ -2127,6 +2200,7 @@
   rpmTagData N = { .ptr = NULL };
   rpmTagData EVR = { .ptr = NULL };
   rpmTagData F = { .ptr = NULL };
  +char instance[64];
   size_t nb;
   uint32_t ac;
   uint32_t c;
  @@ -2150,6 +2224,7 @@
   if (xx == 0) goto exit;
   F.ui32p = he->p.ui32p;
   
  +xx = snprintf(instance, sizeof(instance), "'%d'", headerGetInstance(h));
   nb = sizeof(*he->p.argv);
   ac = 0;
   for (i = 0; i < c; i++) {
  @@ -2157,7 +2232,7 @@
continue;
ac++;
nb += sizeof(*he->p.argv);
  - nb += sizeof("'', 'EQ', '0', '', ''");
  + nb += strlen(instance) + sizeof(", '', 'EQ', '0', '', ''");
if (tag == RPMTAG_REQUIRENAME)
nb += sizeof(", ''") - 1;
nb += strlen(N.argv[i]);
  @@ -2181,7 +2256,8 @@
if (PRCOSkip(tag, N, EVR, F, i))
continue;
he->p.argv[ac++] = t;
  - t = stpcpy( stpcpy( stpcpy(t, "'"), N.argv[i]), "'");
  + t = stpcpy(t, instance);
  + t = stpcpy( stpcpy( stpcpy(t, ", '

[CVS] RPM: rpm/ CHANGES rpm/rpmdb/ hdrfmt.c rpm/ rpmpopt.in

2008-03-27 Thread Jeff Johnson
  RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  

  Server: rpm5.org Name:   Jeff Johnson
  Root:   /v/rpm/cvs   Email:  [EMAIL PROTECTED]
  Module: rpm  Date:   27-Mar-2008 22:33:25
  Branch: HEAD Handle: 2008032721332500

  Modified files:
rpm CHANGES rpmpopt.in
rpm/rpmdb   hdrfmt.c

  Log:
- jbj: rework --yum:primary.sqlite to include quoting.
- jbj: add header extensions similar to xml for sql.
- jbj: rename the primary.xml et al header extensions, adding "xml".

  Summary:
RevisionChanges Path
1.2262  +3  -0  rpm/CHANGES
1.73+304 -36rpm/rpmdb/hdrfmt.c
2.59+69 -67 rpm/rpmpopt.in
  

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  
  $ cvs diff -u -r1.2261 -r1.2262 CHANGES
  --- rpm/CHANGES   27 Mar 2008 02:09:14 -  1.2261
  +++ rpm/CHANGES   27 Mar 2008 21:33:25 -  1.2262
  @@ -1,4 +1,7 @@
   5.0.0 -> 5.1a1:
  +- jbj: rework --yum:primary.sqlite to include quoting.
  +- jbj: add header extensions similar to xml for sql.
  +- jbj: rename the primary.xml et al header extensions, adding "xml".
   - jbj: add :utf8 format conversion, use with :cdata format too.
   - jbj: rpmrepo: unsnarl the data from the methods.
   - jbj: rpmrepo: populate repomd.xml.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/hdrfmt.c
  
  $ cvs diff -u -r1.72 -r1.73 hdrfmt.c
  --- rpm/rpmdb/hdrfmt.c27 Mar 2008 02:09:16 -  1.72
  +++ rpm/rpmdb/hdrfmt.c27 Mar 2008 21:33:25 -  1.73
  @@ -1969,7 +1969,7 @@
   return rc;
   }
   
  -static int PRCOentrySkip(rpmTag tag, rpmTagData N, rpmTagData EVR, 
rpmTagData F,
  +static int PRCOSkip(rpmTag tag, rpmTagData N, rpmTagData EVR, rpmTagData F,
uint32_t i)
/[EMAIL PROTECTED]/
   {
  @@ -1985,7 +1985,7 @@
   return 0;
   }
   
  -static int PRCOentryTag(Header h, HE_t he, rpmTag EVRtag, rpmTag Ftag)
  +static int PRCOxmlTag(Header h, HE_t he, rpmTag EVRtag, rpmTag Ftag)
/[EMAIL PROTECTED] he @*/
   {
   rpmTag tag = he->tag;
  @@ -2018,7 +2018,7 @@
   nb = sizeof(*he->p.argv);
   ac = 0;
   for (i = 0; i < c; i++) {
  - if (PRCOentrySkip(tag, N, EVR, F, i))
  + if (PRCOSkip(tag, N, EVR, F, i))
continue;
ac++;
nb += sizeof(*he->p.argv);
  @@ -2036,7 +2036,7 @@
nb += sizeof(" rel=\"\"") - 2;
}
   #ifdef   NOTNOW
  - if (F.ui32p[i] & 0x40)
  + if (tag == RPMTAG_REQUIRENAME && (F.ui32p[i] & 0x40))
nb += sizeof(" pre=\"1\"") - 1;
   #endif
   }
  @@ -2048,7 +2048,7 @@
   t = (char *) &he->p.argv[he->c + 1];
   ac = 0;
   for (i = 0; i < c; i++) {
  - if (PRCOentrySkip(tag, N, EVR, F, i))
  + if (PRCOSkip(tag, N, EVR, F, i))
continue;
he->p.argv[ac++] = t;
t = stpcpy(t, "");
  @@ -2092,35 +2092,157 @@
   return rc;
   }
   
  -static int PentryTag(Header h, HE_t he)
  +static int PxmlTag(Header h, HE_t he)
/[EMAIL PROTECTED] he @*/
   {
   he->tag = RPMTAG_PROVIDENAME;
  -return PRCOentryTag(h, he, RPMTAG_PROVIDEVERSION, RPMTAG_PROVIDEFLAGS);
  +return PRCOxmlTag(h, he, RPMTAG_PROVIDEVERSION, RPMTAG_PROVIDEFLAGS);
   }
   
  -static int RentryTag(Header h, HE_t he)
  +static int RxmlTag(Header h, HE_t he)
/[EMAIL PROTECTED] he @*/
   {
   he->tag = RPMTAG_REQUIRENAME;
  -return PRCOentryTag(h, he, RPMTAG_REQUIREVERSION, RPMTAG_REQUIREFLAGS);
  +return PRCOxmlTag(h, he, RPMTAG_REQUIREVERSION, RPMTAG_REQUIREFLAGS);
   }
   
  -static int CentryTag(Header h, HE_t he)
  +static int CxmlTag(Header h, HE_t he)
/[EMAIL PROTECTED] he @*/
   {
   he->tag = RPMTAG_CONFLICTNAME;
  -return PRCOentryTag(h, he, RPMTAG_CONFLICTVERSION, RPMTAG_CONFLICTFLAGS);
  +return PRCOxmlTag(h, he, RPMTAG_CONFLICTVERSION, RPMTAG_CONFLICTFLAGS);
   }
   
  -static int OentryTag(Header h, HE_t he)
  +static int OxmlTag(Header h, HE_t he)
/[EMAIL PROTECTED] he @*/
   {
   he->tag = RPMTAG_OBSOLETENAME;
  -return PRCOentryTag(h, he, RPMTAG_OBSOLETEVERSION, RPMTAG_OBSOLETEFLAGS);
  +return PRCOxmlTag(h, he, RPMTAG_OBSOLETEVERSION, RPMTAG_OBSOLETEFLAGS);
   }
   
  -static int FDGentrySkip(rpmTagData DN, rpmTagData BN, rpmTagData DI, 
uint32_t i)
  +static int PRCOsqlTag(Header h, HE_t he, rpmTag EVRtag, rpmTag Ftag)
  + /[EMAIL PROTECTED] he @*/
  +{
  +rpmTag tag = he->tag;
  +rpmTagData N = { .ptr = NULL };
  +rpmTagData EVR = { .ptr = NULL };
  +

[CVS] RPM: rpm/ CHANGES rpm/rpmdb/ hdrfmt.c rpm/ rpmpopt.in

2008-03-22 Thread Jeff Johnson
  RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  

  Server: rpm5.org Name:   Jeff Johnson
  Root:   /v/rpm/cvs   Email:  [EMAIL PROTECTED]
  Module: rpm  Date:   23-Mar-2008 02:17:40
  Branch: HEAD Handle: 2008032301173901

  Modified files:
rpm CHANGES rpmpopt.in
rpm/rpmdb   hdrfmt.c

  Log:
- jbj: add :cdata format to permit strings to be included in XML
CDATA.

  Summary:
RevisionChanges Path
1.2253  +1  -0  rpm/CHANGES
1.70+30 -0  rpm/rpmdb/hdrfmt.c
2.53+12 -12 rpm/rpmpopt.in
  

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  
  $ cvs diff -u -r1.2252 -r1.2253 CHANGES
  --- rpm/CHANGES   21 Mar 2008 14:23:17 -  1.2252
  +++ rpm/CHANGES   23 Mar 2008 01:17:39 -  1.2253
  @@ -1,4 +1,5 @@
   5.0.0 -> 5.1a1:
  +- jbj: add :cdata format to permit strings to be included in XML CDATA.
   - jbj: add --yum:primary popt alias to spew a primary.xml approximation.
   - jbj: add header extensions for primary.xml  markup.
   - jbj: rpmfi: add 2 getter(s) and an additional (stubbed) iterator 
method.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/hdrfmt.c
  
  $ cvs diff -u -r1.69 -r1.70 hdrfmt.c
  --- rpm/rpmdb/hdrfmt.c23 Mar 2008 00:52:19 -  1.69
  +++ rpm/rpmdb/hdrfmt.c23 Mar 2008 01:17:40 -  1.70
  @@ -562,6 +562,34 @@
   }
   
   /**
  + * Encode string for use in XML CDATA.
  + * @param he tag container
  + * @return   formatted string
  + */
  +static /[EMAIL PROTECTED]@*/ char * cdataFormat(HE_t he)
  + /[EMAIL PROTECTED]/
  +{
  +int ix = (he->ix > 0 ? he->ix : 0);
  +char * val;
  +
  +assert(ix == 0);
  +if (he->t != RPM_STRING_TYPE) {
  + val = xstrdup(_("(not a string)"));
  +} else {
  + size_t nb = xmlstrlen(he->p.str);
  + char * t;
  +
  + val = t = xcalloc(1, nb + 1);
  + t = xmlstrcpy(t, he->p.str);t += strlen(t);
  + *t = '\0';
  +}
  +
  +/[EMAIL PROTECTED]@*/
  +return val;
  +/[EMAIL PROTECTED]@*/
  +}
  +
  +/**
* Wrap tag data in simple header xml markup.
* @param he tag container
* @return   formatted string
  @@ -2086,6 +2114,8 @@
{ .fmtFunction = pgpsigFormat } },
   { HEADER_EXT_FORMAT, "triggertype",  
{ .fmtFunction = triggertypeFormat } },
  +{ HEADER_EXT_FORMAT, "cdata",
  + { .fmtFunction = cdataFormat } },
   { HEADER_EXT_FORMAT, "xml",
{ .fmtFunction = xmlFormat } },
   { HEADER_EXT_FORMAT, "yaml",
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmpopt.in
  
  $ cvs diff -u -r2.52 -r2.53 rpmpopt.in
  --- rpm/rpmpopt.in23 Mar 2008 00:52:19 -  2.52
  +++ rpm/rpmpopt.in23 Mar 2008 01:17:39 -  2.53
  @@ -2,7 +2,7 @@
   # \verbatim
   #
   # @USRLIBRPM@/@configure_input@
  -# $Id: rpmpopt.in,v 2.52 2008/03/23 00:52:19 jbj Exp $
  +# $Id: rpmpopt.in,v 2.53 2008/03/23 01:17:39 jbj Exp $
   #
   # This file *should not be modified*. Local customizations
   # belong in /etc/popt, not here. This file will be replaced
  @@ -103,40 +103,40 @@
--POPTdesc=$"list metadata in yaml"
   rpm  alias --yum:primary.xml --qf '\
   \n\
  -  %{NAME}\n\
  -  %{ARCH}\n\
  +  %{NAME:cdata}\n\
  +  %{ARCH:cdata}\n\
 \n\
 %|HDRID?{%{HDRID}}|\n\
  -  %{SUMMARY}\n\
  -  %{DESCRIPTION}\n\
  -  %|PACKAGER?{%{PACKAGER}}:{}|\n\
  -  %|URL?{%{URL}}:{}|\n\
  +  %{SUMMARY:cdata}\n\
  +  %{DESCRIPTION:cdata}\n\
  +  %|PACKAGER?{%{PACKAGER:cdata}}:{}|\n\
  +  %|URL?{%{URL:cdata}}:{}|\n\
 \n\
 \n\
 \n\
 \n\
   %|license?{\
  -%{LICENSE}\n\
  +%{LICENSE:cdata}\n\
   }:{\
   \n\
   }|\
   %|vendor?{\
  -%{VENDOR}\n\
  +%{VENDOR:cdata}\n\
   }:{\
   \n\
   }|\
   %|group?{\
  -%{GROUP}\n\
  +%{GROUP:cdata}\n\
   }:{\
   \n\
   }|\
   %|buildhost?{\
  -%{BUILDHOST}\n\
  +%{BUILDHOST:cdata}\n\
   }:{\
   \n\
   }|\
   %|sourcerpm?{\
  -%{SOURCERPM}\n\
  +%{SOURCERPM:cdata}\n\
   }|\
   \n\
   %|provideentry?{\
  @@ .
__
RPM Package Managerhttp://rpm5.org
CVS Sources Repositoryrpm-cvs@rpm5.org