Summary: | [headers] [patch] additional timespecs interfaces for <sys/time.h> | ||
---|---|---|---|
Product: | Base System | Reporter: | Kelly Yancey <kbyanc> |
Component: | kern | Assignee: | freebsd-bugs (Nobody) <bugs> |
Status: | Closed Not Accepted | ||
Severity: | Affects Only Me | CC: | dab, imp |
Priority: | Normal | ||
Version: | 3.2-STABLE | ||
Hardware: | Any | ||
OS: | Any |
Description
Kelly Yancey
1999-08-23 01:00:00 UTC
> 2 new interfaces for manipulating timeval structures in addition to > those provided for NetBSD/OpenBSD compatibility in <sys/time.h> > > Admittingly, they aren't strickly necissary, but seeing as how they > increase readability of code which manipulates timevals, don't add > any bloat unless they are used (in which care they aren't bloat), > and extend functionality already provided by <sys/time.h>, I think > that they would make good additions to FreeBSD. timevals have been obsolescent for 3-4 years since POSIX blessed timespecs. New interfaces for dealing with them shouldn't be added. Bruce Per Bruce's comments, here is a revised patch which rather than adding interfaces for obsolete timeval structures, instead makes the timespec operations available to user programs (basically just pulling them out of the #ifdef KERNEL restriction). In addition, I made 4 new interfaces including: multiplying and dividing timespec's by integral factors to get new timespecs converting timespecs to/from quad_t's representing raw nanosecond counts. The latter stemmed from a recent discussion on -current where Julian Elischer (Mon, 30 Aug 1999 17:10:03 -0700 (PDT), RE: HEADS UP) points out that working with timevals/timespecs is messy because of having to deal with 2 variables (actually, I've seen it griped about before, but this one made me feel like doing something about it :) ). In any event, the hope here is to make dealing with timespecs a little easier. If people need to deal with timevals, they are welcome to use TIMEVAL_TO_TIMESPEC and TIMESPEC_TO_TIMEVAL to convert to timespecs before doing the operations...or, of course, roll their own. Kelly ~kbyanc@posi.net~ FreeBSD - The Power To Serve - http://www.freebsd.org/ Join Team FreeBSD - http://www.posi.net/freebsd/Team-FreeBSD/ "The ultimate result of shielding men from the effects of folly is to fill the world with fools." - Herbert Spencer --- /usr/include/sys/time.h.orig Thu Sep 2 14:35:53 1999 +++ /usr/include/sys/time.h Thu Sep 2 14:55:59 1999 @@ -155,8 +155,6 @@ struct timecounter *tc_tweak; }; -#ifdef KERNEL - /* Operations on timespecs */ #define timespecclear(tvp) ((tvp)->tv_sec = (tvp)->tv_nsec = 0) #define timespecisset(tvp) ((tvp)->tv_sec || (tvp)->tv_nsec) @@ -182,6 +180,35 @@ (vvp)->tv_nsec += 1000000000; \ } \ } while (0) +#define timespecmul(tvp, uvp, x) \ + do { \ + (uvp)->tv_sec = (tvp)->tv_sec * x; \ + (uvp)->tv_nsec = (tvp)->tv_nsec * x; \ + while((uvp)->tv_nsec > 1000000000) { \ + (uvp)->tv_sec++; \ + (uvp)->tv_nsec -= 1000000000; \ + } \ + } while(0) +#define timespecdiv(tvp, uvp, x) \ + do { \ + (uvp)->tv_sec = (tvp)->tv_sec / x; \ + (uvp)->tv_nsec = (tvp)->tv_nsec / x; \ + } while(0) + +/* + * Operations for converting timespecs to/from quad_t's representing + * times in nanoseconds. + */ +#define tstoq(tvp, q) \ + do { \ + q = ((tvp)->tv_sec * 1000000000) + (tvp)->tv_nsec; \ + } while(0) +#define qtots(q, tvp) \ + do { \ + (tvp)->tv_sec = q / 1000000000; \ + (tvp)->tv_nsec = q % 1000000000; \ + } while(0) +#ifdef KERNEL /* Operations on timevals. */ Updates to previous patch per suggestions by Poul-Henning Kamp... Kelly ~kbyanc@posi.net~ FreeBSD - The Power To Serve - http://www.freebsd.org/ Join Team FreeBSD - http://www.posi.net/freebsd/Team-FreeBSD/ "The ultimate result of shielding men from the effects of folly is to fill the world with fools." - Herbert Spencer --- /usr/include/sys/time.h.orig Thu Sep 2 14:35:53 1999 +++ /usr/include/sys/time.h Thu Sep 2 16:41:25 1999 @@ -155,8 +155,6 @@ struct timecounter *tc_tweak; }; -#ifdef KERNEL - /* Operations on timespecs */ #define timespecclear(tvp) ((tvp)->tv_sec = (tvp)->tv_nsec = 0) #define timespecisset(tvp) ((tvp)->tv_sec || (tvp)->tv_nsec) @@ -182,6 +180,32 @@ (vvp)->tv_nsec += 1000000000; \ } \ } while (0) +#define timespecmul(tvp, uvp, x) \ + do { \ + (uvp)->tv_sec = ((tvp)->tv_sec * x) + \ + (quad_t)(tvp)->tv_nsec * x / 1000000000;\ + (uvp)->tv_nsec = (quad_t)(tvp)->tv_nsec * x % 1000000000;\ + } while(0) +#define timespecdiv(tvp, uvp, x) \ + do { \ + (uvp)->tv_sec = (tvp)->tv_sec / x; \ + (uvp)->tv_nsec = (tvp)->tv_nsec / x; \ + } while(0) + +/* + * Operations for converting timespecs to/from quad_t's representing + * times in nanoseconds. + */ +#define tstoq(tvp, q) \ + do { \ + q = ((tvp)->tv_sec * 1000000000) + (tvp)->tv_nsec; \ + } while(0) +#define qtots(q, tvp) \ + do { \ + (tvp)->tv_sec = q / 1000000000; \ + (tvp)->tv_nsec = q % 1000000000; \ + } while(0) +#ifdef KERNEL /* Operations on timevals. */ State Changed From-To: open->feedback awaiting a response from phk in a separate mail Responsible Changed From-To: freebsd-bugs->kmacy awaiting a response from phk in a separate mail any news on this ancient PR's status? cheers. alex -- a13x State Changed From-To: feedback->suspended It seems the idea of having new timespecs interfaces never really caught on. Responsible Changed From-To: kmacy->freebsd-bugs kmacy has asked for all of his PRs to be reassigned, put back into the pool. For bugs matching the following conditions: - Status == In Progress - Assignee == "bugs@FreeBSD.org" - Last Modified Year <= 2017 Do - Set Status to "Open" This is past it's freshness date. There's no demand for these functions, as cool as they may be, so we won't be including this in FreeBSD. Sorry for the long delay in communicating this. |