]> pd.if.org Git - zpackage/blobdiff - lib/vercmp.c
fix pointer related bugs
[zpackage] / lib / vercmp.c
index 8cbad7354ec92035ab0264c9ebc4b35018b48b34..16cf1cdc4eab48ab1f4b89b4cac0178d23b4a858 100644 (file)
@@ -17,7 +17,7 @@ struct ver {
        char *relstr;
 };
 
-static void init_ver(struct ver *v, char *s) {
+static void init_ver(struct ver *v, const char *s) {
        strncpy(v->str, s, 1023);
        v->str[1023] = 0;
        v->s = 0;
@@ -52,6 +52,9 @@ static int ver_cmp(struct ver *a, struct ver *b) {
        }
        if (a->type == 1) {
                int cmp;
+               if (a->s && ! b->s) return 1;
+               if (b->s && ! a->s) return -1;
+               if (!b->s && ! a->s) return 0;
                cmp = strcmp(a->s, b->s);
                if (cmp == 0) {
                        return 0;
@@ -109,7 +112,7 @@ static int next_comp(struct ver *v) {
 /*
  * alphabetic less than numeric
  */
-int zpm_vercmp(char *vsa, char *vsb) {
+int zpm_vercmp(const char *vsa, const char *vsb) {
        struct ver a, b;
        int an, bn;
        int cmp;
@@ -127,6 +130,9 @@ int zpm_vercmp(char *vsa, char *vsb) {
                        }
                        return an < bn ? -1 : 1;
                }
+               if (an == 0 && bn == 0) {
+                       return 0;
+               }
                cmp = ver_cmp(&a, &b);
                if (cmp != 0) {
                        return cmp;