);
}
-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) {
+ 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);