]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lib/path: add ul_path_read_buffer()
authorKarel Zak <kzak@redhat.com>
Thu, 17 May 2018 13:42:37 +0000 (15:42 +0200)
committerKarel Zak <kzak@redhat.com>
Thu, 21 Jun 2018 11:07:46 +0000 (13:07 +0200)
Signed-off-by: Karel Zak <kzak@redhat.com>
include/path.h
lib/path.c

index ebdb58d05ddf2d6c7905bd9109a86ab96de0e27f..76c18e10310a1ba3813cb62120097a8f08054a5b 100644 (file)
@@ -74,6 +74,10 @@ int ul_path_read_string(struct path_cxt *pc, char **str, const char *path);
 int ul_path_readf_string(struct path_cxt *pc, char **str, const char *path, ...)
                                __attribute__ ((__format__ (__printf__, 3, 4)));
 
+int ul_path_read_buffer(struct path_cxt *pc, char *buf, size_t bufsz, const char *path);
+int ul_path_readf_buffer(struct path_cxt *pc, char *buf, size_t bufsz, const char *path, ...)
+                               __attribute__ ((__format__ (__printf__, 4, 5)));
+
 int ul_path_scanf(struct path_cxt *pc, const char *path, const char *fmt, ...);
 int ul_path_scanff(struct path_cxt *pc, const char *path, va_list ap, const char *fmt, ...)
                                __attribute__ ((__format__ (__scanf__, 4, 5)));
index 63f19af9a5cf8ebcab863957cde81b489915e6be..76b672a7f90eef3d2b29ef0ead90ce0c93c0c630 100644 (file)
@@ -565,6 +565,35 @@ int ul_path_readf_string(struct path_cxt *pc, char **str, const char *path, ...)
        return ul_path_read_string(pc, str, p);
 }
 
+int ul_path_read_buffer(struct path_cxt *pc, char *buf, size_t bufsz, const char *path)
+{
+       int rc = ul_path_read(pc, buf, bufsz - 1, path);
+       if (rc < 0)
+               return rc;;
+
+       /* Remove tailing newline (usuall in sysfs) */
+       if (rc > 0 && *(buf + rc - 1) == '\n')
+               --rc;
+
+       buf[rc] = '\0';
+       return rc;
+}
+
+int ul_path_readf_buffer(struct path_cxt *pc, char *buf, size_t bufsz, const char *path, ...)
+{
+       const char *p;
+       va_list ap;
+
+       va_start(ap, path);
+       p = ul_path_mkpath(pc, path, ap);
+       va_end(ap);
+
+       if (!p)
+               return -EINVAL;
+
+       return ul_path_read_buffer(pc, buf, bufsz, p);
+}
+
 int ul_path_scanf(struct path_cxt *pc, const char *path, const char *fmt, ...)
 {
        FILE *f;