X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fwin32.c;h=10f28b3d91280106d4955526f30bc8b10ddf0203;hp=6ab484e06c6c2931cef0e1af4475e37f130442a5;hb=5c0d30fbd73ee5e9f080d0763ec08eb68fe69314;hpb=c303d16319405fa99949d7e090e563e7c3d6ef3a diff --git a/src/win32.c b/src/win32.c index 6ab484e0..10f28b3d 100644 --- a/src/win32.c +++ b/src/win32.c @@ -46,6 +46,7 @@ #define MAX_GET_SD_ACCESS_DENIED_WARNINGS 1 #define MAX_GET_SACL_PRIV_NOTHELD_WARNINGS 1 +#define MAX_CREATE_HARD_LINK_WARNINGS 5 struct win32_capture_state { unsigned long num_get_sd_access_denied; unsigned long num_get_sacl_priv_notheld; @@ -743,18 +744,11 @@ win32_do_capture_rpfix(char *rpbuf, DWORD *rpbuflen_p, /* Load a reparse point into a WIM inode. It is just stored in memory. * - * @hFile: Open handle to a reparse point, with permission to read the reparse - * data. + * @hFile is the open handle to a reparse point, with permission to read the + * reparse data. * - * @inode: WIM inode for the reparse point. - * - * @lookup_table: Stream lookup table for the WIM; an entry will be added to it - * for the reparse point unless an entry already exists for - * the exact same data stream. - * - * @path: External path to the reparse point. Used for error messages only. - * - * Returns 0 on success; nonzero on failure. */ + * @inode is the WIM inode for the reparse point. + */ static int win32_capture_reparse_point(struct wim_dentry **root_p, HANDLE hFile, @@ -809,8 +803,8 @@ win32_capture_reparse_point(struct wim_dentry **root_p, inode->i_not_rpfixed = 0; } } - return inode_add_ads_with_data(inode, L"", reparse_point_buf + 8, - bytesReturned - 8, params->lookup_table); + return inode_set_unnamed_stream(inode, reparse_point_buf + 8, + bytesReturned - 8, params->lookup_table); } /* Scans an unnamed or named stream of a Win32 file (not a reparse point @@ -1865,10 +1859,15 @@ win32_do_apply_dentry(const wchar_t *output_path, win32_error(err); return WIMLIB_ERR_LINK; } else { - WARNING("Can't create hard link \"%ls => %ls\":\n" - " Volume does not support hard links!\n" - " Falling back to extracting a copy of the file.", - output_path, inode->i_extracted_file); + args->num_hard_links_failed++; + if (args->num_hard_links_failed < MAX_CREATE_HARD_LINK_WARNINGS) { + WARNING("Can't create hard link \"%ls => %ls\":\n" + " Volume does not support hard links!\n" + " Falling back to extracting a copy of the file.", + output_path, inode->i_extracted_file); + } else if (args->num_hard_links_failed == MAX_CREATE_HARD_LINK_WARNINGS) { + WARNING("Suppressing further hard linking warnings..."); + } } }