+
+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;
+}