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. 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). > > > diff -r 7bc021fb4bf1027b23aa5429ceda1e1e35c7d126 -r 603411fd0c77712cab43cdd5afcf0ff4ebe51a7f include/global.h > --- a/include/global.h Fri Oct 06 10:38:39 2006 +0200 > +++ b/include/global.h Fri Oct 06 11:01:40 2006 +0200 > @@ -130,6 +130,18 @@ int snd_shm_area_destroy(struct snd_shm_ > > int snd_user_file(const char *file, char **result); > > +#ifndef _POSIC_C_SOURCE > +struct timeval { > + time_t tv_sec; /* seconds */ > + long tv_usec; /* microseconds */ > +}; > + > +struct timespec { > + time_t tv_sec; /* seconds */ > + long tv_nsec; /* nanoseconds */ > +}; > +#endif > + > /** Timestamp */ > typedef struct timeval snd_timestamp_t; > /** Hi-res timestamp */
Attachment:
signature.asc
Description: Digital signature
_______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel