Skip to content

Commit 680fc91

Browse files
Embed current leap second list. Fixes #85
1 parent 497dff7 commit 680fc91

File tree

3 files changed

+46
-4
lines changed

3 files changed

+46
-4
lines changed

ChangeLog

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
2023.029: 3.0.13
2+
- Embed current leap second list, used by default and replaced by
3+
ms_readleapsecondfile().
4+
15
2023.028:
26
- Add ISOMONTHDAY_DOY time string variant, with day-of-year.
37
- Add '_Z' variants of time string formats for trailing Z versions.

genutils.c

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,43 @@ libmseed_memory_prealloc (void *ptr, size_t size, size_t *currentsize)
7272
return newptr;
7373
}
7474

75-
/* A constant number of seconds between the NTP and Posix/Unix time epoch */
75+
/* A constant number of seconds between the NTP and POSIX/Unix time epoch */
7676
#define NTPPOSIXEPOCHDELTA 2208988800LL
77+
#define NTPEPOCH2NSTIME(X) (MS_EPOCH2NSTIME (X - NTPPOSIXEPOCHDELTA))
78+
79+
/* Embedded leap second list */
80+
static LeapSecond embedded_leapsecondlist[] = {
81+
{.leapsecond = NTPEPOCH2NSTIME (2272060800), .TAIdelta = 10, .next = &embedded_leapsecondlist[1]},
82+
{.leapsecond = NTPEPOCH2NSTIME (2287785600), .TAIdelta = 11, .next = &embedded_leapsecondlist[2]},
83+
{.leapsecond = NTPEPOCH2NSTIME (2303683200), .TAIdelta = 12, .next = &embedded_leapsecondlist[3]},
84+
{.leapsecond = NTPEPOCH2NSTIME (2335219200), .TAIdelta = 13, .next = &embedded_leapsecondlist[4]},
85+
{.leapsecond = NTPEPOCH2NSTIME (2366755200), .TAIdelta = 14, .next = &embedded_leapsecondlist[5]},
86+
{.leapsecond = NTPEPOCH2NSTIME (2398291200), .TAIdelta = 15, .next = &embedded_leapsecondlist[6]},
87+
{.leapsecond = NTPEPOCH2NSTIME (2429913600), .TAIdelta = 16, .next = &embedded_leapsecondlist[7]},
88+
{.leapsecond = NTPEPOCH2NSTIME (2461449600), .TAIdelta = 17, .next = &embedded_leapsecondlist[8]},
89+
{.leapsecond = NTPEPOCH2NSTIME (2492985600), .TAIdelta = 18, .next = &embedded_leapsecondlist[9]},
90+
{.leapsecond = NTPEPOCH2NSTIME (2524521600), .TAIdelta = 19, .next = &embedded_leapsecondlist[10]},
91+
{.leapsecond = NTPEPOCH2NSTIME (2571782400), .TAIdelta = 20, .next = &embedded_leapsecondlist[11]},
92+
{.leapsecond = NTPEPOCH2NSTIME (2603318400), .TAIdelta = 21, .next = &embedded_leapsecondlist[12]},
93+
{.leapsecond = NTPEPOCH2NSTIME (2634854400), .TAIdelta = 22, .next = &embedded_leapsecondlist[13]},
94+
{.leapsecond = NTPEPOCH2NSTIME (2698012800), .TAIdelta = 23, .next = &embedded_leapsecondlist[14]},
95+
{.leapsecond = NTPEPOCH2NSTIME (2776982400), .TAIdelta = 24, .next = &embedded_leapsecondlist[15]},
96+
{.leapsecond = NTPEPOCH2NSTIME (2840140800), .TAIdelta = 25, .next = &embedded_leapsecondlist[16]},
97+
{.leapsecond = NTPEPOCH2NSTIME (2871676800), .TAIdelta = 26, .next = &embedded_leapsecondlist[17]},
98+
{.leapsecond = NTPEPOCH2NSTIME (2918937600), .TAIdelta = 27, .next = &embedded_leapsecondlist[18]},
99+
{.leapsecond = NTPEPOCH2NSTIME (2950473600), .TAIdelta = 28, .next = &embedded_leapsecondlist[19]},
100+
{.leapsecond = NTPEPOCH2NSTIME (2982009600), .TAIdelta = 29, .next = &embedded_leapsecondlist[20]},
101+
{.leapsecond = NTPEPOCH2NSTIME (3029443200), .TAIdelta = 30, .next = &embedded_leapsecondlist[21]},
102+
{.leapsecond = NTPEPOCH2NSTIME (3076704000), .TAIdelta = 31, .next = &embedded_leapsecondlist[22]},
103+
{.leapsecond = NTPEPOCH2NSTIME (3124137600), .TAIdelta = 32, .next = &embedded_leapsecondlist[23]},
104+
{.leapsecond = NTPEPOCH2NSTIME (3345062400), .TAIdelta = 33, .next = &embedded_leapsecondlist[24]},
105+
{.leapsecond = NTPEPOCH2NSTIME (3439756800), .TAIdelta = 34, .next = &embedded_leapsecondlist[25]},
106+
{.leapsecond = NTPEPOCH2NSTIME (3550089600), .TAIdelta = 35, .next = &embedded_leapsecondlist[26]},
107+
{.leapsecond = NTPEPOCH2NSTIME (3644697600), .TAIdelta = 36, .next = &embedded_leapsecondlist[27]},
108+
{.leapsecond = NTPEPOCH2NSTIME (3692217600), .TAIdelta = 37, .next = NULL}};
77109

78110
/* Global variable to hold a leap second list */
79-
LeapSecond *leapsecondlist = NULL;
111+
LeapSecond *leapsecondlist = &embedded_leapsecondlist[0];
80112

81113
/* Days in each month, for non-leap and leap years */
82114
static const int monthdays[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
@@ -1739,6 +1771,12 @@ ms_readleapsecondfile (const char *filename)
17391771
return -1;
17401772
}
17411773

1774+
/* Detatch embedded leap second list */
1775+
if (leapsecondlist == &embedded_leapsecondlist[0])
1776+
{
1777+
leapsecondlist = NULL;
1778+
}
1779+
17421780
/* Free existing leapsecondlist */
17431781
while (leapsecondlist != NULL)
17441782
{

libmseed.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@
2828
extern "C" {
2929
#endif
3030

31-
#define LIBMSEED_VERSION "3.0.12" //!< Library version
32-
#define LIBMSEED_RELEASE "2022.338" //!< Library release date
31+
#define LIBMSEED_VERSION "3.0.13" //!< Library version
32+
#define LIBMSEED_RELEASE "2023.029" //!< Library release date
3333

3434
/** @defgroup io-functions File and URL I/O */
3535
/** @defgroup miniseed-record Record Handling */

0 commit comments

Comments
 (0)