Commit 3ffd18f1 by Arnaud Charlet

[multiple changes]

2012-01-23  Robert Dewar  <dewar@adacore.com>

	* sprint.ads, sprint.adb (Sprint_Node_List): Add New_Lines parameter
	(pg,po,ps): Make sure each entry starts on new line.

2012-01-23  Hristian Kirtchev  <kirtchev@adacore.com>

	* a-calend.ads, a-calend.adb: Define types int and int_Pointer. Update
	the parameter profile of procedure localtime_tzoff and its associated
	comment.
	(Day_Of_Week): Do not treat the input date as historical
	with respect to time zones.
	(Split): Do not treat the input
	date as historical with respect to time zones.	(Time_Of): Do
	not treat the input constituents as forming a historical date
	with respect to time zones.
	(UTC_Time_Offset): Add new formal
	parameter Is_Historic. Add local variable Flag. Update the call
	to localtime_tzoff.
	* a-catizo.ads, a-catizo.adb (UTC_Time_Offset): New routine.
	(UTC_Time_Offset (Time)): Update the call to
	Time_Zone_Operations.UTC_Time_Offset.
	* sysdep.c (__gnat_localtime_tzoff): Update parameter
	profile. Split the processing of offsets on Windows into two - one
	part of historic time stamps and the other for the current time.

