From: Piotr Trojanek <[email protected]>
Interface from Ada to C for calling gmtime was over-complicated. Now we just
rely on the Ada RM and what it guarantees when interfacing for parameters of
elementary types depending on their IN/OUT mode.
gcc/ada/ChangeLog:
* adaint.c, adaint.h (__gnat_to_gm_time): Adapt C side, while keeping
the explicit conversion to time_t, if this ever needs to be debugged.
* libgnat/s-os_lib.adb (To_GM_Time): Adapt Ada side.
Tested on x86_64-pc-linux-gnu, committed on master.
---
gcc/ada/adaint.c | 4 ++--
gcc/ada/adaint.h | 2 +-
gcc/ada/libgnat/s-os_lib.adb | 29 ++++++++++++++---------------
3 files changed, 17 insertions(+), 18 deletions(-)
diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c
index 95351a5f4ef..5fb25571774 100644
--- a/gcc/ada/adaint.c
+++ b/gcc/ada/adaint.c
@@ -444,11 +444,11 @@ __gnat_current_time_string (char *result)
}
void
-__gnat_to_gm_time (OS_Time *p_time, int *p_year, int *p_month, int *p_day,
+__gnat_to_gm_time (OS_Time date, int *p_year, int *p_month, int *p_day,
int *p_hours, int *p_mins, int *p_secs)
{
struct tm *res;
- time_t time = (time_t) *p_time;
+ time_t time = (time_t) date;
res = gmtime (&time);
if (res)
diff --git a/gcc/ada/adaint.h b/gcc/ada/adaint.h
index ca92e08f858..c8973c16cde 100644
--- a/gcc/ada/adaint.h
+++ b/gcc/ada/adaint.h
@@ -146,7 +146,7 @@ extern int __gnat_in_child_after_fork;
extern OS_Time __gnat_current_time (void);
extern void __gnat_current_time_string (char *);
-extern void __gnat_to_gm_time (OS_Time *, int *,
int *,
+extern void __gnat_to_gm_time (OS_Time, int *, int
*,
int *, int *,
int *, int *);
extern void __gnat_to_os_time (OS_Time *, int, int, int,
diff --git a/gcc/ada/libgnat/s-os_lib.adb b/gcc/ada/libgnat/s-os_lib.adb
index df11e75afc9..ae8ef2b1a08 100644
--- a/gcc/ada/libgnat/s-os_lib.adb
+++ b/gcc/ada/libgnat/s-os_lib.adb
@@ -1304,16 +1304,15 @@ package body System.OS_Lib is
Second : out Second_Type)
is
procedure To_GM_Time
- (P_OS_Time : Address;
- P_Year : Address;
- P_Month : Address;
- P_Day : Address;
- P_Hours : Address;
- P_Mins : Address;
- P_Secs : Address);
+ (Date : OS_Time;
+ P_Year : out Integer;
+ P_Month : out Integer;
+ P_Day : out Integer;
+ P_Hours : out Integer;
+ P_Mins : out Integer;
+ P_Secs : out Integer);
pragma Import (C, To_GM_Time, "__gnat_to_gm_time");
- T : OS_Time := Date;
Y : Integer;
Mo : Integer;
D : Integer;
@@ -1342,13 +1341,13 @@ package body System.OS_Lib is
Locked_Processing : begin
SSL.Lock_Task.all;
To_GM_Time
- (P_OS_Time => T'Address,
- P_Year => Y'Address,
- P_Month => Mo'Address,
- P_Day => D'Address,
- P_Hours => H'Address,
- P_Mins => Mn'Address,
- P_Secs => S'Address);
+ (Date => Date,
+ P_Year => Y,
+ P_Month => Mo,
+ P_Day => D,
+ P_Hours => H,
+ P_Mins => Mn,
+ P_Secs => S);
SSL.Unlock_Task.all;
exception
--
2.53.0