* Collection of useful common types and macros definitions
*****************************************************************************
* Copyright (C) 1998, 1999, 2000 VideoLAN
- * $Id: vlc_common.h,v 1.36 2002/11/10 23:41:53 sam Exp $
+ * $Id: vlc_common.h,v 1.67 2003/06/05 11:52:19 gbazin Exp $
*
* Authors: Samuel Hocevar <sam@via.ecp.fr>
* Vincent Seguin <seguin@via.ecp.fr>
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
- *
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#if defined( __BORLANDC__ )
# undef HAVE_VARIADIC_MACROS
# undef HAVE_STDINT_H
+# undef HAVE_INTTYPES_H
+# undef off_t
#endif
#include "vlc_config.h"
typedef signed short int16_t;
typedef unsigned int uint32_t;
typedef signed int int32_t;
-# if defined( _MSC_VER ) || ( defined( WIN32 ) && !defined( __MINGW32__ ) )
+# if defined( _MSC_VER ) \
+ || defined( UNDER_CE ) \
+ || ( defined( WIN32 ) && !defined( __MINGW32__ ) )
typedef unsigned __int64 uint64_t;
typedef signed __int64 int64_t;
# else
#endif
#if defined( WIN32 )
+# include <malloc.h>
+#endif
+
+#if defined( WIN32 ) || defined( UNDER_CE )
typedef int ssize_t;
#endif
/* Audio volume */
typedef uint16_t audio_volume_t;
+#ifndef HAVE_SOCKLEN_T
+typedef int socklen_t;
+#endif
+
/*****************************************************************************
* Old types definitions
*****************************************************************************
/* Internal types */
typedef struct libvlc_t libvlc_t;
typedef struct vlc_t vlc_t;
-typedef struct vlc_list_t vlc_list_t;
-typedef struct vlc_object_t vlc_object_t;
typedef struct variable_t variable_t;
/* Messages */
typedef struct picture_heap_t picture_heap_t;
typedef struct subpicture_t subpicture_t;
typedef struct subpicture_sys_t subpicture_sys_t;
+typedef struct vout_synchro_t vout_synchro_t;
/* Stream output */
typedef struct sout_instance_t sout_instance_t;
typedef struct sout_fifo_t sout_fifo_t;
-
+typedef struct sout_input_t sout_input_t;
+typedef struct sout_packetizer_input_t sout_packetizer_input_t;
+typedef struct sout_buffer_t sout_buffer_t;
+typedef struct sout_access_out_t sout_access_out_t;
+typedef struct sout_mux_t sout_mux_t;
+typedef struct sout_stream_t sout_stream_t;
+typedef struct sout_cfg_t sout_cfg_t;
+typedef struct sout_format_t sout_format_t;
+typedef struct sap_session_t sap_session_t;
/* Decoders */
typedef struct decoder_fifo_t decoder_fifo_t;
/*****************************************************************************
* OS-specific headers and thread types
*****************************************************************************/
-#if defined( WIN32 )
+#if defined( WIN32 ) || defined( UNDER_CE )
# define WIN32_LEAN_AND_MEAN
# include <windows.h>
+# define IS_WINNT ( GetVersion() < 0x80000000 )
#endif
#include "vlc_threads.h"
#ifdef NTOHL_IN_SYS_PARAM_H
# include <sys/param.h>
-#elif !defined(WIN32) /* NTOHL_IN_SYS_PARAM_H || WIN32 */
+#elif !defined(WIN32) && !defined( UNDER_CE )
# include <netinet/in.h>
#endif /* NTOHL_IN_SYS_PARAM_H || WIN32 */
{ \
(p_ar) = malloc( ((i_oldsize) + 1) * sizeof( *(p_ar) ) ); \
} \
- memmove( (p_ar) + (i_pos) + 1, \
- (p_ar) + (i_pos), \
- ((i_oldsize) - (i_pos)) * sizeof( *(p_ar) ) ); \
+ if( (i_oldsize) - (i_pos) ) \
+ { \
+ memmove( (p_ar) + (i_pos) + 1, \
+ (p_ar) + (i_pos), \
+ ((i_oldsize) - (i_pos)) * sizeof( *(p_ar) ) ); \
+ } \
(p_ar)[i_pos] = elem; \
(i_oldsize)++; \
} \
#define REMOVE_ELEM( p_ar, i_oldsize, i_pos ) \
do \
{ \
- memmove( (p_ar) + (i_pos), \
- (p_ar) + (i_pos) + 1, \
- ((i_oldsize) - (i_pos) - 1) * sizeof( *(p_ar) ) ); \
+ if( (i_oldsize) - (i_pos) - 1 ) \
+ { \
+ memmove( (p_ar) + (i_pos), \
+ (p_ar) + (i_pos) + 1, \
+ ((i_oldsize) - (i_pos) - 1) * sizeof( *(p_ar) ) ); \
+ } \
if( i_oldsize > 1 ) \
{ \
(p_ar) = realloc( p_ar, ((i_oldsize) - 1) * sizeof( *(p_ar) ) ); \
# define ntoh64(i) U64_AT(&i)
#endif
+/* Format string sanity checks */
+#ifdef HAVE_ATTRIBUTE_FORMAT
+# define ATTRIBUTE_FORMAT(x,y) __attribute__ ((format(printf,x,y)))
+#else
+# define ATTRIBUTE_FORMAT(x,y)
+#endif
+
/* Alignment of critical static data structures */
#ifdef ATTRIBUTE_ALIGNED_MAX
# define ATTR_ALIGN(align) __attribute__ ((__aligned__ ((ATTRIBUTE_ALIGNED_MAX < align) ? ATTRIBUTE_ALIGNED_MAX : align)))
#endif
-/* strdup/strndup (defined in src/extras/libc.c) */
+/* Stuff defined in src/extras/libc.c */
#ifndef HAVE_STRDUP
- char * strdup( const char *s );
+# define strdup vlc_strdup
+ VLC_EXPORT( char *, vlc_strdup, ( const char *s ) );
+#elif !defined(__PLUGIN__)
+# define vlc_strdup NULL
#endif
+
#ifndef HAVE_STRNDUP
- char * strndup( const char *s, size_t n );
+# if defined(STRNDUP_IN_GNOME_H) && \
+ (defined(MODULE_NAME_IS_gnome)||defined(MODULE_NAME_IS_gnome_main)||\
+ defined(MODULE_NAME_IS_gnome2)||defined(MODULE_NAME_IS_gnome2_main))
+ /* Do nothing: gnome.h defines strndup for us */
+# else
+# define strndup vlc_strndup
+ VLC_EXPORT( char *, vlc_strndup, ( const char *s, size_t n ) );
+# endif
+#elif !defined(__PLUGIN__)
+# define vlc_strndup NULL
#endif
-/* atof (defined in src/extras/libc.c) */
#ifndef HAVE_ATOF
- double atof( const char *nptr );
+# define atof vlc_atof
+ VLC_EXPORT( double, vlc_atof, ( const char *nptr ) );
+#elif !defined(__PLUGIN__)
+# define vlc_atof NULL
#endif
-/* getenv - always returns NULL */
#ifndef HAVE_GETENV
- char *getenv( const char *name );
+# define getenv vlc_getenv
+ VLC_EXPORT( char *, vlc_getenv, ( const char *name ) );
+#elif !defined(__PLUGIN__)
+# define vlc_getenv NULL
#endif
-/* strncasecmp/strcasecmp (defined in src/extras/libc.c) */
#ifndef HAVE_STRCASECMP
# ifdef HAVE_STRICMP
# define strcasecmp stricmp
-# else
- int strcasecmp( const char *s1, const char *s2 );
+# if !defined(__PLUGIN__)
+# define vlc_strcasecmp NULL
+# endif
+# elif !defined(__PLUGIN__)
+# define strcasecmp vlc_strcasecmp
+ VLC_EXPORT( int, vlc_strcasecmp, ( const char *s1, const char *s2 ) );
# endif
+#elif !defined(__PLUGIN__)
+# define vlc_strcasecmp NULL
#endif
#ifndef HAVE_STRNCASECMP
# ifdef HAVE_STRNICMP
# define strncasecmp strnicmp
-# else
- int strncasecmp( const char *s1, const char *s2, size_t n );
+# if !defined(__PLUGIN__)
+# define vlc_strncasecmp NULL
+# endif
+# elif !defined(__PLUGIN__)
+# define strncasecmp vlc_strncasecmp
+ VLC_EXPORT( int, vlc_strncasecmp, ( const char *s1, const char *s2, size_t n ) );
# endif
+#elif !defined(__PLUGIN__)
+# define vlc_strncasecmp NULL
#endif
/* Format type specifiers for 64 bits numbers */
-#if !defined(WIN32)
+#if !defined(WIN32) && !defined(UNDER_CE)
# define I64Fd "%lld"
# define I64Fi "%lli"
# define I64Fo "%llo"
# define I64Fu "%I64u"
# define I64Fx "%I64x"
# define I64FX "%I64X"
-#endif /* defined(WIN32) */
+#endif /* defined(WIN32)||defined(UNDER_CE) */
/* 64 bits integer constant suffix */
-#if !defined(WIN32)
+#if defined( __MINGW32__ ) || (!defined(WIN32) && !defined(UNDER_CE))
# define I64C(x) x##LL
#else
# define I64C(x) x##i64
-#endif /* defined(WIN32) */
+#endif /* defined(WIN32)||defined(UNDER_CE) */
-#ifdef WIN32
+#if defined(WIN32) || defined(UNDER_CE)
/* win32, cl and icl support */
# if defined( _MSC_VER ) || !defined( __MINGW32__ )
# define __attribute__(x)
typedef _off_t off_t;
# define _OFF_T_
# else
+# ifdef off_t
+# undef off_t
+# endif
# define off_t long long
# endif
# endif
# ifndef O_NONBLOCK
# define O_NONBLOCK 0
+# endif
+
+# ifndef alloca
+# define alloca _alloca
# endif
/* These two are not defined in mingw32 (bug?) */
#endif
/* lseek (defined in src/extras/libc.c) */
-#ifndef HAVE_ATOF
- off_t lseek( int fildes, off_t offset, int whence );
+#ifndef HAVE_LSEEK
+# define lseek vlc_lseek
+ VLC_EXPORT( off_t, vlc_lseek, ( int fildes, off_t offset, int whence ) );
+#elif !defined(__PLUGIN__)
+# define vlc_lseek NULL
#endif
/*****************************************************************************
/*****************************************************************************
* I18n stuff
*****************************************************************************/
-#if defined( ENABLE_NLS ) \
- && ( defined(HAVE_GETTEXT) || defined(HAVE_INCLUDED_GETTEXT) )
+VLC_EXPORT( char *, vlc_dgettext, ( const char *package, const char *msgid ) );
+
+#if defined( ENABLE_NLS ) && \
+ (defined(MODULE_NAME_IS_gnome)||defined(MODULE_NAME_IS_gnome_main)||\
+ defined(MODULE_NAME_IS_gnome2)||defined(MODULE_NAME_IS_gnome2_main))
+ /* Declare nothing: gnome.h will do it for us */
+#elif defined( ENABLE_NLS )
+#if defined( HAVE_INCLUDED_GETTEXT )
+# include "libintl.h"
+#else
# include <libintl.h>
+#endif
# undef _
-# define _(String) dgettext (PACKAGE, String)
-# ifdef gettext_noop
-# define N_(String) gettext_noop (String)
-# else
-# define N_(String) (String)
-# endif
-#elif !defined( NEED_GNOMESUPPORT_H )
-# define _(String) (String)
-# define N_(String) (String)
+#if defined( __BORLANDC__ )
+#define _(String) vlc_dgettext (PACKAGE_TARNAME, String)
+#else
+# define _(String) vlc_dgettext (PACKAGE, String)
+#endif
+# define N_(String) ((char*)(String))
+#else
+# define _(String) ((char*)(String))
+# define N_(String) ((char*)(String))
#endif
/*****************************************************************************