return 1;
}
+/* wrapper for sqlite3_exec */
+int zpm_exec(struct zpm *z, const char *sql, int(*callback)(void *, int, char **, char**), void *arg, char **errmsg) {
+ return sqlite3_exec(z->db, sql, callback, arg, errmsg);
+}
+
int zpm_rollback(struct zpm *z) {
char *errstr = 0;
sqlite3_exec(z->db, "rollback;", NULL, NULL, &errstr);
return 1;
}
+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 */
+ 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);
+}
+
+int zpm_addvercmp(struct zpm *pkg) {
+ return sqlite3_create_collation(
+ pkg->db, "vercmp", SQLITE_UTF8, NULL,
+ zpm_sqlite_vercmp
+ );
+}
+
/* set package struct variables, database, environment, then command line */
int zpm_readopts(struct zpm *pkg, int ac, char **av) {
char *ev;
/* now, parse the options, return optind so the caller can adjust if needed */
- return 1;
+ return av ? ac : 1;
}
int zpm_extract(struct zpm *pkg, char *hash, char *path, int mode) {
/* didn't find a row */
sqlite3_finalize(ifile);
sqlite3_close(db);
- fprintf(stderr, "no such hash\n");
+ fprintf(stderr, "no such hash: %s\n", hash);
return 0;
}
/* either way we're done with this now */
xzdata = (void *)sqlite3_column_blob(ifile, 1);
blobsize = sqlite3_column_bytes(ifile, 1);
- out = fopen(path, "w");
+ if (strcmp(path, "-")) {
+ out = fopen(path, "w");
+ } else {
+ out = stdout;
+ }
if (!out) {
fprintf(stderr, "can't open output file %s\n", path);
sqlite3_finalize(ifile);
sqlite3_close(db);
- return 5;
+ return 0;
}
//fwrite(xzdata, blobsize, 1, stdout);
//fprintf(stderr, "uncompressing %d bytes at %p, expect %lld\n", blobsize, xzdata, (long long int)size);
uncompresslzma(xzdata, blobsize, out);
fclose(out);
+ chmod(path, mode);
sqlite3_finalize(ifile);
- return 0;
-
+ return 1;
}
/* flags 0, close mmap, flags 1, return mmap fd */
int fd;
void *content;
struct stat sbuf;
- hash_state md;
+ struct sha256_state md;
int j;
unsigned char tmp[32];
}
hash[64] = 0;
munmap(content, sbuf.st_size);
- return 1;
+ return flags ? fd : 1;
}
static sqlite3_stmt *run_for_hash(sqlite3 *db, char *sql, char *hash) {
void *content;
struct stat sbuf;
unsigned char tmp[32];
- hash_state md;
+ struct sha256_state md;
sqlite3_stmt *ifile;
int haverow = 0,havedata = 0;
int j,rc,type;
hash = hashbuf;
}
+ if (flags) {
+ fprintf(stderr, "zpm_import unused flags = %d\n", flags);
+ }
/* mmap the file */
fd = open(path, O_RDONLY);
if (fd == -1) {