From 8cd48d5a0ad2bcb6e70861a8f94abb987680cc45 Mon Sep 17 00:00:00 2001 From: Nathan Wagner Date: Sun, 30 Sep 2018 02:47:58 +0000 Subject: [PATCH] cleanup and fix bugs in addfile --- lib/zpm.c | 113 ++++++++++---------------------------------------- zpm-addfile.c | 2 +- 2 files changed, 22 insertions(+), 93 deletions(-) diff --git a/lib/zpm.c b/lib/zpm.c index e775b12..6827caf 100644 --- a/lib/zpm.c +++ b/lib/zpm.c @@ -639,14 +639,13 @@ static int set_elf_info(sqlite3 *db, char *hash, char *content, size_t length) { return 1; } -#if 1 int zpm_import(struct zpm *zpm, char *path, uint32_t flags, char *hash) { int fd; - void *content; + void *content = 0; struct stat sbuf; unsigned char tmp[32]; struct sha256_state md; - sqlite3_stmt *ifile; + sqlite3_stmt *ifile = 0; int haverow = 0,havedata = 0; int j,rc,type; char hashbuf[65]; @@ -713,7 +712,6 @@ int zpm_import(struct zpm *zpm, char *path, uint32_t flags, char *hash) { sprintf(hash+j*2, "%02x", (unsigned)tmp[j]); } hash[64] = 0; - //fprintf(stderr, "file %s: %s\n", path, hash); /* TODO check null */ sqlite3 *db = zpm->db; @@ -737,12 +735,10 @@ int zpm_import(struct zpm *zpm, char *path, uint32_t flags, char *hash) { if (rc != SQLITE_ROW) { /* didn't find a row */ SQLERROR(sqlite3_errmsg(db)); - zpm_rollback(zpm); munmap(content, sbuf.st_size); return 0; } haverow = 1; -// fprintf(stderr, "have row for hash\n"); type = sqlite3_column_type(ifile, 0); if (type == SQLITE_NULL) { /* TODO assert, this shouldn't be possible? */ @@ -770,70 +766,62 @@ int zpm_import(struct zpm *zpm, char *path, uint32_t flags, char *hash) { outbuf = compresslzma(content, sbuf.st_size, &outlen); if (!outbuf) { fprintf(stderr, "compresslzma failed\n"); - munmap(content, sbuf.st_size); + munmap(content, sbuf.st_size); return 0; } - //fprintf(stderr, "compressed to %zu\n", outlen); - - /* start a transaction */ - // do that outside of here - //zpm_begin(zpm); /* insert */ if (haverow) { - //fprintf(stderr, "adding file data\n"); - rc = sqlite3_prepare(db, "update files set size = ?, content = ? where hash = ?", -1, &ifile,0); + rc = sqlite3_prepare_v2(db, "update files set size = ?, content = ? where hash = ?", -1, &ifile,0); } else { - //fprintf(stderr, "creating new data row\n"); - rc = sqlite3_prepare(db, "insert into files (size, content, hash) values (?,?,?)", -1, &ifile,0); + rc = sqlite3_prepare_v2(db, "insert into files (size, content, hash) values (?,?,?)", -1, &ifile,0); } + if (rc != SQLITE_OK) { SQLERROR(sqlite3_errmsg(db)); fprintf(stderr, "cant prepare data\n"); - zpm_rollback(zpm); - munmap(content, sbuf.st_size); + munmap(content, sbuf.st_size); return 0; } - sqlite3_bind_int64(ifile, 1, (sqlite3_int64)sbuf.st_size); + rc = sqlite3_bind_int64(ifile, 1, (sqlite3_int64)sbuf.st_size); if (rc != SQLITE_OK) { SQLERROR(sqlite3_errmsg(db)); + sqlite3_finalize(ifile); fprintf(stderr, "cant bind size\n"); - zpm_rollback(zpm); - munmap(content, sbuf.st_size); + munmap(content, sbuf.st_size); return 0; } - sqlite3_bind_blob64(ifile, 2, outbuf, (sqlite3_int64)outlen, SQLITE_STATIC); + + rc = sqlite3_bind_blob64(ifile, 2, outbuf, + (sqlite3_int64)outlen, SQLITE_STATIC); if (rc != SQLITE_OK) { SQLERROR(sqlite3_errmsg(db)); + sqlite3_finalize(ifile); fprintf(stderr, "cant bind content\n"); - zpm_rollback(zpm); - munmap(content, sbuf.st_size); + munmap(content, sbuf.st_size); return 0; } - sqlite3_bind_text(ifile, 3, hash, 64, SQLITE_STATIC); + + rc = sqlite3_bind_text(ifile, 3, hash, 64, SQLITE_STATIC); if (rc != SQLITE_OK) { SQLERROR(sqlite3_errmsg(db)); fprintf(stderr, "cant bind hash\n"); - zpm_rollback(zpm); - munmap(content, sbuf.st_size); + sqlite3_finalize(ifile); + munmap(content, sbuf.st_size); return 0; } + rc = sqlite3_step(ifile); if (rc != SQLITE_DONE) { SQLERROR(sqlite3_errmsg(db)); sqlite3_finalize(ifile); - zpm_rollback(zpm); - munmap(content, sbuf.st_size); + munmap(content, sbuf.st_size); return 0; } sqlite3_finalize(ifile); - /* commit */ - //zpm_commit(zpm); - /* don't need the original file now */ - } if (!set_elf_info(zpm->db, hash, content, sbuf.st_size)) { @@ -844,65 +832,6 @@ int zpm_import(struct zpm *zpm, char *path, uint32_t flags, char *hash) { munmap(content, sbuf.st_size); - /* if package and not nopackage flag, add to package */ - if (zpm->current_package->name && (!ZPM_NOPACKAGE)) { - /* TODO */ - } - /* return */ return 1; } -#endif - -#if 0 -int main(int ac, char **av){ - sqlite3 *db = 0; - int rc; - - int blobsize; - int64_t size; - void *xzdata; - int type; - FILE *out; - sqlite3_stmt *ifile; - - char *hash; - char *filename; - - if (ac < 3) { - fprintf(stderr, "usage: db hash file\n"); - return 1; - } - - rc = sqlite3_open(av[1], &db); - if (rc) { - SQLERROR(sqlite3_errmsg(db)); - sqlite3_close(db); - return 1; - } - -} -#endif - -#if 0 -Packages are sqlite databases - -get application id and userver - -Primitive operations: - -add path to repo -associate path with package -associate blob with path? -add blob to repo -* extract blob to a path -compare blob to filesystem path -create package with info - -Extra primitives: - -record elf information about blob -compress blob -uncompress blob -sign a package? What are we verifying? -#endif diff --git a/zpm-addfile.c b/zpm-addfile.c index 99f914c..4484e79 100644 --- a/zpm-addfile.c +++ b/zpm-addfile.c @@ -15,7 +15,7 @@ int main(int ac, char **av){ if (zpm_open(&pkg, av[1])) { zpm_begin(&pkg); for (i=2; i