X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=lib%2Fzpm.c;h=d9041ff33c6daf3b4510022fd6e7b2387ae983d9;hb=291309674a2bd7b1612460bc167544f7afd1be7b;hp=9d62ad7d7debb32172cb4ee50299c01f7161a467;hpb=0643628a3b9c359a78862d09828e83b562feea08;p=zpackage diff --git a/lib/zpm.c b/lib/zpm.c index 9d62ad7..d9041ff 100644 --- a/lib/zpm.c +++ b/lib/zpm.c @@ -372,7 +372,7 @@ int zpm_readopts(struct zpm *pkg, int ac, char **av) { /* 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) { @@ -434,23 +434,27 @@ int zpm_extract(struct zpm *pkg, char *hash, char *path, int mode) { 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 */ @@ -495,7 +499,7 @@ int zpm_hash(char *path, char *hash, uint32_t flags) { } 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) { @@ -709,6 +713,7 @@ int zpm_import(struct zpm *pkg, char *path, uint32_t flags, char *hash) { hash = hashbuf; } + flags = 0; /* suppress warning, probably use to follow symlinks */ /* mmap the file */ fd = open(path, O_RDONLY); if (fd == -1) {