libopkg: properly fix parse_version()
[oweals/opkg-lede.git] / libopkg / pkg_parse.c
index 31e7309c0f43325767e7fa3938257317ecc8ee56..f6f0a4d6f0eac923da14d017f7c87dbfbe69762c 100644 (file)
@@ -63,7 +63,7 @@ static void parse_conffiles(pkg_t * pkg, const char *cstr)
 
 int parse_version(pkg_t * pkg, const char *vstr)
 {
-       char *colon, *rev;
+       char *colon, *dup, *rev;
 
        if (strncmp(vstr, "Version:", 8) == 0)
                vstr += 8;
@@ -81,15 +81,18 @@ int parse_version(pkg_t * pkg, const char *vstr)
                vstr = ++colon;
        }
 
-       rev = strrchr(vstr, '-');
+
+       dup = xstrdup(vstr);
+       rev = strrchr(dup, '-');
 
        if (rev) {
-               pkg_set_string(pkg, PKG_REVISION, rev + 1);
-               pkg_set_raw(pkg, PKG_VERSION, vstr, rev - vstr - 1);
-       } else {
-               pkg_set_string(pkg, PKG_VERSION, vstr);
+               *rev++ = '\0';
+               pkg_set_string(pkg, PKG_REVISION, rev);
        }
 
+       pkg_set_string(pkg, PKG_VERSION, dup);
+       free(dup);
+
        return 0;
 }