summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNatanael Copa <natanael.copa@gmail.com>2012-11-08 15:51:00 +0000
committerWilliam Hubbs <w.d.hubbs@gmail.com>2013-04-09 02:25:26 -0500
commite4668a5061de4f225d4e9d534ff6212e634e45d2 (patch)
tree1b2243a14af8307a96f0bc58e19508cc39b68798 /src
parent56f1752ce1899c455b9e97ac73da9bd68fbab2b9 (diff)
downloadopenrc-e4668a5061de4f225d4e9d534ff6212e634e45d2.tar.gz
openrc-e4668a5061de4f225d4e9d534ff6212e634e45d2.tar.bz2
openrc-e4668a5061de4f225d4e9d534ff6212e634e45d2.tar.xz
Fix autodetection of lxc
The /proc/1/environ contains various \0 terminated strings. The current code will only work when the search string is in the first of those. To fix this we look for strings in entire buffer. Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
Diffstat (limited to 'src')
-rw-r--r--src/librc/librc.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/librc/librc.c b/src/librc/librc.c
index d82880f..40b975a 100644
--- a/src/librc/librc.c
+++ b/src/librc/librc.c
@@ -168,7 +168,7 @@ file_regex(const char *file, const char *regex)
char *line = NULL;
size_t len = 0;
regex_t re;
- bool retval = false;
+ bool retval = true;
int result;
if (!(fp = fopen(file, "r")))
@@ -184,11 +184,21 @@ file_regex(const char *file, const char *regex)
}
while ((rc_getline(&line, &len, fp))) {
- if (regexec(&re, line, 0, NULL, 0) == 0)
- retval = true;
- if (retval)
- break;
+ char *str = line;
+ /* some /proc files have \0 separated content so we have to
+ loop through the 'line' */
+ do {
+ if (regexec(&re, str, 0, NULL, 0) == 0)
+ goto found;
+ str += strlen(str) + 1;
+ /* len is the size of allocated buffer and we don't
+ want call regexec BUFSIZE times. find next str */
+ while (*str == '\0' && str < line + len)
+ str++;
+ } while (str < line + len);
}
+ retval = false;
+found:
fclose(fp);
free(line);
regfree(&re);