]> pd.if.org Git - zpackage/blobdiff - lib/zpm.c
switch to blake2
[zpackage] / lib / zpm.c
index 359c0953e6608d091bc12f2a950ed34677db3ca1..63ecc17632c46eefb37aa5137abe22421cb38c28 100644 (file)
--- a/lib/zpm.c
+++ b/lib/zpm.c
@@ -307,11 +307,26 @@ int zpm_close(struct zpm *pkg) {
 
 static int zpm_sqlite_vercmp(void *not_used, int lena, const void *a,
                int lenb, const void *b) {
-       /* not sure what the ints are, possibly string lengths */
+       int rv;
+       char *bufa, *bufb;
+
        if (not_used != 0) fprintf(stderr, "sqlite vercmp not_used = %p\n",
                        not_used);
        if (lena == 0 && lenb > 0) return 1;
-       return zpm_vercmp(a, b);
+       if (lenb == 0 && lena > 0) return -1;
+
+       bufa = sqlite3_malloc(lena+1);
+       bufb = sqlite3_malloc(lenb+1);
+
+       strncpy(bufa, a, lena);
+       strncpy(bufb, b, lenb);
+       bufa[lena] = 0;
+       bufb[lenb] = 0;
+
+       rv = zpm_vercmp(bufa, bufb);
+       sqlite3_free(bufa);
+       sqlite3_free(bufb);
+       return rv;
 }
 
 int zpm_addvercmp(struct zpm *pkg) {
@@ -337,6 +352,10 @@ int zpm_extract(struct zpm *pkg, char *hash, char *path, mode_t mode) {
        }
        db = pkg->db;
 
+       if (!path) {
+               path = "-";
+       }
+
        rc = sqlite3_prepare(db, "select size, content from files where hash = ?", -1, &ifile,0);
        if (rc != SQLITE_OK) {
                SQLERROR(sqlite3_errmsg(db));
@@ -398,6 +417,7 @@ int zpm_extract(struct zpm *pkg, char *hash, char *path, mode_t mode) {
                                        tmpfile, strerror(errno));
                        sqlite3_finalize(ifile);
                        sqlite3_close(db);
+                       free(tmpfile);
                        return 0;
                }
        } else {
@@ -432,6 +452,7 @@ int zpm_extract(struct zpm *pkg, char *hash, char *path, mode_t mode) {
                }
        }
 
+       free(tmpfile);
        return rc;
 }
 
@@ -496,9 +517,9 @@ static int set_elf_info(struct zpm *zpm, char *hash, char *content,
                        if (zpm->error) {
                                return 0;
                        }
-               } else {
-                       fprintf(stderr, "can't find soname\n");
                }
+               /* some dyn don't have an soname, so we don't
+                * need to warn */
        }
 
        /* if exe, set neededs */
@@ -560,11 +581,9 @@ int zpm_import(struct zpm *zpm, char *path, uint32_t flags, char *hash) {
        int fd;
        void *content = 0;
        struct stat sbuf;
-       unsigned char tmp[32];
-       struct sha256_state md;
        sqlite3_stmt *ifile = 0;
        int haverow = 0,havedata = 0;
-       int j,rc,type;
+       int rc,type;
        char hashbuf[65];
 
        /* xz compress it */
@@ -621,13 +640,7 @@ int zpm_import(struct zpm *zpm, char *path, uint32_t flags, char *hash) {
                return 0;
        }
 
-       /* get hash */
-       sha256_init(&md);
-       sha256_process(&md, content, sbuf.st_size);
-       sha256_done(&md, tmp);
-       for (j=0;j<32;j++) {
-               sprintf(hash+j*2, "%02x", (unsigned)tmp[j]);
-       }
+       zpm_hash_mem(content, sbuf.st_size, hash);
        hash[64] = 0;
 
        /* TODO check null */