comp.lang.ada
 help / color / mirror / Atom feed
* Re: Windows file timestamp converted to local time
       [not found] <262bea8c-57ff-480e-b5aa-da94f0436e98n@googlegroups.com>
@ 2023-10-16 18:35 ` Matt Borchers
  2023-10-16 18:49   ` Niklas Holsti
                     ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Matt Borchers @ 2023-10-16 18:35 UTC (permalink / raw)


Below is the function from System.OS_Lib. 
Does anybody know where the C implementation can be found?
Does anybody know where the C implementation of "localtime" is found?

   function File_Time_Stamp (Name : C_File_Name) return OS_Time is
      function File_Time (Name : Address) return OS_Time;
      pragma Import (C, File_Time, "__gnat_file_time_name");
   begin
      return File_Time (Name);
   end File_Time_Stamp;

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Windows file timestamp converted to local time
  2023-10-16 18:35 ` Windows file timestamp converted to local time Matt Borchers
@ 2023-10-16 18:49   ` Niklas Holsti
  2023-10-17  2:39     ` Randy Brukardt
  2023-10-17 14:13     ` Matt Borchers
  2023-10-16 19:14   ` Simon Wright
  2023-10-17  7:25   ` Dmitry A. Kazakov
  2 siblings, 2 replies; 8+ messages in thread
From: Niklas Holsti @ 2023-10-16 18:49 UTC (permalink / raw)


On 2023-10-16 21:35, Matt Borchers wrote:
> Below is the function from System.OS_Lib.
> Does anybody know where the C implementation can be found?
> Does anybody know where the C implementation of "localtime" is found?
> 
>     function File_Time_Stamp (Name : C_File_Name) return OS_Time is
>        function File_Time (Name : Address) return OS_Time;
>        pragma Import (C, File_Time, "__gnat_file_time_name");
>     begin
>        return File_Time (Name);
>     end File_Time_Stamp;


(This question seems to be a follow-up ("Re:") to some earlier post, but 
my newsreader does not seem to find or show that earlier post.)

What is the problem?

Have you tried using the standard Ada services: 
Ada.Directories.Modification_Time and 
Ada.Calendar.Time_Zones.Local_Time_Offset?

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Windows file timestamp converted to local time
  2023-10-16 18:35 ` Windows file timestamp converted to local time Matt Borchers
  2023-10-16 18:49   ` Niklas Holsti
@ 2023-10-16 19:14   ` Simon Wright
  2023-10-17  7:25   ` Dmitry A. Kazakov
  2 siblings, 0 replies; 8+ messages in thread
From: Simon Wright @ 2023-10-16 19:14 UTC (permalink / raw)


Matt Borchers <mattborchers@gmail.com> writes:

> Below is the function from System.OS_Lib. 
> Does anybody know where the C implementation can be found?
> Does anybody know where the C implementation of "localtime" is found?
>
>    function File_Time_Stamp (Name : C_File_Name) return OS_Time is
>       function File_Time (Name : Address) return OS_Time;
>       pragma Import (C, File_Time, "__gnat_file_time_name");
>    begin
>       return File_Time (Name);
>    end File_Time_Stamp;

