X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=lib%2Fzpm.c;h=b8b77b0861b2e3f9a28d16b71fbe56f54ab0425a;hb=b7a4dd34227b6cf84908ffde9f2c4395f29fe1b4;hp=ebe89096bfa91f0ee88728b78088761f141ece3f;hpb=3d74ddc7c1810f6eb26b1ee60fe4a1fd2a889df3;p=zpackage diff --git a/lib/zpm.c b/lib/zpm.c index ebe8909..b8b77b0 100644 --- a/lib/zpm.c +++ b/lib/zpm.c @@ -362,6 +362,7 @@ int zpm_init(struct zpm *pkg, char *path) { pkg->db = 0; return 0; } + zpm_addvercmp(pkg); return 1; } @@ -389,6 +390,7 @@ int zpm_open(struct zpm *zpm, char *path) { zpm->error = 1; return 0; } + zpm_addvercmp(zpm); return 1; } @@ -500,7 +502,7 @@ int zpm_extract(struct zpm *pkg, char *hash, char *path, int mode) { return 1; } -static sqlite3_stmt *run_for_hash(sqlite3 *db, char *sql, char *hash) { +static int run_for_hash(sqlite3 *db, char *sql, char *hash) { int rc; sqlite3_stmt *ifile; @@ -513,10 +515,17 @@ static sqlite3_stmt *run_for_hash(sqlite3 *db, char *sql, char *hash) { /* hash, filename */ sqlite3_bind_text(ifile, 1, hash, 64, SQLITE_STATIC); + do { + rc = sqlite3_step(ifile); + } while (rc == SQLITE_ROW); + + sqlite3_finalize(ifile); - return ifile; + return rc == SQLITE_DONE; } +#define SQLERP(db, msg) fprintf(stderr, "%s: %s\n", msg, sqlite3_errmsg(db)) + static int set_elf_info(sqlite3 *db, char *hash, char *content, size_t length) { if (length >= sizeof (Elf64_Ehdr) && libelf_iself(content)) { char *strtab; @@ -527,54 +536,21 @@ static int set_elf_info(sqlite3 *db, char *hash, char *content, size_t length) { sqlite3_stmt *ifile; int rc; - /* go ahead and set up elf information now */ /* clear existing for this hash */ - ifile = run_for_hash(db, "delete from elfinfo where file = ?", hash); - do { - rc = sqlite3_step(ifile); -#if 0 - if (rc == SQLITE_ROW) { - int nc; - fprintf(stderr, "delete row has %d columns: ", sqlite3_column_count(ifile)); - nc = sqlite3_column_count(ifile); - for (i = 0; i < nc; i++) { - char *r; - r = sqlite3_column_text(ifile, i); - fprintf(stderr, ", %s", r); - } - fprintf(stderr, "\n"); - } -#endif - } while (rc == SQLITE_ROW); - if (rc != SQLITE_DONE) { - SQLERROR(sqlite3_errmsg(db)); - sqlite3_finalize(ifile); - fprintf(stderr, "error clearing elf info: %d\n", rc); + if (!run_for_hash(db, "delete from elfinfo where file = ?", hash)) { + SQLERP(db, "error clearing elf info"); return 0; } - sqlite3_finalize(ifile); - ifile = run_for_hash(db, "delete from elflibraries where file = ?", hash); - do { - rc = sqlite3_step(ifile); - } while (rc == SQLITE_ROW); - if (rc != SQLITE_DONE) { - SQLERROR(sqlite3_errmsg(db)); - sqlite3_finalize(ifile); - fprintf(stderr, "error clearing elf library: %d\n", rc); + + if (!run_for_hash(db, "delete from elflibraries where file = ?", hash)) { + SQLERP(db, "error clearing elf library"); return 0; } - sqlite3_finalize(ifile); - ifile = run_for_hash(db, "delete from elfneeded where file = ?", hash); - do { - rc = sqlite3_step(ifile); - } while (rc == SQLITE_ROW); - if (rc != SQLITE_DONE) { - SQLERROR(sqlite3_errmsg(db)); - sqlite3_finalize(ifile); - fprintf(stderr, "error clearing elf needed\n"); + + if (!run_for_hash(db, "delete from elfneeded where file = ?", hash)) { + SQLERP(db, "error clearing elf needed"); return 0; } - sqlite3_finalize(ifile); hdr = libelf_header(content); /* if lib, set soname */ @@ -638,9 +614,8 @@ static int set_elf_info(sqlite3 *db, char *hash, char *content, size_t length) { #endif rc = sqlite3_step(ifile); if (rc != SQLITE_DONE) { - SQLERROR(sqlite3_errmsg(db)); + SQLERP(db, "error setting needed library"); sqlite3_finalize(ifile); - fprintf(stderr, "error setting needed library\n"); return 0; } sqlite3_reset(ifile);