pkg->pkgname = 0;
pkg->installed = 0;
- rc = sqlite3_open(path, &db);
+ rc = sqlite3_open_v2(path, &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
if (rc) {
SQLERROR(sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
}
-/* flags 0, close mmap, flags 1, return mmap fd */
-int zpm_hash(char *path, char *hash, uint32_t flags) {
- int fd;
- void *content;
- struct stat sbuf;
- struct sha256_state md;
- int j;
- unsigned char tmp[32];
-
- /* mmap the file */
- fd = open(path, O_RDONLY);
- if (fd == -1) {
- fprintf(stderr, "%s can't open %s: %s\n", __FUNCTION__, path,strerror(errno));
- return 0;
- }
- if (fstat(fd, &sbuf) == -1) {
- fprintf(stderr, "%s can't fstat %s: %s\n", __FUNCTION__, path,strerror(errno));
- return 0;
- }
- /* not a regular file? */
- if (!S_ISREG(sbuf.st_mode)) {
- /* TODO this is ok, just stored differently */
- fprintf(stderr, "%s non-regular files unsupported %s\n", __FUNCTION__, path);
- return 0;
- }
-
- content = mmap(0, sbuf.st_size, PROT_READ,MAP_PRIVATE, fd, 0);
- close(fd);
- if (!content) {
- fprintf(stderr, "%s can't mmap %s: %s\n", __FUNCTION__, path,strerror(errno));
- 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]);
- }
- hash[64] = 0;
- munmap(content, sbuf.st_size);
- return flags ? fd : 1;
-}
-
static sqlite3_stmt *run_for_hash(sqlite3 *db, char *sql, char *hash) {
int rc;
sqlite3_stmt *ifile;
need = strtab + dyn->d_un.d_val;
if (strlen(need) == 0) continue;
sqlite3_bind_text(ifile,2,need,strlen(need),SQLITE_STATIC);
+#if 0
fprintf(stderr, "%s needs %s\n", hash, need);
+#endif
rc = sqlite3_step(ifile);
if (rc != SQLITE_DONE) {
SQLERROR(sqlite3_errmsg(db));