Move code away from libminijail.c.
The file has over 2000 lines. Move code to other files as it makes
sense.
Bug: 30662698
Change-Id: Iad3c4a5b2327a4c6956a837a08eb880c7edd7b03
diff --git a/util.c b/util.c
index 3de8eb7..b77de37 100644
--- a/util.c
+++ b/util.c
@@ -6,6 +6,7 @@
#include <ctype.h>
#include <stdio.h>
#include <string.h>
+#include <sys/utsname.h>
#include "util.h"
@@ -61,8 +62,6 @@
const size_t log_syscalls_len = sizeof(log_syscalls)/sizeof(log_syscalls[0]);
-long int parse_single_constant(char *constant_str, char **endptr);
-
int lookup_syscall(const char *name)
{
const struct syscall_entry *entry = syscall_table;
@@ -81,6 +80,21 @@
return NULL;
}
+long int parse_single_constant(char *constant_str, char **endptr)
+{
+ const struct constant_entry *entry = constant_table;
+ for (; entry->name; ++entry) {
+ if (!strcmp(entry->name, constant_str)) {
+ if (endptr)
+ *endptr = constant_str + strlen(constant_str);
+
+ return entry->value;
+ }
+ }
+
+ return strtol(constant_str, endptr, 0);
+}
+
long int parse_constant(char *constant_str, char **endptr)
{
long int value = 0;
@@ -111,21 +125,6 @@
return value;
}
-long int parse_single_constant(char *constant_str, char **endptr)
-{
- const struct constant_entry *entry = constant_table;
- for (; entry->name; ++entry) {
- if (!strcmp(entry->name, constant_str)) {
- if (endptr)
- *endptr = constant_str + strlen(constant_str);
-
- return entry->value;
- }
- }
-
- return strtol(constant_str, endptr, 0);
-}
-
char *strip(char *s)
{
char *end;
@@ -187,3 +186,44 @@
return ret;
}
+
+int kernel_lessthan_3_8()
+{
+ int major, minor;
+ struct utsname uts;
+ return (uname(&uts) != -1 &&
+ sscanf(uts.release, "%d.%d", &major, &minor) == 2 &&
+ ((major < 3) || ((major == 3) && (minor < 8))));
+}
+
+char *path_join(const char *external_path, const char *internal_path)
+{
+ char *path;
+ size_t pathlen;
+
+ /* One extra char for '/' and one for '\0', hence + 2. */
+ pathlen = strlen(external_path) + strlen(internal_path) + 2;
+ path = malloc(pathlen);
+ snprintf(path, pathlen, "%s/%s", external_path, internal_path);
+
+ return path;
+}
+
+void *consumebytes(size_t length, char **buf, size_t *buflength)
+{
+ char *p = *buf;
+ if (length > *buflength)
+ return NULL;
+ *buf += length;
+ *buflength -= length;
+ return p;
+}
+
+char *consumestr(char **buf, size_t *buflength)
+{
+ size_t len = strnlen(*buf, *buflength);
+ if (len == *buflength)
+ /* There's no null-terminator. */
+ return NULL;
+ return consumebytes(len + 1, buf, buflength);
+}