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

Sergey Vlasov vsu at altlinux.ru
Sun Jun 24 15:35:25 CEST 2007


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 */
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://mailman.alsa-project.org/pipermail/alsa-devel/attachments/20070624/ba6508e3/attachment.sig 


More information about the Alsa-devel mailing list