From 2a68b2f5a9adc10291c0dac815b63a3a514e3d34 Mon Sep 17 00:00:00 2001 From: charlet Date: Fri, 18 Jul 2014 09:31:36 +0000 Subject: [PATCH] 2014-07-18 Pascal Obry * s-os_lib.ads, s-os_lib.adb (GM_Time_Of): New routine to create an OS_Time from time parts. * adaint.h, adaint.c (__gnat_to_os_time): New routine. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@212788 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ada/ChangeLog | 6 ++++++ gcc/ada/adaint.c | 19 +++++++++++++++++++ gcc/ada/adaint.h | 2 ++ gcc/ada/s-os_lib.adb | 22 ++++++++++++++++++++++ gcc/ada/s-os_lib.ads | 11 +++++++++++ 5 files changed, 60 insertions(+) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 7321d41..897853b 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,9 @@ +2014-07-18 Pascal Obry + + * s-os_lib.ads, s-os_lib.adb (GM_Time_Of): New routine to create an + OS_Time from time parts. + * adaint.h, adaint.c (__gnat_to_os_time): New routine. + 2014-07-18 Ed Schonberg * sem_ch4.adb (Try_Container_Indexing): Refine previous patch for diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c index 607ba82..6e0e4a3d 100644 --- a/gcc/ada/adaint.c +++ b/gcc/ada/adaint.c @@ -503,6 +503,25 @@ __gnat_to_gm_time (OS_Time *p_time, int *p_year, int *p_month, int *p_day, *p_year = *p_month = *p_day = *p_hours = *p_mins = *p_secs = 0; } +void +__gnat_to_os_time (OS_Time *p_time, int year, int month, int day, + int hours, int mins, int secs) +{ + struct tm v; + + v.tm_year = year; + v.tm_mon = month; + v.tm_mday = day; + v.tm_hour = hours; + v.tm_min = mins; + v.tm_sec = secs; + v.tm_isdst = 0; + + /* returns -1 of failing, this is s-os_lib Invalid_Time */ + + *p_time = (OS_Time) mktime (&v); +} + /* Place the contents of the symbolic link named PATH in the buffer BUF, which has size BUFSIZ. If PATH is a symbolic link, then return the number of characters of its content in BUF. Otherwise, return -1. diff --git a/gcc/ada/adaint.h b/gcc/ada/adaint.h index 3c3e476..f6b6f69 100644 --- a/gcc/ada/adaint.h +++ b/gcc/ada/adaint.h @@ -107,6 +107,8 @@ extern void __gnat_current_time_string (char *); 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, + int, int, int); extern int __gnat_get_maximum_file_name_length (void); extern int __gnat_get_switches_case_sensitive (void); extern int __gnat_get_file_names_case_sensitive (void); diff --git a/gcc/ada/s-os_lib.adb b/gcc/ada/s-os_lib.adb index 17ac32e..796fe08 100644 --- a/gcc/ada/s-os_lib.adb +++ b/gcc/ada/s-os_lib.adb @@ -1308,6 +1308,28 @@ package body System.OS_Lib is Second := S; end GM_Split; + ---------------- + -- GM_Time_Of -- + ---------------- + + function GM_Time_Of + (Year : Year_Type; + Month : Month_Type; + Day : Day_Type; + Hour : Hour_Type; + Minute : Minute_Type; + Second : Second_Type) return OS_Time + is + procedure To_OS_Time + (P_Time_T : Address; Year, Month, Day, Hours, Mins, Secs : Integer); + pragma Import (C, To_OS_Time, "__gnat_to_os_time"); + Result : OS_Time; + begin + To_OS_Time + (Result'Address, Year - 1900, Month - 1, Day, Hour, Minute, Second); + return Result; + end GM_Time_Of; + ------------- -- GM_Year -- ------------- diff --git a/gcc/ada/s-os_lib.ads b/gcc/ada/s-os_lib.ads index 9552d86..810d7d4 100644 --- a/gcc/ada/s-os_lib.ads +++ b/gcc/ada/s-os_lib.ads @@ -152,6 +152,17 @@ package System.OS_Lib is -- provides a representation of it as a set of component parts, to be -- interpreted as a date point in UTC. + function GM_Time_Of + (Year : Year_Type; + Month : Month_Type; + Day : Day_Type; + Hour : Hour_Type; + Minute : Minute_Type; + Second : Second_Type) return OS_Time; + -- Analogous to the Time_Of routine in Ada.Calendar, takes a set of + -- time component parts and returns an OS_Time. Returns Invalid_Time + -- if the creation fails. + ---------------- -- File Stuff -- ---------------- -- 2.7.4