format: Move epoch into struct fmt_settings.
authorBen Pfaff <blp@cs.stanford.edu>
Wed, 6 Jan 2021 23:24:01 +0000 (15:24 -0800)
committerBen Pfaff <blp@cs.stanford.edu>
Wed, 6 Jan 2021 23:24:01 +0000 (15:24 -0800)
src/data/format.c
src/data/format.h
src/data/settings.c

index 8aa16e65fffc63f045a4d60e205a59dd9bb2536b..d0b87a503f198a8d7db58978abbf6c2fa27a6d06 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <ctype.h>
 #include <stdlib.h>
+#include <time.h>
 #include <uniwidth.h>
 
 #include "data/identifier.h"
@@ -65,6 +66,7 @@ fmt_settings_uninit (struct fmt_settings *settings)
 void
 fmt_settings_copy (struct fmt_settings *new, const struct fmt_settings *old)
 {
+  new->epoch = old->epoch;
   new->decimal = old->decimal;
   for (int i = 0; i < FMT_N_CCS; i++)
     new->ccs[i] = fmt_number_style_clone (old->ccs[i]);
@@ -147,6 +149,25 @@ fmt_settings_get_style (const struct fmt_settings *settings,
     }
 }
 
+static int
+default_epoch (void)
+{
+  static int epoch = 0;
+  if (!epoch)
+    {
+      time_t t = time (0);
+      struct tm *tm = localtime (&t);
+      epoch = (tm != NULL ? tm->tm_year + 1900 : 2000) - 69;
+    }
+  return epoch;
+}
+
+int
+fmt_settings_get_epoch (const struct fmt_settings *settings)
+{
+  return !settings->epoch ? default_epoch () : settings->epoch;
+}
+
 void
 fmt_settings_set_cc (struct fmt_settings *settings, enum fmt_type type,
                      struct fmt_number_style *style)
index 3637b95d0cffe8716825f77778db61805658e4e0..8cc1b8718a78e9fa0ef6e4444f2d5dfa0cedb4db 100644 (file)
@@ -180,6 +180,7 @@ int fmt_neg_affix_width (const struct fmt_number_style *);
 
 struct fmt_settings
   {
+    int epoch;                               /* 0 for default epoch. */
     char decimal;                            /* '.' or ','. */
     struct fmt_number_style *ccs[FMT_N_CCS]; /* CCA through CCE. */
   };
@@ -191,6 +192,7 @@ void fmt_settings_copy (struct fmt_settings *, const struct fmt_settings *);
 
 const struct fmt_number_style *fmt_settings_get_style (
   const struct fmt_settings *, enum fmt_type);
+int fmt_settings_get_epoch (const struct fmt_settings *);
 
 void fmt_settings_set_cc (struct fmt_settings *, enum fmt_type,
                           struct fmt_number_style *);
index 37b609dcfb0031aaeb48f9f457c7a13d4d51c3ed..776cd51957fe4916301a8dbe30f8de4c195bf001 100644 (file)
@@ -20,7 +20,6 @@
 
 #include <assert.h>
 #include <stdlib.h>
-#include <time.h>
 
 #include "data/case.h"
 #include "data/format.h"
@@ -53,7 +52,6 @@ struct settings
   int viewwidth;
   bool safer_mode;
   bool include;
-  int epoch;
   bool route_errors_to_terminal;
   bool route_errors_to_listing;
   bool scompress;
@@ -89,7 +87,6 @@ static struct settings the_settings = {
   79,                           /* viewwidth */
   false,                        /* safer_mode */
   true,                         /* include */
-  -1,                           /* epoch */
   true,                         /* route_errors_to_terminal */
   true,                         /* route_errors_to_listing */
   true,                         /* scompress */
@@ -129,7 +126,6 @@ static struct settings the_settings = {
 void
 settings_init (void)
 {
-  settings_set_epoch (-1);
   settings_set_decimal_char (get_system_decimal ());
 }
 
@@ -297,24 +293,14 @@ settings_set_include (bool include)
 int
 settings_get_epoch (void)
 {
-  assert (the_settings.epoch >= 0);
-
-  return the_settings.epoch;
+  return fmt_settings_get_epoch (&the_settings.styles);
 }
 
 /* Sets the year that starts the epoch. */
 void
 settings_set_epoch (int epoch)
 {
-  if (epoch < 0)
-    {
-      time_t t = time (0);
-      struct tm *tm = localtime (&t);
-      epoch = (tm != NULL ? tm->tm_year + 1900 : 2000) - 69;
-    }
-
-  the_settings.epoch = epoch;
-  assert (the_settings.epoch >= 0);
+  the_settings.styles.epoch = epoch;
 }
 
 /* Compress system files by default? */