summaryrefslogtreecommitdiffstats
path: root/main/openrc/rc-sys-lxc.patch
blob: c693245d37c614d38501ccb0923f2591c241207b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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);