]> pd.if.org Git - zpackage/commitdiff
separate zpm_hash function
authorNathan Wagner <nw@hydaspes.if.org>
Thu, 5 Jul 2018 05:39:42 +0000 (05:39 +0000)
committerNathan Wagner <nw@hydaspes.if.org>
Thu, 5 Jul 2018 05:39:42 +0000 (05:39 +0000)
Makefile
lib/zpm.c
lib/zpm_hash.c [new file with mode: 0644]

index 2be04baf45ff9158eb1bd6910b1943d899163bea..67854e0186401cba21b7e35da3f8dab05ef21e30 100644 (file)
--- 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)
index 30ec7a669cae61ae2f8e50c2cb43f2c4f7b427b4..68d6fb9aabd44d134fc83ffa8145118e0b93a23b 100644 (file)
--- 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 (file)
index 0000000..a14f7d6
--- /dev/null
@@ -0,0 +1,61 @@
+#define _POSIX_C_SOURCE 200809L
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+
+#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;
+}