]> pd.if.org Git - zpackage/blobdiff - lib/vercmp.c
move vercmp into zpm library
[zpackage] / lib / vercmp.c
similarity index 83%
rename from vercmp.c
rename to lib/vercmp.c
index 58053d9f46b68341accb86674ea2adb83396cc97..8cbad7354ec92035ab0264c9ebc4b35018b48b34 100644 (file)
--- a/vercmp.c
@@ -17,7 +17,7 @@ struct ver {
        char *relstr;
 };
 
-void init_ver(struct ver *v, char *s) {
+static void init_ver(struct ver *v, char *s) {
        strncpy(v->str, s, 1023);
        v->str[1023] = 0;
        v->s = 0;
@@ -43,7 +43,7 @@ void init_ver(struct ver *v, char *s) {
 
 }
 
-int ver_cmp(struct ver *a, struct ver *b) {
+static int ver_cmp(struct ver *a, struct ver *b) {
        if (a->type == 0 && b->type == 0) {
                return 0;
        }
@@ -65,7 +65,7 @@ int ver_cmp(struct ver *a, struct ver *b) {
        return 0;
 }
 
-int next_comp(struct ver *v) {
+static int next_comp(struct ver *v) {
        char *s;
 
        /* restore over-written character */
@@ -109,41 +109,34 @@ int next_comp(struct ver *v) {
 /*
  * alphabetic less than numeric
  */
-int main(int ac, char *av[]) {
+int zpm_vercmp(char *vsa, char *vsb) {
        struct ver a, b;
        int an, bn;
        int cmp;
 
-       if (ac < 2) return 1;
-
-       init_ver(&a, av[1]);
-       init_ver(&b, av[2]);
+       init_ver(&a, vsa);
+       init_ver(&b, vsb);
        do {
                an = next_comp(&a);
                bn = next_comp(&b);
                if (an != bn) {
                        if (an == 0 && a.type == 2 && b.sep == 0 && b.type == 1) {
-                               printf("1\n");
+                               return 1;
                        } else if (bn == 0 && b.type == 2 && a.sep == 0 && a.type == 1) {
-                               printf("-1\n");
-                       } else {
-                               printf("%s\n", an < bn ? "-1" : "1");
+                               return -1;
                        }
-                       exit(0);
+                       return an < bn ? -1 : 1;
                }
                cmp = ver_cmp(&a, &b);
                if (cmp != 0) {
-                       printf("%d\n", cmp);
-                       exit(0);
+                       return cmp;
                }
        } while (an && bn);
 
        /* if we've gotten here, and both have releases, check those */
        if (a.relstr && b.relstr && a.release != b.release) {
-               printf("%s\n", a.release < b.release ? "-1" : "1");
-               exit(0);
+               return a.release < b.release ? -1 : 1;
        }
        
-       printf("0\n");
        return 0;
 }