X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fprocd.git;a=blobdiff_plain;f=utils%2Futils.c;h=5e67310528f73b2f445ec015464dbcb878a12dee;hp=59d02f1292574c60cd1fffa77b9bcd45bf5f9f84;hb=79872ea6ca5867631c1ec5405721af12bea818b2;hpb=916f95cb58604038695347ee41a430d8ca1f0556 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 #include #include "utils.h" +#include +#include +#include +#include +#include +#include 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; +}