Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 15 Aug 2011 01:53:26 +1000 (EST)
From:      Bruce Evans <brde@optusnet.com.au>
To:        Alexander Best <arundel@freebsd.org>
Cc:        src-committers@freebsd.org, svn-src-all@freebsd.org, Dimitry Andric <dim@freebsd.org>, Bruce Evans <brde@optusnet.com.au>, svn-src-head@freebsd.org, Jonathan Anderson <jonathan@freebsd.org>
Subject:   Re: svn commit: r224721 - head/sys/sys
Message-ID:  <20110815013423.E2968@besplex.bde.org>
In-Reply-To: <20110810154956.GA4034@freebsd.org>
References:  <201108082036.p78KarlR062810@svn.freebsd.org> <20110809105824.P896@besplex.bde.org> <20110810103831.GA60858@freebsd.org> <20110810230856.M2222@besplex.bde.org> <20110810154956.GA4034@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 10 Aug 2011, Alexander Best wrote:

> On Wed Aug 10 11, Bruce Evans wrote:
>> On Wed, 10 Aug 2011, Alexander Best wrote:
>>> any reason {TIMEVAL,TIMESPEC}_TO_{TIMESPEC,TIMEVAL}()s code is being
>>> executed
>>> in a
>>>
>>> do { ... } while (0)
>>>
>>> conditional loop?
>>
>> Just the usual syntactical trick for making large macros that look
>> like function calls almost usable like function calls.  Without the
> ...
> thanks a lot for the in depth information. :) any reason, back in the days, it
> was decided that the functionality of converting a timespec to a timeval and
> vice versa should be implemented as a macro and not a function?

Macros avoid some namespace pollution problems, and all the old kernel
timeval manipulation interfaces are either extern functions or macros,
partly because inline functions didn't exist when these interfaces were
designed.  But the TIME* macros still have gratuitously different styles:
1) they are spelled in upper case (which is "correct" since they are unsafe
    macros, but this is not done for the other timeval macros which are almost
    all unsafe)
2) FreeBSD moved their definitions from <sys/time.h> (where 4.4BSD-Lite
    put them) to <sys/timespec.h>.  This is not incorrect (since <sys/time.h>
    is an old header that should only declare timeval interfaces (POSIX
    put timespec interfaces in <time.h>).  However, the move became out of
    date before it was done (in 2001) because <sys/time.h> had already
    grown several other timespec interfaces which were not moved.  But these
    were kernel-only, so they didn't cause namespace problems.  Now
    <sys/time.h> has grown several more user timespec interfaces.

Bruce



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20110815013423.E2968>