]> diplodocus.org Git - nmh/blobdiff - sbr/dtime.c
Restored file execute permissions.
[nmh] / sbr / dtime.c
index 56d874e0394079559e9b3449610363a3e5178896..9a1002652c5f6b80363a415653942854da95aa4b 100644 (file)
@@ -5,16 +5,21 @@
  * complete copyright information.
  */
 
-#include <h/mh.h>   /* for snprintf() */
-#include <h/nmh.h>
-#include <h/utils.h>
-#include <h/tws.h>
+#include "h/mh.h"
+#include "dtime.h"
+#include "h/nmh.h"
+#include "h/utils.h"
+#include "h/tws.h"
 #include <time.h>
 
 #if !defined(HAVE_STRUCT_TM_TM_GMTOFF)
 extern long timezone;
 #endif
 
+/* Size of largest possible int representing a time zone offset in minutes:
+   2,147,483,648 / 60 = 35,791,394 */
+#define DTZ_BUFFER_SIZE (sizeof "+3579139459")
+
 /*
  * The number of days in the year, accounting for leap years
  */
@@ -118,7 +123,7 @@ dlocaltime (time_t *clock)
 
     tw.tw_clock = *clock;
 
-    return (&tw);
+    return &tw;
 }
 
 
@@ -165,7 +170,7 @@ dgmtime (time_t *clock)
 
     tw.tw_clock = *clock;
 
-    return (&tw);
+    return &tw;
 }
 
 
@@ -248,7 +253,8 @@ dtime (time_t *clock, int alpha_timezone)
 char *
 dasctime (struct tws *tw, int flags)
 {
-    char buffer[80];
+    char buffer[77];
+    char tzbuffer[DTZ_BUFFER_SIZE];
     static char result[80];
     int twf;
 
@@ -257,14 +263,14 @@ dasctime (struct tws *tw, int flags)
 
     /* Display timezone if known */
     if (tw->tw_flags & TW_SZEXP)
-       snprintf(result, sizeof(result), " %s", dtimezone(tw->tw_zone, tw->tw_flags | flags));
+       snprintf(tzbuffer, sizeof(tzbuffer), " %s", dtimezone(tw->tw_zone, tw->tw_flags | flags));
     else
-       result[0] = '\0';
+       tzbuffer[0] = '\0';
 
     snprintf(buffer, sizeof(buffer), "%02d %s %0*d %02d:%02d:%02d%s",
            tw->tw_mday, tw_moty[tw->tw_mon],
            tw->tw_year < 100 ? 2 : 4, tw->tw_year,
-           tw->tw_hour, tw->tw_min, tw->tw_sec, result);
+           tw->tw_hour, tw->tw_min, tw->tw_sec, tzbuffer);
 
     if ((twf = tw->tw_flags & TW_SDAY)) {
         if (twf == TW_SEXP)
@@ -285,9 +291,10 @@ dasctime (struct tws *tw, int flags)
  * return the string representation of the numeric offset.
  */
 
-char *dtimezone(int offset, int flags)
+char *
+dtimezone(int offset, int flags)
 {
-    static char buffer[sizeof "+3579139459"]; /* 2,147,483,648 / 60 = 35,791,394 */
+    static char buffer[DTZ_BUFFER_SIZE];
     bool pos;
     unsigned os, hours, mins;
 
@@ -345,14 +352,17 @@ dmktime (struct tws *tw)
     while (--mon)
        result += dmsize[mon - 1];
     result += mday - 1;
-    result = 24 * result + hour;
-    result = 60 * result + min;
-    result = 60 * result + sec;
+    result *= 24; /* Days to hours. */
+    result += hour;
+    result *= 60; /* Hours to minutes. */
+    result += min;
+    result *= 60; /* Minutes to seconds. */
+    result += sec;
     result -= 60 * tw->tw_zone;
     if (tw->tw_flags & TW_DST)
-       result -= 60 * 60;
+       result -= 60 * 60; /* One hour. */
 
-    return (tw->tw_clock = result);
+    return tw->tw_clock = result;
 }
 
 
@@ -405,6 +415,6 @@ twsort (struct tws *tw1, struct tws *tw2)
     if (tw2->tw_clock == 0)
        dmktime (tw2);
 
-    return ((c1 = tw1->tw_clock) > (c2 = tw2->tw_clock) ? 1
-           : c1 == c2 ? 0 : -1);
+    return (c1 = tw1->tw_clock) > (c2 = tw2->tw_clock) ? 1
+           : c1 == c2 ? 0 : -1;
 }