From 7fb35122d6dd1a784eb726b7885e84d73a2c0f96 Mon Sep 17 00:00:00 2001 From: Eric Biggers Date: Sun, 31 May 2015 10:08:51 -0500 Subject: [PATCH] Don't use entire word for d_extraction_name_nchars --- include/wimlib/dentry.h | 15 ++++++++------- src/extract.c | 5 +++-- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/include/wimlib/dentry.h b/include/wimlib/dentry.h index cbc0b7c3..ad4e73ec 100644 --- a/include/wimlib/dentry.h +++ b/include/wimlib/dentry.h @@ -73,17 +73,21 @@ struct wim_dentry { /* Length of 'd_short_name' in bytes, excluding the terminating null */ u16 d_short_name_nbytes; + /* (Extraction only) Length of 'd_extraction_name' in _characters_, + * excluding the terminating null */ + u16 d_extraction_name_nchars; + /* When capturing from an NTFS volume using NTFS-3g, this flag is set on * dentries that were created from a filename in the WIN32 or WIN32+DOS * namespaces rather than the POSIX namespace. Otherwise this will * always be 0. */ - u8 d_is_win32_name : 1; + u16 d_is_win32_name : 1; /* Temporary flag; always reset to 0 when done using. */ - u8 d_tmp_flag : 1; + u16 d_tmp_flag : 1; /* Used by wimlib_update_image() */ - u8 d_is_orphan : 1; + u16 d_is_orphan : 1; union { /* The subdir offset is only used while reading and writing this @@ -107,14 +111,11 @@ struct wim_dentry { * doesn't, it is an allocated buffer which must be freed. */ void *d_extraction_name; - /* (Extraction only) Number of characters in d_extraction_name. */ - size_t d_extraction_name_nchars; - /* (Extraction only) Linked list node that connects all dentries being * extracted as part of the current extraction operation. */ struct list_head d_extraction_list_node; - /* (Extraction only) Pointer to the next alias for this dentry's inode + /* (Extraction only) Pointer to the next alias of this dentry's inode * that needs to be extracted as part of the current extraction * operation, or NULL if this is the last alias. */ struct wim_dentry *d_next_extraction_alias; diff --git a/src/extract.c b/src/extract.c index b2348764..417300b7 100644 --- a/src/extract.c +++ b/src/extract.c @@ -753,11 +753,12 @@ dentry_calculate_extraction_name(struct wim_dentry *dentry, } if (file_name_valid(dentry->d_name, dentry->d_name_nbytes / 2, false)) { + size_t nbytes = 0; ret = utf16le_get_tstr(dentry->d_name, dentry->d_name_nbytes, (const tchar **)&dentry->d_extraction_name, - &dentry->d_extraction_name_nchars); - dentry->d_extraction_name_nchars /= sizeof(tchar); + &nbytes); + dentry->d_extraction_name_nchars = nbytes / sizeof(tchar); return ret; } else { if (ctx->extract_flags & WIMLIB_EXTRACT_FLAG_REPLACE_INVALID_FILENAMES) -- 2.43.0