if (!zpm->dberrmsg) {
zpm->error = 1;
}
+ } else {
+ zpm->dberrmsg = 0;
}
}
}
sqlite3_close(db);
}
fprintf(stderr, "error (%d): %s: %s\n", rc,
- pkg->dberrmsg, path);
+ pkg->dberrmsg ? pkg->dberrmsg : "null", path);
return 0;
}
);
}
-int zpm_extract(struct zpm *pkg, char *hash, char *path, int mode) {
+int zpm_extract(struct zpm *pkg, char *hash, char *path, mode_t mode) {
int rc;
int blobsize;
//int64_t size;
void *xzdata;
int type;
- FILE *out;
+ int out;
sqlite3_stmt *ifile;
/* TODO check null */
blobsize = sqlite3_column_bytes(ifile, 1);
if (strcmp(path, "-")) {
- out = fopen(path, "w");
+ out = open(path, O_CREAT|O_WRONLY|O_TRUNC, 0600);
} else {
- out = stdout;
+ out = 1;
}
- if (!out) {
- fprintf(stderr, "can't open output file %s\n", path);
+ if (out == -1) {
+ fprintf(stderr, "can't open output file %s: %s\n", path,
+ strerror(errno));
sqlite3_finalize(ifile);
sqlite3_close(db);
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);
+ close(out);
chmod(path, mode);
sqlite3_finalize(ifile);
int rc;
/* clear existing for this hash */
- if (!run_for_hash(db, "delete from elfinfo where file = ?", hash)) {
- SQLERP(db, "error clearing elf info");
- return 0;
- }
if (!run_for_hash(db, "delete from elflibraries where file = ?", hash)) {
SQLERP(db, "error clearing elf library");