[PATCH 08/13] Installed-header hygiene (BZ#20366): time.h types.
Zack Weinberg
zackw@panix.com
Wed Sep 21 19:12:00 GMT 2016
On Wed, Sep 21, 2016 at 3:04 PM, Carlos O'Donell <carlos@redhat.com> wrote:
>> -#ifdef __USE_XOPEN2K
>> -# define __need_time_t
>> -# define __need_timespec
>> +#include <bits/types/time_t.h>
>> +#include <bits/types/struct_timespec.h>
>> +#ifndef __USE_XOPEN2K
>> +# include <time.h>
>> #endif
>> -#include <time.h>
>
> Your change unconditionally pulls in the two new headers?
>
> Why aren't the original semantics OK?
It _is_ the original semantics. Before the patch, we have
#ifdef __USE_XOPEN2K
# define __need_time_t
# define __need_timespec
#endif
#include <time.h>
i.e. always include time.h, but under __USE_XOPEN2K, ask it to define
only time_t and struct timespec. In other words, time_t and struct
timespec are always exposed by sched.h, and if __USE_XOPEN2K is *not*
defined, then so is the rest of time.h. That translates directly to
#include <bits/types/time_t.h>
#include <bits/types/struct_timespec.h>
#ifndef __USE_XOPEN2K
# include <time.h>
#endif
with the new mechanism. (I have doubts about whether this is the
_right_ thing for this header to be doing, but it is what conform/
expects it to do.)
Your version
> #ifdef __USE_XOPEN2K
> # include <bits/types/time_t.h>
> # include <bits/types/struct_timespec.h>
> #else
> # include <time.h>
> #endif
does the same thing as well, since time.h will unconditionally include
both headers. I don't really care which version we go with.
zw
More information about the Libc-alpha
mailing list