On 2026-02-02 08:48, Jakob Bohm via Cygwin wrote:
On 02/02/2026 14:40, Corinna Vinschen via Cygwin wrote:
On Feb 2 13:24, Dan Shelton via Cygwin wrote:
I'm not sure whether the Cygwin code is correct. I did a peek with a
kernel debugger, and I see that FILE_RENAME_INFORMATION.RootDirectory
is always NULL if a file gets renamed to .cyg000000000xxxx. But if I
try that with NTFS or SMB, the NtSetInformationFile() to set
FileRenameInformation always fails.
Your testcase is incorrect, unfortunately.
fri->FileNameLength = (wcslen(dstfile)+1)*sizeof(wchar_t);
For NT file paths, never count the trailing \0 to the length:
fri->FileNameLength = wcslen(dstfile) * sizeof (WCHAR);
With that, your testcase works fine for me.
I am not sure what data structure this supposed "Friday" variable points to,
Ikke fredag: Windows abbrev; see Dan's post earlier in thread with inline STC:
size_t fri_len = sizeof(FILE_RENAME_INFORMATION) +
(wcslen(dstfile)+1)*sizeof(wchar_t);
fri = calloc(1, fri_len);
but in NT low level APIs, such as the NTXxxx syscalls exported by ntdll.dll,
a common structure is the UNICODE_STRING, which has 3 fields:
Pointer to string buffer,
Size of string buffer in bytes (often (length+1) * sizeof(WCHAR)) and
Size of actual string in bytes (not counting the optional term 0 or other
unused buffer space)
Both byte counts are 16 bits, so structure can only hold strings up to 32767
WCHARs.
>
There are very similar structures using plain char and these structures can also
be marshalled into byte streams by replacing the pointer with a 32 bit byte offset.
Cygwin usually uses the user NT service routines <null>/Ex/W/A functions taking
WCHAR or char pointers or buffers and lengths.
--
Take care. Thanks, Brian Inglis Calgary, Alberta, Canada
La perfection est atteinte Perfection is achieved
non pas lorsqu'il n'y a plus rien à ajouter not when there is no more to add
mais lorsqu'il n'y a plus rien à retrancher but when there is no more to cut
-- Antoine de Saint-Exupéry
--
Problem reports: https://cygwin.com/problems.html
FAQ: https://cygwin.com/faq/
Documentation: https://cygwin.com/docs.html
Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple