[alsa-devel] [alsa-cvslog] alsa-lib: Add struct timeval and timespec definition when _POSIX_C_SOURCE is not defined

Takashi Iwai tiwai at suse.de
Mon Jun 25 15:15:39 CEST 2007

At Sun, 24 Jun 2007 17:35:25 +0400,
Sergey Vlasov wrote:
> On Fri, Oct 06, 2006 at 11:01:44AM +0200, Jaroslav Kysela wrote:
> > changeset:   2218:603411fd0c77712cab43cdd5afcf0ff4ebe51a7f
> > tag:         tip
> > user:        perex
> > date:        Fri Oct 06 11:01:40 2006 +0200
> > files:       include/global.h
> > description:
> > Add struct timeval and timespec definition when _POSIX_C_SOURCE is not defined
> > 
> > FIXME: It might cause problems on some platforms when tv_usec is not long type.
> And now it also breaks compilation of the following code (at least
> with glibc 2.5):
> #include <sys/select.h>
> #include <alsa/global.h>
> $ gcc -c --std=c99 x.c
> In file included from x.c:2:
> /usr/include/alsa/global.h:134: error: redefinition of 'struct timeval'
> /usr/include/alsa/global.h:139: error: redefinition of 'struct timespec'
> (Without #include <sys/select.h> only 'struct timespec' is redefined.)
> IMHO attempts to define structures which should be defined by system
> headers are too dangerous - if someone is using preprocessor flags
> which hide required parts of system headers, it is their problem, and
> the risk of mismatch is too high.

I agree.

Jaroslav, which system has no definition of these types?  Maybe it'd
be better to check it in configure script, rather than the simple

> BTW, <time.h> does not provide 'struct timeval' at all, even with
> _GNU_SOURCE - it defines only 'struct timespec'; however, this does
> not cause problems, because ALSA headers currently use only pointers
> to snd_timestamp_t, which works even without a complete definition of
> 'struct timeval'.  We can try to include <sys/time.h> to get 'struct
> timeval', or even <sys/select.h> (which currently seems to provide
> both 'struct timeval' and 'struct timespec' even with -ansi, and
> http://www.opengroup.org/onlinepubs/009695399/basedefs/sys/select.h.html
> tells that it should always provide their definitions).

A patch is welcome :)



More information about the Alsa-devel mailing list