Spracherkennung für: .patch vermutete Sprache: CS {CS[34] SQL[30] Fortran[24]} [Methode: maximale Elemente, drei Dimensionen]
From 81efaac078270d106ada3dba6268f9d662af4fdd Mon Sep 17 00:00:00 2001
From: Steve Lhomme <robux4@ycbcr.xyz>
Date: Tue, 23 May 2023 14:31:16 +0200
Subject: [PATCH 05/16] use CreateFile2 in Win8 as CreateFileW is forbidden in
UWP
---
src/estream.c | 24 ++++++++++++++++++++++++
src/spawn-w32.c | 13 +++++++++++++
src/w32-gettext.c | 10 ++++++++++
3 files changed, 47 insertions(+)
diff --git a/src/estream.c b/src/estream.c
index d5965e5..f148d43 100644
--- a/src/estream.c
+++ b/src/estream.c
@@ -2059,6 +2059,17 @@ func_file_create_w32 (void **cookie, HANDLE *rethd, const char *path,
else
creation_distribution |= OPEN_EXISTING;
+#if _WIN32_WINNT >= 0x0602 // _WIN32_WINNT_WIN8
+ CREATEFILE2_EXTENDED_PARAMETERS createExParams;
+ memset (&createExParams, 0, sizeof(createExParams));
+ createExParams.dwSize = sizeof(CREATEFILE2_EXTENDED_PARAMETERS);
+ createExParams.dwFileFlags = flags_and_attrs;
+ hd = CreateFile2 (wpath,
+ desired_access,
+ share_mode,
+ creation_distribution,
+ &createExParams);
+#else
hd = CreateFileW (wpath,
desired_access,
share_mode,
@@ -2066,6 +2077,7 @@ func_file_create_w32 (void **cookie, HANDLE *rethd, const char *path,
creation_distribution,
flags_and_attrs,
NULL); /* template file */
+#endif
if (hd == INVALID_HANDLE_VALUE)
{
_set_errno (map_w32_to_errno (GetLastError ()));
@@ -5167,6 +5179,17 @@ tmpfd (void)
value <<= 4;
}
wcscpy (p, L".tmp");
+#if _WIN32_WINNT >= 0x0602 // _WIN32_WINNT_WIN8
+ CREATEFILE2_EXTENDED_PARAMETERS params;
+ memset (¶ms, 0, sizeof params);
+ params.dwSize = sizeof(params);
+ params.dwFileFlags = FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_DELETE_ON_CLOSE;
+ file = CreateFile2 (buffer,
+ GENERIC_READ | GENERIC_WRITE,
+ 0,
+ CREATE_NEW,
+ ¶ms);
+#else
file = CreateFileW (buffer,
GENERIC_READ | GENERIC_WRITE,
0,
@@ -5174,6 +5197,7 @@ tmpfd (void)
CREATE_NEW,
FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_DELETE_ON_CLOSE,
NULL);
+#endif
if (file != INVALID_HANDLE_VALUE)
{
int fd = _open_osfhandle ((intptr_t)file, 0);
diff --git a/src/spawn-w32.c b/src/spawn-w32.c
index f21991a..70f5833 100644
--- a/src/spawn-w32.c
+++ b/src/spawn-w32.c
@@ -224,10 +224,23 @@ w32_open_null (int for_write, int enable_null_device)
memset (&sec_attr, 0, sizeof sec_attr );
sec_attr.nLength = sizeof sec_attr;
sec_attr.bInheritHandle = TRUE;
+#if _WIN32_WINNT >= 0x0602 // _WIN32_WINNT_WIN8
+ {
+ CREATEFILE2_EXTENDED_PARAMETERS createExParams;
+ memset (&createExParams, 0, sizeof(createExParams));
+ createExParams.dwSize = sizeof(CREATEFILE2_EXTENDED_PARAMETERS);
+ createExParams.lpSecurityAttributes = &sec_attr;
+ hfile = CreateFile2 (L"nul",
+ for_write? GENERIC_WRITE : GENERIC_READ,
+ FILE_SHARE_READ | FILE_SHARE_WRITE,
+ OPEN_EXISTING, &createExParams);
+ }
+#else
hfile = CreateFileW (L"nul",
for_write? GENERIC_WRITE : GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
&sec_attr, OPEN_EXISTING, 0, NULL);
+#endif
if (hfile == INVALID_HANDLE_VALUE)
_gpgrt_log_debug ("can't open 'nul': ec=%d\n", (int)GetLastError ());
return hfile;
diff --git a/src/w32-gettext.c b/src/w32-gettext.c
index 980d905..129b730 100644
--- a/src/w32-gettext.c
+++ b/src/w32-gettext.c
@@ -1227,8 +1227,18 @@ load_domain (const char *filename)
if (!wfilename)
fh = INVALID_HANDLE_VALUE;
else
+#if _WIN32_WINNT >= 0x0602 // _WIN32_WINNT_WIN8
+ {
+ CREATEFILE2_EXTENDED_PARAMETERS createExParams;
+ memset (&createExParams, 0, sizeof(createExParams));
+ createExParams.dwSize = sizeof(CREATEFILE2_EXTENDED_PARAMETERS);
+ fh = CreateFile2 (wfilename, GENERIC_READ, FILE_SHARE_WRITE,
+ OPEN_EXISTING, &createExParams);
+ }
+#else
fh = CreateFileW (wfilename, GENERIC_READ, FILE_SHARE_WRITE, NULL,
OPEN_EXISTING, 0, NULL);
+#endif
xfree (wfilename);
}
if (fh == INVALID_HANDLE_VALUE)
--
2.52.0.windows.1