From: Yu Watanabe Date: Wed, 10 Apr 2019 09:03:42 +0000 (+0900) Subject: fileio: add READ_FULL_FILE_UNHEX flag X-Git-Tag: v243-rc1~561^2~10 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=89aaf65586ea4b0b36b7c3d4661cda35a5fdf7a1;p=thirdparty%2Fsystemd.git fileio: add READ_FULL_FILE_UNHEX flag Similar to READ_FULL_FILE_UNBASE64, read data is decoded with unhexmem(). --- diff --git a/src/basic/fileio.c b/src/basic/fileio.c index 9ab2f501c76..130902a05d3 100644 --- a/src/basic/fileio.c +++ b/src/basic/fileio.c @@ -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; } diff --git a/src/basic/fileio.h b/src/basic/fileio.h index 760e7386884..6fe00f456fe 100644 --- a/src/basic/fileio.h +++ b/src/basic/fileio.h @@ -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);