diff options
author | Michel Stam <m.stam@fugro.nl> | 2014-10-13 16:14:34 +0200 |
---|---|---|
committer | John Crispin <blogic@openwrt.org> | 2014-10-12 13:24:11 +0200 |
commit | 79872ea6ca5867631c1ec5405721af12bea818b2 (patch) | |
tree | 86fd9034e2940b00405cda98aca084fac6e3a4d5 /utils | |
parent | f45672d80bf2fec4ccb7363de1da6adb9e3f4421 (diff) | |
download | unitd-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')
-rw-r--r-- | utils/utils.c | 42 | ||||
-rw-r--r-- | utils/utils.h | 1 |
2 files changed, 43 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; +} diff --git a/utils/utils.h b/utils/utils.h index 37fa216..c2c1cb4 100644 --- a/utils/utils.h +++ b/utils/utils.h @@ -49,5 +49,6 @@ int blobmsg_list_fill(struct blobmsg_list *list, void *data, int len, bool array void blobmsg_list_free(struct blobmsg_list *list); bool blobmsg_list_equal(struct blobmsg_list *l1, struct blobmsg_list *l2); void blobmsg_list_move(struct blobmsg_list *list, struct blobmsg_list *src); +char* get_cmdline_val(const char* name, char* out, int len); #endif |