windows: fix CreateFile() calls to support long filenames

It makes them work in Schannel's CA bundle loader, and curl tool's
set/get file timestamp operations (e.g. in `-R`/`--remote-time`). Also
to match file open operations, that already support long filenames.

E.g. when using `--remote-time`, fixing:
```
Warning: Failed to set filetime 1741363917 on outfile: CreateFile failed:
Warning: GetLastError 0x00000003
```

The special long filename logic is necessary to support Windows releases
prior to Windows 10 v1607. With the latter, it's possible to opt-in to
this behavior via a manifest setting. Note that Windows itself also needs
to opt-in to support this. Finally note that curl itself needs passing
`--globoff` to let long filenames through, pending #20044 and #20046.

Refs:
https://learn.microsoft.com/windows/win32/api/fileapi/nf-fileapi-createfilea
https://learn.microsoft.com/windows/win32/fileio/maximum-file-path-limitation

Ref: #8361
Inspired by: #19286
Inspired-by: Mathesh V
Closes #19286
Closes #20040
This commit is contained in:
Viktor Szakats 2025-12-19 23:26:10 +01:00
parent a468e605eb
commit 969351bb1e
No known key found for this signature in database
GPG key ID: B5ABD165E2AEF201
6 changed files with 75 additions and 30 deletions

View file

@ -70,6 +70,9 @@ my %banfunc = (
"atoi" => 1,
"atol" => 1,
"calloc" => 1,
"CreateFile" => 1,
"CreateFileA" => 1,
"CreateFileW" => 1,
"fclose" => 1,
"fdopen" => 1,
"fopen" => 1,