summaryrefslogtreecommitdiffstats
path: root/utils/utils.c
diff options
context:
space:
mode:
authorMichel Stam <m.stam@fugro.nl>2014-10-13 16:14:34 +0200
committerJohn Crispin <blogic@openwrt.org>2014-10-12 13:24:11 +0200
commit79872ea6ca5867631c1ec5405721af12bea818b2 (patch)
tree86fd9034e2940b00405cda98aca084fac6e3a4d5 /utils/utils.c
parentf45672d80bf2fec4ccb7363de1da6adb9e3f4421 (diff)
downloadunitd-79872ea6ca5867631c1ec5405721af12bea818b2.tar
unitd-79872ea6ca5867631c1ec5405721af12bea818b2.zip
Use one generic routine to access /proc/cmdline
Signed-off-by: Michel Stam <m.stam@fugro.nl>
Diffstat (limited to 'utils/utils.c')
-rw-r--r--utils/utils.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/utils/utils.c b/utils/utils.c
index 59d02f1..5e67310 100644
--- a/utils/utils.c
+++ b/utils/utils.c
@@ -15,6 +15,12 @@
#include <libubox/avl.h>
#include <libubox/avl-cmp.h>
#include "utils.h"
+#include <asm-generic/setup.h>
+#include <regex.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
void
__blobmsg_list_init(struct blobmsg_list *list, int offset, int len, blobmsg_list_cmp cmp)
@@ -120,3 +126,39 @@ blobmsg_list_equal(struct blobmsg_list *l1, struct blobmsg_list *l2)
return true;
}
+
+char* get_cmdline_val(const char* name, char* out, int len)
+{
+ char pattern[COMMAND_LINE_SIZE + 1];
+ char line[COMMAND_LINE_SIZE + 1];
+ char *res = NULL, *tty;
+ int r, fd;
+ regex_t pat_cmdline;
+ regmatch_t matches[2];
+
+ fd = open("/proc/cmdline", O_RDONLY);
+ if (fd < 0)
+ return NULL;
+
+ r = read(fd, line, COMMAND_LINE_SIZE);
+ if ( r <= 0 ) {
+ close(fd);
+ return NULL;
+ }
+ line[r] = '\0';
+ close(fd);
+
+ sprintf( pattern, "%s=([^ \n]*)", name);
+ regcomp(&pat_cmdline, pattern, REG_EXTENDED);
+ if (!regexec(&pat_cmdline, line, 2, matches, 0)) {
+ line[matches[1].rm_eo] = '\0';
+ tty = (line + matches[1].rm_so);
+ strncpy(out, tty, len);
+ tty[len-1] = '\0';
+ res = out;
+ }
+
+ regfree(&pat_cmdline);
+
+ return res;
+}