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) {
}
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));
tmpfile, strerror(errno));
sqlite3_finalize(ifile);
sqlite3_close(db);
+ free(tmpfile);
return 0;
}
} else {
}
}
+ free(tmpfile);
return rc;
}
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 */
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 */
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 */