For the first question, very likely to be in gcc/ada/adaint.c in the GCC
sources (https://github.com/gcc-mirror/gcc)

localtime() is in libc; depends on your OS.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Windows file timestamp converted to local time
  2023-10-16 18:49   ` Niklas Holsti
@ 2023-10-17  2:39     ` Randy Brukardt
  2023-10-17 14:13     ` Matt Borchers
  1 sibling, 0 replies; 8+ messages in thread
From: Randy Brukardt @ 2023-10-17  2:39 UTC (permalink / raw)


"Niklas Holsti" <niklas.holsti@tidorum.invalid> wrote in message 
news:kp5eucFogqpU1@mid.individual.net...
> On 2023-10-16 21:35, Matt Borchers wrote:
>> Below is the function from System.OS_Lib.
>> Does anybody know where the C implementation can be found?
>> Does anybody know where the C implementation of "localtime" is found?
>>
>>     function File_Time_Stamp (Name : C_File_Name) return OS_Time is
>>        function File_Time (Name : Address) return OS_Time;
>>        pragma Import (C, File_Time, "__gnat_file_time_name");
>>     begin
>>        return File_Time (Name);
>>     end File_Time_Stamp;
>
>
> (This question seems to be a follow-up ("Re:") to some earlier post, but 
> my newsreader does not seem to find or show that earlier post.)
>
> What is the problem?
>
> Have you tried using the standard Ada services: 
> Ada.Directories.Modification_Time and 
> Ada.Calendar.Time_Zones.Local_Time_Offset?

...as those will work on (almost) any target system, while the actual 
implementation is going to be rather OS-dependent. And there never is a good 
reason to use a GNAT-only (or any compiler-specific, for any compiler) 
facility when there is an equivalent standard facility. Most of those 
facilities pre-date the Ada ones.

                Randy.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Windows file timestamp converted to local time
  2023-10-16 18:35 ` Windows file timestamp converted to local time Matt Borchers
  2023-10-16 18:49   ` Niklas Holsti
  2023-10-16 19:14   ` Simon Wright
@ 2023-10-17  7:25   ` Dmitry A. Kazakov
  2 siblings, 0 replies; 8+ messages in thread
From: Dmitry A. Kazakov @ 2023-10-17  7:25 UTC (permalink / raw)


On 2023-10-16 20:35, Matt Borchers wrote:
> Below is the function from System.OS_Lib.
> Does anybody know where the C implementation can be found?
> Does anybody know where the C implementation of "localtime" is found?
> 
>     function File_Time_Stamp (Name : C_File_Name) return OS_Time is
>        function File_Time (Name : Address) return OS_Time;
>        pragma Import (C, File_Time, "__gnat_file_time_name");
>     begin
>        return File_Time (Name);
>     end File_Time_Stamp;

If I correctly interpret the description, OS_Time is FILETIME under 
Windows, i.e. 64-bit value.

https://learn.microsoft.com/en-us/windows/win32/api/minwinbase/ns-minwinbase-filetime

As for implementation it likely calls to GetFileTime after obtaining a 
handle to the file.

https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getfiletime

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Windows file timestamp converted to local time
  2023-10-16 18:49   ` Niklas Holsti
  2023-10-17  2:39     ` Randy Brukardt
@ 2023-10-17 14:13     ` Matt Borchers
  2023-10-17 16:28       ` Niklas Holsti
  1 sibling, 1 reply; 8+ messages in thread
From: Matt Borchers @ 2023-10-17 14:13 UTC (permalink / raw)


On Monday, October 16, 2023 at 2:49:52 PM UTC-4, Niklas Holsti wrote:
> On 2023-10-16 21:35, Matt Borchers wrote: 
> > Below is the function from System.OS_Lib. 
> > Does anybody know where the C implementation can be found? 
> > Does anybody know where the C implementation of "localtime" is found? 
> > 
> > function File_Time_Stamp (Name : C_File_Name) return OS_Time is 
> > function File_Time (Name : Address) return OS_Time; 
> > pragma Import (C, File_Time, "__gnat_file_time_name"); 
> > begin 
> > return File_Time (Name); 
> > end File_Time_Stamp;
> (This question seems to be a follow-up ("Re:") to some earlier post, but 
> my newsreader does not seem to find or show that earlier post.) 
> 
> What is the problem? 
> 
> Have you tried using the standard Ada services: 
> Ada.Directories.Modification_Time and 
> Ada.Calendar.Time_Zones.Local_Time_Offset?

Thank you for the suggestion of using "Ada.Directories.Modification_Time". I didn't think to look in that package. This function adjusts for daylight savings time and returns the time as displayed in Windows Explorer.

There needs to be better comments (and documentation) for these time related functions. It is often not clear what time is returned. It is safe to assume UTC or local time, but the daylight savings issue caused confusion.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Windows file timestamp converted to local time
  2023-10-17 14:13     ` Matt Borchers
@ 2023-10-17 16:28       ` Niklas Holsti
  2023-10-17 16:35         ` Simon Wright
  0 siblings, 1 reply; 8+ messages in thread
From: Niklas Holsti @ 2023-10-17 16:28 UTC (permalink / raw)


On 2023-10-17 17:13, Matt Borchers wrote:
> On Monday, October 16, 2023 at 2:49:52 PM UTC-4, Niklas Holsti wrote:
>> On 2023-10-16 21:35, Matt Borchers wrote:
>>> Below is the function from System.OS_Lib.
>>> Does anybody know where the C implementation can be found?
>>> Does anybody know where the C implementation of "localtime" is found?
>>>
>>> function File_Time_Stamp (Name : C_File_Name) return OS_Time is
>>> function File_Time (Name : Address) return OS_Time;
>>> pragma Import (C, File_Time, "__gnat_file_time_name");
>>> begin
>>> return File_Time (Name);
>>> end File_Time_Stamp;
>> (This question seems to be a follow-up ("Re:") to some earlier post, but
>> my newsreader does not seem to find or show that earlier post.)
>>
>> What is the problem?
>>
>> Have you tried using the standard Ada services:
>> Ada.Directories.Modification_Time and
>> Ada.Calendar.Time_Zones.Local_Time_Offset?
> 
> Thank you for the suggestion of using "Ada.Directories.Modification_Time".


Happy to help!


> I didn't think to look in that package.


Ada.Directories does, IMO, seem the best place for it, since it should 
not depend on the type of the file -- text, sequential, etc.


> This function adjusts for daylight savings time and returns the time
> as displayed in Windows Explorer.
> 
> There needs to be better comments (and documentation) for these time
> related functions. It is often not clear what time is returned.


Yes, but some of that documentation should not be in the Ada standard, 
but in the compiler's documentation.

Ada.Directories.Modification_Time returns a value of type 
Ada.Calendar.Time. However, "the time base associated with the type Time 
of package Calendar is implementation defined" (RM 9.6(23)) so it should 
be documented in the implementation documents, that is in the GNAT 
documentation. Have you looked there?

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Windows file timestamp converted to local time
  2023-10-17 16:28       ` Niklas Holsti
@ 2023-10-17 16:35         ` Simon Wright
  0 siblings, 0 replies; 8+ messages in thread
From: Simon Wright @ 2023-10-17 16:35 UTC (permalink / raw)


Niklas Holsti <niklas.holsti@tidorum.invalid> writes:

> Ada.Directories.Modification_Time returns a value of type
> Ada.Calendar.Time. However, "the time base associated with the type
> Time of package Calendar is implementation defined" (RM 9.6(23)) so it
> should be documented in the implementation documents, that is in the
> GNAT documentation. Have you looked there?

The GNAT RM says in Implementation Defined Characteristics[1]

"The time base used is that provided by the C library function gettimeofday."

[1] https://docs.adacore.com/live/wave/gnat_rm/html/gnat_rm/gnat_rm/implementation_defined_characteristics.html

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2023-10-17 16:35 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <262bea8c-57ff-480e-b5aa-da94f0436e98n@googlegroups.com>
2023-10-16 18:35 ` Windows file timestamp converted to local time Matt Borchers
2023-10-16 18:49   ` Niklas Holsti
2023-10-17  2:39     ` Randy Brukardt
2023-10-17 14:13     ` Matt Borchers
2023-10-17 16:28       ` Niklas Holsti
2023-10-17 16:35         ` Simon Wright
2023-10-16 19:14   ` Simon Wright
2023-10-17  7:25   ` Dmitry A. Kazakov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox