From 63eaa7eeb68cd967ce9a93a4669dc46f1048b0bc Mon Sep 17 00:00:00 2001 From: Ronan Desplanques <desplanques@adacore.com> Date: Mon, 16 Oct 2023 17:09:25 +0200 Subject: [PATCH] ada: Fix Ada.Directories.Modification_Time on Windows Before this patch, Ada.Directories.Modification_Time called GetFileAttributesExA under the hood on Windows. That would sometimes fail to work with files whose names were non-ASCII. This patch replaces the call to GetFileAttributesExA with a call to GetFileAttributesEx preceded by an encoding scheme conversion, as is done in other functions of the run-time library. This fixes the issues that were observed with the previous implementations. gcc/ada/ * adaint.c (__gnat_file_time): Fix Windows version. --- gcc/ada/adaint.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c index 2a193efc0020..bb4ed2607e50 100644 --- a/gcc/ada/adaint.c +++ b/gcc/ada/adaint.c @@ -1507,7 +1507,16 @@ extern long long __gnat_file_time(char* name) long long ll_time; } t_write; - if (!GetFileAttributesExA(name, GetFileExInfoStandard, &fad)) { + TCHAR wname [GNAT_MAX_PATH_LEN + 2]; + int name_len; + + S2WSC (wname, name, GNAT_MAX_PATH_LEN + 2); + name_len = _tcslen (wname); + + if (name_len > GNAT_MAX_PATH_LEN) + return LLONG_MIN; + + if (!GetFileAttributesEx(wname, GetFileExInfoStandard, &fad)) { return LLONG_MIN; } -- GitLab