diff options
author | Natanael Copa <natanael.copa@gmail.com> | 2012-11-08 15:51:00 +0000 |
---|---|---|
committer | William Hubbs <w.d.hubbs@gmail.com> | 2013-04-09 02:25:26 -0500 |
commit | e4668a5061de4f225d4e9d534ff6212e634e45d2 (patch) | |
tree | 1b2243a14af8307a96f0bc58e19508cc39b68798 /src | |
parent | 56f1752ce1899c455b9e97ac73da9bd68fbab2b9 (diff) |
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.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/librc/librc.c b/src/librc/librc.c index d82880fb..40b975a9 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); |