]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
fileio: add READ_FULL_FILE_UNHEX flag
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 10 Apr 2019 09:03:42 +0000 (18:03 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 12 Apr 2019 01:10:24 +0000 (10:10 +0900)
Similar to READ_FULL_FILE_UNBASE64, read data is decoded with
unhexmem().

src/basic/fileio.c
src/basic/fileio.h

index 9ab2f501c7681f12100e1e43c87ab12c53063da9..130902a05d31a318c66a71d9650ce1febc2d7d0a 100644 (file)
@@ -279,7 +279,8 @@ int read_full_stream_full(
 
         assert(f);
         assert(ret_contents);
-        assert(!(flags & READ_FULL_FILE_UNBASE64) || ret_size);
+        assert(!FLAGS_SET(flags, READ_FULL_FILE_UNBASE64 | READ_FULL_FILE_UNHEX));
+        assert(!(flags & (READ_FULL_FILE_UNBASE64 | READ_FULL_FILE_UNHEX)) || ret_size);
 
         n_next = LINE_MAX; /* Start size */
 
@@ -356,9 +357,12 @@ int read_full_stream_full(
                 n_next = MIN(n * 2, READ_FULL_BYTES_MAX);
         }
 
-        if (flags & READ_FULL_FILE_UNBASE64) {
+        if (flags & (READ_FULL_FILE_UNBASE64 | READ_FULL_FILE_UNHEX)) {
                 buf[l++] = 0;
-                r = unbase64mem_full(buf, l, flags & READ_FULL_FILE_SECURE, (void **) ret_contents, ret_size);
+                if (flags & READ_FULL_FILE_UNBASE64)
+                        r = unbase64mem_full(buf, l, flags & READ_FULL_FILE_SECURE, (void **) ret_contents, ret_size);
+                else
+                        r = unhexmem_full(buf, l, flags & READ_FULL_FILE_SECURE, (void **) ret_contents, ret_size);
                 goto finalize;
         }
 
index 760e7386884ef80ccf9181e5239b868e07a466de..6fe00f456fee78058340cb94003413daace558c0 100644 (file)
@@ -31,6 +31,7 @@ typedef enum {
 typedef enum {
         READ_FULL_FILE_SECURE   = 1 << 0,
         READ_FULL_FILE_UNBASE64 = 1 << 1,
+        READ_FULL_FILE_UNHEX    = 1 << 2,
 } ReadFullFileFlags;
 
 int write_string_stream_ts(FILE *f, const char *line, WriteStringFileFlags flags, struct timespec *ts);