file: add libsys_parse_cmdline_scanf() 14/268314/3
authorYoungjae Cho <y0.cho@samsung.com>
Mon, 20 Dec 2021 07:46:29 +0000 (16:46 +0900)
committerYoungjae Cho <y0.cho@samsung.com>
Thu, 23 Dec 2021 01:03:45 +0000 (10:03 +0900)
libsys_parse_cmdline_scanf() scans tokens of file /proc/cmdline.
The parameters and return value have same semantics to those of
scanf() family.

Change-Id: Iac5838fe36b0ed2de36eb0412a13691ba0a50c3b
Signed-off-by: Youngjae Cho <y0.cho@samsung.com>
src/libcommon/file.c
src/libcommon/file.h

index b3ca5f1..2b0c6ba 100644 (file)
@@ -131,3 +131,30 @@ int sys_set_str(char *fname, char *val)
 
        return 0;
 }
+
+int libsys_parse_cmdline_scanf(const char *format, ...)
+{
+       FILE *fp = NULL;
+       char *token = NULL;
+       size_t len = 0;
+       va_list ap;
+       int ret = 0;
+
+       fp = fopen("/proc/cmdline", "r");
+       if (!fp)
+               return 0;
+
+       va_start(ap, format);
+
+       while (getdelim(&token, &len, ' ', fp) != EOF) {
+               ret = vsscanf(token, format, ap);
+               if (ret > 0)
+                       break;
+       }
+
+       free(token);
+       va_end(ap);
+       fclose(fp);
+
+       return ret;
+}
index 1250da8..31df8fa 100644 (file)
 #ifndef __LIBCOMMON_FILE_H__
 #define __LIBCOMMON_FILE_H__
 
+#include <stdarg.h>
+
 int sys_read_buf(char *file, char *buf, int len);
 int sys_write_buf(char *file, char *buf);
 int sys_get_int(char *fname, int *val);
 int sys_get_str(char *fname, char *str, int len);
 int sys_set_int(char *fname, int val);
 int sys_set_str(char *fname, char *val);
+int libsys_parse_cmdline_scanf(const char *format, ...);
 
 #endif /* __LIBCOMMON_FILE_H__ */