Sebastian Lackner : ntdll: Implement semi-stub for RtlGetCompressionWorkSpaceSize.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Jul 9 09:44:37 CDT 2015
Module: wine
Branch: master
Commit: 577332f61252441b20a1dd9d1785e311f21403c1
URL: http://source.winehq.org/git/wine.git/?a=commit;h=577332f61252441b20a1dd9d1785e311f21403c1
Author: Sebastian Lackner <sebastian at fds-team.de>
Date: Thu Jul 9 03:06:10 2015 +0200
ntdll: Implement semi-stub for RtlGetCompressionWorkSpaceSize.
---
dlls/ntdll/rtl.c | 30 ++++++++++++++++++++++++------
dlls/ntdll/tests/rtl.c | 15 ++-------------
2 files changed, 26 insertions(+), 19 deletions(-)
diff --git a/dlls/ntdll/rtl.c b/dlls/ntdll/rtl.c
index 8bbb610..d9e448a 100644
--- a/dlls/ntdll/rtl.c
+++ b/dlls/ntdll/rtl.c
@@ -1224,14 +1224,32 @@ PSLIST_ENTRY WINAPI RtlInterlockedPushListSList(PSLIST_HEADER list, PSLIST_ENTRY
/******************************************************************************
* RtlGetCompressionWorkSpaceSize [NTDLL.@]
*/
-NTSTATUS WINAPI RtlGetCompressionWorkSpaceSize(USHORT CompressionFormatAndEngine,
- PULONG CompressBufferWorkSpaceSize,
- PULONG CompressFragmentWorkSpaceSize)
+NTSTATUS WINAPI RtlGetCompressionWorkSpaceSize(USHORT format, PULONG compress_workspace,
+ PULONG decompress_workspace)
{
- FIXME("0x%04x, %p, %p: stub!\n", CompressionFormatAndEngine, CompressBufferWorkSpaceSize,
- CompressFragmentWorkSpaceSize);
+ FIXME("0x%04x, %p, %p: semi-stub\n", format, compress_workspace, decompress_workspace);
- return STATUS_NOT_IMPLEMENTED;
+ switch (format & ~COMPRESSION_ENGINE_MAXIMUM)
+ {
+ case COMPRESSION_FORMAT_LZNT1:
+ if (compress_workspace)
+ {
+ /* FIXME: The current implementation of RtlCompressBuffer does not use a
+ * workspace buffer, but Windows applications might expect a nonzero value. */
+ *compress_workspace = 16;
+ }
+ if (decompress_workspace)
+ *decompress_workspace = 0x1000;
+ return STATUS_SUCCESS;
+
+ case COMPRESSION_FORMAT_NONE:
+ case COMPRESSION_FORMAT_DEFAULT:
+ return STATUS_INVALID_PARAMETER;
+
+ default:
+ FIXME("format %u not implemented\n", format);
+ return STATUS_UNSUPPORTED_COMPRESSION;
+ }
}
/* compress data using LZNT1, currently only a stub */
diff --git a/dlls/ntdll/tests/rtl.c b/dlls/ntdll/tests/rtl.c
index a2e7f6c..c6a7023 100644
--- a/dlls/ntdll/tests/rtl.c
+++ b/dlls/ntdll/tests/rtl.c
@@ -1623,14 +1623,10 @@ static void test_RtlCompressBuffer(void)
compress_workspace = decompress_workspace = 0xdeadbeef;
status = pRtlGetCompressionWorkSpaceSize(COMPRESSION_FORMAT_LZNT1, &compress_workspace,
&decompress_workspace);
- todo_wine
ok(status == STATUS_SUCCESS, "got wrong status 0x%08x\n", status);
ok(compress_workspace != 0, "got wrong compress_workspace %u\n", compress_workspace);
- if (status == STATUS_SUCCESS)
- {
- workspace = HeapAlloc(GetProcessHeap(), 0, compress_workspace);
- ok(workspace != NULL, "HeapAlloc failed %d\n", GetLastError());
- }
+ workspace = HeapAlloc(GetProcessHeap(), 0, compress_workspace);
+ ok(workspace != NULL, "HeapAlloc failed %d\n", GetLastError());
/* test compression format / engine */
final_size = 0xdeadbeef;
@@ -1699,35 +1695,28 @@ static void test_RtlGetCompressionWorkSpaceSize(void)
/* test invalid format / engine */
status = pRtlGetCompressionWorkSpaceSize(COMPRESSION_FORMAT_NONE, &compress_workspace,
&decompress_workspace);
- todo_wine
ok(status == STATUS_INVALID_PARAMETER, "got wrong status 0x%08x\n", status);
status = pRtlGetCompressionWorkSpaceSize(COMPRESSION_FORMAT_DEFAULT, &compress_workspace,
&decompress_workspace);
- todo_wine
ok(status == STATUS_INVALID_PARAMETER, "got wrong status 0x%08x\n", status);
status = pRtlGetCompressionWorkSpaceSize(0xFF, &compress_workspace, &decompress_workspace);
- todo_wine
ok(status == STATUS_UNSUPPORTED_COMPRESSION, "got wrong status 0x%08x\n", status);
/* test LZNT1 with normal and maximum compression */
compress_workspace = decompress_workspace = 0xdeadbeef;
status = pRtlGetCompressionWorkSpaceSize(COMPRESSION_FORMAT_LZNT1, &compress_workspace,
&decompress_workspace);
- todo_wine
ok(status == STATUS_SUCCESS, "got wrong status 0x%08x\n", status);
ok(compress_workspace != 0, "got wrong compress_workspace %u\n", compress_workspace);
- todo_wine
ok(decompress_workspace == 0x1000, "got wrong decompress_workspace %u\n", decompress_workspace);
compress_workspace = decompress_workspace = 0xdeadbeef;
status = pRtlGetCompressionWorkSpaceSize(COMPRESSION_FORMAT_LZNT1 | COMPRESSION_ENGINE_MAXIMUM,
&compress_workspace, &decompress_workspace);
- todo_wine
ok(status == STATUS_SUCCESS, "got wrong status 0x%08x\n", status);
ok(compress_workspace != 0, "got wrong compress_workspace %u\n", compress_workspace);
- todo_wine
ok(decompress_workspace == 0x1000, "got wrong decompress_workspace %u\n", decompress_workspace);
}
More information about the wine-cvs
mailing list