This patch set is based upon [patches from Wine Staging](https://github.com/wine-staging/wine-staging/tree/master/patches/n… by Erich E. Hoover (@ehoover), and implements support for the `SYSTEM`, `HIDDEN` and `READONLY` DOS file attributes. These can implemented in various ways depending upon the capabilities of the operating system and the file system. However, this initial patch-set focusses on just one method: Samba-formatted Extended File Attributes.
Modern filesystems generally support Extended File Attributes - auxiliary blobs of binary data that can be attached to a file. Samba uses the `user.DOSATTRIB` attribute to store DOS attribute information in the form of a hexadecimal value, and this patch-set implements a compatible mechanism.
Support for additional storage methods to increase operating system and filesystem compatibility is planned for later patch submissions.
This effort is part of a larger project I have been working on to get Msys2 and Cygwin working properly on Wine. The absence of DOS fule attribute support prevents one of the modes that Cygwin and Msys2 can use to emulate symbolic links from working correctly, which causes the Cygwin installer to fail: https://bugs.winehq.org/show_bug.cgi?id=9158
--
v6: ntdll: Implement storing DOS attributes in NtCreateFile.
ntdll: Implement retrieving DOS attributes in NtQueryInformationFile
ntdll: Implement storing DOS attributes in NtSetInformationFile.
ntdll: Implement retrieving DOS attributes in [fd_]get_file_info().
https://gitlab.winehq.org/wine/wine/-/merge_requests/946
This series includes several improvements in DbgHelp for supporting
(global / file static / function static) variables.
In more details:
- correct distinction and hierarchy attributes for the three kinds
(Dwarf and PDB)
- better filtering of PDB information
+ dropping invalid variable definitions from incremental linker
(hence preventing their use instead of the valid ones)
+ keeping more wanted variables in case of collision (by address
or by name)
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/950
mingw-w64 defines __forceinline (and therefore FORCEINLINE) as
"extern __inline__ __attribute__((__always_inline__,__gnu_inline__)). This means
that COM inline wrappers specify multiple storage classes and hence cannot be
compiled.
Wine defines FORCEINLINE simply as "inline" (and uses "static" everywhere), so
this is a non-issue for Wine. However, since Wine and mingw-w64 share the source
code of widl and of most IDL headers, this patch changes the definition for both
projects.
There's no reason to force inlining here, especially since the wrappers need to
be manually enabled, and we don't need to match PSDK semantics where these
wrappers don't even exist.
In practice, use "__inline__" instead of "inline" for GNU C targets, to preserve
compatibility with C89 in mingw-w64 headers.
--
v2: widl: Generate "static inline" instead of "static FORCEINLINE" for COM inline wrappers.
https://gitlab.winehq.org/wine/wine/-/merge_requests/935