status = (*func_NtReadFile)(h, NULL, NULL, NULL,
&iosb, buf, count, NULL, NULL);
- if (!NT_SUCCESS(status)) {
- winnt_error(status, L"\"%ls\": Error reading data",
- printable_path(path));
- ret = WIMLIB_ERR_READ;
+ if (unlikely(!NT_SUCCESS(status))) {
+ if (status == STATUS_END_OF_FILE) {
+ ERROR("\"%ls\": File was concurrently truncated",
+ printable_path(path));
+ ret = WIMLIB_ERR_CONCURRENT_MODIFICATION_DETECTED;
+ } else {
+ winnt_error(status, L"\"%ls\": Error reading data",
+ printable_path(path));
+ ret = WIMLIB_ERR_READ;
+ }
break;
}
{
const FILE_NAMES_INFORMATION *info = buf;
for (;;) {
- if (!(info->FileNameLength == 2 && info->FileName[0] == L'.') &&
- !(info->FileNameLength == 4 && info->FileName[0] == L'.' &&
- info->FileName[1] == L'.'))
+ if (!should_ignore_filename(info->FileName,
+ info->FileNameLength / 2))
{
wchar_t *p;
wchar_t *filename;
if (ret)
goto out_free_buf;
- if (child)
- dentry_add_child(parent, child);
+ attach_scanned_tree(parent, child, params->blob_table);
}
if (info->NextEntryOffset == 0)
break;
* SYMBOLIC_LINK_RELATIVE. We will use this information, although this
* may not always do what the user expects, since drive-relative
* symbolic links such as "\Users\Public" have SYMBOLIC_LINK_RELATIVE
- * set, in addition to truely relative symbolic links such as "Users" or
+ * set, in addition to truly relative symbolic links such as "Users" or
* "Users\Public". However, WIMGAPI (as of Windows 8.1) has this same
* behavior.
*
filename,
file_info.ino,
params->capture_root_dev,
- (file_info.num_links <= 1 ||
- (file_info.attributes & FILE_ATTRIBUTE_DIRECTORY)),
+ (file_info.num_links <= 1),
&root);
if (ret)
goto out;