From: Eric Biggers Date: Tue, 5 May 2015 03:03:53 +0000 (-0500) Subject: wiminfo: consolidate boolean flags into single line X-Git-Tag: v1.8.1~12 X-Git-Url: https://wimlib.net/git/?p=wimlib;a=commitdiff_plain;h=0f25f61f874e53e1784e0f74e94fe4daad4a4b5b wiminfo: consolidate boolean flags into single line --- diff --git a/NEWS b/NEWS index 55235ead..0cf5b2df 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,9 @@ Version 1.8.1-BETA: Fixed a bug in the LZX decompressor: malicious input data could cause out of bounds writes to memory (since wimlib v1.2.2). + The output of the 'wiminfo' command now consolidates various boolean + flags (such as "Relative path junction") into a single line. + A file can now have both an unnamed data stream ("file contents") and a reparse point stream. Such files can exist as a result of the use of certain Windows features, such as offline storage, including "OneDrive". diff --git a/include/wimlib_tchar.h b/include/wimlib_tchar.h index 8248d8d9..c372b820 100644 --- a/include/wimlib_tchar.h +++ b/include/wimlib_tchar.h @@ -22,6 +22,7 @@ typedef wchar_t tchar; # define tmemcpy wmemcpy # define tmemmove wmemmove # define tmempcpy wmempcpy +# define tstrcat wcscat # define tstrcpy wcscpy # define tprintf wprintf # define tsprintf swprintf @@ -80,6 +81,7 @@ typedef char tchar; # define tmemcpy memcpy # define tmemmove memmove # define tmempcpy mempcpy +# define tstrcat strcat # define tstrcpy strcpy # define tprintf printf # define tsprintf sprintf diff --git a/programs/imagex.c b/programs/imagex.c index 49b5c0f1..762459e8 100644 --- a/programs/imagex.c +++ b/programs/imagex.c @@ -2413,6 +2413,9 @@ static void print_byte_field(const uint8_t field[], size_t len) static void print_wim_information(const tchar *wimfile, const struct wimlib_wim_info *info) { + tchar attr_string[256]; + tchar *p; + tputs(T("WIM Information:")); tputs(T("----------------")); tprintf(T("Path: %"TS"\n"), wimfile); @@ -2428,13 +2431,32 @@ print_wim_information(const tchar *wimfile, const struct wimlib_wim_info *info) tprintf(T("Part Number: %d/%d\n"), info->part_number, info->total_parts); tprintf(T("Boot Index: %d\n"), info->boot_index); tprintf(T("Size: %"PRIu64" bytes\n"), info->total_bytes); - tprintf(T("Integrity Info: %"TS"\n"), - info->has_integrity_table ? T("yes") : T("no")); - tprintf(T("Relative path junction: %"TS"\n"), - info->has_rpfix ? T("yes") : T("no")); - tprintf(T("Pipable: %"TS"\n"), - info->pipable ? T("yes") : T("no")); - tputchar(T('\n')); + + attr_string[0] = T('\0'); + + if (info->pipable) + tstrcat(attr_string, "Pipable, "); + + if (info->has_integrity_table) + tstrcat(attr_string, "Integrity info, "); + + if (info->has_rpfix) + tstrcat(attr_string, "Relative path junction, "); + + if (info->resource_only) + tstrcat(attr_string, "Resource only, "); + + if (info->metadata_only) + tstrcat(attr_string, "Metadata only, "); + + if (info->is_marked_readonly) + tstrcat(attr_string, "Readonly, "); + + p = tstrchr(attr_string, '\0'); + if (p >= &attr_string[2] && p[-1] == T(' ') && p[-2] == T(',')) + p[-2] = '\0'; + + tprintf(T("Attributes: %"TS"\n\n"), attr_string); } static int diff --git a/tests/test-imagex b/tests/test-imagex index 78a08182..fe931321 100755 --- a/tests/test-imagex +++ b/tests/test-imagex @@ -152,7 +152,7 @@ echo "Testing capture of WIM with integrity table" if ! wimcapture dir dir.wim --check; then error "Failed to capture WIM with integrity table" fi -if ! test "`wiminfo dir.wim | grep Integrity | awk '{print $3}'`" = "yes"; then +if ! wiminfo dir.wim | grep -q Integrity; then error "Integrity table on WIM not made" fi if ! wimapply --check dir.wim tmp; then @@ -186,14 +186,14 @@ echo "Testing appending WIM image with integrity check" if ! wimappend dir2 dir.wim "newname2" --check; then error "Appending WIM image failed" fi -if ! test "`wiminfo dir.wim | grep Integrity | awk '{print $3}'`" = "yes"; then +if ! wiminfo dir.wim | grep -q Integrity; then error "Integrity table not set correctly on image append" fi echo "Testing appending WIM image with no integrity check" if ! wimappend dir2 dir.wim "newname3" --nocheck; then error "Appending WIM image failed" fi -if ! test "`wiminfo dir.wim | grep Integrity | awk '{print $3}'`" = "no"; then +if wiminfo dir.wim | grep -q Integrity; then error "WIM integrity table not removed" fi # 5 images at this point @@ -232,7 +232,7 @@ echo "Testing appending directory to empty WIM and making it bootable" if ! wimappend dir dir.wim "myname" "mydesc" --check --boot; then error "Couldn't append named, described, bootable image to empty WIM with integrity check" fi -if ! test "`wiminfo dir.wim | grep Integrity | awk '{print $3}'`" = "yes"; then +if ! wiminfo dir.wim | grep -q Integrity; then error "Integrity check not found" fi if ! test "`wiminfo dir.wim | grep '^Boot Index' | awk '{print $3}'`" = "1"; then diff --git a/tests/test-imagex-mount b/tests/test-imagex-mount index ecb05eac..1bde84de 100755 --- a/tests/test-imagex-mount +++ b/tests/test-imagex-mount @@ -171,7 +171,7 @@ echo "Unmounting WIM with changes committed and --check" if ! imagex_unmount tmp.mnt --commit --check; then error "Failed to unmount read-write mounted WIM" fi -if test "`wiminfo dir.wim | grep Integrity | awk '{print $3}'`" != "yes"; then +if ! wiminfo dir.wim | grep -q Integrity; then error "Integrity information was not included" fi if ! wimapply dir.wim tmp.apply; then