No, that's what changed in _POSIX_C_SOURCE 200809L.  If you wade through
all the various levels of indirection in /usr/include/time.h in all cases
it uses two signed 64-bit ints.  It just calls them either long or long
long depending on the environment.

On Fri, Dec 11, 2015 at 10:33 AM, Savolainen, Petri (Nokia - FI/Espoo) <
petri.savolai...@nokia.com> wrote:

>
> To me it seems that "ODP timespec" and Linux timespec have still different
> field sizes when 'long' is 32 bits. Does this work in the 32 bit build?
> Struct fields in the union do not point to the same locations when field
> sizes do not match.
>
> -Petri
> ------------------------------
> Lähettäjä: EXT Maxim Uvarov <maxim.uva...@linaro.org>
> Lähetetty: ‎11.‎12.‎2015 15:27
> Vastaanottaja: lng-odp@lists.linaro.org
> Aihe: Re: [lng-odp] [API-NEXT PATCHv2] linux-generic: time: remove posix
> bleed through on odp_time_t
>
> On 12/11/2015 16:22, Bill Fischofer wrote:
> > The linux-generic implementation of odp_time_t makes use of POSIX
> > APIs that are sensitive to the _POSIX_C_SOURCE level. Use an indirection
> > mechanism so that these dependencies do not "bleed through" the ODP API.
> > This means that ODP applications can be independent of _POSIX_C_SOURCE
> > level.
> >
> > Signed-off-by: Bill Fischofer <bill.fischo...@linaro.org>
> > ---
> >   .../linux-generic/include/odp/plat/time_types.h    |  9 ++++---
> >   platform/linux-generic/odp_time.c                  | 30
> +++++++++++-----------
> >   2 files changed, 20 insertions(+), 19 deletions(-)
> >
> > diff --git a/platform/linux-generic/include/odp/plat/time_types.h
> b/platform/linux-generic/include/odp/plat/time_types.h
> > index e5765ec..e999beb 100644
> > --- a/platform/linux-generic/include/odp/plat/time_types.h
> > +++ b/platform/linux-generic/include/odp/plat/time_types.h
> > @@ -21,11 +21,12 @@ extern "C" {
> >    *  @{
> >    **/
> >
> > -typedef struct timespec odp_time_t;
> > +typedef struct {
> > +     int64_t tv_sec;
> time_t is not reachable?
> > +     int64_t tv_nsec;
> > +} odp_time_t;
> >
> > -odp_time_t odp_time_null(void);
> > -
> > -#define ODP_TIME_NULL        odp_time_null()
> > +#define ODP_TIME_NULL ((odp_time_t){0, 0})
> >
> >   /**
> >    * @}
> > diff --git a/platform/linux-generic/odp_time.c
> b/platform/linux-generic/odp_time.c
> > index 1c7c214..9b64b37 100644
> > --- a/platform/linux-generic/odp_time.c
> > +++ b/platform/linux-generic/odp_time.c
> > @@ -11,7 +11,12 @@
> >   #include <odp/hints.h>
> >   #include <odp_debug_internal.h>
> >
> > -static struct timespec start_time;
> > +typedef union {
> > +     odp_time_t      ex;
> > +     struct timespec in;
> > +} _odp_time_t;
> > +
> > +static odp_time_t start_time;
> >
> >   static inline
> >   uint64_t time_to_ns(odp_time_t time)
> > @@ -27,7 +32,7 @@ uint64_t time_to_ns(odp_time_t time)
> >   static inline
> >   odp_time_t time_diff(odp_time_t t2, odp_time_t t1)
> >   {
> > -     struct timespec time;
> > +     odp_time_t time;
> >
> >        time.tv_sec = t2.tv_sec - t1.tv_sec;
> >        time.tv_nsec = t2.tv_nsec - t1.tv_nsec;
> > @@ -43,13 +48,13 @@ odp_time_t time_diff(odp_time_t t2, odp_time_t t1)
> >   odp_time_t odp_time_local(void)
> >   {
> >        int ret;
> > -     struct timespec time;
> > +     _odp_time_t time;
> >
> > -     ret = clock_gettime(CLOCK_MONOTONIC_RAW, &time);
> > +     ret = clock_gettime(CLOCK_MONOTONIC_RAW, &time.in);
> >        if (odp_unlikely(ret != 0))
> >                ODP_ABORT("clock_gettime failed\n");
> >
> > -     return time_diff(time, start_time);
> > +     return time_diff(time.ex, start_time);
> >   }
> >
> >   odp_time_t odp_time_diff(odp_time_t t2, odp_time_t t1)
> > @@ -64,7 +69,7 @@ uint64_t odp_time_to_ns(odp_time_t time)
> >
> >   odp_time_t odp_time_local_from_ns(uint64_t ns)
> >   {
> > -     struct timespec time;
> > +     odp_time_t time;
> >
> >        time.tv_sec = ns / ODP_TIME_SEC_IN_NS;
> >        time.tv_nsec = ns - time.tv_sec * ODP_TIME_SEC_IN_NS;
> > @@ -85,7 +90,7 @@ int odp_time_cmp(odp_time_t t2, odp_time_t t1)
> >
> >   odp_time_t odp_time_sum(odp_time_t t1, odp_time_t t2)
> >   {
> > -     struct timespec time;
> > +     odp_time_t time;
> >
> >        time.tv_sec = t2.tv_sec + t1.tv_sec;
> >        time.tv_nsec = t2.tv_nsec + t1.tv_nsec;
> > @@ -113,18 +118,13 @@ uint64_t odp_time_to_u64(odp_time_t time)
> >        return time_to_ns(time) / resolution;
> >   }
> >
> > -odp_time_t odp_time_null(void)
> > -{
> > -     return (struct timespec) {0, 0};
> > -}
> > -
> >   int odp_time_global_init(void)
> >   {
> >        int ret;
> > -     struct timespec time;
> > +     _odp_time_t time;
> >
> > -     ret = clock_gettime(CLOCK_MONOTONIC_RAW, &time);
> > -     start_time = ret ? odp_time_null() : time;
> > +     ret = clock_gettime(CLOCK_MONOTONIC_RAW, &time.in);
> > +     start_time = ret ? ODP_TIME_NULL : time.ex;
> >
> >        return ret;
> >   }
>
> _______________________________________________
> lng-odp mailing list
> lng-odp@lists.linaro.org
> https://lists.linaro.org/mailman/listinfo/lng-odp
>
> _______________________________________________
> lng-odp mailing list
> lng-odp@lists.linaro.org
> https://lists.linaro.org/mailman/listinfo/lng-odp
>
>
_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to