tFixed memory leaks in pack loading - pm - barely a pack manager
(HTM) git clone git://z3bra.org/pm
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 767955d994347cf26faf168ebffc73bd3f3584f8
(DIR) parent fb63ff08cb9d292b1b689ade10fad57a4d485a0d
(HTM) Author: z3bra <willyatmailoodotorg>
Date: Mon, 4 Jan 2016 14:08:32 +0100
Fixed memory leaks in pack loading
Diffstat:
M pm.c | 67 ++++++++++++++++++++++---------
1 file changed, 48 insertions(+), 19 deletions(-)
---
(DIR) diff --git a/pm.c b/pm.c
t@@ -39,6 +39,9 @@ enum {
ERR_INVALID_ACTION = 1,
ERR_METADATA = 2,
ERR_PACKAGE_LOAD = 3,
+ ERR_DELETE = 4,
+ ERR_INSPECT = 5,
+ ERR_UNPACK = 6,
};
void usage(char *name);
t@@ -56,6 +59,7 @@ int delete_content(FILE *metafile);
int delete(const char *datadir, const char *rootfs, const char *name);
struct pack *pack_load_file(char *file);
struct pack *pack_load(char *name);
+void pack_unload(struct pack *p);
char *argv0;
t@@ -101,17 +105,17 @@ mkdir_parents(char *dir, mode_t mode)
char *p = NULL;
size_t len;
- snprintf(tmp, sizeof(tmp),"%s",dir);
- len = strlen(tmp);
- if(tmp[len - 1] == '/')
- tmp[len - 1] = 0;
- for(p = tmp + 1; *p; p++)
- if(*p == '/') {
- *p = 0;
- mkdir(tmp, mode);
- *p = '/';
- }
- return mkdir(tmp, mode);
+ snprintf(tmp, sizeof(tmp),"%s",dir);
+ len = strlen(tmp);
+ if(tmp[len - 1] == '/')
+ tmp[len - 1] = 0;
+ for(p = tmp + 1; *p; p++)
+ if(*p == '/') {
+ *p = 0;
+ mkdir(tmp, mode);
+ *p = '/';
+ }
+ return mkdir(tmp, mode);
}
t@@ -275,8 +279,14 @@ metadata(char *datadir, struct pack *pack)
perror("open");
return -1;
}
- write(fd, pack->version, strlen(pack->version));
- write(fd, "\n", 1);
+
+ r = write(fd, pack->version, strlen(pack->version));
+ r += write(fd, "\n", 1);
+
+ if (r < 1) {
+ perror("write");
+ return -1;
+ }
close(fd);
return 0;
t@@ -535,6 +545,18 @@ pack_load(char *name)
return p;
}
+void
+pack_unload(struct pack *p)
+{
+ if (!p)
+ return;
+
+ free(p->path);
+ free(p->name);
+ free(p->version);
+ free(p);
+}
+
int
main (int argc, char **argv)
{
t@@ -570,16 +592,21 @@ main (int argc, char **argv)
case ACTION_INSTALL:
if (!p)
return ERR_PACKAGE_LOAD;
- if (metadata(PACKAGE_DATA, p) == 0)
- return unpack(PACKAGE_ROOT, p->path);
- fprintf(stderr, "could not write metadata for %s\n", p->name);
- return ERR_METADATA;
+ if (metadata(PACKAGE_DATA, p) != 0)
+ return ERR_METADATA;
+ if (unpack(PACKAGE_ROOT, p->path) != 0)
+ return ERR_UNPACK;
+ break;
case ACTION_DELETE:
- return delete(PACKAGE_DATA, PACKAGE_ROOT, n);
+ if (delete(PACKAGE_DATA, PACKAGE_ROOT, n) != 0)
+ return ERR_DELETE;
+ break;
case ACTION_INSPECT:
- return inspect(n);
+ if (inspect(n) != 0)
+ return ERR_INSPECT;
+ break;
/* handle me, Octave */
case ACTION_UPDATE:
t@@ -590,5 +617,7 @@ main (int argc, char **argv)
return ERR_INVALID_ACTION;
}
+ pack_unload(p);
+
return 0;
}