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:   03-Jan-2009 21:58:10
  Branch: HEAD                             Handle: 2009010320580901

  Modified files:
    rpm                     CHANGES
    rpm/rpmdb               rpmevr.c

  Log:
    - EVRtuple: mark the old EVRD parser for destruction.
    - EVRtuple: use the new EVRD pattern parser, reverse the assert check.

  Summary:
    Revision    Changes     Path
    1.2725      +2  -0      rpm/CHANGES
    1.26        +70 -39     rpm/rpmdb/rpmevr.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.2724 -r1.2725 CHANGES
  --- rpm/CHANGES       3 Jan 2009 16:57:41 -0000       1.2724
  +++ rpm/CHANGES       3 Jan 2009 20:58:09 -0000       1.2725
  @@ -1,5 +1,7 @@
   
   5.2a2 -> 5.2a3:
  +    - jbj: EVRtuple: mark the old EVRD parser for destruction.
  +    - jbj: EVRtuple: use the new EVRD pattern parser, reverse the assert 
check.
       - jbj: EVRtuple: precedence permutation for rpmdsCompare().
       - jbj: EVRtuple: precedence permutation for rpmVersionCompare().
       - jbj: EVRtuple: blueprint new <-> old parsers with an assert.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/rpmevr.c
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 rpmevr.c
  --- rpm/rpmdb/rpmevr.c        3 Jan 2009 16:58:40 -0000       1.25
  +++ rpm/rpmdb/rpmevr.c        3 Jan 2009 20:58:10 -0000       1.26
  @@ -141,28 +141,23 @@
       return evr_tuple_mire;
   }
   
  -int rpmEVRparse(const char * evrstr, EVR_t evr)
  +#ifndef      DYING
  +static int oldrpmEVRparse(const char * evrstr, EVR_t evr)
        /*...@modifies evrstr, evr @*/
   {
       char *s = xstrdup(evrstr);
       char *se;
  -#ifdef       RPM_VENDOR_MANDRIVA
       char *se2;
  -#endif
   
       evr->str = se = s;
  -#ifdef       RPM_VENDOR_MANDRIVA
       se2 = se;
  -#endif
  -    while (*se && xisdigit((int)*se)) se++;  /* se points to epoch 
terminator */
  +    while (*se && xisdigit((int)*se)) se++; /* se points to epoch terminator 
*/
   
       if (*se == ':') {
        evr->F[RPMEVR_E] = s;
        *se++ = '\0';
        evr->F[RPMEVR_V] = se;
  -#ifdef       RPM_VENDOR_MANDRIVA
        se2 = se;
  -#endif
        if (*evr->F[RPMEVR_E] == '\0') evr->F[RPMEVR_E] = "0";
        evr->Elong = strtoul(evr->F[RPMEVR_E], NULL, 10);
       } else {
  @@ -170,7 +165,6 @@
        evr->F[RPMEVR_V] = s;
        evr->Elong = 0;
       }
  -#if defined(NOTYET) || defined(RPM_VENDOR_MANDRIVA)    
       se = strrchr(se, ':');           /* se points to release terminator */
       if (se) {
        *se++ = '\0';
  @@ -179,9 +173,6 @@
        evr->F[RPMEVR_D] = NULL;
       }
       se = strrchr(se2, '-');          /* se points to version terminator */
  -#else
  -    se = strrchr(se, '-');           /* se points to version terminator */
  -#endif
       if (se) {
        *se++ = '\0';
        evr->F[RPMEVR_R] = se;
  @@ -189,36 +180,76 @@
        evr->F[RPMEVR_R] = NULL;
       }
   
  -    {        miRE mire = rpmEVRmire();
  -     int noffsets = 10 * 3;
  -     int offsets[10 * 3];
  -     int xx;
  -     int i;
  -
  -     memset(offsets, -1, sizeof(offsets));
  -     xx = mireSetEOptions(mire, offsets, noffsets);
  -
  -     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));
  +    return 0;
  +}
  +#endif
  +
  +int rpmEVRparse(const char * evrstr, EVR_t evr)
  +     /*...@modifies evrstr, evr @*/
  +{
  +    miRE mire = rpmEVRmire();
  +    int noffsets = 6 * 3;
  +    int offsets[6 * 3];
  +    size_t nb;
  +    int xx;
  +    int i;
  +
  +    memset(evr, 0, sizeof(*evr));
  +    evr->str = xstrdup(evrstr);
  +    nb = strlen(evr->str);
  +
  +    memset(offsets, -1, sizeof(offsets));
  +    xx = mireSetEOptions(mire, offsets, noffsets);
  +
  +    xx = mireRegexec(mire, evr->str, strlen(evr->str));
  +
  +    for (i = 0; i < noffsets; i += 2) {
  +     int ix;
  +
  +     if (offsets[i] < 0)
  +         continue;
  +
  +     switch (i/2) {
  +     default:
  +     case 0: continue;       /*...@notreached@*/ break;
  +     case 1: ix = RPMEVR_E;  /*...@switchbreak@*/break;
  +     case 2: ix = RPMEVR_V;  /*...@switchbreak@*/break;
  +     case 3: ix = RPMEVR_R;  /*...@switchbreak@*/break;
  +     case 4: ix = RPMEVR_D;  /*...@switchbreak@*/break;
  +     }
  +
  +assert(offsets[i  ] >= 0 && offsets[i  ] <= (int)nb);
  +assert(offsets[i+1] >= 0 && offsets[i+1] <= (int)nb);
  +     {   char * te = (char *) evr->str;
  +         evr->F[ix] = te + offsets[i];
  +         te += offsets[i+1];
  +         *te = '\0';
        }
   
  -     xx = mireSetEOptions(mire, NULL, 0);
       }
  +
  +    evr->Elong = evr->F[RPMEVR_E] ? strtoul(evr->F[RPMEVR_E], NULL, 10) : 0;
  +
  +    xx = mireSetEOptions(mire, NULL, 0);
  +
  +#ifndef      DYING
  +    {        EVR_t Oevr = memset(alloca(sizeof(*Oevr)), 0, sizeof(*Oevr));
  +
  +     xx = oldrpmEVRparse(evrstr, Oevr);
  +assert(Oevr->Elong == evr->Elong);
  +
  +     for (i = 0; i < 5; i++) {
  +         if (Oevr->F[i] == NULL && evr->F[i] == NULL)
  +             continue;
  +         if (Oevr->F[i] == NULL || evr->F[i] == NULL
  +          || strcmp(Oevr->F[i], evr->F[i]))
  +             fprintf(stderr, "==> \"%s\" %d strcmp(%s,%s)\n",
  +                     evrstr, i, Oevr->F[i], evr->F[i]);
  +     }
  +     Oevr->str = _free(Oevr->str);
  +    }
  +#endif       /* DYING */
  +
       return 0;
   }
   
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                [email protected]

Reply via email to