When parsing a timestamp-string into epoch seconds, first we use
strptime to get a `struct tm` of year, month, day, etc, but strptime is
timezone-naive and doesn't set tm_isdst meaningfully (glibc apparently
doesn't set it at all). Then we ask mktime() to convert a `struct tm` to
epoch seconds, and we can ask it to lookup DST status for the current
timezone by giving it a `struct tm` with tm_isdst set to a negative
value. See the mktime(3) manpage.
With this change, strptime_local and localtime2sec agree with how GNU
`date` parses timestamp-strings, with the exception that `date` refuses
to parse ambiguous timestamp-strings that fall within the "fold"
intervals of DST transitions, saying they're invalid. Since `date` uses
additional libraries to give good timezone support it's capable of
detecting these ambiguous timestamp-strings, but for a tool like miller
it's reasonable to rely directly on libc and have it choose an
epoch-seconds-timestamp that correspond to either the first or second
time-of-day that the timestamp-string represents.
Remove a duplicate test from c/reg_test/run.
Fix#170
In C I use left-justified formatting to make these line up for proofreading.
In Go there is gofmt which does not preserve that kind of formatting. A
workaround in Go is to rename the shorthand-functions to all have the same
number of characters. While I'm porting from C to Go, it's to go ahead and
rename the C functions the same, so I can copy the disposition matrices from C
to Go with a minimum of reformatting or typo-making.