X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fprocd.git;a=blobdiff_plain;f=utils%2Futils.c;h=c0d1cd536ae6870d1386d7ac3b8be0428b5db3a0;hp=5e67310528f73b2f445ec015464dbcb878a12dee;hb=303eaecc18ca1d26af9d9105631000c8bdef11a0;hpb=79872ea6ca5867631c1ec5405721af12bea818b2 diff --git a/utils/utils.c b/utils/utils.c index 5e67310..c0d1cd5 100644 --- a/utils/utils.c +++ b/utils/utils.c @@ -129,36 +129,27 @@ blobmsg_list_equal(struct blobmsg_list *l1, struct blobmsg_list *l2) 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; + char line[CMDLINE_SIZE + 1], *c, *sptr; + int fd = open("/proc/cmdline", O_RDONLY); + ssize_t r = read(fd, line, sizeof(line) - 1); + close(fd); - r = read(fd, line, COMMAND_LINE_SIZE); - if ( r <= 0 ) { - close(fd); + if (r <= 0) 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; - } + line[r] = 0; + + for (c = strtok_r(line, " \t\n", &sptr); c; + c = strtok_r(NULL, " \t\n", &sptr)) { + char *sep = strchr(c, '='); + ssize_t klen = sep - c; + if (klen < 0 || strncmp(name, c, klen) || name[klen] != 0) + continue; - regfree(&pat_cmdline); + strncpy(out, &sep[1], len); + out[len-1] = 0; + return out; + } - return res; + return NULL; }