Merge updates in master.

This commit is contained in:
Erich E. Hoover 2014-08-24 13:50:56 -06:00
commit ce3f41cee9
50 changed files with 1187 additions and 1328 deletions

View File

@ -32,15 +32,15 @@ before proceeding.
As the first step please grab the latest Wine source:
```bash
wget http://prdownloads.sourceforge.net/wine/wine-1.7.24.tar.bz2
wget https://github.com/compholio/wine-compholio-daily/archive/v1.7.24.tar.gz
wget http://prdownloads.sourceforge.net/wine/wine-1.7.25.tar.bz2
wget https://github.com/compholio/wine-compholio-daily/archive/v1.7.25.tar.gz
```
Extract the archives:
```bash
tar xvjf wine-1*.tar.bz2
cd wine-1*
tar xvzf ../v1.7.24.tar.gz --strip-components 1
tar xvzf ../v1.7.25.tar.gz --strip-components 1
```
And apply the patches:

View File

@ -13,57 +13,52 @@ which are not present in regular wine, and always report such issues to us
Included bugfixes and improvements
----------------------------------
**Bugfixes and features included in the next upcoming release [12]:**
**Bugfixes and features included in the next upcoming release [1]:**
* Adobe Reader requires NtProtectVirtualMemory and NtCreateSection to be on separate pages ([Wine Bug #33162](http://bugs.winehq.org/show_bug.cgi?id=33162 "Acrobat Reader 11 crashes on start (native API application virtualization, NtProtectVirtualMemory removes execute page protection on its own code)"))
* Fix ITERATE_MoveFiles when no source- and destname is specified ([Wine Bug #10085](http://bugs.winehq.org/show_bug.cgi?id=10085 "Adobe Bridge CS2 complains that it can't start due to licensing restrictions (affects photoshop)"))
* Fix issue with invisible dragimages in ImageList ([Wine Bug #36761](http://bugs.winehq.org/show_bug.cgi?id=36761 "Imagelist invisible dragimage"))
* Games For Windows Live 1.x expects a valid linker version in the PE header ([Wine Bug #28768](http://bugs.winehq.org/show_bug.cgi?id=28768 "Multiple GFWL (Games For Windows Live) 1.x games crash on startup (Kane & Lynch: Dead Men)"))
* Gothic 2 demo expects an error when opening a terminating process ([Wine Bug #37087](http://bugs.winehq.org/show_bug.cgi?id=37087 "Gothic 2 english demo fails with 'Conflict: a hook process was found. Please deactivate all Antivirus and Anti-Trojan programs and debuggers.'"))
* Multiple applications need BCryptGetFipsAlgorithmMode ([Wine Bug #32194](http://bugs.winehq.org/show_bug.cgi?id=32194 "Multiple games and applications need bcrypt.dll.BCryptGetFipsAlgorithmMode (Chess Position Trainer, Terraria, .NET System.Security.Cryptography)"))
* Other Pipelight-specific enhancements
* Prevent window managers from grouping all wine programs together ([Wine Bug #32699](http://bugs.winehq.org/show_bug.cgi?id=32699 "Add StartupWMClass to .desktop files."))
* Support for DOS hidden/system file attributes ([Wine Bug #9158](http://bugs.winehq.org/show_bug.cgi?id=9158 "Multiple Microsoft development tools online/web installers fail to skip \"$shtdwn$.req\" with FILE_ATTRIBUTE_HIDDEN (Visual Studio Express Editions, .NET Framework 3.0)"))
* Support for DwmInvalidateIconicBitmaps ([Wine Bug #32977](http://bugs.winehq.org/show_bug.cgi?id=32977 "Solidworks 2012 needs unimplemented function dwmapi.dll.DwmInvalidateIconicBitmaps (Win7 mode)"))
* Support for Dynamic DST (daylight saving time) information in registry
* Support for GetFinalPathNameByHandle ([Wine Bug #36073](http://bugs.winehq.org/show_bug.cgi?id=36073 "OneDrive crashes on unimplemented function KERNEL32.dll.GetFinalPathNameByHandleW"))
* nVidia driver for high-end laptop cards does not list all supported resolutions
**Bugs fixed in Wine-Compholio 1.7.24 [45]:**
**Bugs fixed in Wine-Compholio 1.7.25 [53]:**
* ATL IOCS data should not be stored in GWLP_USERDATA ([Wine Bug #21767](http://bugs.winehq.org/show_bug.cgi?id=21767 "JLC's Internet TV crashes on startup"))
* Add Dynamic DST exceptions for Israel Standard Time ([Wine Bug #36374](http://bugs.winehq.org/show_bug.cgi?id=36374 "Israel timezone handled incorrectly"))
* Add default ACLs for user shell folders
* ~~Add support for Dynamic DST (daylight saving time) information in registry~~
* Allow special characters in pipe names ([Wine Bug #28995](http://bugs.winehq.org/show_bug.cgi?id=28995 "Unable to use named pipes with \">\" character in the name"))
* Audio stuttering and performance drops in multiple applications ([Wine Bug #30639](http://bugs.winehq.org/show_bug.cgi?id=30639 "Audio stuttering and performance drops in Star Wolves 3"))
* Ensure NtProtectVirtualMemory and NtCreateSection are on separate pages ([Wine Bug #33162](http://bugs.winehq.org/show_bug.cgi?id=33162 "Acrobat Reader 11 crashes on start (native API application virtualization, NtProtectVirtualMemory removes execute page protection on its own code)"))
* Fix ITERATE_MoveFiles when no source- and destname is specified ([Wine Bug #10085](http://bugs.winehq.org/show_bug.cgi?id=10085 "Adobe Bridge CS2 complains that it can't start due to licensing restrictions (affects photoshop)"))
* Fix comparison of punctuation characters in lstrcmp ([Wine Bug #10767](http://bugs.winehq.org/show_bug.cgi?id=10767 "lstrcmp and others do not compare punctuation characters correctly"))
* Fix for ConnectNamedPort return value in overlapped mode ([Wine Bug #16550](http://bugs.winehq.org/show_bug.cgi?id=16550 "ConnectNamedPort should never return OK in overlapped mode (affects chromium ui_tests.exe)"))
* Fix for programs leaking wndproc slots ([Wine Bug #32451](http://bugs.winehq.org/show_bug.cgi?id=32451 "Multiple GOG.com installer bundles show a broken/unresponsive dialog window during installation (installer process running out of wndproc slots)"))
* Fix issue with invisible dragimages in ImageList ([Wine Bug #36761](http://bugs.winehq.org/show_bug.cgi?id=36761 "Imagelist invisible dragimage"))
* Games For Windows Live 1.x expects a valid linker version in the PE header ([Wine Bug #28768](http://bugs.winehq.org/show_bug.cgi?id=28768 "Multiple GFWL (Games For Windows Live) 1.x games crash on startup (Kane & Lynch: Dead Men)"))
* GetSecurityInfo returns NULL DACL for process object ([Wine Bug #15980](http://bugs.winehq.org/show_bug.cgi?id=15980 "Rhapsody 2 crashes on startup (GetSecurityInfo returns NULL DACL for process object)"))
* Implement a Microsoft Yahei replacement font ([Wine Bug #13829](http://bugs.winehq.org/show_bug.cgi?id=13829 "Wine does not have CJK fonts"))
* Implement an Arial replacement font ([Wine Bug #32323](http://bugs.winehq.org/show_bug.cgi?id=32323 "Netflix (Silverlight 4.x) and several .NET Framework 3.x/4.0 WPF apps require either Arial or Verdana to be installed"))
* Lockfree algorithm for filedescriptor cache (improves file access speed)
* Make it possible to change media center / tablet pc status ([Wine Bug #18732](http://bugs.winehq.org/show_bug.cgi?id=18732 "Microsoft Experience Pack for Tablet PC 1 refuses to install"))
* Need for Speed 3 installer requires devices in HKEY_DYN_DATA ([Wine Bug #7115](http://bugs.winehq.org/show_bug.cgi?id=7115 "Need for Speed III installer fails in Win9X mode, reporting \"Could not get 'HardWareKey' value\" (active PnP device keys in 'HKEY_DYN_DATA\\\\Config Manager\\\\Enum' missing)"))
* ~~Old games cannot locate software-only renderer~~ ([Wine Bug #32581](http://bugs.winehq.org/show_bug.cgi?id=32581 "Invalid dwFlags of reference rasterizer's HAL D3DDEVICEDESC"))
* ~~Other Pipelight specific enhancements~~
* Other Pipelight-specific enhancements
* Prevent window managers from grouping all wine programs together ([Wine Bug #32699](http://bugs.winehq.org/show_bug.cgi?id=32699 "Add StartupWMClass to .desktop files."))
* Reduced SetTimer minimum value from 10 ms to 5 ms (improves Silverlight framerates)
* Return an error when trying to open a terminated process ([Wine Bug #37087](http://bugs.winehq.org/show_bug.cgi?id=37087 "Gothic 2 english demo fails with 'Conflict: a hook process was found. Please deactivate all Antivirus and Anti-Trojan programs and debuggers.'"))
* Return correct IMediaSeeking stream positions in quartz ([Wine Bug #23174](http://bugs.winehq.org/show_bug.cgi?id=23174 "Fallout 3: Diologue and Video/sound issues"))
* SO_CONNECT_TIME returns the appropriate time
* Set ldr.EntryPoint for main executable ([Wine Bug #33034](http://bugs.winehq.org/show_bug.cgi?id=33034 "Many GFWL (Games For Windows Live) 1.x/2.x/3.x games crash or exit silently on startup (DiRT 2/3, GTA IV Steam)"))
* Support for AllocateAndGetTcpExTableFromStack ([Wine Bug #34372](http://bugs.winehq.org/show_bug.cgi?id=34372 "Add missing function AllocateAndGetTcpExTableFromStack() to iphlpapi.dll"))
* Support for BCryptGetFipsAlgorithmMode ([Wine Bug #32194](http://bugs.winehq.org/show_bug.cgi?id=32194 "Multiple games and applications need bcrypt.dll.BCryptGetFipsAlgorithmMode (Chess Position Trainer, Terraria, .NET System.Security.Cryptography)"))
* Support for Dynamic DST (daylight saving time) information in registry
* Support for GetFinalPathNameByHandle ([Wine Bug #36073](http://bugs.winehq.org/show_bug.cgi?id=36073 "OneDrive crashes on unimplemented function KERNEL32.dll.GetFinalPathNameByHandleW"))
* Support for GetSystemTimes ([Wine Bug #19813](http://bugs.winehq.org/show_bug.cgi?id=19813 "Voddler needs GetSystemTimes to run"))
* Support for GetVolumePathName
* Support for ITextDocument_fnRange function ([Wine Bug #12458](http://bugs.winehq.org/show_bug.cgi?id=12458 "Multiple apps fail due to RichEdit ITextDocument_fnRange stub (MySQL Workbench, BlitzMaxDemo137)"))
* Support for ITextRange, ITextFont and ITextPara ([Wine Bug #18303](http://bugs.winehq.org/show_bug.cgi?id=18303 "Adobe Acrobat Pro 7: Crashes when selecting the \"edit\" menu while having a file open."))
* Support for Junction Points ([Wine Bug #12401](http://bugs.winehq.org/show_bug.cgi?id=12401 "Support junction points, i.e. DeviceIoCtl(FSCTL_SET_REPARSE_POINT/FSCTL_GET_REPARSE_POINT)"))
* Support for KF_FLAG_DEFAULT_PATH in SHGetKnownFolderPath ([Wine Bug #30385](http://bugs.winehq.org/show_bug.cgi?id=30385 "Windows Live Essentials 2011 web installer fails to download packages in background (shell32.SHGetKnownFolderPath missing support for KF_FLAG_DEFAULT_PATH)"))
* Support for LoadIconMetric ([Wine Bug #35375](http://bugs.winehq.org/show_bug.cgi?id=35375 "Multiple applications need Vista+ API COMCTL32.dll.380 a.k.a. 'LoadIconMetric' (Solidworks 2013 systray monitor, Microsoft One/SkyDrive)"))
* Support for NtSetInformationFile class FileDispositionInformation ([Wine Bug #30397](http://bugs.winehq.org/show_bug.cgi?id=30397 "Multiple applications need support for NtSetInformationFile class FileDispositionInformation (Cygwin installer, Stylizer 5.x Visual CSS editor, Spoon Studio 2011 (ex Xenocode) application sandboxing scheme)"))
* Support for PulseAudio backend for audio ([Wine Bug #10495](http://bugs.winehq.org/show_bug.cgi?id=10495 "Wine should support PulseAudio"))
* Support for SHCreateSessionKey ([Wine Bug #35630](http://bugs.winehq.org/show_bug.cgi?id=35630 "SHCreateSessionKey is unimplemented"))
* Support for SetNamedPipeHandleState ([Wine Bug #17273](http://bugs.winehq.org/show_bug.cgi?id=17273 "Many apps and games need SetNamedPipeHandleState implementation (support for named pipe message mode)(FireFox+Flash, Win8/NET 4.x SDK/vcrun2012, WiX installers)"))
* Support for TOOLTIPS_GetTipText edge cases ([Wine Bug #30648](http://bugs.winehq.org/show_bug.cgi?id=30648 "SEGA Genesis / Mega Drive Classic Collection (Steam) crashes on startup"))
* Support for TransmitFile ([Wine Bug #5048](http://bugs.winehq.org/show_bug.cgi?id=5048 "Multiple applications and games need support for ws2_32 SIO_GET_EXTENSION_FUNCTION_POINTER TransmitFile (WSAID_TRANSMITFILE)"))
* Support for WTSEnumerateProcessesW ([Wine Bug #29903](http://bugs.winehq.org/show_bug.cgi?id=29903 "Some Microsoft debuggers fail to enumerate processes due to wtsapi32.WTSEnumerateProcessesW() being a stub (Microsoft Visual Studio 2005, DbgCLR from .NET 2.0 SDK)"))
@ -77,6 +72,7 @@ Included bugfixes and improvements
* Use manual relay for RunDLL_CallEntry16 in shell32 ([Wine Bug #23033](http://bugs.winehq.org/show_bug.cgi?id=23033 "Tages Protection v5.x: games report \"DLL not found shell.dll16.dll\" (Runaway 2: The Dream Of The Turtle, ...)"))
* Workaround for shlwapi URLs with relative paths
* XEMBED support for embedding Wine windows inside Linux applications
* nVidia driver for high-end laptop cards does not list all supported resolutions
How to install Wine-Compholio

20
debian/changelog vendored
View File

@ -1,11 +1,27 @@
wine-compholio (1.7.25) UNRELEASED; urgency=low
wine-compholio (1.7.25) unstable; urgency=low
* Improve generation of README.md on patch update.
* Updated patches for riched20 IText* Interface.
* Fixed some issues in the patches for TransmitFile.
* Fixed some issues in the patches for CreateProcess ACLs.
* Fixed issue with gitapply.sh script on Gentoo systems.
* Added patch with stub for DwmInvalidateIconicBitmaps.
* Added Courier Prime (OFLv1.1) as a Courier New replacement.
* Added patch to implement DOS hidden/system file attributes.
* Added patch to better detect broken nVidia RandR 1.2 support.
* Added patch to set linker version in PE header.
* Added patch to move NtProtectVirtualMemory and NtCreateSection to separate pages.
* Added patch to fix issues with drag image in ImageLists.
* Added patch with stub for BCryptGetFipsAlgorithmMode.
* Added patch to fix issues with OpenProcess on terminated processes.
* Added patch to fix issues with msi/ITERATE_MoveFiles.
* Added patch to avoid grouping all Wine windows together.
* Added patch to implement KF_FLAG_DEFAULT_PATH for SHGetKnownFolderPath.
* Added patch to implement GetFinalPathNameByHandle.
* Removed patch to update gl_drawable for embedded windows (deprecated).
* Removed patch to return empty D3D hardware flags for RGB device enumeration (accepted upstream).
-- Erich E. Hoover <erich.e.hoover@gmail.com> Mon, 11 Aug 2014 16:21:22 -0600
* Removed patch with stub for DwmInvalidateIconicBitmaps (accepted upstream).
* Removed patch for SetNamedPipeHandleState implementation (accepted upstream).
-- Erich E. Hoover <erich.e.hoover@gmail.com> Sun, 24 Aug 2014 11:09:58 -0600
wine-compholio (1.7.24) unstable; urgency=low
* Various further improvements to the patch system.

View File

@ -15,7 +15,6 @@ PATCHLIST := \
comctl32-ImageList.ok \
comctl32-LoadIconMetric.ok \
dsound-Fast_Mixer.ok \
dwmapi-Invalidate_Thumbnail.ok \
fonts-Missing_Fonts.ok \
iphlpapi-TCP_Table.ok \
kernel32-GetFinalPathNameByHandle.ok \
@ -41,9 +40,10 @@ PATCHLIST := \
server-CreateProcess_ACLs.ok \
server-Inherited_ACLs.ok \
server-Misc_ACL.ok \
server-Process.ok \
server-OpenProcess.ok \
server-Stored_ACLs.ok \
shell32-Default_Folder_ACLs.ok \
shell32-Default_Path.ok \
shell32-Icons.ok \
shell32-RunDLL_CallEntry16.ok \
shell32-SHCreateSessionKey.ok \
@ -148,7 +148,7 @@ atl-IOCS_Property.ok:
# | * Add semi-stub for BCryptGetFipsAlgorithmMode. [by Michael Müller]
# |
# | This patchset fixes the following Wine bugs:
# | * [#32194] Multiple applications need BCryptGetFipsAlgorithmMode
# | * [#32194] Support for BCryptGetFipsAlgorithmMode
# |
# | Modified files:
# | * dlls/bcrypt/bcrypt.spec, dlls/bcrypt/bcrypt_main.c, dlls/bcrypt/tests/bcrypt.c
@ -216,24 +216,6 @@ dsound-Fast_Mixer.ok:
echo '+ { "dsound-Fast_Mixer", "Alexander E. Patrakov", "Add a linear resampler for use with a large number of dsound mixing buffers." },'; \
) > dsound-Fast_Mixer.ok
# Patchset dwmapi-Invalidate_Thumbnail
# |
# | Included patches:
# | * Add stub for DwmInvalidateIconicBitmaps. [by Erich E. Hoover]
# |
# | This patchset fixes the following Wine bugs:
# | * [#32977] Support for DwmInvalidateIconicBitmaps
# |
# | Modified files:
# | * dlls/dwmapi/dwmapi.spec, dlls/dwmapi/dwmapi_main.c, include/dwmapi.h
# |
.INTERMEDIATE: dwmapi-Invalidate_Thumbnail.ok
dwmapi-Invalidate_Thumbnail.ok:
$(call APPLY_FILE,dwmapi-Invalidate_Thumbnail/0001-dwmapi-Add-stub-for-DwmInvalidateIconicBitmaps.patch)
@( \
echo '+ { "dwmapi-Invalidate_Thumbnail", "Erich E. Hoover", "Add stub for DwmInvalidateIconicBitmaps." },'; \
) > dwmapi-Invalidate_Thumbnail.ok
# Patchset fonts-Missing_Fonts
# |
# | Included patches:
@ -332,24 +314,18 @@ kernel32-GetVolumePathName.ok:
# |
# | Included patches:
# | * Fix for ConnectNamedPort return value in overlapped mode. [by Dan Kegel]
# | * Add proper implementation for SetNamedPipeHandleState. [rev 7, by Sebastian Lackner / Adam Martinson]
# |
# | This patchset fixes the following Wine bugs:
# | * [#16550] Fix for ConnectNamedPort return value in overlapped mode
# | * [#17273] Support for SetNamedPipeHandleState
# |
# | Modified files:
# | * dlls/kernel32/sync.c, dlls/kernel32/tests/pipe.c, dlls/ntdll/tests/pipe.c
# | * dlls/kernel32/sync.c
# |
.INTERMEDIATE: kernel32-Named_Pipe.ok
kernel32-Named_Pipe.ok:
$(call APPLY_FILE,kernel32-Named_Pipe/0001-kernel32-ConnectNamedPort-should-return-FALSE-and-se.patch)
$(call APPLY_FILE,kernel32-Named_Pipe/0002-ntdll-tests-Add-tests-for-FILE_PIPE_INFORMATION.patch)
$(call APPLY_FILE,kernel32-Named_Pipe/0003-kernel32-tests-Always-allow-only-one-specific-test-r.patch)
$(call APPLY_FILE,kernel32-Named_Pipe/0004-kernel32-Implement-Get-Set-NamedPipeHandleState.patch)
@( \
echo '+ { "kernel32-Named_Pipe", "Dan Kegel", "Fix for ConnectNamedPort return value in overlapped mode." },'; \
echo '+ { "kernel32-Named_Pipe", "Sebastian Lackner / Adam Martinson", "Add proper implementation for SetNamedPipeHandleState. [rev 7]" },'; \
) > kernel32-Named_Pipe.ok
# Patchset kernel32-SystemFileCacheSize
@ -511,7 +487,7 @@ ntdll-FileDispositionInformation.ok:
# | * Move NtProtectVirtualMemory and NtCreateSection to separate pages in ntdll on x86. [by Michael Müller]
# |
# | This patchset fixes the following Wine bugs:
# | * [#33162] Adobe Reader requires NtProtectVirtualMemory and NtCreateSection to be on separate pages
# | * [#33162] Ensure NtProtectVirtualMemory and NtCreateSection are on separate pages
# |
# | Modified files:
# | * dlls/ntdll/virtual.c
@ -609,16 +585,17 @@ quartz-MediaSeeking_Positions.ok:
# |
# | Included patches:
# | * Implement Stubs for ITextRange interface. [rev 3, by Jactry Zeng]
# | * Implement IText{Range,Selection}::{GetChar,GetStart,GetEnd,GetDuplicate,Collapse,SetStart,SetEnd}. [by Jactry Zeng]
# | * Implement Stubs for ITextFont interface. [rev 2, by Jactry Zeng]
# | * Implement Stubs for ITextPara interface. [rev 2, by Jactry Zeng]
# | * Implement ITextRange/Selection::{GetChar,GetStart,GetEnd,GetDuplicate,Collapse,SetStart,SetEnd}. [by Jactry Zeng]
# | * Implement ITextRange/Selection::{GetText,SetRange,IsEqual,GetStoryLength}. [by Jactry Zeng]
# |
# | This patchset fixes the following Wine bugs:
# | * [#12458] Support for ITextDocument_fnRange function
# | * [#18303] Support for ITextRange, ITextFont and ITextPara
# |
# | Modified files:
# | * dlls/riched20/richole.c, dlls/riched20/tests/richole.c
# | * dlls/riched20/richole.c, dlls/riched20/run.c, dlls/riched20/tests/richole.c
# |
.INTERMEDIATE: riched20-IText_Interface.ok
riched20-IText_Interface.ok:
@ -630,11 +607,18 @@ riched20-IText_Interface.ok:
$(call APPLY_FILE,riched20-IText_Interface/0006-riched20-Implement-IText-Selection-Range-Set-Start-E.patch)
$(call APPLY_FILE,riched20-IText_Interface/0007-riched20-Stub-for-ITextFont-interface-and-implement-.patch)
$(call APPLY_FILE,riched20-IText_Interface/0008-riched20-Stub-for-ITextPara-interface-and-implement-.patch)
$(call APPLY_FILE,riched20-IText_Interface/0009-riched20-Fix-ME_RunOfsFromCharOfs-when-nCharOfs-strl.patch)
$(call APPLY_FILE,riched20-IText_Interface/0010-riched20-Implement-ITextRange-GetText.patch)
$(call APPLY_FILE,riched20-IText_Interface/0011-riched20-Implement-ITextRange-SetRange.patch)
$(call APPLY_FILE,riched20-IText_Interface/0012-riched20-Implement-ITextRange-IsEqual.patch)
$(call APPLY_FILE,riched20-IText_Interface/0013-riched20-Implement-ITextRange-GetStoryLength.patch)
$(call APPLY_FILE,riched20-IText_Interface/0014-riched20-Implement-ITextSelection-GetStoryLength.patch)
@( \
echo '+ { "riched20-IText_Interface", "Jactry Zeng", "Implement Stubs for ITextRange interface. [rev 3]" },'; \
echo '+ { "riched20-IText_Interface", "Jactry Zeng", "Implement IText{Range,Selection}::{GetChar,GetStart,GetEnd,GetDuplicate,Collapse,SetStart,SetEnd}." },'; \
echo '+ { "riched20-IText_Interface", "Jactry Zeng", "Implement Stubs for ITextFont interface. [rev 2]" },'; \
echo '+ { "riched20-IText_Interface", "Jactry Zeng", "Implement Stubs for ITextPara interface. [rev 2]" },'; \
echo '+ { "riched20-IText_Interface", "Jactry Zeng", "Implement ITextRange/Selection::{GetChar,GetStart,GetEnd,GetDuplicate,Collapse,SetStart,SetEnd}." },'; \
echo '+ { "riched20-IText_Interface", "Jactry Zeng", "Implement ITextRange/Selection::{GetText,SetRange,IsEqual,GetStoryLength}." },'; \
) > riched20-IText_Interface.ok
# Patchset server-ACL_Compat
@ -677,7 +661,7 @@ server-Address_Change_Notification.ok:
# Patchset server-CreateProcess_ACLs
# |
# | Included patches:
# | * Implement passing ACLs to CreateProcess. [by Joris van der Wel]
# | * Implement passing ACLs to CreateProcess. [rev 2, by Joris van der Wel / Sebastian Lackner]
# |
# | This patchset fixes the following Wine bugs:
# | * [#22006] Support for process ACLs
@ -689,11 +673,11 @@ server-Address_Change_Notification.ok:
.INTERMEDIATE: server-CreateProcess_ACLs.ok
server-CreateProcess_ACLs.ok:
$(call APPLY_FILE,server-CreateProcess_ACLs/0001-server-A-new-function-set_sd_defaults_from_token-tha.patch)
$(call APPLY_FILE,server-CreateProcess_ACLs/0002-server-Support-sending-process-and-thread-security-d.patch)
$(call APPLY_FILE,server-CreateProcess_ACLs/0003-server-implement-passing-a-process-security-descript.patch)
$(call APPLY_FILE,server-CreateProcess_ACLs/0004-server-implement-passing-a-thread-security-descripto.patch)
$(call APPLY_FILE,server-CreateProcess_ACLs/0002-server-Support-sending-thread-and-process-security-d.patch)
$(call APPLY_FILE,server-CreateProcess_ACLs/0003-kernel32-Implement-passing-a-process-security-descri.patch)
$(call APPLY_FILE,server-CreateProcess_ACLs/0004-advapi32-tests-Add-additional-tests-for-passing-a-th.patch)
@( \
echo '+ { "server-CreateProcess_ACLs", "Joris van der Wel", "Implement passing ACLs to CreateProcess." },'; \
echo '+ { "server-CreateProcess_ACLs", "Joris van der Wel / Sebastian Lackner", "Implement passing ACLs to CreateProcess. [rev 2]" },'; \
) > server-CreateProcess_ACLs.ok
# Patchset server-Inherited_ACLs
@ -734,23 +718,23 @@ server-Misc_ACL.ok:
echo '+ { "server-Misc_ACL", "Erich E. Hoover", "Add default security descriptor ownership and DACLs for processes." },'; \
) > server-Misc_ACL.ok
# Patchset server-Process
# Patchset server-OpenProcess
# |
# | Included patches:
# | * Return error when opening a terminating process. [by Michael Müller]
# | * Return error when opening a terminating process. [rev 3, by Michael Müller]
# |
# | This patchset fixes the following Wine bugs:
# | * [#37087] Gothic 2 demo expects an error when opening a terminating process
# | * [#37087] Return an error when trying to open a terminated process
# |
# | Modified files:
# | * server/process.c
# | * server/process.c, server/process.h
# |
.INTERMEDIATE: server-Process.ok
server-Process.ok:
$(call APPLY_FILE,server-Process/0001-server-Return-error-when-opening-a-terminating-proce.patch)
.INTERMEDIATE: server-OpenProcess.ok
server-OpenProcess.ok:
$(call APPLY_FILE,server-OpenProcess/0001-server-Return-error-when-opening-a-terminating-proce.patch)
@( \
echo '+ { "server-Process", "Michael Müller", "Return error when opening a terminating process." },'; \
) > server-Process.ok
echo '+ { "server-OpenProcess", "Michael Müller", "Return error when opening a terminating process. [rev 3]" },'; \
) > server-OpenProcess.ok
# Patchset server-Stored_ACLs
# |
@ -790,6 +774,24 @@ shell32-Default_Folder_ACLs.ok:
echo '+ { "shell32-Default_Folder_ACLs", "Erich E. Hoover", "Generate default ACLs for user shell folders. [rev 6]" },'; \
) > shell32-Default_Folder_ACLs.ok
# Patchset shell32-Default_Path
# |
# | Included patches:
# | * Implement KF_FLAG_DEFAULT_PATH flag for SHGetKnownFolderPath. [by Sebastian Lackner]
# |
# | This patchset fixes the following Wine bugs:
# | * [#30385] Support for KF_FLAG_DEFAULT_PATH in SHGetKnownFolderPath
# |
# | Modified files:
# | * dlls/shell32/shellpath.c, dlls/shell32/tests/shellpath.c
# |
.INTERMEDIATE: shell32-Default_Path.ok
shell32-Default_Path.ok:
$(call APPLY_FILE,shell32-Default_Path/0001-shell32-Implement-KF_FLAG_DEFAULT_PATH-flag-for-SHGe.patch)
@( \
echo '+ { "shell32-Default_Path", "Sebastian Lackner", "Implement KF_FLAG_DEFAULT_PATH flag for SHGetKnownFolderPath." },'; \
) > shell32-Default_Path.ok
# Patchset shell32-Icons
# |
# | Included patches:

View File

@ -1,4 +1,4 @@
Author: Michael Müller
Subject: Add semi-stub for BCryptGetFipsAlgorithmMode.
Revision: 1
Fixes: [32194] Multiple applications need BCryptGetFipsAlgorithmMode
Fixes: [32194] Support for BCryptGetFipsAlgorithmMode

View File

@ -1,61 +0,0 @@
From 30201042f9da59a0943902d45f65659226fa3583 Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Sat, 9 Aug 2014 16:30:53 -0600
Subject: dwmapi: Add stub for DwmInvalidateIconicBitmaps.
---
dlls/dwmapi/dwmapi.spec | 1 +
dlls/dwmapi/dwmapi_main.c | 12 ++++++++++++
include/dwmapi.h | 1 +
3 files changed, 14 insertions(+)
diff --git a/dlls/dwmapi/dwmapi.spec b/dlls/dwmapi/dwmapi.spec
index 5f74970..764f04c 100644
--- a/dlls/dwmapi/dwmapi.spec
+++ b/dlls/dwmapi/dwmapi.spec
@@ -33,6 +33,7 @@
@ stdcall DwmGetGraphicsStreamTransformHint(long ptr)
@ stdcall DwmGetTransportAttributes(ptr ptr ptr)
@ stdcall DwmGetWindowAttribute(ptr long ptr long)
+@ stdcall DwmInvalidateIconicBitmaps(ptr)
@ stdcall DwmIsCompositionEnabled(ptr)
@ stub DwmModifyPreviousDxFrameDuration
@ stub DwmQueryThumbnailSourceSize
diff --git a/dlls/dwmapi/dwmapi_main.c b/dlls/dwmapi/dwmapi_main.c
index 8cc46f0..6ee45af 100644
--- a/dlls/dwmapi/dwmapi_main.c
+++ b/dlls/dwmapi/dwmapi_main.c
@@ -108,6 +108,18 @@ HRESULT WINAPI DwmFlush(void)
}
/**********************************************************************
+ * DwmInvalidateIconicBitmaps (DWMAPI.@)
+ */
+HRESULT WINAPI DwmInvalidateIconicBitmaps(HWND hwnd)
+{
+ static BOOL once;
+
+ if (!once++) FIXME("(%p) stub\n", hwnd);
+
+ return E_NOTIMPL;
+}
+
+/**********************************************************************
* DwmSetWindowAttribute (DWMAPI.@)
*/
HRESULT WINAPI DwmSetWindowAttribute(HWND hwnd, DWORD attributenum, LPCVOID attribute, DWORD size)
diff --git a/include/dwmapi.h b/include/dwmapi.h
index f85999a..db13b5f 100644
--- a/include/dwmapi.h
+++ b/include/dwmapi.h
@@ -116,6 +116,7 @@ DWMAPI DwmEnableMMCSS(BOOL);
DWMAPI DwmExtendFrameIntoClientArea(HWND,const MARGINS*);
DWMAPI DwmGetColorizationColor(DWORD*,BOOL);
DWMAPI DwmGetCompositionTimingInfo(HWND,DWM_TIMING_INFO*);
+DWMAPI DwmInvalidateIconicBitmaps(HWND);
DWMAPI DwmIsCompositionEnabled(BOOL*);
DWMAPI DwmRegisterThumbnail(HWND, HWND, PHTHUMBNAIL);
DWMAPI DwmSetWindowAttribute(HWND, DWORD, LPCVOID, DWORD);
--
1.7.9.5

View File

@ -1,4 +0,0 @@
Author: Erich E. Hoover
Subject: Add stub for DwmInvalidateIconicBitmaps.
Revision: 1
Fixes: [32977] Support for DwmInvalidateIconicBitmaps

View File

@ -1,4 +1,4 @@
From d42b5e55c0b0eeae00b0c12cac539d918a5bacf9 Mon Sep 17 00:00:00 2001
From 289599c8372b08c97561d6703ac45c0b9ad395d2 Mon Sep 17 00:00:00 2001
From: Louis Lenders <xerox_xerox2000@yahoo.co.uk>
Date: Sun, 27 Jul 2014 11:42:28 -0600
Subject: kernel32: Add tests for GetSystemTimes.
@ -8,7 +8,7 @@ Subject: kernel32: Add tests for GetSystemTimes.
1 file changed, 77 insertions(+)
diff --git a/dlls/kernel32/tests/time.c b/dlls/kernel32/tests/time.c
index 55d4be9..dde9f5d 100644
index 55d4be9..6f5c03d 100644
--- a/dlls/kernel32/tests/time.c
+++ b/dlls/kernel32/tests/time.c
@@ -22,9 +22,11 @@
@ -55,17 +55,17 @@ index 55d4be9..dde9f5d 100644
+ ul1.LowPart = idletime.dwLowDateTime;
+ ul1.HighPart = idletime.dwHighDateTime;
+
+ trace( "IdleTime: %llu seconds\n",ul1.QuadPart/10000000);
+ trace( "IdleTime: %f seconds\n", (double)ul1.QuadPart/10000000.0 );
+
+ ul2.LowPart = kerneltime.dwLowDateTime;
+ ul2.HighPart = kerneltime.dwHighDateTime;
+
+ trace( "KernelTime: %llu seconds\n", ul2.QuadPart/10000000 );
+ trace( "KernelTime: %f seconds\n", (double)ul2.QuadPart/10000000.0 );
+
+ ul3.LowPart = usertime.dwLowDateTime;
+ ul3.HighPart = usertime.dwHighDateTime;
+
+ trace( "UserTime: %llu seconds\n", ul3.QuadPart/10000000 );
+ trace( "UserTime: %f seconds\n", (double)ul3.QuadPart/10000000.0 );
+
+
+ ok( !NtQuerySystemInformation(SystemBasicInformation, &sbi, sizeof(sbi), &ReturnLength),

View File

@ -1,4 +1,4 @@
From c3acb24297b1b4e41746ba13f7e997bbe7e0c64a Mon Sep 17 00:00:00 2001
From c7d23fced92e26c724cdeb389f827c436294b05d Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Sun, 27 Jul 2014 12:38:29 -0600
Subject: kernel32: Implement GetSystemTimes.
@ -9,7 +9,7 @@ Subject: kernel32: Implement GetSystemTimes.
2 files changed, 55 insertions(+), 8 deletions(-)
diff --git a/dlls/kernel32/tests/time.c b/dlls/kernel32/tests/time.c
index dde9f5d..fe459e4 100644
index 6f5c03d..d3d3939 100644
--- a/dlls/kernel32/tests/time.c
+++ b/dlls/kernel32/tests/time.c
@@ -751,13 +751,13 @@ static void test_GetSystemTimes(void)

View File

@ -1,4 +1,4 @@
From bcf395630fde511be0606ad8292385f37d127969 Mon Sep 17 00:00:00 2001
From c8a873013240a0511789c5e9d38b8d1fab18658b Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Sat, 25 Jan 2014 09:47:12 -0700
Subject: kernel32: Implement GetVolumePathName.
@ -29,10 +29,10 @@ index 61da509..4b3bdf5 100644
/* test an invalid path */
diff --git a/dlls/kernel32/volume.c b/dlls/kernel32/volume.c
index 1509d73..a4b158a 100644
index d396764..75bc20f 100644
--- a/dlls/kernel32/volume.c
+++ b/dlls/kernel32/volume.c
@@ -1784,7 +1784,7 @@ BOOL WINAPI GetVolumePathNameA(LPCSTR filename, LPSTR volumepathname, DWORD bufl
@@ -1786,7 +1786,7 @@ BOOL WINAPI GetVolumePathNameA(LPCSTR filename, LPSTR volumepathname, DWORD bufl
BOOL ret;
WCHAR *filenameW = NULL, *volumeW = NULL;
@ -41,7 +41,7 @@ index 1509d73..a4b158a 100644
if (filename && !(filenameW = FILE_name_AtoW( filename, FALSE )))
return FALSE;
@@ -1800,37 +1800,137 @@ BOOL WINAPI GetVolumePathNameA(LPCSTR filename, LPSTR volumepathname, DWORD bufl
@@ -1802,37 +1802,137 @@ BOOL WINAPI GetVolumePathNameA(LPCSTR filename, LPSTR volumepathname, DWORD bufl
/***********************************************************************
* GetVolumePathNameW (KERNEL32.@)

View File

@ -1,4 +1,4 @@
From 9d3403bbcab0fbfb465a224fae93ebbc9e442e35 Mon Sep 17 00:00:00 2001
From 7739a32bd18ed7912e610941f6cfb273748b82cd Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Sat, 25 Jan 2014 09:53:39 -0700
Subject: kernel32: Convert GetVolumePathName tests into a list.
@ -8,7 +8,7 @@ Subject: kernel32: Convert GetVolumePathName tests into a list.
1 file changed, 74 insertions(+), 63 deletions(-)
diff --git a/dlls/kernel32/tests/volume.c b/dlls/kernel32/tests/volume.c
index 4b3bdf5..7f68dd0 100644
index 4b3bdf5..f15269c 100644
--- a/dlls/kernel32/tests/volume.c
+++ b/dlls/kernel32/tests/volume.c
@@ -591,79 +591,90 @@ static void test_disk_extents(void)
@ -106,7 +106,7 @@ index 4b3bdf5..7f68dd0 100644
+ ret = pGetVolumePathNameA( test_paths[i].file_name, output, test_paths[i].path_len );
+ error = GetLastError();
+ ok(ret == expected_ret, "GetVolumePathName test %d %s unexpectedly.\n",
+ i, test_paths[i].error == NO_ERROR ? "failed" : "succeeded");
+ i, test_paths[i].error == NO_ERROR ? "failed" : "succeeded");
- SetLastError( 0xdeadbeef );
- ret = pGetVolumePathNameA(pathC1, volume, 0);
@ -146,7 +146,7 @@ index 4b3bdf5..7f68dd0 100644
- ok(!ret, "expected failure\n");
- ok(error == ERROR_INVALID_NAME || broken(ERROR_FILENAME_EXCED_RANGE) /* <=2000 */,
- "expected ERROR_INVALID_NAME got %u\n", error);
+ if(ret)
+ if (ret)
+ {
+ /* If we succeeded then make sure the path is correct */
+ success = (strcmp( volume_path, test_paths[i].path_name ) == 0)
@ -157,7 +157,7 @@ index 4b3bdf5..7f68dd0 100644
+ else
+ {
+ /* On success Windows always returns ERROR_MORE_DATA, so only worry about failure */
+ success = (error == test_paths[i].error);
+ success = (error == test_paths[i].error || broken(error == test_paths[i].broken_error));
+ ok(success, "GetVolumePathName test %d unexpectedly returned error 0x%x (expected 0x%x).\n",
+ i, error, test_paths[i].error);
+ }

View File

@ -1,4 +1,4 @@
From 0ca1995e881b0951348ddfb4ab702f7cc3746549 Mon Sep 17 00:00:00 2001
From a6eb5189737a6aeb31dd305649f407ca5ddc9faf Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Sat, 25 Jan 2014 09:54:39 -0700
Subject: kernel32: Add a bunch more GetVolumePathName tests.
@ -8,7 +8,7 @@ Subject: kernel32: Add a bunch more GetVolumePathName tests.
1 file changed, 28 insertions(+)
diff --git a/dlls/kernel32/tests/volume.c b/dlls/kernel32/tests/volume.c
index 7f68dd0..9159cad 100644
index f15269c..e17cc16 100644
--- a/dlls/kernel32/tests/volume.c
+++ b/dlls/kernel32/tests/volume.c
@@ -635,6 +635,34 @@ static void test_GetVolumePathNameA(void)

View File

@ -1,244 +0,0 @@
From f78c4bb06e2c463ea2e7a7cee374714814a5fdb1 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Tue, 12 Aug 2014 21:31:00 +0200
Subject: ntdll/tests: Add tests for FILE_PIPE_INFORMATION.
Based on patch by Adam Martinson.
I've added more tests, and have marked failing tests as broken(...). On Windows 8
we still get some failures, but as there is a lot more going wrong there, we probably shouldn't
worry about that. ;)
---
dlls/ntdll/tests/pipe.c | 188 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 188 insertions(+)
diff --git a/dlls/ntdll/tests/pipe.c b/dlls/ntdll/tests/pipe.c
index c275e3d..75faf76 100644
--- a/dlls/ntdll/tests/pipe.c
+++ b/dlls/ntdll/tests/pipe.c
@@ -34,6 +34,11 @@
#ifndef __WINE_WINTERNL_H
typedef struct {
+ ULONG ReadMode;
+ ULONG CompletionMode;
+} FILE_PIPE_INFORMATION;
+
+typedef struct {
ULONG NamedPipeType;
ULONG NamedPipeConfiguration;
ULONG MaximumInstances;
@@ -68,6 +73,7 @@ static NTSTATUS (WINAPI *pNtCreateNamedPipeFile) (PHANDLE handle, ULONG access,
ULONG inbound_quota, ULONG outbound_quota,
PLARGE_INTEGER timeout);
static NTSTATUS (WINAPI *pNtQueryInformationFile) (IN HANDLE FileHandle, OUT PIO_STATUS_BLOCK IoStatusBlock, OUT PVOID FileInformation, IN ULONG Length, IN FILE_INFORMATION_CLASS FileInformationClass);
+static NTSTATUS (WINAPI *pNtSetInformationFile) (HANDLE handle, PIO_STATUS_BLOCK io, PVOID ptr, ULONG len, FILE_INFORMATION_CLASS class);
static NTSTATUS (WINAPI *pNtCancelIoFile) (HANDLE hFile, PIO_STATUS_BLOCK io_status);
static void (WINAPI *pRtlInitUnicodeString) (PUNICODE_STRING target, PCWSTR source);
@@ -87,6 +93,7 @@ static BOOL init_func_ptrs(void)
loadfunc(NtFsControlFile)
loadfunc(NtCreateNamedPipeFile)
loadfunc(NtQueryInformationFile)
+ loadfunc(NtSetInformationFile)
loadfunc(NtCancelIoFile)
loadfunc(RtlInitUnicodeString)
@@ -479,6 +486,184 @@ static void test_cancelio(void)
CloseHandle(hPipe);
}
+#define check_pipe_handle_state(handle, r, c) \
+ do \
+ { \
+ memset(&fpi, 0x55, sizeof(fpi)); \
+ if (handle == INVALID_HANDLE_VALUE) break; \
+ res = pNtQueryInformationFile(handle, &iosb, &fpi, sizeof(fpi), (FILE_INFORMATION_CLASS)23); \
+ ok(!res, "NtQueryInformationFile returned %x\n", res); \
+ ok(fpi.ReadMode == r, "ReadMode == %x\n", fpi.ReadMode); \
+ ok(fpi.CompletionMode == c, "CompletionMode == %x\n", fpi.CompletionMode); \
+ } \
+ while (0)
+
+static void test_filepipeinfo(void)
+{
+ IO_STATUS_BLOCK iosb;
+ OBJECT_ATTRIBUTES attr;
+ UNICODE_STRING name;
+ LARGE_INTEGER timeout;
+ HANDLE hServer, hClient;
+ FILE_PIPE_INFORMATION fpi;
+ NTSTATUS res;
+
+ pRtlInitUnicodeString(&name, testpipe_nt);
+
+ attr.Length = sizeof(attr);
+ attr.RootDirectory = 0;
+ attr.ObjectName = &name;
+ attr.Attributes = 0x40; /* case insensitive */
+ attr.SecurityDescriptor = NULL;
+ attr.SecurityQualityOfService = NULL;
+
+ timeout.QuadPart = -100000000000ll;
+
+ /* test with INVALID_HANDLE_VALUE */
+ res = pNtQueryInformationFile(INVALID_HANDLE_VALUE, &iosb, &fpi, sizeof(fpi), (FILE_INFORMATION_CLASS)23);
+ ok(res == STATUS_OBJECT_TYPE_MISMATCH, "NtQueryInformationFile returned %x\n", res);
+
+ fpi.ReadMode = 0;
+ fpi.CompletionMode = 0;
+ res = pNtSetInformationFile(INVALID_HANDLE_VALUE, &iosb, &fpi, sizeof(fpi), (FILE_INFORMATION_CLASS)23);
+ ok(res == STATUS_OBJECT_TYPE_MISMATCH, "NtSetInformationFile returned %x\n", res);
+
+ /* server end with read-only attributes */
+ res = pNtCreateNamedPipeFile(&hServer, FILE_READ_ATTRIBUTES | SYNCHRONIZE, &attr, &iosb,
+ FILE_SHARE_READ | FILE_SHARE_WRITE, 2 /* FILE_CREATE */,
+ 0, 0, 0, 1, 0xFFFFFFFF, 500, 500, &timeout);
+ ok(!res, "NtCreateNamedPipeFile returned %x\n", res);
+
+ check_pipe_handle_state(hServer, 0, 1);
+
+ hClient = CreateFileW(testpipe, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
+ ok(hClient != INVALID_HANDLE_VALUE, "can't open pipe, GetLastError: %x\n", GetLastError());
+
+ check_pipe_handle_state(hServer, 0, 1);
+ check_pipe_handle_state(hClient, 0, 0);
+
+ fpi.ReadMode = 0;
+ fpi.CompletionMode = 0;
+ res = pNtSetInformationFile(hServer, &iosb, &fpi, sizeof(fpi), (FILE_INFORMATION_CLASS)23);
+ ok(res == STATUS_ACCESS_DENIED, "NtSetInformationFile returned %x\n", res);
+
+ check_pipe_handle_state(hServer, 0, 1);
+ check_pipe_handle_state(hClient, 0, 0);
+
+ fpi.ReadMode = 1; /* invalid on a byte stream pipe */
+ fpi.CompletionMode = 1;
+ res = pNtSetInformationFile(hServer, &iosb, &fpi, sizeof(fpi), (FILE_INFORMATION_CLASS)23);
+ ok(res == STATUS_ACCESS_DENIED, "NtSetInformationFile returned %x\n", res);
+
+ check_pipe_handle_state(hServer, 0, 1);
+ check_pipe_handle_state(hClient, 0, 0);
+
+ if (hClient != INVALID_HANDLE_VALUE)
+ {
+ fpi.ReadMode = 1; /* invalid on a byte stream pipe */
+ fpi.CompletionMode = 1;
+ res = pNtSetInformationFile(hClient, &iosb, &fpi, sizeof(fpi), (FILE_INFORMATION_CLASS)23);
+ ok(res == STATUS_INVALID_PARAMETER, "NtSetInformationFile returned %x\n", res);
+ }
+
+ check_pipe_handle_state(hServer, 0, 1);
+ check_pipe_handle_state(hClient, 0, 0);
+
+ if (hClient != INVALID_HANDLE_VALUE)
+ {
+ fpi.ReadMode = 0;
+ fpi.CompletionMode = 1;
+ res = pNtSetInformationFile(hClient, &iosb, &fpi, sizeof(fpi), (FILE_INFORMATION_CLASS)23);
+ ok(!res, "NtSetInformationFile returned %x\n", res);
+ }
+
+ check_pipe_handle_state(hServer, 0, 1);
+ check_pipe_handle_state(hClient, 0, 1);
+
+ if (hClient != INVALID_HANDLE_VALUE)
+ {
+ fpi.ReadMode = 0;
+ fpi.CompletionMode = 2; /* not in range 0-1 */
+ res = pNtSetInformationFile(hClient, &iosb, &fpi, sizeof(fpi), (FILE_INFORMATION_CLASS)23);
+ ok(res == STATUS_INVALID_PARAMETER || broken(!res) /* < Vista */, "NtSetInformationFile returned %x\n", res);
+
+ fpi.ReadMode = 2; /* not in range 0-1 */
+ fpi.CompletionMode = 0;
+ res = pNtSetInformationFile(hClient, &iosb, &fpi, sizeof(fpi), (FILE_INFORMATION_CLASS)23);
+ ok(res == STATUS_INVALID_PARAMETER || broken(!res) /* < Vista */, "NtSetInformationFile returned %x\n", res);
+ }
+
+ CloseHandle(hClient);
+
+ check_pipe_handle_state(hServer, 0, 1);
+
+ fpi.ReadMode = 0;
+ fpi.CompletionMode = 0;
+ res = pNtSetInformationFile(hServer, &iosb, &fpi, sizeof(fpi), (FILE_INFORMATION_CLASS)23);
+ ok(res == STATUS_ACCESS_DENIED, "NtSetInformationFile returned %x\n", res);
+
+ CloseHandle(hServer);
+
+ /* message mode server with read/write attributes */
+ res = pNtCreateNamedPipeFile(&hServer, FILE_READ_ATTRIBUTES | FILE_WRITE_ATTRIBUTES | SYNCHRONIZE, &attr, &iosb,
+ FILE_SHARE_READ | FILE_SHARE_WRITE, 2 /* FILE_CREATE */,
+ 0, 1, 1, 0, 0xFFFFFFFF, 500, 500, &timeout);
+ ok(!res, "NtCreateNamedPipeFile returned %x\n", res);
+
+ check_pipe_handle_state(hServer, 1, 0);
+
+ hClient = CreateFileW(testpipe, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
+ ok(hClient != INVALID_HANDLE_VALUE, "can't open pipe, GetLastError: %x\n", GetLastError());
+
+ check_pipe_handle_state(hServer, 1, 0);
+ check_pipe_handle_state(hClient, 0, 0);
+
+ if (hClient != INVALID_HANDLE_VALUE)
+ {
+ fpi.ReadMode = 1;
+ fpi.CompletionMode = 1;
+ res = pNtSetInformationFile(hClient, &iosb, &fpi, sizeof(fpi), (FILE_INFORMATION_CLASS)23);
+ ok(!res, "NtSetInformationFile returned %x\n", res);
+ }
+
+ check_pipe_handle_state(hServer, 1, 0);
+ check_pipe_handle_state(hClient, 1, 1);
+
+ fpi.ReadMode = 0;
+ fpi.CompletionMode = 1;
+ res = pNtSetInformationFile(hServer, &iosb, &fpi, sizeof(fpi), (FILE_INFORMATION_CLASS)23);
+ ok(!res, "NtSetInformationFile returned %x\n", res);
+
+ check_pipe_handle_state(hServer, 0, 1);
+ check_pipe_handle_state(hClient, 1, 1);
+
+ if (hClient != INVALID_HANDLE_VALUE)
+ {
+ fpi.ReadMode = 0;
+ fpi.CompletionMode = 2; /* not in range 0-1 */
+ res = pNtSetInformationFile(hClient, &iosb, &fpi, sizeof(fpi), (FILE_INFORMATION_CLASS)23);
+ ok(res == STATUS_INVALID_PARAMETER || broken(!res) /* < Vista */, "NtSetInformationFile returned %x\n", res);
+
+ fpi.ReadMode = 2; /* not in range 0-1 */
+ fpi.CompletionMode = 0;
+ res = pNtSetInformationFile(hClient, &iosb, &fpi, sizeof(fpi), (FILE_INFORMATION_CLASS)23);
+ ok(res == STATUS_INVALID_PARAMETER || broken(!res) /* < Vista */, "NtSetInformationFile returned %x\n", res);
+ }
+
+ CloseHandle(hClient);
+
+ check_pipe_handle_state(hServer, 0, 1);
+
+ fpi.ReadMode = 1;
+ fpi.CompletionMode = 0;
+ res = pNtSetInformationFile(hServer, &iosb, &fpi, sizeof(fpi), (FILE_INFORMATION_CLASS)23);
+ ok(!res, "NtSetInformationFile returned %x\n", res);
+
+ check_pipe_handle_state(hServer, 1, 0);
+
+ CloseHandle(hServer);
+}
+
START_TEST(pipe)
{
if (!init_func_ptrs())
@@ -493,6 +678,9 @@ START_TEST(pipe)
trace("starting overlapped tests\n");
test_overlapped();
+ trace("starting FILE_PIPE_INFORMATION tests\n");
+ test_filepipeinfo();
+
if (!pOpenThread || !pQueueUserAPC)
return;
--
1.7.9.5

View File

@ -1,126 +0,0 @@
From 2ae3b0fe9a03067879de3c7409e212510e134900 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Wed, 30 Jul 2014 18:00:19 +0200
Subject: kernel32/tests: Always allow only one specific test result, add
todo_wine where necessary.
The current pipe tests are not really a good base for fixing the implemenation -
some of the todo_wine's depend on the return value itself. This hides if one of
the following patches breaks things. Besides that some of the tests are currently
broken on kernel >= 3.12 (bug #35781), mark those as todo_wine.
Changes in v2:
* Ensure that the APC is properly removed - as it turned out this broke like 20 patches
later one of the other new tests... ^^
---
dlls/kernel32/tests/pipe.c | 57 +++++++++++++++++---------------------------
1 file changed, 22 insertions(+), 35 deletions(-)
diff --git a/dlls/kernel32/tests/pipe.c b/dlls/kernel32/tests/pipe.c
index f7c7531..5790be8 100644
--- a/dlls/kernel32/tests/pipe.c
+++ b/dlls/kernel32/tests/pipe.c
@@ -153,20 +153,13 @@ static void test_CreateNamedPipe(int pipemode)
ok(written == sizeof(obuf2), "write file len 3b\n");
ok(PeekNamedPipe(hFile, ibuf, sizeof(ibuf), &readden, &avail, NULL), "Peek3\n");
if (pipemode == PIPE_TYPE_BYTE) {
- if (readden != sizeof(obuf)) /* Linux only returns the first message */
- ok(readden == sizeof(obuf) + sizeof(obuf2), "peek3 got %d bytes\n", readden);
- else
- todo_wine ok(readden == sizeof(obuf) + sizeof(obuf2), "peek3 got %d bytes\n", readden);
+ todo_wine ok(readden == sizeof(obuf) + sizeof(obuf2), "peek3 got %d bytes\n", readden);
}
else
{
- if (readden != sizeof(obuf) + sizeof(obuf2)) /* MacOS returns both messages */
- ok(readden == sizeof(obuf), "peek3 got %d bytes\n", readden);
- else
- todo_wine ok(readden == sizeof(obuf), "peek3 got %d bytes\n", readden);
+ ok(readden == sizeof(obuf), "peek3 got %d bytes\n", readden);
}
- if (avail != sizeof(obuf)) /* older Linux kernels only return the first write here */
- ok(avail == sizeof(obuf) + sizeof(obuf2), "peek3 got %d bytes available\n", avail);
+ ok(avail == sizeof(obuf) + sizeof(obuf2), "peek3 got %d bytes available\n", avail);
pbuf = ibuf;
ok(memcmp(obuf, pbuf, sizeof(obuf)) == 0, "pipe content 3a check\n");
if (pipemode == PIPE_TYPE_BYTE && readden >= sizeof(obuf)+sizeof(obuf2)) {
@@ -188,21 +181,13 @@ static void test_CreateNamedPipe(int pipemode)
ok(written == sizeof(obuf2), "write file len 4b\n");
ok(PeekNamedPipe(hnp, ibuf, sizeof(ibuf), &readden, &avail, NULL), "Peek4\n");
if (pipemode == PIPE_TYPE_BYTE) {
- if (readden != sizeof(obuf)) /* Linux only returns the first message */
- /* should return all 23 bytes */
- ok(readden == sizeof(obuf) + sizeof(obuf2), "peek4 got %d bytes\n", readden);
- else
- todo_wine ok(readden == sizeof(obuf) + sizeof(obuf2), "peek4 got %d bytes\n", readden);
+ todo_wine ok(readden == sizeof(obuf) + sizeof(obuf2), "peek4 got %d bytes\n", readden);
}
else
{
- if (readden != sizeof(obuf) + sizeof(obuf2)) /* MacOS returns both messages */
- ok(readden == sizeof(obuf), "peek4 got %d bytes\n", readden);
- else
- todo_wine ok(readden == sizeof(obuf), "peek4 got %d bytes\n", readden);
+ ok(readden == sizeof(obuf), "peek4 got %d bytes\n", readden);
}
- if (avail != sizeof(obuf)) /* older Linux kernels only return the first write here */
- ok(avail == sizeof(obuf) + sizeof(obuf2), "peek4 got %d bytes available\n", avail);
+ ok(avail == sizeof(obuf) + sizeof(obuf2), "peek4 got %d bytes available\n", avail);
pbuf = ibuf;
ok(memcmp(obuf, pbuf, sizeof(obuf)) == 0, "pipe content 4a check\n");
if (pipemode == PIPE_TYPE_BYTE && readden >= sizeof(obuf)+sizeof(obuf2)) {
@@ -243,14 +228,8 @@ static void test_CreateNamedPipe(int pipemode)
ok(WriteFile(hnp, obuf2, sizeof(obuf2), &written, NULL), " WriteFile5b\n");
ok(written == sizeof(obuf2), "write file len 3b\n");
ok(PeekNamedPipe(hFile, ibuf, sizeof(ibuf), &readden, &avail, NULL), "Peek5\n");
- if (readden != sizeof(obuf) + sizeof(obuf2)) /* MacOS returns both writes */
- ok(readden == sizeof(obuf), "peek5 got %d bytes\n", readden);
- else
- todo_wine ok(readden == sizeof(obuf), "peek5 got %d bytes\n", readden);
- if (avail != sizeof(obuf)) /* older Linux kernels only return the first write here */
- ok(avail == sizeof(obuf) + sizeof(obuf2), "peek5 got %d bytes available\n", avail);
- else
- todo_wine ok(avail == sizeof(obuf) + sizeof(obuf2), "peek5 got %d bytes available\n", avail);
+ ok(readden == sizeof(obuf), "peek5 got %d bytes\n", readden);
+ ok(avail == sizeof(obuf) + sizeof(obuf2), "peek5 got %d bytes available\n", avail);
pbuf = ibuf;
ok(memcmp(obuf, pbuf, sizeof(obuf)) == 0, "content 5a check\n");
ok(ReadFile(hFile, ibuf, sizeof(ibuf), &readden, NULL), "ReadFile\n");
@@ -279,12 +258,8 @@ static void test_CreateNamedPipe(int pipemode)
ok(WriteFile(hFile, obuf2, sizeof(obuf2), &written, NULL), " WriteFile6b\n");
ok(written == sizeof(obuf2), "write file len 6b\n");
ok(PeekNamedPipe(hnp, ibuf, sizeof(ibuf), &readden, &avail, NULL), "Peek6\n");
- if (readden != sizeof(obuf) + sizeof(obuf2)) /* MacOS returns both writes */
- ok(readden == sizeof(obuf), "peek6 got %d bytes\n", readden);
- else
- todo_wine ok(readden == sizeof(obuf), "peek6 got %d bytes\n", readden);
- if (avail != sizeof(obuf)) /* older Linux kernels only return the first write here */
- ok(avail == sizeof(obuf) + sizeof(obuf2), "peek6b got %d bytes available\n", avail);
+ ok(readden == sizeof(obuf), "peek6 got %d bytes\n", readden);
+ ok(avail == sizeof(obuf) + sizeof(obuf2), "peek6b got %d bytes available\n", avail);
pbuf = ibuf;
ok(memcmp(obuf, pbuf, sizeof(obuf)) == 0, "content 6a check\n");
ok(ReadFile(hnp, ibuf, sizeof(ibuf), &readden, NULL), "ReadFile\n");
@@ -1856,7 +1831,19 @@ static void test_readfileex_pending(void)
ok(completion_called == 0, "completion routine called during ReadFile\n");
wait = WaitForSingleObjectEx(event, 0, TRUE);
+ todo_wine
ok(wait == WAIT_IO_COMPLETION || wait == WAIT_OBJECT_0, "WaitForSingleObject returned %x\n", wait);
+ if (wait == WAIT_TIMEOUT)
+ {
+ /* work around kernel regression, and read some more */
+ ret = ReadFile(client, read_buf, sizeof(read_buf), &num_bytes, NULL);
+ ok(ret == TRUE, "ReadFile failed\n");
+
+ ok(completion_called == 0, "completion routine called during ReadFile\n");
+
+ wait = WaitForSingleObjectEx(event, 0, TRUE);
+ ok(wait == WAIT_IO_COMPLETION || wait == WAIT_OBJECT_0, "WaitForSingleObject returned %x\n", wait);
+ }
ok(completion_called == 1, "completion routine not called\n");
ok(completion_errorcode == 0, "completion called with error %x\n", completion_errorcode);
--
1.7.9.5

View File

@ -1,218 +0,0 @@
From 5b33f8fd992f8944442e8428e433461157b9e6c9 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Mon, 11 Aug 2014 17:26:18 +0200
Subject: kernel32: Implement {Get,Set}NamedPipeHandleState.
Based on patch by Adam Martinson.
---
dlls/kernel32/sync.c | 88 +++++++++++++++++++++++++++++++++++++++-----
dlls/kernel32/tests/pipe.c | 16 +-------
2 files changed, 81 insertions(+), 23 deletions(-)
diff --git a/dlls/kernel32/sync.c b/dlls/kernel32/sync.c
index ff0e234..96a36b9 100644
--- a/dlls/kernel32/sync.c
+++ b/dlls/kernel32/sync.c
@@ -1713,12 +1713,16 @@ BOOL WINAPI GetNamedPipeHandleStateA(
LPDWORD lpMaxCollectionCount, LPDWORD lpCollectDataTimeout,
LPSTR lpUsername, DWORD nUsernameMaxSize)
{
- FIXME("%p %p %p %p %p %p %d\n",
- hNamedPipe, lpState, lpCurInstances,
- lpMaxCollectionCount, lpCollectDataTimeout,
- lpUsername, nUsernameMaxSize);
+ WARN("%p %p %p %p %p %p %d: semi-stub\n",
+ hNamedPipe, lpState, lpCurInstances,
+ lpMaxCollectionCount, lpCollectDataTimeout,
+ lpUsername, nUsernameMaxSize);
- return FALSE;
+ if (lpUsername && nUsernameMaxSize)
+ *lpUsername = 0;
+
+ return GetNamedPipeHandleStateW(hNamedPipe, lpState, lpCurInstances,
+ lpMaxCollectionCount, lpCollectDataTimeout, NULL, 0);
}
/***********************************************************************
@@ -1729,12 +1733,53 @@ BOOL WINAPI GetNamedPipeHandleStateW(
LPDWORD lpMaxCollectionCount, LPDWORD lpCollectDataTimeout,
LPWSTR lpUsername, DWORD nUsernameMaxSize)
{
- FIXME("%p %p %p %p %p %p %d\n",
+ IO_STATUS_BLOCK iosb;
+ NTSTATUS status;
+
+ FIXME("%p %p %p %p %p %p %d: semi-stub\n",
hNamedPipe, lpState, lpCurInstances,
lpMaxCollectionCount, lpCollectDataTimeout,
lpUsername, nUsernameMaxSize);
- return FALSE;
+ if (lpMaxCollectionCount)
+ *lpMaxCollectionCount = 0;
+
+ if (lpCollectDataTimeout)
+ *lpCollectDataTimeout = 0;
+
+ if (lpUsername && nUsernameMaxSize)
+ *lpUsername = 0;
+
+ if (lpState)
+ {
+ FILE_PIPE_INFORMATION fpi;
+ status = NtQueryInformationFile(hNamedPipe, &iosb, &fpi, sizeof(fpi),
+ FilePipeInformation);
+ if (status)
+ {
+ SetLastError( RtlNtStatusToDosError(status) );
+ return FALSE;
+ }
+
+ *lpState = (fpi.ReadMode ? PIPE_READMODE_MESSAGE : PIPE_READMODE_BYTE) |
+ (fpi.CompletionMode ? PIPE_NOWAIT : PIPE_WAIT);
+ }
+
+ if (lpCurInstances)
+ {
+ FILE_PIPE_LOCAL_INFORMATION fpli;
+ status = NtQueryInformationFile(hNamedPipe, &iosb, &fpli, sizeof(fpli),
+ FilePipeLocalInformation);
+ if (status)
+ {
+ SetLastError( RtlNtStatusToDosError(status) );
+ return FALSE;
+ }
+
+ *lpCurInstances = fpli.CurrentInstances;
+ }
+
+ return TRUE;
}
/***********************************************************************
@@ -1746,9 +1791,34 @@ BOOL WINAPI SetNamedPipeHandleState(
{
/* should be a fixme, but this function is called a lot by the RPC
* runtime, and it slows down InstallShield a fair bit. */
- WARN("stub: %p %p/%d %p %p\n",
+ WARN("semi-stub: %p %p/%d %p %p\n",
hNamedPipe, lpMode, lpMode ? *lpMode : 0, lpMaxCollectionCount, lpCollectDataTimeout);
- return FALSE;
+
+ if (lpMode)
+ {
+ FILE_PIPE_INFORMATION fpi;
+ IO_STATUS_BLOCK iosb;
+ NTSTATUS status;
+
+ if (*lpMode & ~(PIPE_READMODE_MESSAGE | PIPE_NOWAIT))
+ status = STATUS_INVALID_PARAMETER;
+ else
+ {
+ fpi.CompletionMode = (*lpMode & PIPE_NOWAIT) ?
+ FILE_PIPE_COMPLETE_OPERATION : FILE_PIPE_QUEUE_OPERATION;
+ fpi.ReadMode = (*lpMode & PIPE_READMODE_MESSAGE) ?
+ FILE_PIPE_MESSAGE_MODE : FILE_PIPE_BYTE_STREAM_MODE;
+ status = NtSetInformationFile(hNamedPipe, &iosb, &fpi, sizeof(fpi), FilePipeInformation);
+ }
+
+ if (status)
+ {
+ SetLastError( RtlNtStatusToDosError(status) );
+ return FALSE;
+ }
+ }
+
+ return TRUE;
}
/***********************************************************************
diff --git a/dlls/kernel32/tests/pipe.c b/dlls/kernel32/tests/pipe.c
index 5790be8..46004a3 100644
--- a/dlls/kernel32/tests/pipe.c
+++ b/dlls/kernel32/tests/pipe.c
@@ -218,10 +218,8 @@ static void test_CreateNamedPipe(int pipemode)
ok(!SetNamedPipeHandleState(hFile, &lpmode, NULL, NULL), "Change mode\n");
}
else {
- todo_wine {
- ok(SetNamedPipeHandleState(hFile, &lpmode, NULL, NULL), "Change mode\n");
- }
-
+ ok(SetNamedPipeHandleState(hFile, &lpmode, NULL, NULL), "Change mode\n");
+
memset(ibuf, 0, sizeof(ibuf));
ok(WriteFile(hnp, obuf, sizeof(obuf), &written, NULL), "WriteFile5a\n");
ok(written == sizeof(obuf), "write file len 3a\n");
@@ -1637,11 +1635,9 @@ static void test_NamedPipeHandleState(void)
/* lpSecurityAttrib */ NULL);
ok(server != INVALID_HANDLE_VALUE, "cf failed\n");
ret = GetNamedPipeHandleStateA(server, NULL, NULL, NULL, NULL, NULL, 0);
- todo_wine
ok(ret, "GetNamedPipeHandleState failed: %d\n", GetLastError());
ret = GetNamedPipeHandleStateA(server, &state, &instances, NULL, NULL, NULL,
0);
- todo_wine
ok(ret, "GetNamedPipeHandleState failed: %d\n", GetLastError());
if (ret)
{
@@ -1662,7 +1658,6 @@ static void test_NamedPipeHandleState(void)
state = PIPE_READMODE_MESSAGE;
SetLastError(0xdeadbeef);
ret = SetNamedPipeHandleState(server, &state, NULL, NULL);
- todo_wine
ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
"expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
@@ -1672,13 +1667,11 @@ static void test_NamedPipeHandleState(void)
state = PIPE_READMODE_BYTE;
ret = SetNamedPipeHandleState(client, &state, NULL, NULL);
- todo_wine
ok(ret, "SetNamedPipeHandleState failed: %d\n", GetLastError());
/* A byte-mode pipe client can't be changed to message mode, either. */
state = PIPE_READMODE_MESSAGE;
SetLastError(0xdeadbeef);
ret = SetNamedPipeHandleState(server, &state, NULL, NULL);
- todo_wine
ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
"expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
@@ -1694,11 +1687,9 @@ static void test_NamedPipeHandleState(void)
/* lpSecurityAttrib */ NULL);
ok(server != INVALID_HANDLE_VALUE, "cf failed\n");
ret = GetNamedPipeHandleStateA(server, NULL, NULL, NULL, NULL, NULL, 0);
- todo_wine
ok(ret, "GetNamedPipeHandleState failed: %d\n", GetLastError());
ret = GetNamedPipeHandleStateA(server, &state, &instances, NULL, NULL, NULL,
0);
- todo_wine
ok(ret, "GetNamedPipeHandleState failed: %d\n", GetLastError());
if (ret)
{
@@ -1710,7 +1701,6 @@ static void test_NamedPipeHandleState(void)
*/
state = PIPE_READMODE_BYTE;
ret = SetNamedPipeHandleState(server, &state, NULL, NULL);
- todo_wine
ok(ret, "SetNamedPipeHandleState failed: %d\n", GetLastError());
client = CreateFileA(PIPENAME, GENERIC_READ|GENERIC_WRITE, 0, NULL,
@@ -1719,13 +1709,11 @@ static void test_NamedPipeHandleState(void)
state = PIPE_READMODE_MESSAGE;
ret = SetNamedPipeHandleState(client, &state, NULL, NULL);
- todo_wine
ok(ret, "SetNamedPipeHandleState failed: %d\n", GetLastError());
/* A message-mode pipe client can also be changed to byte mode.
*/
state = PIPE_READMODE_BYTE;
ret = SetNamedPipeHandleState(client, &state, NULL, NULL);
- todo_wine
ok(ret, "SetNamedPipeHandleState failed: %d\n", GetLastError());
CloseHandle(client);
--
1.7.9.5

View File

@ -1,10 +1,4 @@
Author: Dan Kegel
Subject: Fix for ConnectNamedPort return value in overlapped mode.
Revision: 1
Author: Sebastian Lackner / Adam Martinson
Subject: Add proper implementation for SetNamedPipeHandleState.
Revision: 7
Fixes: [16550] Fix for ConnectNamedPort return value in overlapped mode
Fixes: [17273] Support for SetNamedPipeHandleState

View File

@ -1,4 +1,4 @@
Author: Michael Müller
Subject: Move NtProtectVirtualMemory and NtCreateSection to separate pages in ntdll on x86.
Revision: 1
Fixes: [33162] Adobe Reader requires NtProtectVirtualMemory and NtCreateSection to be on separate pages
Fixes: [33162] Ensure NtProtectVirtualMemory and NtCreateSection are on separate pages

View File

@ -1,4 +1,4 @@
From bbe2850e3277120e570c47fd3dde1e3e90dc84e3 Mon Sep 17 00:00:00 2001
From e2f7556764c4ce3647b67ed687023919b891e9b0 Mon Sep 17 00:00:00 2001
From: Jactry Zeng <wine@jactry.com>
Date: Mon, 11 Aug 2014 13:29:06 +0800
Subject: riched20: Stub for ITextRange interface and implement

View File

@ -1,4 +1,4 @@
From f2671157f09140350a3dccda9dbc65890d4c0567 Mon Sep 17 00:00:00 2001
From 347be1f6538c25517c48c9ff10bd888d13d241b8 Mon Sep 17 00:00:00 2001
From: Jactry Zeng <wine@jactry.com>
Date: Sun, 10 Aug 2014 21:55:44 +0800
Subject: riched20: Implement ITextSelection::GetChar and ITextRange::GetChar.

View File

@ -1,4 +1,4 @@
From 9ec3f81caf3544b782cda012e7737d1784c1978b Mon Sep 17 00:00:00 2001
From 86451a53a9707a545430c25ae124cabc198fd48e Mon Sep 17 00:00:00 2001
From: Jactry Zeng <wine@jactry.com>
Date: Mon, 11 Aug 2014 10:58:26 +0800
Subject: riched20: Implement IText{Selection, Range}::Get{Start, End}.

Some files were not shown because too many files have changed in this diff Show More