From 0ac06dd73a92022079bbd0d4eb770d2c6202c23c Mon Sep 17 00:00:00 2001 From: Nathan Wagner Date: Thu, 5 Jul 2018 05:39:42 +0000 Subject: [PATCH] separate zpm_hash function --- Makefile | 13 +++++------ lib/zpm.c | 45 ------------------------------------- lib/zpm_hash.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 52 deletions(-) create mode 100644 lib/zpm_hash.c diff --git a/Makefile b/Makefile index 2be04ba..67854e0 100644 --- a/Makefile +++ b/Makefile @@ -18,7 +18,7 @@ curdir=$(shell pwd) ZPKGBIN=zpm-addfile zpm-extract zpm-init zpm-vercmp zpm-stat zpm-hash \ zpm-findpkg zpm-shell zpm-soneed -SCRIPTS=zpm zpm-install +SCRIPTS=zpm zpm-install zpm-merge zpm-list COMPILED=$(ZPKGBIN) PROGRAMS=$(SCRIPTS) $(COMPILED) @@ -33,15 +33,14 @@ ZPM:= ./zpm -P scripts:bin:. zpm-0.1-1.zpm: programs rm -f $@ - ./zpm -P scripts:bin:. newpackage -f $@ -v 0.1 zpm - ./zpm -P scripts:bin:. addtopackage -f $@ -P /usr/libexec/zpm -v 0.1 zpm $(PROGRAMS) + $(ZPM) newpackage -f $@ -v 0.1 zpm + $(ZPM) addtopackage -u root -g root -f $@ -P /bin -v 0.1 zpm $(PROGRAMS) tarball: zpm-0.1-1.tar.xz zpm-0.1-1.tar.xz: programs rm -f $@ - tar -cJf $@ --transform='s|^|usr/libexec/zpm/|' \ - --transform='s|^usr/libexec/zpm/zpm$$|usr/bin/zpm|' \ + tar -cJf $@ --transform='s|^|bin/|' \ $(PROGRAMS) lzma.c: mklzma @@ -57,7 +56,7 @@ test: $(ZPKGBIN) PATH=$(curdir)/t:$(curdir):$(PATH) prove -e '' t/*.t programs: elftype zpm-soname zpm-soneed zpm-addfile zpm-extract zpm-init \ - zpm-vercmp zpm-findpkg + zpm-vercmp zpm-findpkg zpm-merge uncompress: uncompress.o $(CC) $(CFLAGS) -o $@ $+ -llzma @@ -109,7 +108,7 @@ zpm-shell: sqlite/sqlite3.o sqlite/shell.o $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $+ libzpm.a: lib/sha256.o lib/db.o lib/compress.o lib/uncompress.o lib/zpm.o \ - sqlite/sqlite3.o \ + sqlite/sqlite3.o lib/zpm_hash.o \ lib/vercmp.o \ lib/sha256.o \ $(LZMAOBJ) diff --git a/lib/zpm.c b/lib/zpm.c index 30ec7a6..68d6fb9 100644 --- a/lib/zpm.c +++ b/lib/zpm.c @@ -478,51 +478,6 @@ int zpm_extract(struct zpm *pkg, char *hash, char *path, int mode) { return 1; } -/* flags 0, close mmap, flags 1, return mmap fd */ -int zpm_hash(char *path, char *hash, uint32_t flags) { - int fd; - void *content; - struct stat sbuf; - struct sha256_state md; - int j; - unsigned char tmp[32]; - - /* mmap the file */ - fd = open(path, O_RDONLY); - if (fd == -1) { - fprintf(stderr, "%s can't open %s: %s\n", __FUNCTION__, path,strerror(errno)); - return 0; - } - if (fstat(fd, &sbuf) == -1) { - fprintf(stderr, "%s can't fstat %s: %s\n", __FUNCTION__, path,strerror(errno)); - return 0; - } - /* not a regular file? */ - if (!S_ISREG(sbuf.st_mode)) { - /* TODO this is ok, just stored differently */ - fprintf(stderr, "%s non-regular files unsupported %s\n", __FUNCTION__, path); - return 0; - } - - content = mmap(0, sbuf.st_size, PROT_READ,MAP_PRIVATE, fd, 0); - close(fd); - if (!content) { - fprintf(stderr, "%s can't mmap %s: %s\n", __FUNCTION__, path,strerror(errno)); - return 0; - } - - /* get hash */ - sha256_init(&md); - sha256_process(&md, content, sbuf.st_size); - sha256_done(&md, tmp); - for (j=0;j<32;j++) { - sprintf(hash+j*2, "%02x", (unsigned)tmp[j]); - } - hash[64] = 0; - munmap(content, sbuf.st_size); - return flags ? fd : 1; -} - static sqlite3_stmt *run_for_hash(sqlite3 *db, char *sql, char *hash) { int rc; sqlite3_stmt *ifile; diff --git a/lib/zpm_hash.c b/lib/zpm_hash.c new file mode 100644 index 0000000..a14f7d6 --- /dev/null +++ b/lib/zpm_hash.c @@ -0,0 +1,61 @@ +#define _POSIX_C_SOURCE 200809L + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "zpm.h" +#include "elf.h" + +#include "sha256.h" + +/* flags 0, close mmap, flags 1, return mmap fd */ +int zpm_hash(char *path, char *hash, uint32_t flags) { + int fd; + void *content; + struct stat sbuf; + struct sha256_state md; + int j; + unsigned char tmp[32]; + + /* mmap the file */ + fd = open(path, O_RDONLY); + if (fd == -1) { + fprintf(stderr, "%s can't open %s: %s\n", __FUNCTION__, path,strerror(errno)); + return 0; + } + if (fstat(fd, &sbuf) == -1) { + fprintf(stderr, "%s can't fstat %s: %s\n", __FUNCTION__, path,strerror(errno)); + return 0; + } + /* not a regular file? */ + if (!S_ISREG(sbuf.st_mode)) { + /* TODO this is ok, just stored differently */ + fprintf(stderr, "%s non-regular files unsupported %s\n", __FUNCTION__, path); + return 0; + } + + content = mmap(0, sbuf.st_size, PROT_READ,MAP_PRIVATE, fd, 0); + close(fd); + if (!content) { + fprintf(stderr, "%s can't mmap %s: %s\n", __FUNCTION__, path,strerror(errno)); + return 0; + } + + /* get hash */ + sha256_init(&md); + sha256_process(&md, content, sbuf.st_size); + sha256_done(&md, tmp); + for (j=0;j<32;j++) { + sprintf(hash+j*2, "%02x", (unsigned)tmp[j]); + } + hash[64] = 0; + munmap(content, sbuf.st_size); + return flags ? fd : 1; +} -- 2.40.0