tCheck for installed packs before deletion - pm - barely a pack manager
(HTM) git clone git://z3bra.org/pm
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 73f293913081b16d19635ceb544530a6d7915d48
(DIR) parent f4ccf788a420f7764b4ecfc6288a0622e6777e33
(HTM) Author: z3bra <willyatmailoodotorg>
Date: Tue, 12 Jan 2016 14:39:48 +0100
Check for installed packs before deletion
Diffstat:
M pm.c | 33 +++++++++++++++++++------------
1 file changed, 20 insertions(+), 13 deletions(-)
---
(DIR) diff --git a/pm.c b/pm.c
t@@ -476,11 +476,18 @@ int
delete(const char *rootfs, const char *datadir, const char *packname)
{
FILE *f;
- char meta[PATH_MAX];
+ char tmp[PATH_MAX];
+ struct stat st;
+
+ snprintf(tmp, PATH_MAX, "%s/%s", datadir, packname);
+ if (stat(tmp, &st) < 0 && errno == ENOENT) {
+ fprintf(stderr, "%s: not installed\n", packname);
+ return -1;
+ }
- snprintf(meta, PATH_MAX, "%s/%s/files", datadir, packname);
- if ((f = fopen(meta, "r")) == NULL) {
- perror(meta);
+ snprintf(tmp, PATH_MAX, "%s/%s/files", datadir, packname);
+ if ((f = fopen(tmp, "r")) == NULL) {
+ perror(tmp);
return ERR_DELETE;
}
t@@ -497,21 +504,21 @@ delete(const char *rootfs, const char *datadir, const char *packname)
}
fclose(f);
- if (unlink(meta) < 0) {
- perror(meta);
- fprintf(stderr, "%s: cannot remove metadata\n", packname);
+ if (unlink(tmp) < 0) {
+ perror(tmp);
+ fprintf(stderr, "%s: cannot remove file list\n", packname);
return ERR_DELETE;
}
- snprintf(meta, PATH_MAX, "%s/%s/version", datadir, packname);
- if (unlink(meta) < 0) {
- perror(meta);
- fprintf(stderr, "%s: cannot clean metadata\n", packname);
+ snprintf(tmp, PATH_MAX, "%s/%s/version", datadir, packname);
+ if (unlink(tmp) < 0) {
+ perror(tmp);
+ fprintf(stderr, "%s: cannot clean version\n", packname);
return ERR_DELETE;
}
- snprintf(meta, PATH_MAX, "%s/%s", datadir, packname);
- return rmdir(meta);
+ snprintf(tmp, PATH_MAX, "%s/%s", datadir, packname);
+ return rmdir(tmp);
}