summaryrefslogtreecommitdiff
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
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>
-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);