r22615 - gnucash/trunk/src/libqof/qof - Create 64-bit time type time64 and replace gint64 with time64

John Ralls jralls at code.gnucash.org
Sat Dec 1 17:43:55 EST 2012


Author: jralls
Date: 2012-12-01 17:43:55 -0500 (Sat, 01 Dec 2012)
New Revision: 22615
Trac: http://svn.gnucash.org/trac/changeset/22615

Modified:
   gnucash/trunk/src/libqof/qof/gnc-date.c
   gnucash/trunk/src/libqof/qof/gnc-date.h
Log:
Create 64-bit time type time64 and replace gint64 with time64

Modified: gnucash/trunk/src/libqof/qof/gnc-date.c
===================================================================
--- gnucash/trunk/src/libqof/qof/gnc-date.c	2012-12-01 22:43:44 UTC (rev 22614)
+++ gnucash/trunk/src/libqof/qof/gnc-date.c	2012-12-01 22:43:55 UTC (rev 22615)
@@ -190,7 +190,7 @@
 }
 
 static GDateTime*
-gnc_g_date_time_new_from_unix_local (gint64 time)
+gnc_g_date_time_new_from_unix_local (time64 time)
 {
 #ifndef G_OS_WIN32
     return g_date_time_new_from_unix_local (time);
@@ -246,7 +246,7 @@
 {
     GDateTime *(*new_local)(gint, gint, gint, gint, gint, gdouble);
     GDateTime *(*adjust_for_dst)(GDateTime *, GTimeZone *);
-    GDateTime *(*new_from_unix_local)(gint64);
+    GDateTime *(*new_from_unix_local)(time64);
     GDateTime *(*new_from_timeval_local)(const GTimeVal *);
     GDateTime *(*new_now_local)(void);
     GDateTime *(*to_local)(GDateTime *);
@@ -287,7 +287,7 @@
 }
 
 struct tm*
-gnc_localtime (const gint64 *secs)
+gnc_localtime (const time64 *secs)
 {
      struct tm *time = g_slice_alloc0 (sizeof (struct tm));
      if (gnc_localtime_r (secs, time) == NULL)
@@ -299,7 +299,7 @@
 }
 
 struct tm*
-gnc_localtime_r (const gint64 *secs, struct tm* time)
+gnc_localtime_r (const time64 *secs, struct tm* time)
 {
      guint index = 0;
      GDateTime *gdt = gnc_g_date_time_new_from_unix_local (*secs);
@@ -323,7 +323,7 @@
 }
 
 struct tm*
-gnc_gmtime (const gint64 *secs)
+gnc_gmtime (const time64 *secs)
 {
      struct tm *time;
      GDateTime *gdt = g_date_time_new_from_unix_utc (*secs);
@@ -361,7 +361,7 @@
 {
      gint year = time->tm_year + 1900;
      gint last_day;
-     gint64 secs;
+     time64 secs;
 
      ++time->tm_mon;
 
@@ -386,11 +386,11 @@
      time->tm_year = year - 1900;
 }
 
-gint64
+time64
 gnc_mktime (struct tm* time)
 {
      GDateTime *gdt;
-     gint64 secs;
+     time64 secs;
      normalize_struct_tm (time);
      gdt = gnc_g_date_time_new_local (time->tm_year + 1900, time->tm_mon,
 				      time->tm_mday, time->tm_hour,
@@ -409,11 +409,11 @@
      return secs;
 }
 
-gint64
+time64
 gnc_timegm (struct tm* time)
 {
      GDateTime *gdt;
-     gint64 secs;
+     time64 secs;
      normalize_struct_tm (time);
      gdt = g_date_time_new_utc (time->tm_year + 1900, time->tm_mon,
 				time->tm_mday, time->tm_hour, time->tm_min,
@@ -429,7 +429,7 @@
 }
 
 gchar*
-gnc_ctime (const gint64 *secs)
+gnc_ctime (const time64 *secs)
 {
      GDateTime *gdt = gnc_g_date_time_new_from_unix_local (*secs);
      gchar *string = g_date_time_format (gdt, "%a %b %H:%M:%S %Y");
@@ -437,19 +437,30 @@
      return string;
 }
 
-gint64
-gnc_time (gint64 *tbuf)
+time64
+gnc_time (time64 *tbuf)
 {
      GDateTime *gdt = gnc_g_date_time_new_now_local ();
-     gint64 secs = g_date_time_to_unix (gdt);
+     time64 secs = g_date_time_to_unix (gdt);
      g_date_time_unref (gdt);
      if (tbuf != NULL)
 	  *tbuf = secs;
      return secs;
 }
 
+time64
+gnc_time_utc (time64 *tbuf)
+{
+     GDateTime *gdt = g_date_time_new_now_utc ();
+     time64 secs = g_date_time_to_unix (gdt);
+     g_date_time_unref (gdt);
+     if (tbuf != NULL)
+	  *tbuf = secs;
+     return secs;
+}
+
 gdouble
-gnc_difftime (const gint64 secs1, const gint64 secs2)
+gnc_difftime (const time64 secs1, const time64 secs2)
 {
      return (double)secs2 - (double)secs1;
 }
@@ -656,7 +667,7 @@
 {
     struct tm tm;
     Timespec retval;
-    gint64 t_secs = t.tv_sec + (t.tv_nsec / NANOS_PER_SECOND);
+    time64 t_secs = t.tv_sec + (t.tv_nsec / NANOS_PER_SECOND);
     gnc_localtime_r(&t_secs, &tm);
     gnc_tm_set_day_middle(&tm);
     retval.tv_sec = gnc_mktime(&tm);
@@ -857,7 +868,7 @@
     case QOF_DATE_FORMAT_LOCALE:
     {
         struct tm tm_str;
-        gint64 t;
+        time64 t;
 
         tm_str.tm_mday = day;
         tm_str.tm_mon = month - 1;    /* tm_mon = 0 through 11 */
@@ -886,10 +897,10 @@
 }
 
 size_t
-qof_print_date_buff (char * buff, size_t len, gint64 t)
+qof_print_date_buff (char * buff, size_t len, time64 t)
 {
     struct tm theTime;
-    gint64 bt = t;
+    time64 bt = t;
     size_t actual;
     if (!buff) return 0 ;
     if (!gnc_localtime_r(&bt, &theTime))
@@ -912,7 +923,7 @@
 }
 
 char *
-qof_print_date (gint64 t)
+qof_print_date (time64 t)
 {
     char buff[MAX_DATE_LENGTH];
     memset (buff, 0, sizeof (buff));
@@ -924,10 +935,10 @@
 gnc_print_date (Timespec ts)
 {
     static char buff[MAX_DATE_LENGTH];
-    gint64 t;
+    time64 t;
 
     memset (buff, 0, sizeof (buff));
-    t = ts.tv_sec + (gint64)(ts.tv_nsec / 1000000000.0);
+    t = ts.tv_sec + (time64)(ts.tv_nsec / 1000000000.0);
 
     qof_print_date_buff (buff, MAX_DATE_LENGTH, t);
 
@@ -981,7 +992,7 @@
     int iday, imonth, iyear;
     int now_day, now_month, now_year;
     struct tm *now, utc;
-    gint64 secs;
+    time64 secs;
 
     if (!buff) return(FALSE);
 
@@ -1238,7 +1249,7 @@
             /* Make a guess */
             gchar string[256];
             struct tm tm;
-            gint64 secs;
+            time64 secs;
             gchar *s;
 
             secs = gnc_time (NULL);
@@ -1479,7 +1490,7 @@
 gnc_timespec2dmy (Timespec t, int *day, int *month, int *year)
 {
     struct tm result;
-    gint64 t_secs = t.tv_sec + (t.tv_nsec / NANOS_PER_SECOND);
+    time64 t_secs = t.tv_sec + (t.tv_nsec / NANOS_PER_SECOND);
     gnc_localtime_r(&t_secs, &result);
 
     if (day) *day = result.tm_mday;
@@ -1557,7 +1568,7 @@
 
 
 void
-timespecFromTime_t( Timespec *ts, gint64 t )
+timespecFromTime_t( Timespec *ts, time64 t )
 {
     ts->tv_sec = t;
     ts->tv_nsec = 0;
@@ -1572,7 +1583,7 @@
     return ts;
 }
 
-gint64
+time64
 timespecToTime_t (Timespec ts)
 {
     return ts.tv_sec;
@@ -1617,7 +1628,7 @@
 }
 
 static void
-gnc_tm_get_day_start (struct tm *tm, gint64 time_val)
+gnc_tm_get_day_start (struct tm *tm, time64 time_val)
 {
     /* Get the equivalent time structure */
     if (!gnc_localtime_r(&time_val, tm))
@@ -1626,7 +1637,7 @@
 }
 
 static void
-gnc_tm_get_day_end (struct tm *tm, gint64 time_val)
+gnc_tm_get_day_end (struct tm *tm, time64 time_val)
 {
     /* Get the equivalent time structure */
     if (!gnc_localtime_r(&time_val, tm))
@@ -1634,22 +1645,22 @@
     gnc_tm_set_day_end(tm);
 }
 
-gint64
-gnc_timet_get_day_start (gint64 time_val)
+time64
+gnc_timet_get_day_start (time64 time_val)
 {
     struct tm tm;
-    gint64 new_time;
+    time64 new_time;
 
     gnc_tm_get_day_start(&tm, time_val);
     new_time = gnc_mktime(&tm);
     return new_time;
 }
 
-gint64
-gnc_timet_get_day_end (gint64 time_val)
+time64
+gnc_timet_get_day_end (time64 time_val)
 {
     struct tm tm;
-    gint64 new_time;
+    time64 new_time;
 
     gnc_tm_get_day_end(&tm, time_val);
     new_time = gnc_mktime(&tm);
@@ -1671,7 +1682,7 @@
     gnc_tm_get_day_end(tm, time(NULL));
 }
 
-gint64
+time64
 gnc_timet_get_today_start (void)
 {
     struct tm tm;
@@ -1680,7 +1691,7 @@
     return gnc_mktime(&tm);
 }
 
-gint64
+time64
 gnc_timet_get_today_end (void)
 {
     struct tm tm;

Modified: gnucash/trunk/src/libqof/qof/gnc-date.h
===================================================================
--- gnucash/trunk/src/libqof/qof/gnc-date.h	2012-12-01 22:43:44 UTC (rev 22614)
+++ gnucash/trunk/src/libqof/qof/gnc-date.h	2012-12-01 22:43:55 UTC (rev 22615)
@@ -71,6 +71,13 @@
 #include <glib-object.h>
 #include <time.h>
 
+/**
+ * Many systems, including Microsoft Windows and BSD-derived Unixes
+ * like Darwin, are retaining the int-32 typedef for time_t. Since
+ * this stops working in 2038, we define our own:
+ */
+typedef gint64 time64;
+
 /** The Timespec is just like the unix 'struct timespec'
  * except that we use a 64-bit unsigned int to
  * store the seconds.  This should adequately cover dates in the
@@ -157,7 +164,7 @@
  *  \return A struct tm*, allocated on the heap. Must be freed with gnc_tm_free().
  *  The time is adjusted for the current local time zone.
  */
-struct tm* gnc_localtime (const gint64 *secs);
+struct tm* gnc_localtime (const time64 *secs);
 
 /** \brief fill out a time struct from a 64-bit time value adjusted for the current time zone.
  *  \param secs: Seconds since 00:00:01 UTC 01 January 1970 (negative values
@@ -165,7 +172,7 @@
  *  \param time: A struct tm* for the function to fill.
  *  The time is adjusted for the current local time zone.
  */
-struct tm* gnc_localtime_r (const gint64 *secs, struct tm* time);
+struct tm* gnc_localtime_r (const time64 *secs, struct tm* time);
 
 /** \brief fill out a time struct from a 64-bit time value
  *  \param secs: Seconds since 00:00:01 UTC 01 January 1970 (negative values
@@ -173,7 +180,7 @@
  *  \return A struct tm*, allocated on the heap. Must be freed with gnc_tm_free()
  *  The time is UTC.
  */
-struct tm* gnc_gmtime (const gint64 *secs);
+struct tm* gnc_gmtime (const time64 *secs);
 
 /** \brief calculate seconds from the epoch given a time struct
  *  \param time: A struct tm* for the function to fill.
@@ -181,7 +188,7 @@
  *  \return Seconds since 00:00:01 UTC 01 January 1970 (negative values
  * are seconds before that moment).
  */
-gint64 gnc_mktime (struct tm* time);
+time64 gnc_mktime (struct tm* time);
 
 /** \brief calculate seconds from the epoch given a time struct
  *  \param time: A struct tm* for the function to fill.
@@ -189,7 +196,7 @@
  *  \return Seconds since 00:00:01 UTC 01 January 1970 (negative values
  * are seconds before that moment).
  */
-gint64 gnc_timegm (struct tm* time);
+time64 gnc_timegm (struct tm* time);
 
 /** \brief Return a string representation of a date from a 64-bit time value
  *  \param secs: Seconds since 00:00:01 UTC 01 January 1970 (negative values
@@ -199,16 +206,24 @@
  *       Thu Nov 24 18:22:48 1986\n\0
  * This is equivalent to the strftime format %a %b %H:%M:%S %Y.
  */
-gchar* gnc_ctime (const gint64 *secs);
+gchar* gnc_ctime (const time64 *secs);
 
 /** \brief get the current local time
- *  \param A gint64* which, if not NULL, will be filled in with the same
+ *  \param A time64* which, if not NULL, will be filled in with the same
  * value as is returned.
  * \return Seconds since 00:00:01 UTC 01 January 1970 (negative values
  * are seconds before that moment)
  */
-gint64 gnc_time (gint64 *tbuf);
+time64 gnc_time (time64 *tbuf);
 
+/** \brief get the current utc time
+ *  \param A time64* which, if not NULL, will be filled in with the same
+ * value as is returned.
+ * \return Seconds since 00:00:01 UTC 01 January 1970 (negative values
+ * are seconds before that moment)
+ */
+time64 gnc_time_utc (time64 *tbuf);
+
 /** \brief Find the difference in seconds between two time values
  *  \param secs1: The first time value, in Seconds since
  * 00:00:01 UTC 01 January 1970 (negative values are seconds before that moment)
@@ -217,7 +232,7 @@
  *  \return The difference in seconds between secs1 and secs2. If secs1 is
  * later than secs2 the value will be negative.
  */
-gdouble gnc_difftime (const gint64 secs1, const gint64 secs2);
+gdouble gnc_difftime (const time64 secs1, const time64 secs2);
 
 /** \brief free a struct tm* created with gnc_localtime() or gnc_gmtime()
  * \param time: The struct tm* to be freed.
@@ -273,7 +288,7 @@
 #ifndef SWIG   /* swig 1.1p5 can't hack the long long type */
 struct timespec64
 {
-    gint64 tv_sec;
+    time64 tv_sec;
     glong tv_nsec;
 };
 #endif /* SWIG */
@@ -307,11 +322,11 @@
 /** Returns the current clock time as a Timespec, taken from time(2). */
 Timespec timespec_now (void);
 
-/** Turns a gint64 into a Timespec */
-void timespecFromTime_t( Timespec *ts, gint64 t );
+/** Turns a time64 into a Timespec */
+void timespecFromTime_t( Timespec *ts, time64 t );
 
-/** Turns a Timespec into a gint64 */
-gint64 timespecToTime_t (Timespec ts);
+/** Turns a Timespec into a time64 */
+time64 timespecToTime_t (Timespec ts);
 
 /** Returns a newly allocated date of the current clock time, taken from
  * time(2). The caller must g_date_free() the object afterwards. */
@@ -504,7 +519,7 @@
 size_t qof_print_date_dmy_buff (gchar * buff, size_t buflen, int day, int month, int year);
 
 /** Convenience: calls through to qof_print_date_dmy_buff(). **/
-size_t qof_print_date_buff (char * buff, size_t buflen, gint64 secs);
+size_t qof_print_date_buff (char * buff, size_t buflen, time64 secs);
 
 /** Convenience; calls through to qof_print_date_dmy_buff(). **/
 size_t qof_print_gdate(char *buf, size_t bufflen, const GDate *gd);
@@ -512,7 +527,7 @@
 /** Convenience; calls through to qof_print_date_dmy_buff().
  *  Return: string, which should be freed when no longer needed.
  * **/
-char * qof_print_date (gint64 secs);
+char * qof_print_date (time64 secs);
 
 /** Convenience; calls through to qof_print_date_dmy_buff().
  *  Return: static global string.
@@ -529,7 +544,7 @@
  *    Returns the number of bytes printed.
  */
 
-size_t qof_print_date_time_buff (char * buff, size_t len, gint64 secs);
+size_t qof_print_date_time_buff (char * buff, size_t len, time64 secs);
 
 /** qof_scan_date
  *    Convert a string into  day / month / year integers according to
@@ -599,11 +614,11 @@
 
 /** The gnc_timet_get_day_start() routine will take the given time in
  *  seconds and adjust it to the last second of that day. */
-gint64 gnc_timet_get_day_start(gint64 time_val);
+time64 gnc_timet_get_day_start(time64 time_val);
 
 /** The gnc_timet_get_day_end() routine will take the given time in
  *  seconds and adjust it to the last second of that day. */
-gint64 gnc_timet_get_day_end(gint64 time_val);
+time64 gnc_timet_get_day_end(time64 time_val);
 
 /** Get the numerical last date of the month. (28, 29, 30, 31) */
 int gnc_date_get_last_mday (int month, int year);
@@ -622,13 +637,13 @@
  *  tm and fills it in with the last second of the today. */
 void   gnc_tm_get_today_end(struct tm *tm);
 
-/** The gnc_timet_get_today_start() routine returns a gint64 value
+/** The gnc_timet_get_today_start() routine returns a time64 value
  *  corresponding to the first second of today. */
-gint64 gnc_timet_get_today_start(void);
+time64 gnc_timet_get_today_start(void);
 
-/** The gnc_timet_get_today_end() routine returns a gint64 value
+/** The gnc_timet_get_today_end() routine returns a time64 value
  *  corresponding to the last second of today. */
-gint64 gnc_timet_get_today_end(void);
+time64 gnc_timet_get_today_end(void);
 
 /** \brief Make a timestamp in YYYYMMDDHHMMSS format.
  *  @return A pointer to the generated string.



More information about the gnucash-changes mailing list