[CVS] RPM: rpm/ CHANGES rpm/rpmdb/ hdrfmt.c rpm/ rpmpopt.in
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
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
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
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
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
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
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