From-SVN: r183413
parent ce20f35b
2012-01-23 Robert Dewar <dewar@adacore.com> 2012-01-23 Robert Dewar <dewar@adacore.com>
* sprint.ads, sprint.adb (Sprint_Node_List): Add New_Lines parameter
(pg,po,ps): Make sure each entry starts on new line.
2012-01-23 Hristian Kirtchev <kirtchev@adacore.com>
* a-calend.ads, a-calend.adb: Define types int and int_Pointer. Update
the parameter profile of procedure localtime_tzoff and its associated
comment.
(Day_Of_Week): Do not treat the input date as historical
with respect to time zones.
(Split): Do not treat the input
date as historical with respect to time zones. (Time_Of): Do
not treat the input constituents as forming a historical date
with respect to time zones.
(UTC_Time_Offset): Add new formal
parameter Is_Historic. Add local variable Flag. Update the call
to localtime_tzoff.
* a-catizo.ads, a-catizo.adb (UTC_Time_Offset): New routine.
(UTC_Time_Offset (Time)): Update the call to
Time_Zone_Operations.UTC_Time_Offset.
* sysdep.c (__gnat_localtime_tzoff): Update parameter
profile. Split the processing of offsets on Windows into two - one
part of historic time stamps and the other for the current time.
2012-01-23 Robert Dewar <dewar@adacore.com>
* a-calend.adb: Minor reformatting. * a-calend.adb: Minor reformatting.
2012-01-23 Ed Schonberg <schonberg@adacore.com> 2012-01-23 Ed Schonberg <schonberg@adacore.com>
......
...@@ -1025,7 +1025,10 @@ package body Ada.Calendar is ...@@ -1025,7 +1025,10 @@ package body Ada.Calendar is
function Day_Of_Week (Date : Time) return Integer is function Day_Of_Week (Date : Time) return Integer is
Date_N : constant Time_Rep := Time_Rep (Date); Date_N : constant Time_Rep := Time_Rep (Date);
Time_Zone : constant Long_Integer := Time_Zone : constant Long_Integer :=
Time_Zones_Operations.UTC_Time_Offset (Date); Time_Zones_Operations.UTC_Time_Offset
(Date => Date,
Is_Historic => False);
Ada_Low_N : Time_Rep; Ada_Low_N : Time_Rep;
Day_Count : Long_Integer; Day_Count : Long_Integer;
Day_Dur : Time_Dur; Day_Dur : Time_Dur;
...@@ -1138,7 +1141,9 @@ package body Ada.Calendar is ...@@ -1138,7 +1141,9 @@ package body Ada.Calendar is
else else
declare declare
Off : constant Long_Integer := Off : constant Long_Integer :=
Time_Zones_Operations.UTC_Time_Offset (Time (Date_N)); Time_Zones_Operations.UTC_Time_Offset
(Date => Time (Date_N),
Is_Historic => False);
begin begin
Date_N := Date_N + Time_Rep (Off) * Nano; Date_N := Date_N + Time_Rep (Off) * Nano;
end; end;
...@@ -1360,12 +1365,14 @@ package body Ada.Calendar is ...@@ -1360,12 +1365,14 @@ package body Ada.Calendar is
declare declare
Current_Off : constant Long_Integer := Current_Off : constant Long_Integer :=
Time_Zones_Operations.UTC_Time_Offset Time_Zones_Operations.UTC_Time_Offset
(Time (Res_N)); (Date => Time (Res_N),
Is_Historic => False);
Current_Res_N : constant Time_Rep := Current_Res_N : constant Time_Rep :=
Res_N - Time_Rep (Current_Off) * Nano; Res_N - Time_Rep (Current_Off) * Nano;
Off : constant Long_Integer := Off : constant Long_Integer :=
Time_Zones_Operations.UTC_Time_Offset Time_Zones_Operations.UTC_Time_Offset
(Time (Current_Res_N)); (Date => Time (Current_Res_N),
Is_Historic => False);
begin begin
Res_N := Res_N - Time_Rep (Off) * Nano; Res_N := Res_N - Time_Rep (Off) * Nano;
end; end;
...@@ -1438,7 +1445,9 @@ package body Ada.Calendar is ...@@ -1438,7 +1445,9 @@ package body Ada.Calendar is
Nanos_In_56_Years : constant := (14 * 366 + 42 * 365) * Nanos_In_Day; Nanos_In_56_Years : constant := (14 * 366 + 42 * 365) * Nanos_In_Day;
subtype long is Long_Integer; subtype long is Long_Integer;
subtype int is Integer;
type long_Pointer is access all long; type long_Pointer is access all long;
type int_Pointer is access all int;
type time_t is type time_t is
range -(2 ** (Standard'Address_Size - Integer'(1))) .. range -(2 ** (Standard'Address_Size - Integer'(1))) ..
...@@ -1446,21 +1455,28 @@ package body Ada.Calendar is ...@@ -1446,21 +1455,28 @@ package body Ada.Calendar is
type time_t_Pointer is access all time_t; type time_t_Pointer is access all time_t;
procedure localtime_tzoff procedure localtime_tzoff
(timer : time_t_Pointer; (timer : time_t_Pointer;
off : long_Pointer); is_historic : int_Pointer;
off : long_Pointer);
pragma Import (C, localtime_tzoff, "__gnat_localtime_tzoff"); pragma Import (C, localtime_tzoff, "__gnat_localtime_tzoff");
-- This is a lightweight wrapper around the system library function -- This is a lightweight wrapper around the system library function
-- localtime_r. Parameter 'off' captures the UTC offset which is either -- localtime_r. Parameter 'off' captures the UTC offset which is either
-- retrieved from the tm struct or calculated from the 'timezone' extern -- retrieved from the tm struct or calculated from the 'timezone' extern
-- and the tm_isdst flag in the tm struct. -- and the tm_isdst flag in the tm struct. Flag 'is_historic' denotes
-- whether 'timer' is a historical time stamp. If this is not the case,
-- the routine returns the offset of the local time zone.
--------------------- ---------------------
-- UTC_Time_Offset -- -- UTC_Time_Offset --
--------------------- ---------------------
function UTC_Time_Offset (Date : Time) return Long_Integer is function UTC_Time_Offset
(Date : Time;
Is_Historic : Boolean := True) return Long_Integer
is
Adj_Cent : Integer; Adj_Cent : Integer;
Date_N : Time_Rep; Date_N : Time_Rep;
Flag : aliased int;
Offset : aliased long; Offset : aliased long;
Secs_T : aliased time_t; Secs_T : aliased time_t;
...@@ -1499,8 +1515,13 @@ package body Ada.Calendar is ...@@ -1499,8 +1515,13 @@ package body Ada.Calendar is
Secs_T := time_t (Date_N / Nano); Secs_T := time_t (Date_N / Nano);
-- Determine whether to treat the input date as historical or not
Flag := (if Is_Historic then 1 else 0);
localtime_tzoff localtime_tzoff
(Secs_T'Unchecked_Access, (Secs_T'Unchecked_Access,
Flag'Unchecked_Access,
Offset'Unchecked_Access); Offset'Unchecked_Access);
return Offset; return Offset;
...@@ -1512,4 +1533,5 @@ package body Ada.Calendar is ...@@ -1512,4 +1533,5 @@ package body Ada.Calendar is
begin begin
System.OS_Primitives.Initialize; System.OS_Primitives.Initialize;
end Ada.Calendar; end Ada.Calendar;
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- -- -- --
-- S p e c -- -- S p e c --
-- -- -- --
-- Copyright (C) 1992-2009, Free Software Foundation, Inc. -- -- Copyright (C) 1992-2012, Free Software Foundation, Inc. --
-- -- -- --
-- This specification is derived from the Ada Reference Manual for use with -- -- This specification is derived from the Ada Reference Manual for use with --
-- GNAT. The copyright notice above, and the license provisions that follow -- -- GNAT. The copyright notice above, and the license provisions that follow --
...@@ -350,8 +350,12 @@ private ...@@ -350,8 +350,12 @@ private
package Time_Zones_Operations is package Time_Zones_Operations is
function UTC_Time_Offset (Date : Time) return Long_Integer; function UTC_Time_Offset
-- Return the offset in seconds from UTC (Date : Time;
Is_Historic : Boolean := True) return Long_Integer;
-- Return the offset in seconds from UTC of an arbitrary date. If flag
-- Is_Historic is set to False, then return the local time zone offset
-- regardless of what Date designates.
end Time_Zones_Operations; end Time_Zones_Operations;
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- -- -- --
-- B o d y -- -- B o d y --
-- -- -- --
-- Copyright (C) 2009, Free Software Foundation, Inc. -- -- Copyright (C) 2009-2012, Free Software Foundation, Inc. --
-- -- -- --
-- GNAT is free software; you can redistribute it and/or modify it under -- -- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- -- -- terms of the GNU General Public License as published by the Free Soft- --
...@@ -42,9 +42,41 @@ package body Ada.Calendar.Time_Zones is ...@@ -42,9 +42,41 @@ package body Ada.Calendar.Time_Zones is
-- UTC_Time_Offset -- -- UTC_Time_Offset --
--------------------- ---------------------
function UTC_Time_Offset (Date : Time := Clock) return Time_Offset is function UTC_Time_Offset return Time_Offset is
Offset_L : constant Long_Integer := Offset_L : constant Long_Integer :=
Time_Zones_Operations.UTC_Time_Offset (Date); Time_Zones_Operations.UTC_Time_Offset
(Date => Clock,
Is_Historic => False);
Offset : Time_Offset;
begin
if Offset_L = Invalid_Time_Zone_Offset then
raise Unknown_Zone_Error;
end if;
-- The offset returned by Time_Zones_Operations.UTC_Time_Offset is in
-- seconds, the returned value needs to be in minutes.
Offset := Time_Offset (Offset_L / 60);
-- Validity checks
if not Offset'Valid then
raise Unknown_Zone_Error;
end if;
return Offset;
end UTC_Time_Offset;
---------------------
-- UTC_Time_Offset --
---------------------
function UTC_Time_Offset (Date : Time) return Time_Offset is
Offset_L : constant Long_Integer :=
Time_Zones_Operations.UTC_Time_Offset
(Date => Date,
Is_Historic => True);
Offset : Time_Offset; Offset : Time_Offset;
begin begin
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- -- -- --
-- S p e c -- -- S p e c --
-- -- -- --
-- Copyright (C) 2005-2008, Free Software Foundation, Inc. -- -- Copyright (C) 2005-2012, Free Software Foundation, Inc. --
-- -- -- --
-- This specification is derived from the Ada Reference Manual for use with -- -- This specification is derived from the Ada Reference Manual for use with --
-- GNAT. In accordance with the copyright of that document, you can freely -- -- GNAT. In accordance with the copyright of that document, you can freely --
...@@ -26,7 +26,12 @@ package Ada.Calendar.Time_Zones is ...@@ -26,7 +26,12 @@ package Ada.Calendar.Time_Zones is
Unknown_Zone_Error : exception; Unknown_Zone_Error : exception;
function UTC_Time_Offset (Date : Time := Clock) return Time_Offset; function UTC_Time_Offset return Time_Offset;
-- Returns (in minutes), the difference between the implementation-defined
-- time zone of Calendar, and UTC time. If the time zone of the Calendar
-- implementation is unknown, raises Unknown_Zone_Error.
function UTC_Time_Offset (Date : Time) return Time_Offset;
-- Returns (in minutes), the difference between the implementation-defined -- Returns (in minutes), the difference between the implementation-defined
-- time zone of Calendar, and UTC time, at the time Date. If the time zone -- time zone of Calendar, and UTC time, at the time Date. If the time zone
-- of the Calendar implementation is unknown, raises Unknown_Zone_Error. -- of the Calendar implementation is unknown, raises Unknown_Zone_Error.
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- -- -- --
-- B o d y -- -- B o d y --
-- -- -- --
-- Copyright (C) 1992-2011, Free Software Foundation, Inc. -- -- Copyright (C) 1992-2012, Free Software Foundation, Inc. --
-- -- -- --
-- GNAT is free software; you can redistribute it and/or modify it under -- -- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- -- -- terms of the GNU General Public License as published by the Free Soft- --
...@@ -420,7 +420,7 @@ package body Sprint is ...@@ -420,7 +420,7 @@ package body Sprint is
Current_Source_File := No_Source_File; Current_Source_File := No_Source_File;
if Arg in List_Range then if Arg in List_Range then
Sprint_Node_List (List_Id (Arg)); Sprint_Node_List (List_Id (Arg), New_Lines => True);
elsif Arg in Node_Range then elsif Arg in Node_Range then
Sprint_Node (Node_Id (Arg)); Sprint_Node (Node_Id (Arg));
...@@ -443,7 +443,7 @@ package body Sprint is ...@@ -443,7 +443,7 @@ package body Sprint is
Current_Source_File := No_Source_File; Current_Source_File := No_Source_File;
if Arg in List_Range then if Arg in List_Range then
Sprint_Node_List (List_Id (Arg)); Sprint_Node_List (List_Id (Arg), New_Lines => True);
elsif Arg in Node_Range then elsif Arg in Node_Range then
Sprint_Node (Node_Id (Arg)); Sprint_Node (Node_Id (Arg));
...@@ -490,7 +490,7 @@ package body Sprint is ...@@ -490,7 +490,7 @@ package body Sprint is
Current_Source_File := No_Source_File; Current_Source_File := No_Source_File;
if Arg in List_Range then if Arg in List_Range then
Sprint_Node_List (List_Id (Arg)); Sprint_Node_List (List_Id (Arg), New_Lines => True);
elsif Arg in Node_Range then elsif Arg in Node_Range then
Sprint_Node (Node_Id (Arg)); Sprint_Node (Node_Id (Arg));
...@@ -3263,7 +3263,7 @@ package body Sprint is ...@@ -3263,7 +3263,7 @@ package body Sprint is
-- Sprint_Node_List -- -- Sprint_Node_List --
---------------------- ----------------------
procedure Sprint_Node_List (List : List_Id) is procedure Sprint_Node_List (List : List_Id; New_Lines : Boolean := False) is
Node : Node_Id; Node : Node_Id;
begin begin
...@@ -3276,6 +3276,10 @@ package body Sprint is ...@@ -3276,6 +3276,10 @@ package body Sprint is
exit when Node = Empty; exit when Node = Empty;
end loop; end loop;
end if; end if;
if New_Lines and then Column /= 1 then
Write_Eol;
end if;
end Sprint_Node_List; end Sprint_Node_List;
---------------------- ----------------------
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- -- -- --
-- S p e c -- -- S p e c --
-- -- -- --
-- Copyright (C) 1992-2010, Free Software Foundation, Inc. -- -- Copyright (C) 1992-2012, Free Software Foundation, Inc. --
-- -- -- --
-- GNAT is free software; you can redistribute it and/or modify it under -- -- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- -- -- terms of the GNU General Public License as published by the Free Soft- --
...@@ -118,11 +118,13 @@ package Sprint is ...@@ -118,11 +118,13 @@ package Sprint is
-- blank is output if List is non-empty, and nothing at all is printed it -- blank is output if List is non-empty, and nothing at all is printed it
-- the argument is No_List. -- the argument is No_List.
procedure Sprint_Node_List (List : List_Id); procedure Sprint_Node_List (List : List_Id; New_Lines : Boolean := False);
-- Prints the nodes in a list with no separating characters. This is used -- Prints the nodes in a list with no separating characters. This is used
-- in the case of lists of items which are printed on separate lines using -- in the case of lists of items which are printed on separate lines using
-- the current indentation amount. Note that Sprint_Node_List itself -- the current indentation amount. New_Lines controls the generation of
-- does not generate any New_Line calls. -- New_Line calls. If False, no New_Line calls are generated. If True,
-- then New_Line calls are generated as needed to ensure that each list
-- item starts at the beginning of a line.
procedure Sprint_Opt_Node_List (List : List_Id); procedure Sprint_Opt_Node_List (List : List_Id);
-- Like Sprint_Node_List, but prints nothing if List = No_List -- Like Sprint_Node_List, but prints nothing if List = No_List
...@@ -151,11 +153,13 @@ package Sprint is ...@@ -151,11 +153,13 @@ package Sprint is
procedure po (Arg : Union_Id); procedure po (Arg : Union_Id);
pragma Export (Ada, po); pragma Export (Ada, po);
-- Like pg, but prints original source for the argument (like -gnatdo -- Like pg, but prints original source for the argument (like -gnatdo
-- output). Intended only for use from gdb for debugging purposes. -- output). Intended only for use from gdb for debugging purposes. In
-- the list case, an end of line is output to separate list elements.
procedure ps (Arg : Union_Id); procedure ps (Arg : Union_Id);
pragma Export (Ada, ps); pragma Export (Ada, ps);
-- Like pg, but prints generated and original source for the argument (like -- Like pg, but prints generated and original source for the argument (like
-- -gnatds output). Intended only for use from gdb for debugging purposes. -- -gnatds output). Intended only for use from gdb for debugging purposes.
-- In the list case, an end of line is output to separate list elements.
end Sprint; end Sprint;
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* * * *
* C Implementation File * * C Implementation File *
* * * *
* Copyright (C) 1992-2011, Free Software Foundation, Inc. * * Copyright (C) 1992-2012, Free Software Foundation, Inc. *
* * * *
* GNAT is free software; you can redistribute it and/or modify it under * * GNAT is free software; you can redistribute it and/or modify it under *
* terms of the GNU General Public License as published by the Free Soft- * * terms of the GNU General Public License as published by the Free Soft- *
...@@ -644,71 +644,94 @@ extern void (*Unlock_Task) (void); ...@@ -644,71 +644,94 @@ extern void (*Unlock_Task) (void);
/* Reentrant localtime for Windows. */ /* Reentrant localtime for Windows. */
extern void extern void
__gnat_localtime_tzoff (const time_t *, long *); __gnat_localtime_tzoff (const time_t *, const int *, long *);
static const unsigned long long w32_epoch_offset = 11644473600ULL; static const unsigned long long w32_epoch_offset = 11644473600ULL;
void void
__gnat_localtime_tzoff (const time_t *timer, long *off) __gnat_localtime_tzoff (const time_t *timer, const int *is_historic, long *off)
{ {
union
{
FILETIME ft_time;
unsigned long long ull_time;
} utc_time, local_time;
SYSTEMTIME utc_sys_time, local_sys_time;
TIME_ZONE_INFORMATION tzi; TIME_ZONE_INFORMATION tzi;
BOOL status = 1; BOOL rtx_active;
DWORD tzi_status; DWORD tzi_status;
(*Lock_Task) ();
#ifdef RTX #ifdef RTX
rtx_active = 1;
#else
rtx_active = 0;
#endif
(*Lock_Task) ();
tzi_status = GetTimeZoneInformation (&tzi); tzi_status = GetTimeZoneInformation (&tzi);
*off = tzi.Bias;
if (tzi_status == TIME_ZONE_ID_STANDARD)
/* The system is operating in the range covered by the StandardDate
member. */
*off = *off + tzi.StandardBias;
else if (tzi_status == TIME_ZONE_ID_DAYLIGHT)
/* The system is operating in the range covered by the DaylightDate
member. */
*off = *off + tzi.DaylightBias;
*off = *off * -60;
#else /* Processing for RTX targets or cases where we simply want to extract the
offset of the current time zone, regardless of the date. */
/* First convert unix time_t structure to windows FILETIME format. */ if (rtx_active || !is_historic) {
utc_time.ull_time = ((unsigned long long) *timer + w32_epoch_offset) *off = tzi.Bias;
* 10000000ULL;
tzi_status = GetTimeZoneInformation (&tzi); /* The system is operating in the range covered by the StandardDate
member. */
if (tzi_status == TIME_ZONE_ID_STANDARD) {
*off = *off + tzi.StandardBias;
}
/* If GetTimeZoneInformation does not return a value between 0 and 2 then /* The system is operating in the range covered by the DaylightDate
it means that we were not able to retrieve timezone informations. member. */
Note that we cannot use here FileTimeToLocalFileTime as Windows will use else if (tzi_status == TIME_ZONE_ID_DAYLIGHT) {
in always in this case the current timezone setting. As suggested on *off = *off + tzi.DaylightBias;
MSDN we use the following three system calls to get the right information. }
Note also that starting with Windows Vista new functions are provided to
get timezone settings that depend on the year. We cannot use them as we
still support Windows XP and Windows 2003. */
status = (tzi_status >= 0 && tzi_status <= 2)
&& FileTimeToSystemTime (&utc_time.ft_time, &utc_sys_time)
&& SystemTimeToTzSpecificLocalTime (&tzi, &utc_sys_time, &local_sys_time)
&& SystemTimeToFileTime (&local_sys_time, &local_time.ft_time);
if (!status)
/* An error occurs so return invalid_tzoff. */
*off = __gnat_invalid_tzoff;
else
if (local_time.ull_time > utc_time.ull_time)
*off = (long) ((local_time.ull_time - utc_time.ull_time) / 10000000ULL);
else
*off = - (long) ((utc_time.ull_time - local_time.ull_time) / 10000000ULL);
#endif *off = *off * -60;
}
/* Time zone offset calculations for a historic or future date */
else {
union
{
FILETIME ft_time;
unsigned long long ull_time;
} utc_time, local_time;
SYSTEMTIME utc_sys_time, local_sys_time;
BOOL status;
/* First convert unix time_t structure to windows FILETIME format. */
utc_time.ull_time = ((unsigned long long) *timer + w32_epoch_offset)
* 10000000ULL;
/* If GetTimeZoneInformation does not return a value between 0 and 2 then
it means that we were not able to retrieve timezone informations. Note
that we cannot use here FileTimeToLocalFileTime as Windows will use in
always in this case the current timezone setting. As suggested on MSDN
we use the following three system calls to get the right information.
Note also that starting with Windows Vista new functions are provided
to get timezone settings that depend on the year. We cannot use them as
we still support Windows XP and Windows 2003. */
status = (tzi_status >= 0 && tzi_status <= 2)
&& FileTimeToSystemTime (&utc_time.ft_time, &utc_sys_time)
&& SystemTimeToTzSpecificLocalTime (&tzi, &utc_sys_time, &local_sys_time)
&& SystemTimeToFileTime (&local_sys_time, &local_time.ft_time);
/* An error has occured, return invalid_tzoff */
if (!status) {
*off = __gnat_invalid_tzoff;
}
else {
if (local_time.ull_time > utc_time.ull_time) {
*off = (long) ((local_time.ull_time - utc_time.ull_time)
/ 10000000ULL);
}
else {
*off = - (long) ((utc_time.ull_time - local_time.ull_time)
/ 10000000ULL);
}
}
}
(*Unlock_Task) (); (*Unlock_Task) ();
} }
...@@ -726,10 +749,10 @@ __gnat_localtime_tzoff (const time_t *timer, long *off) ...@@ -726,10 +749,10 @@ __gnat_localtime_tzoff (const time_t *timer, long *off)
the Lynx convention when building against the legacy API. */ the Lynx convention when building against the legacy API. */
extern void extern void
__gnat_localtime_tzoff (const time_t *, long *); __gnat_localtime_tzoff (const time_t *, const int *, long *);
void void
__gnat_localtime_tzoff (const time_t *timer, long *off) __gnat_localtime_tzoff (const time_t *timer, const int *is_historic, long *off)
{ {
*off = 0; *off = 0;
} }
...@@ -751,10 +774,10 @@ extern void (*Lock_Task) (void); ...@@ -751,10 +774,10 @@ extern void (*Lock_Task) (void);
extern void (*Unlock_Task) (void); extern void (*Unlock_Task) (void);
extern void extern void
__gnat_localtime_tzoff (const time_t *, long *); __gnat_localtime_tzoff (const time_t *, const int *, long *);
void void
__gnat_localtime_tzoff (const time_t *timer, long *off) __gnat_localtime_tzoff (const time_t *timer, const int *is_historic, long *off)
{ {
struct tm tp; struct tm tp;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment