allows <version>-<release> in dependency version strings
authorewt <devnull@localhost>
Tue, 20 Aug 1996 16:29:19 +0000 (16:29 +0000)
committerewt <devnull@localhost>
Tue, 20 Aug 1996 16:29:19 +0000 (16:29 +0000)
CVS patchset: 979
CVS date: 1996/08/20 16:29:19

lib/depends.c

index 4bb9127..8776030 100644 (file)
@@ -502,8 +502,10 @@ static int checkPackageDeps(rpmDependencies rpmdep, struct problemsSet * psp,
     return 0;
 }
 
-static int headerMatchesDepFlags(Header h, char * reqVersion, int reqFlags) {
-    char * name, * version;
+static int headerMatchesDepFlags(Header h, char * reqInfo, int reqFlags) {
+    char * name, * version, * release, * chptr;
+    char * reqVersion = reqInfo;
+    char * reqRelease = NULL;
     int type, count;
     int_32 serial;
     char buf[20];
@@ -523,10 +525,26 @@ static int headerMatchesDepFlags(Header h, char * reqVersion, int reqFlags) {
        }
        sprintf(buf, "%d", serial);
        version = buf;
-    } else
+    } else {
        getEntry(h, RPMTAG_VERSION, &type, (void *) &version, &count);
+       chptr = strrchr(reqInfo, '-');
+       if (chptr) {
+           reqVersion = alloca(strlen(reqInfo) + 1);
+           strcpy(reqVersion, reqInfo);
+           reqVersion[chptr - reqInfo] = '\0';
+           reqRelease = reqVersion + (chptr - reqInfo) + 1;
+           if (*reqRelease) 
+               getEntry(h, RPMTAG_RELEASE, &type, (void *) &release, &count);
+           else
+               reqRelease = NULL;
+       }
+    }
 
     sense = vercmp(version, reqVersion);
+    if (!sense && reqRelease) {
+       /* if a release number is given, use it to break ties */
+       sense = vercmp(release, reqRelease);
+    }
 
     if ((reqFlags & REQUIRE_LESS) && sense < 0) {
        result = 1;