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:   02-Jan-2009 06:33:29
  Branch: HEAD                             Handle: 2009010205332900

  Modified files:
    rpm                     CHANGES
    rpm/rpmdb               rpmevr.c

  Log:
    - jbj: EVRtuple: blueprint new <-> old parsers with an assert.
    - jbj: EVRtuple: parse EVRD using RPMMIRE_REGEX & evr_tuple_match.

  Summary:
    Revision    Changes     Path
    1.2722      +2  -0      rpm/CHANGES
    1.23        +32 -5      rpm/rpmdb/rpmevr.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.2721 -r1.2722 CHANGES
  --- rpm/CHANGES       1 Jan 2009 21:30:25 -0000       1.2721
  +++ rpm/CHANGES       2 Jan 2009 05:33:29 -0000       1.2722
  @@ -1,5 +1,7 @@
   
   5.2a2 -> 5.2a3:
  +    - jbj: EVRtuple: blueprint new <-> old parsers with an assert.
  +    - jbj: EVRtuple: parse EVRD using RPMMIRE_REGEX & evr_tuple_match.
       - jbj: EVRtuple: wire up evr_tuple_match RE pattern match.
       - jbj: EVRtuple: wire up evr_tuple_order precedence permutation.
       - jbj: EVRtuple: use array for tuple storage.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/rpmevr.c
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 rpmevr.c
  --- rpm/rpmdb/rpmevr.c        1 Jan 2009 21:30:25 -0000       1.22
  +++ rpm/rpmdb/rpmevr.c        2 Jan 2009 05:33:29 -0000       1.23
  @@ -5,6 +5,7 @@
   
   #include <rpmiotypes.h>
   #include <rpmmacro.h>
  +#define      _MIRE_INTERNAL
   #include <mire.h>
   
   #include <rpmtag.h>
  @@ -109,7 +110,7 @@
   }
   
   /*...@unchecked@*/ /*...@observer@*/ /*...@null@*/
  -static const char * _evr_tuple_match = 
"i^(?:([^:-]+):)?([^:-]+)(?:-([^:-]+))?(?::([^:-]+))?$";
  +static const char * _evr_tuple_match = 
"^(?:([^:-]+):)?([^:-]+)(?:-([^:-]+))?(?::([^:-]+))?$";
   /*...@unchecked@*/ /*...@null@*/
   static const char * evr_tuple_match = NULL;
   /*...@unchecked@*/ /*...@null@*/
  @@ -125,8 +126,16 @@
        evr_tuple_match = rpmExpand("%{?evr_tuple_match}", NULL);
        if (evr_tuple_match == NULL || evr_tuple_match[0] == '\0')
            evr_tuple_match = xstrdup(_evr_tuple_match);
  +
  +#ifdef       NOTYET  /* XXX avoid need for evr_tuple_nmire */
  +     evr_tuple_mire = mireNew(RPMMIRE_REGEX, 0);
  +     xx = mireSetCOptions(evr_tuple_mire, RPMMIRE_REGEX, 0, 0, NULL);
  +     xx = mireRegcomp(evr_tuple_mire, evr_tuple_match);
  +#else
        xx = mireAppend(RPMMIRE_REGEX, 0, evr_tuple_match, NULL,
                &evr_tuple_mire, &evr_tuple_nmire);
  +#endif
  +
       }
   assert(evr_tuple_match != NULL && evr_tuple_mire != NULL);
       return evr_tuple_mire;
  @@ -181,14 +190,32 @@
       }
   
       {        miRE mire = rpmEVRmire();
  -     int noffsets = 4 * 3;
  -     int offsets[4 * 3];
  +     int noffsets = 10 * 3;
  +     int offsets[10 * 3];
        int xx;
  +     int i;
   
  -     memset(offsets, 0, sizeof(offsets));
  +     memset(offsets, -1, sizeof(offsets));
        xx = mireSetEOptions(mire, offsets, noffsets);
   
  -     xx = mireRegexec(mire, evr->str, strlen(evr->str));
  +     xx = mireRegexec(mire, evrstr, strlen(evrstr));
  +
  +     for (i = 0; i < noffsets; i += 2) {
  +         size_t nb;
  +         int ix;
  +
  +         if (offsets[i] < 0) continue;
  +         nb = (size_t)(offsets[i+1] - offsets[i]);
  +         switch (i/2) {
  +         default:
  +         case 0:     continue;       /*...@notreached@*/ break;
  +         case 1:     ix = RPMEVR_E;  break;
  +         case 2:     ix = RPMEVR_V;  break;
  +         case 3:     ix = RPMEVR_R;  break;
  +         case 4:     ix = RPMEVR_D;  break;
  +         }
  +assert(!strncmp(evr->F[ix], evrstr+offsets[i], nb));
  +     }
   
        xx = mireSetEOptions(mire, NULL, 0);
       }
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                [email protected]

Reply via email to