[PATCH 2/5] time: Implement c23 timespec_get base

罗勇刚(Yonggang Luo) luoyonggang@gmail.com
Tue Jun 20 16:10:22 GMT 2023


On Tue, Jun 20, 2023 at 8:44 PM Florian Weimer <fweimer@redhat.com> wrote:
>
> * Yonggang Luo via Libc-alpha:
>
> > diff --git a/time/timespec_get.c b/time/timespec_get.c
> > index 9b1d4f22ed..a57b1ee0b8 100644
> > --- a/time/timespec_get.c
> > +++ b/time/timespec_get.c
> > @@ -22,10 +22,52 @@
> >  int
> >  timespec_get (struct timespec *ts, int base)
> >  {
> > -  if (base == TIME_UTC)
> > +     clockid_t clockid = -1;
> > +     switch (base) {
> > +     default:
> > +             break;
> > +     case TIME_UTC:
> > +             clockid = CLOCK_REALTIME;
> > +             break;
> > +     case TIME_MONOTONIC:
> > +             clockid = CLOCK_MONOTONIC;
> > +             break;
> > +     case TIME_PROCESS_CPUTIME_ID:
> > +             clockid = CLOCK_PROCESS_CPUTIME_ID;
> > +             break;
> > +     case TIME_THREAD_CPUTIME_ID:
> > +             clockid = CLOCK_THREAD_CPUTIME_ID;
> > +             break;
> > +     case TIME_MONOTONIC_RAW:
> > +             clockid = CLOCK_MONOTONIC_RAW;
> > +             break;
> > +     case TIME_REALTIME_COARSE:
> > +             clockid = CLOCK_REALTIME_COARSE;
> > +             break;
> > +     case TIME_MONOTONIC_COARSE:
> > +             clockid = CLOCK_MONOTONIC_COARSE;
> > +             break;
> > +     case TIME_BOOTTIME:
> > +             clockid = CLOCK_BOOTTIME;
> > +             break;
> > +     case TIME_REALTIME_ALARM:
> > +             clockid = CLOCK_REALTIME_ALARM;
> > +             break;
> > +     case TIME_BOOTTIME_ALARM:
> > +             clockid = CLOCK_BOOTTIME_ALARM;
> > +             break;
> > +     case TIME_SGI_CYCLE:
> > +             clockid = CLOCK_SGI_CYCLE;
> > +             break;
> > +     case TIME_TAI:
> > +             clockid = CLOCK_TAI;
> > +             break;
> > +     }
> > +  if (clockid >= 0)
> >      {
> > -      __clock_gettime (CLOCK_REALTIME, ts);
> > -      return base;
> > +      if (__clock_gettime (clockid, ts) >= 0) {
> > +        return base;
> > +      }
> >      }
> >    return 0;
> >  }
>
> This was recently discussed on the libc-coord list:
>
>   Relation between C timespec_get time bases and POSIX clockid_t values.
>   <https://www.openwall.com/lists/libc-coord/2023/04/25/1>
>
> I'm not sure if we should extend this because it's just a bizarre WG14
> not-invent-here interface, designed to be incompatible with existing
> implementation practice.

These are implemented
https://gustedt.gitlabpages.inria.fr/c23-library/#time_monotonic-time_active-time_thread_active
So time_base = clock_id + 1 for linux/posix.
But do we need guarantee that, because there so much posix implementation.

Maybe we need a function named timebase_to_clockid/clockid_to_timebase in
posix standard, for c standard just keep as is


>
> Thanks,
> Florian
>


--
         此致
礼
罗勇刚
Yours
    sincerely,
Yonggang Luo


More information about the Libc-alpha mailing list