file: add libsys_parse_cmdline_scanf() 20/268520/1
authorYoungjae Cho <y0.cho@samsung.com>
Mon, 20 Dec 2021 07:46:29 +0000 (16:46 +0900)
committerHyotaek Shim <hyotaek.shim@samsung.com>
Fri, 24 Dec 2021 04:25:47 +0000 (04:25 +0000)
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>
(cherry picked from commit b953f57f3f6a1aa73d025e83f5d0422a0fd765a0)

src/libcommon/file.c
src/libcommon/file.h

index b3ca5f1c32c95f59bbe7ead85899386f391310ed..2b0c6bae7c1e20fefcdb66fcdfcf53f4bda0b309 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 1250da8b0f0836d274206f88d38f2617eaaa433c..31df8fa9419b815b81ac46f3b7ca7a0816d34ab5 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__ */