From e1d38700985ebe944554821e4758b03bf011b18f Mon Sep 17 00:00:00 2001 From: Ruediger Meier Date: Fri, 12 Jun 2015 12:36:49 +0200 Subject: [PATCH] fix build for compilers without anonymous struct initialisation Signed-off-by: Ruediger Meier --- lib/date-core.h | 6 ++++++ lib/dt-core-strpf.c | 8 ++++++++ lib/dt-core-tz-glue.c | 16 ++++++++++++++++ lib/dt-core.c | 4 ++-- src/dround.c | 15 ++++++++++++++- src/dseq.c | 27 ++++++++++----------------- test/dtcore-add.c | 6 +++--- 7 files changed, 59 insertions(+), 23 deletions(-) diff --git a/lib/date-core.h b/lib/date-core.h index 5b55154..044d69e 100644 --- a/lib/date-core.h +++ b/lib/date-core.h @@ -566,7 +566,13 @@ dt_make_ymcw(unsigned int y, unsigned int m, unsigned int c, unsigned int w) static inline struct dt_ddur_s dt_make_ddur(dt_durtyp_t typ, dt_dur_t d) { +#if defined HAVE_ANON_STRUCTS_INIT return (struct dt_ddur_s){typ, .dv = d}; +#else + struct dt_ddur_s res = {typ}; + res.dv = d; + return res; +#endif } static inline dt_bizda_param_t diff --git a/lib/dt-core-strpf.c b/lib/dt-core-strpf.c index 9aec1fd..c19ae3a 100644 --- a/lib/dt-core-strpf.c +++ b/lib/dt-core-strpf.c @@ -133,7 +133,15 @@ __fixup_zdiff(struct dt_dt_s dt, int32_t zdiff) { /* apply time zone difference */ /* reuse dt for result */ +#if defined HAVE_ANON_STRUCTS_INIT dt = dt_dtadd(dt, (struct dt_dtdur_s){DT_DURS, .dv = -zdiff}); +#else + { + struct dt_dtdur_s tmp = {DT_DURS}; + tmp.dv = -zdiff; + dt = dt_dtadd(dt, tmp); + } +#endif dt.znfxd = 1; return dt; } diff --git a/lib/dt-core-tz-glue.c b/lib/dt-core-tz-glue.c index ee7d5cd..cb1314d 100644 --- a/lib/dt-core-tz-glue.c +++ b/lib/dt-core-tz-glue.c @@ -74,7 +74,15 @@ dtz_forgetz(struct dt_dt_s d, zif_t zone) d_unix = zif_utc_time(zone, d_locl); if (LIKELY((zdiff = d_unix - d_locl))) { /* let dt_dtadd() do the magic */ +#if defined HAVE_ANON_STRUCTS_INIT d = dt_dtadd(d, (struct dt_dtdur_s){DT_DURS, .dv = zdiff}); +#else + { + struct dt_dtdur_s tmp = {DT_DURS}; + tmp.dv = zdiff; + d = dt_dtadd(d, tmp); + } +#endif d.znfxd = 1; if (zdiff > 0) { d.neg = 1; @@ -108,7 +116,15 @@ dtz_enrichz(struct dt_dt_s d, zif_t zone) d_locl = zif_local_time(zone, d_unix); if (LIKELY((zdiff = d_locl - d_unix))) { /* let dt_dtadd() do the magic */ +#if defined HAVE_ANON_STRUCTS_INIT d = dt_dtadd(d, (struct dt_dtdur_s){DT_DURS, .dv = zdiff}); +#else + { + struct dt_dtdur_s tmp = {DT_DURS}; + tmp.dv = zdiff; + d = dt_dtadd(d, tmp); + } +#endif if (zdiff > 0) { d.zdiff = (uint16_t)(zdiff / ZDIFF_RES); } else if (zdiff < 0) { diff --git a/lib/dt-core.c b/lib/dt-core.c index 76a78fe..99a0169 100644 --- a/lib/dt-core.c +++ b/lib/dt-core.c @@ -906,7 +906,7 @@ DEFUN struct dt_dtdur_s dt_strpdtdur(const char *str, char **ep) { /* at the moment we allow only one format */ - struct dt_dtdur_s res = {.durtyp = (dt_dtdurtyp_t)DT_DURUNK}; + struct dt_dtdur_s res = {(dt_dtdurtyp_t)DT_DURUNK}; const char *sp; long int tmp; @@ -1503,7 +1503,7 @@ dt_dtadd(struct dt_dt_s d, struct dt_dtdur_s dur) DEFUN struct dt_dtdur_s dt_dtdiff(dt_dtdurtyp_t tgttyp, struct dt_dt_s d1, struct dt_dt_s d2) { - struct dt_dtdur_s res = {.durtyp = (dt_dtdurtyp_t)DT_DURUNK}; + struct dt_dtdur_s res = {(dt_dtdurtyp_t)DT_DURUNK}; int dt = 0; if (!dt_sandwich_only_d_p(d1) && !dt_sandwich_only_d_p(d2)) { diff --git a/src/dround.c b/src/dround.c index 623aaf3..1142164 100644 --- a/src/dround.c +++ b/src/dround.c @@ -500,7 +500,7 @@ dt_io_strpdtrnd(struct __strpdtdur_st_s *st, const char *str) char *sp = NULL; struct strpd_s d = strpd_initialiser(); struct dt_spec_s s = spec_initialiser(); - struct dt_dtdur_s payload = {.durtyp = (dt_dtdurtyp_t)DT_DURUNK}; + struct dt_dtdur_s payload = {(dt_dtdurtyp_t)DT_DURUNK}; bool negp = false; bool coclp = true; @@ -525,12 +525,19 @@ dt_io_strpdtrnd(struct __strpdtdur_st_s *st, const char *str) s.spfl = DT_SPFL_S_WDAY; s.abbr = DT_SPMOD_NORM; if (__strpd_card(&d, str, s, &sp) >= 0) { +#if defined HAVE_ANON_STRUCTS_INIT payload.d = (struct dt_ddur_s){ DT_DURYMCW, .neg = negp, .cocl = coclp, .ymcw.w = d.w, }; +#else + payload.d.durtyp = DT_DURYMCW; + payload.d.neg = negp; + payload.d.cocl = coclp; + payload.d.ymcw.w = d.w; +#endif goto out; } @@ -538,11 +545,17 @@ dt_io_strpdtrnd(struct __strpdtdur_st_s *st, const char *str) s.spfl = DT_SPFL_S_MON; s.abbr = DT_SPMOD_NORM; if (__strpd_card(&d, str, s, &sp) >= 0) { +#if defined HAVE_ANON_STRUCTS_INIT payload.d = (struct dt_ddur_s){ DT_DURYMD, .neg = negp, .ymd.m = d.m, }; +#else + payload.d.durtyp = DT_DURYMD; + payload.d.neg = negp; + payload.d.ymd.m = d.m; +#endif goto out; } diff --git a/src/dseq.c b/src/dseq.c index b4bf405..9dc58f1 100644 --- a/src/dseq.c +++ b/src/dseq.c @@ -426,29 +426,22 @@ __fixup_fst(struct dseq_clo_s *clo) static struct dt_dtdur_s tseq_guess_ite(struct dt_t_s beg, struct dt_t_s end) { + struct dt_dtdur_s res = {0}; + if (beg.hms.h != end.hms.h && - beg.hms.m == 0 && end.hms.m == 0&& + beg.hms.m == 0 && end.hms.m == 0 && beg.hms.s == 0 && end.hms.s == 0) { - if (beg.u < end.u) { - return (struct dt_dtdur_s){DT_DURH, .dv = 1}; - } else { - return (struct dt_dtdur_s){DT_DURH, .dv = -1}; - } + res.durtyp = DT_DURH; + res.dv = (beg.u < end.u) ? 1 : -1; } else if (beg.hms.m != end.hms.m && beg.hms.s == 0 && end.hms.s == 0) { - if (beg.u < end.u) { - return (struct dt_dtdur_s){DT_DURM, .dv = 1}; - } else { - return (struct dt_dtdur_s){DT_DURM, .dv = -1}; - } + res.durtyp = DT_DURM; + res.dv = (beg.u < end.u) ? 1 : -1; } else { - if (beg.u < end.u) { - return (struct dt_dtdur_s){DT_DURS, .dv = 1}; - } else { - return (struct dt_dtdur_s){DT_DURS, .dv = -1}; - } + res.durtyp = DT_DURS; + res.dv = (beg.u < end.u) ? 1 : -1; } - /* no reach */ + return res; } diff --git a/test/dtcore-add.c b/test/dtcore-add.c index bfdea28..ff0c49e 100644 --- a/test/dtcore-add.c +++ b/test/dtcore-add.c @@ -67,7 +67,7 @@ add_t_only(void) { static const char str[] = "12:34:56"; struct dt_dt_s d; - struct dt_dtdur_s dur = {.durtyp = (dt_dtdurtyp_t)DT_DURUNK}; + struct dt_dtdur_s dur = {(dt_dtdurtyp_t)DT_DURUNK}; int res = 0; /* 2012-03-28 (using no format) */ @@ -166,7 +166,7 @@ dt_add_t(void) { static const char str[] = "2012-03-28T23:12:01"; struct dt_dt_s d; - struct dt_dtdur_s dur = {.durtyp = (dt_dtdurtyp_t)DT_DURUNK}; + struct dt_dtdur_s dur = {(dt_dtdurtyp_t)DT_DURUNK}; int res = 0; fprintf(stderr, "testing %s +1h ...\n", str); @@ -221,7 +221,7 @@ dt_add_dt(void) { static const char str[] = "2012-03-28T23:55:55"; struct dt_dt_s d; - struct dt_dtdur_s dur = {.durtyp = (dt_dtdurtyp_t)DT_DURUNK}; + struct dt_dtdur_s dur = {(dt_dtdurtyp_t)DT_DURUNK}; int res = 0; fprintf(stderr, "testing %s +1d1h ...\n", str); -- 1.8.4.5