tAllow disabling repository aware features - pm - barely a pack manager
(HTM) git clone git://z3bra.org/pm
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit b613d5ebdb9d76571ae6be652757ec6e3c6baf4d
(DIR) parent 719fc796cedbdd1b2db385d7a6235370d2d21abc
(HTM) Author: z3bra <contactatz3bradotorg>
Date: Fri, 16 Dec 2016 10:40:34 +0100
Allow disabling repository aware features
Diffstat:
M config.mk | 2 +-
M pm.c | 102 ++++++++++++++++++-------------
2 files changed, 60 insertions(+), 44 deletions(-)
---
(DIR) diff --git a/config.mk b/config.mk
t@@ -4,6 +4,6 @@ LD = ${CC}
PREFIX = /usr/local
MANDIR = ${PREFIX}/man
-CFLAGS = -Wall -Wextra -pedantic
+CFLAGS = -Wall -Wextra -pedantic -DREPOAWARE
LDFLAGS = -static
LIBS = -larchive -lacl -lbz2 -llzma -lz
(DIR) diff --git a/pm.c b/pm.c
t@@ -66,7 +66,9 @@ int re_match(const char *re, const char *str);
struct pack *pack_load_tarball(char *path);
struct pack *pack_load_metadata(const char *datadir, char *name);
void pack_free(struct pack *p);
+#ifdef REPOAWARE
int pack_find(char *, char *);
+#endif
int pack_extract(const char *rootfs, const char *datadir, struct pack *p);
int pack_install(const char *rootfs, const char *datadir, struct pack *p);
int pack_delete(const char *rootfs, const char *datadir, struct pack *p);
t@@ -280,6 +282,47 @@ pack_free(struct pack *p)
}
+#ifdef REPOAWARE
+/*
+ * Find a pack filename using an external tool writing the path to the
+ * pack to stdout.
+ * The tool should be called as:
+ *
+ * tool <name>
+ */
+int
+pack_find(char *name, char *out)
+{
+ int fd[2], status;
+ size_t len = 0;
+
+ pipe(fd);
+ if (!fork()) {
+ close(1);
+ close(fd[0]);
+ dup2(fd[1], 1);
+ execlp(REPO_EXEC, REPO_EXEC, name, NULL);
+ }
+
+ close(fd[1]);
+
+ wait(&status);
+ if (status)
+ exit(1);
+
+ len = read(fd[0], out, PATH_MAX);
+ close(fd[0]);
+
+ if (len < 1)
+ return -1;
+
+ out[len - 1] = 0;
+
+ return 0;
+}
+#endif
+
+
/*
* Extract a tarball to the given directory
*/
t@@ -769,10 +812,16 @@ install(const char *rootfs, const char *datadir, char *name)
char path[PATH_MAX];
struct pack *p = NULL;
- if (re_match(PACK_FORMAT, name) != 0)
+ if (re_match(PACK_FORMAT, name) != 0) {
+#ifdef REPOAWARE
pack_find(name, path);
- else
+#else
+ fprintf(stderr, "%s: invalid filename\n", name);
+ exit(1);
+#endif
+ } else {
snprintf(path, PATH_MAX, "%s", name);
+ }
if ((p = pack_load_tarball(path)) == NULL)
return ERR_PACK_LOAD;
t@@ -789,45 +838,6 @@ install(const char *rootfs, const char *datadir, char *name)
/*
- * Find a pack filename using an external tool writing the path to the
- * pack to stdout.
- * The tool should be called as:
- *
- * tool <name>
- */
-int
-pack_find(char *name, char *out)
-{
- int fd[2], status;
- size_t len = 0;
-
- pipe(fd);
- if (!fork()) {
- close(1);
- close(fd[0]);
- dup2(fd[1], 1);
- execlp(REPO_EXEC, REPO_EXEC, name, NULL);
- }
-
- close(fd[1]);
-
- wait(&status);
- if (status)
- exit(1);
-
- len = read(fd[0], out, PATH_MAX);
- close(fd[0]);
-
- if (len < 1)
- return -1;
-
- out[len - 1] = 0;
-
- return 0;
-}
-
-
-/*
* Update a pack. This should be as easy as delete/install.
* Deletion is required in case the file structure changes
*/
t@@ -838,10 +848,16 @@ update(const char *rootfs, const char *datadir, char *name)
char path[PATH_MAX];
struct pack *p = NULL;
- if (re_match(PACK_FORMAT, name) != 0)
+ if (re_match(PACK_FORMAT, name) != 0) {
+#ifdef REPOAWARE
pack_find(name, path);
- else
+#else
+ fprintf(stderr, "%s: invalid filename\n", name);
+ exit(1);
+#endif
+ } else {
snprintf(path, PATH_MAX, "%s", name);
+ }
if ((p = pack_load_tarball(path)) == NULL)
return ERR_PACK_LOAD;