- FIXME("stub - %s, %x, %p, %u, %p, %u, %p, %u, %p\n", debugstr_w(filename), flags, data,
- ignore_range_count, ignore_range, retain_range_count, retain_range, bufsize, buffer);
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return FALSE;
+ CHAR LocalBuf[SIGNATURE_MIN_SIZE];
+ BOOL ret = FALSE;
+ HANDLE hFile;
+
+ hFile = CreateFileW(filename, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
+ OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, 0);
+ if (hFile != INVALID_HANDLE_VALUE)
+ {
+ ret = GetFilePatchSignatureByHandle(hFile, flags, data, ignore_range_count, ignore_range,
+ retain_range_count, retain_range, sizeof(LocalBuf), LocalBuf);
+ CloseHandle(hFile);
+
+ if (bufsize < (SIGNATURE_MIN_SIZE * sizeof(WCHAR)))
+ {
+ SetLastError(ERROR_INSUFFICIENT_BUFFER);
+ return FALSE;
+ }
+ if (ret)
+ {
+ MultiByteToWideChar(CP_ACP, 0, LocalBuf, -1, buffer, bufsize / sizeof(WCHAR));
+ }
+ }
+
+ return ret;
+}
+
+/*****************************************************
+ * TestApplyPatchToFileA (MSPATCHA.10)
+ */
+BOOL WINAPI TestApplyPatchToFileA(LPCSTR patch_file, LPCSTR old_file, ULONG apply_flags)
+{
+ BOOL ret = FALSE;
+ HANDLE hPatch, hOld;
+
+ hPatch = CreateFileA(patch_file, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
+ OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, 0);
+ if (hPatch != INVALID_HANDLE_VALUE)
+ {
+ hOld = CreateFileA(old_file, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
+ OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, 0);
+ if (hOld != INVALID_HANDLE_VALUE)
+ {
+ ret = TestApplyPatchToFileByHandles(hPatch, hOld, apply_flags);
+ CloseHandle(hOld);
+ }
+ CloseHandle(hPatch);
+ }
+
+ return ret;
+}
+
+/*****************************************************
+ * TestApplyPatchToFileByHandles (MSPATCHA.11)
+ */
+BOOL WINAPI TestApplyPatchToFileByHandles(HANDLE patch_file, HANDLE old_file, ULONG apply_flags)
+{
+ return ApplyPatchToFileByHandles(patch_file, old_file, INVALID_HANDLE_VALUE, apply_flags | APPLY_OPTION_TEST_ONLY);
+}
+
+/*****************************************************
+ * TestApplyPatchToFileW (MSPATCHA.12)
+ */
+BOOL WINAPI TestApplyPatchToFileW(LPCWSTR patch_file, LPCWSTR old_file, ULONG apply_flags)
+{
+ BOOL ret = FALSE;
+ HANDLE hPatch, hOld;
+
+ hPatch = CreateFileW(patch_file, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
+ OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, 0);
+ if (hPatch != INVALID_HANDLE_VALUE)
+ {
+ hOld = CreateFileW(old_file, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
+ OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, 0);
+ if (hOld != INVALID_HANDLE_VALUE)
+ {
+ ret = TestApplyPatchToFileByHandles(hPatch, hOld, apply_flags);
+ CloseHandle(hOld);
+ }
+ CloseHandle(hPatch);
+ }
+
+ return ret;