summaryrefslogtreecommitdiffstats
path: root/rcS.c
diff options
context:
space:
mode:
authorJuliusz Chroboczek <jch@pps.univ-paris-diderot.fr>2015-06-26 00:23:33 +0200
committerFelix Fietkau <nbd@openwrt.org>2015-07-06 23:16:47 +0200
commit8f33afd87f118bfea52f50f7787843b694a38e72 (patch)
tree1c878a02ec1f37d878734eb8c6c39a8643090e19 /rcS.c
parentc5cdda8f73aa99e4ec242e6980a1138c641d3614 (diff)
downloadunitd-8f33afd87f118bfea52f50f7787843b694a38e72.tar
unitd-8f33afd87f118bfea52f50f7787843b694a38e72.zip
Attempt to deal gracefully with allocation failures.
These should probably not happen in practice, but having an explicit error message may make debugging out-of-memory situations easier.
Diffstat (limited to 'rcS.c')
-rw-r--r--rcS.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/rcS.c b/rcS.c
index 8c72c19..b3e3c22 100644
--- a/rcS.c
+++ b/rcS.c
@@ -115,6 +115,10 @@ static void add_initd(struct runqueue *q, char *file, char *param)
char *p, *f;
s = calloc_a(sizeof(*s), &f, strlen(file) + 1, &p, strlen(param) + 1);
+ if (!s) {
+ ERROR("Out of memory in %s.\n", file);
+ return;
+ }
s->proc.task.type = &initd_type;
s->proc.task.complete = q_initd_complete;
if (!strcmp(param, "stop") || !strcmp(param, "shutdown"))
@@ -132,6 +136,11 @@ static int _rc(struct runqueue *q, char *path, const char *file, char *pattern,
glob_t gl;
int j;
+ if (!dir) {
+ ERROR("Out of memory in %s.\n", file);
+ return -1;
+ }
+
DEBUG(2, "running %s/%s%s %s\n", path, file, pattern, param);
sprintf(dir, "%s/%s%s", path, file, pattern);
if (glob(dir, GLOB_NOESCAPE | GLOB_MARK, NULL, &gl)) {