diff --git a/0144b15dda4b1ea4fdbeca9f3ecb128eb98772fd.patch b/0144b15dda4b1ea4fdbeca9f3ecb128eb98772fd.patch new file mode 100644 index 0000000..482dc06 --- /dev/null +++ b/0144b15dda4b1ea4fdbeca9f3ecb128eb98772fd.patch @@ -0,0 +1,88 @@ +From 0144b15dda4b1ea4fdbeca9f3ecb128eb98772fd Mon Sep 17 00:00:00 2001 +From: Sebastian Freundt +Date: Mon, 22 Feb 2021 12:21:40 +0000 +Subject: [PATCH] minor, condense %s%N to DT_SPFL_N_EPOCHNS, fixes issue 123 + +--- + lib/dt-core-strpf.c | 10 ++++++++-- + lib/dt-core.c | 2 +- + lib/token.c | 4 ++++ + lib/token.h | 2 ++ + 4 files changed, 15 insertions(+), 3 deletions(-) + +diff --git a/lib/dt-core-strpf.c b/lib/dt-core-strpf.c +index 2d460fef..e03f6501 100644 +--- a/lib/dt-core-strpf.c ++++ b/lib/dt-core-strpf.c +@@ -277,7 +277,8 @@ __strpdt_card(struct strpdt_s *d, const char *sp, struct dt_spec_s s, char **ep) + res = __strpt_card(&d->st, sp, s, ep); + goto out_direct; + +- case DT_SPFL_N_EPOCH: { ++ case DT_SPFL_N_EPOCH: ++ case DT_SPFL_N_EPOCHNS: { + /* read over @ */ + const char *tp = sp; + tp += *tp == '@'; +@@ -287,6 +288,10 @@ __strpdt_card(struct strpdt_s *d, const char *sp, struct dt_spec_s s, char **ep) + } else { + sp = tp; + } ++ if (s.spfl == DT_SPFL_N_EPOCHNS) { ++ d->st.ns = d->i % 1000000000; ++ d->i /= 1000000000; ++ } + break; + } + +@@ -358,7 +363,8 @@ __strfdt_card( + res = __strft_card(buf, bsz, s, &d->st, that.t); + break; + +- case DT_SPFL_N_EPOCH: { ++ case DT_SPFL_N_EPOCH: ++ case DT_SPFL_N_EPOCHNS: { + /* convert to sexy */ + int64_t sexy = dt_conv_to_sexy(that).sexy; + res = snprintf(buf, bsz, "%" PRIi64, sexy); +diff --git a/lib/dt-core.c b/lib/dt-core.c +index afbd18fa..0232e788 100644 +--- a/lib/dt-core.c ++++ b/lib/dt-core.c +@@ -702,7 +702,7 @@ dt_strpdt(const char *str, const char *fmt, char **ep) + + if (spec.spfl == DT_SPFL_UNK) { + /* must be literal */ +- if (*fp_sav != *sp++) { ++ if (UNLIKELY(*fp_sav != *sp++)) { + goto fucked; + } + } else if (LIKELY(!spec.rom)) { +diff --git a/lib/token.c b/lib/token.c +index e9e06df5..07dd0263 100644 +--- a/lib/token.c ++++ b/lib/token.c +@@ -146,6 +146,10 @@ __tok_spec(const char *fp, const char **ep) + break; + case 's': + res.spfl = DT_SPFL_N_EPOCH; ++ if (fp[1U] == '%' && fp[2U] == 'N') { ++ res.spfl = DT_SPFL_N_EPOCHNS; ++ fp += 2U; ++ } + break; + case 'Z': + res.spfl = DT_SPFL_N_ZDIFF; +diff --git a/lib/token.h b/lib/token.h +index caca1dcd..72718fb0 100644 +--- a/lib/token.h ++++ b/lib/token.h +@@ -85,6 +85,8 @@ typedef enum { + /* date/time specs */ + /* %s epoch spec, non-standard */ + DT_SPFL_N_EPOCH, ++ /* %s%N epoch spec, non-standard */ ++ DT_SPFL_N_EPOCHNS, + /* %Z zone difference */ + DT_SPFL_N_ZDIFF, + DT_SPFL_N_DTLAST = DT_SPFL_N_ZDIFF, diff --git a/a0ebd0037df973aed14779b51d59da3edc506b6a.patch b/a0ebd0037df973aed14779b51d59da3edc506b6a.patch new file mode 100644 index 0000000..040ac20 --- /dev/null +++ b/a0ebd0037df973aed14779b51d59da3edc506b6a.patch @@ -0,0 +1,91 @@ +From a0ebd0037df973aed14779b51d59da3edc506b6a Mon Sep 17 00:00:00 2001 +From: Sebastian Freundt +Date: Fri, 5 Mar 2021 08:52:07 +0000 +Subject: [PATCH] fix, extend slot to capture INT64_MIN, fixes bug #124 + +--- + lib/dt-core-strpf.c | 4 ++-- + lib/dt-core.c | 2 +- + lib/strops.c | 16 ++++++---------- + 3 files changed, 9 insertions(+), 13 deletions(-) + +diff --git a/lib/dt-core-strpf.c b/lib/dt-core-strpf.c +index e03f6501..b09608d6 100644 +--- a/lib/dt-core-strpf.c ++++ b/lib/dt-core-strpf.c +@@ -289,8 +289,8 @@ __strpdt_card(struct strpdt_s *d, const char *sp, struct dt_spec_s s, char **ep) + sp = tp; + } + if (s.spfl == DT_SPFL_N_EPOCHNS) { +- d->st.ns = d->i % 1000000000; +- d->i /= 1000000000; ++ d->st.ns = d->i % 1000000000LL; ++ d->i /= 1000000000LL; + } + break; + } +diff --git a/lib/dt-core.c b/lib/dt-core.c +index 0232e788..913ed5c1 100644 +--- a/lib/dt-core.c ++++ b/lib/dt-core.c +@@ -85,7 +85,7 @@ + struct strpdt_s { + struct strpd_s sd; + struct strpt_s st; +- long int i; ++ int64_t i; + + /* use 31 bits for the difference */ + int32_t zdiff:31; +diff --git a/lib/strops.c b/lib/strops.c +index 5dd20965..7cc205a0 100644 +--- a/lib/strops.c ++++ b/lib/strops.c +@@ -113,7 +113,7 @@ strtoi32(const char *str, const char **ep) + { + const char *sp = str; + bool negp = false; +- int32_t res = 0; ++ int32_t res = INT32_MIN; + + if (*str == '-') { + negp = true; +@@ -122,12 +122,10 @@ strtoi32(const char *str, const char **ep) + while (res < INT32_MAX / 10 && (unsigned char)(*sp ^ '0') < 10U) { + res *= 10, res += (unsigned char)(*sp++ ^ '0'); + } +- if (UNLIKELY(sp == str)) { +- res = INT32_MIN; +- } else if (negp) { ++ if (negp) { + res = -res; + } +- *ep = (char*)sp; ++ *ep = res > INT32_MIN ? (char*)sp : (char*)str; + return res; + } + +@@ -137,7 +135,7 @@ strtoi64(const char *str, const char **ep) + { + const char *sp = str; + bool negp = false; +- int64_t res = 0; ++ int64_t res = INT64_MIN; + + if (*str == '-') { + negp = true; +@@ -146,12 +144,10 @@ strtoi64(const char *str, const char **ep) + while (res < INT64_MAX / 10 && (unsigned char)(*sp ^ '0') < 10U) { + res *= 10, res += (unsigned char)(*sp++ ^ '0'); + } +- if (UNLIKELY(sp == str)) { +- res = INT64_MIN; +- } else if (negp) { ++ if (negp) { + res = -res; + } +- *ep = (char*)sp; ++ *ep = res > INT64_MIN ? (char*)sp : (char*)str; + return res; + } + diff --git a/dateutils.changes b/dateutils.changes index b5b8faa..e75211d 100644 --- a/dateutils.changes +++ b/dateutils.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Mon May 17 09:48:34 UTC 2021 - Dominique Leuenberger + +- Add 0144b15dda4b1ea4fdbeca9f3ecb128eb98772fd.patch and + a0ebd0037df973aed14779b51d59da3edc506b6a.patch: fix test suite + run on 32bit archs. + ------------------------------------------------------------------- Sun Feb 21 18:58:49 UTC 2021 - Andreas Stieger diff --git a/dateutils.spec b/dateutils.spec index ad012f9..8bab8e7 100644 --- a/dateutils.spec +++ b/dateutils.spec @@ -26,6 +26,8 @@ URL: https://github.com/hroptatyr/dateutils/ Source0: https://github.com/hroptatyr/dateutils/releases/download/v%{version}/%{name}-%{version}.tar.xz Source1: https://github.com/hroptatyr/dateutils/releases/download/v%{version}/%{name}-%{version}.tar.asc Source2: %{name}.keyring +Patch0: https://github.com/hroptatyr/dateutils/commit/0144b15dda4b1ea4fdbeca9f3ecb128eb98772fd.patch +Patch1: https://github.com/hroptatyr/dateutils/commit/a0ebd0037df973aed14779b51d59da3edc506b6a.patch BuildRequires: octave-devel BuildRequires: pkgconfig BuildRequires: timezone