]> pd.if.org Git - zpackage/commitdiff
add structs for packages and other objects
authorNathan Wagner <nw@hydaspes.if.org>
Fri, 14 Sep 2018 04:43:31 +0000 (04:43 +0000)
committerNathan Wagner <nw@hydaspes.if.org>
Fri, 14 Sep 2018 04:43:31 +0000 (04:43 +0000)
lib/zpm.c
zpm.h

index 5bcf9da4e56a10544a439205c1affd34e87cb1b9..3abbc37d5d07f87ebbe5836dcfd1c2c700d6e634 100644 (file)
--- a/lib/zpm.c
+++ b/lib/zpm.c
@@ -293,10 +293,7 @@ int zpm_open(struct zpm *pkg, char *path) {
 
        pkg->db = 0;
        pkg->path = 0;
-       pkg->version = 0;
-       pkg->release = 0;
-       pkg->pkgname = 0;
-       pkg->installed = 0;
+       pkg->current_package = 0;
 
        rc = sqlite3_open_v2(path, &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
        if (rc) {
@@ -371,24 +368,29 @@ int zpm_addvercmp(struct zpm *pkg) {
 }
 
 /* set package struct variables, database, environment, then command line */
-int zpm_readopts(struct zpm *pkg, int ac, char **av) {
+int zpm_readopts(struct zpm *zpm, int ac, char **av) {
        char *ev;
+       struct zpm_package *pkg;
 
-       if (!pkg) {
+       if (!zpm) {
                return -1;
        }
 
-       ev = getenv("ZPMPACKAGE");
-       if (ev) {
-               pkg->pkgname = dupstr(ev);
-       }
-       ev = getenv("ZPMPKGREL");
-       if (ev) {
-               pkg->release = strtol(ev, 0, 0);
-       }
-       ev = getenv("ZPMPKGVER");
-       if (ev) {
-               pkg->version = dupstr(ev);
+               pkg = zpm->current_package;
+
+       if (pkg) {
+               ev = getenv("ZPMPACKAGE");
+               if (ev) {
+                       pkg->name = dupstr(ev);
+               }
+               ev = getenv("ZPMPKGREL");
+               if (ev) {
+                       pkg->release = strtol(ev, 0, 0);
+               }
+               ev = getenv("ZPMPKGVER");
+               if (ev) {
+                       pkg->version = dupstr(ev);
+               }
        }
 
        /* now, parse the options, return optind so the caller can adjust if needed */
@@ -632,7 +634,7 @@ static int set_elf_info(sqlite3 *db, char *hash, char *content, size_t length) {
 }
 
 #if 1
-int zpm_import(struct zpm *pkg, char *path, uint32_t flags, char *hash) {
+int zpm_import(struct zpm *zpm, char *path, uint32_t flags, char *hash) {
        int fd;
        void *content;
        struct stat sbuf;
@@ -647,7 +649,7 @@ int zpm_import(struct zpm *pkg, char *path, uint32_t flags, char *hash) {
        size_t outlen = 0;
        void *outbuf;
 
-       if (!pkg || !pkg->db || !path) {
+       if (!zpm || !zpm->db || !path) {
                return 0;
        }
 
@@ -662,12 +664,12 @@ int zpm_import(struct zpm *pkg, char *path, uint32_t flags, char *hash) {
        /* mmap the file */
        fd = open(path, O_RDONLY);
        if (fd == -1) {
-               pkg->error = errno;
+               zpm->error = errno;
                fprintf(stderr, "%s can't open %s: %s\n", __FUNCTION__, path,strerror(errno));
                return 0;
        }
        if (fstat(fd, &sbuf) == -1) {
-               pkg->error = errno;
+               zpm->error = errno;
                fprintf(stderr, "%s can't fstat %s: %s\n", __FUNCTION__, path,strerror(errno));
                return 0;
        }
@@ -685,14 +687,14 @@ int zpm_import(struct zpm *pkg, char *path, uint32_t flags, char *hash) {
                }
                /* TODO this is ok, just stored differently */
                fprintf(stderr, "%s can't import %s file: %s\n", __FUNCTION__, ftype, path);
-               pkg->error = EINVAL;
+               zpm->error = EINVAL;
                return 0;
        }
 
        content = mmap(0, sbuf.st_size, PROT_READ,MAP_PRIVATE, fd, 0);
        close(fd);
        if (!content) {
-               pkg->error = errno;
+               zpm->error = errno;
                fprintf(stderr, "%s can't mmap %s: %s\n", __FUNCTION__, path,strerror(errno));
                return 0;
        }
@@ -708,7 +710,7 @@ int zpm_import(struct zpm *pkg, char *path, uint32_t flags, char *hash) {
        //fprintf(stderr, "file %s: %s\n", path, hash);
 
        /* TODO check null */
-       sqlite3 *db = pkg->db;
+       sqlite3 *db = zpm->db;
 
        /* prepare and bind */
 
@@ -729,7 +731,7 @@ int zpm_import(struct zpm *pkg, char *path, uint32_t flags, char *hash) {
                if (rc != SQLITE_ROW) {
                        /* didn't find a row */
                        SQLERROR(sqlite3_errmsg(db));
-                       zpm_rollback(pkg);
+                       zpm_rollback(zpm);
                munmap(content, sbuf.st_size);
                        return 0;
                }
@@ -769,7 +771,7 @@ int zpm_import(struct zpm *pkg, char *path, uint32_t flags, char *hash) {
 
                /* start a transaction */
                // do that outside of here 
-               //zpm_begin(pkg);
+               //zpm_begin(zpm);
 
                /* insert */
                if (haverow) {
@@ -782,7 +784,7 @@ int zpm_import(struct zpm *pkg, char *path, uint32_t flags, char *hash) {
                if (rc != SQLITE_OK) {
                        SQLERROR(sqlite3_errmsg(db));
                        fprintf(stderr, "cant prepare data\n");
-                       zpm_rollback(pkg);
+                       zpm_rollback(zpm);
                munmap(content, sbuf.st_size);
                        return 0;
                }
@@ -791,7 +793,7 @@ int zpm_import(struct zpm *pkg, char *path, uint32_t flags, char *hash) {
                if (rc != SQLITE_OK) {
                        SQLERROR(sqlite3_errmsg(db));
                        fprintf(stderr, "cant bind size\n");
-                       zpm_rollback(pkg);
+                       zpm_rollback(zpm);
                munmap(content, sbuf.st_size);
                        return 0;
                }
@@ -799,7 +801,7 @@ int zpm_import(struct zpm *pkg, char *path, uint32_t flags, char *hash) {
                if (rc != SQLITE_OK) {
                        SQLERROR(sqlite3_errmsg(db));
                        fprintf(stderr, "cant bind content\n");
-                       zpm_rollback(pkg);
+                       zpm_rollback(zpm);
                munmap(content, sbuf.st_size);
                        return 0;
                }
@@ -807,7 +809,7 @@ int zpm_import(struct zpm *pkg, char *path, uint32_t flags, char *hash) {
                if (rc != SQLITE_OK) {
                        SQLERROR(sqlite3_errmsg(db));
                        fprintf(stderr, "cant bind hash\n");
-                       zpm_rollback(pkg);
+                       zpm_rollback(zpm);
                munmap(content, sbuf.st_size);
                        return 0;
                }
@@ -815,20 +817,20 @@ int zpm_import(struct zpm *pkg, char *path, uint32_t flags, char *hash) {
                if (rc != SQLITE_DONE) {
                        SQLERROR(sqlite3_errmsg(db));
                        sqlite3_finalize(ifile);
-                       zpm_rollback(pkg);
+                       zpm_rollback(zpm);
                munmap(content, sbuf.st_size);
                        return 0;
                }
                sqlite3_finalize(ifile);
 
                /* commit */
-               //zpm_commit(pkg);
+               //zpm_commit(zpm);
 
                /* don't need the original file now */
 
        }
 
-       if (!set_elf_info(pkg->db, hash, content, sbuf.st_size)) {
+       if (!set_elf_info(zpm->db, hash, content, sbuf.st_size)) {
                fprintf(stderr, "setting elf info failed\n");
                munmap(content, sbuf.st_size);
                return 0;
@@ -837,7 +839,7 @@ int zpm_import(struct zpm *pkg, char *path, uint32_t flags, char *hash) {
        munmap(content, sbuf.st_size);
 
        /* if package and not nopackage flag, add to package */
-       if (pkg->pkgname && (!ZPM_NOPACKAGE)) {
+       if (zpm->current_package->name && (!ZPM_NOPACKAGE)) {
                /* TODO */
        }
 
diff --git a/zpm.h b/zpm.h
index 4a213c853e5171d8f3efd915ecd43b93b27b8283..43d394cdc11affde6911744a54a410bf6106415c 100644 (file)
--- a/zpm.h
+++ b/zpm.h
@@ -2,29 +2,77 @@
 #define ZPM_H_ 1
 
 #include <stdint.h>
+#include <stdio.h>
 #include <time.h>
+#include <limits.h>
+
 #include <sqlite3.h>
 
+#define ZPM_HASH_STRLEN 64
+
+#ifdef PATH_MAX
+#define ZPM_PATH_MAX PATH_MAX
+#else
+#define ZPM_PATH_MAX 256
+#endif
+
+#define ZPM_PACKAGE_NAME_MAX 191
+#define ZPM_PACKAGE_VERSION_MAX 58
+#define ZPM_PACKAGE_RELEASE_MAX 4
+#define ZPM_PACKAGE_ID_MAX 255
+
+#define ZPM_TAG_MAX 15
+
+struct zpm_package;
+
 struct zpm {
        sqlite3 *db;
-       char *path; /* path to package file */
+       char *path; /* path to db file */
+       int error;
+       struct zpm_package *current_package;
+};
+
+struct zpm_dependency {
+       char minpkg[ZPM_PACKAGE_ID_MAX+1];
+       char maxpkg[ZPM_PACKAGE_ID_MAX+1];
+       struct zpm_dependency *next;
+};
+
+struct zpm_tag {
+       char tag[ZPM_TAG_MAX+1];
+       struct zpm_tag *next;
+};
+
+struct zpm_package {
+       struct zpm *zpm;
+       char *name;
        char *version;
        int release;
-       char *pkgname;
-       int error; /* internal error number */
-       time_t installed; /* install time, 0 for not installed */
+       char *id;
+       char *tags;
+       char *description;
+       char *architecture;
+       char *url;
+       char *status;
+       char *licenses;
+       char *package;
+       time_t build_time;
+       time_t install_time;
+       char checksum[ZPM_HASH_STRLEN+1];
 };
 
 struct zpm_file {
-       char *path;
+       char path[ZPM_PATH_MAX];
        int mode;
-       char *tags;
-       char *owner;
-       char *group;
+       char tags[64];
+       char owner[32];
+       char group[32];
        time_t mtime;
+       char hash[ZPM_HASH_STRLEN+1];
        struct zpm_file *next; /* so you can make a linked list */
 };
 
+
 /* NULL?  Create? */
 int zpm_open(struct zpm *pkg, char *path);
 int zpm_pkgname(char *base, char *version, int release); /* construct a package file name */
@@ -92,7 +140,7 @@ int zpm_checkinstall(struct zpm *local);
 
 int zpm_merge(struct zpm *z, struct zpm *src, uint32_t flags);
 
-#if 0
+#if 1
 void uncompresslzma(void *buf, size_t bufsize, FILE *out);
 void *compresslzma(void *buf, size_t bufsize, size_t *len);
 #endif