X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_common.h;h=158122b282d98c316d5351f9a80dcd5a67bbb28b;hb=81dd5aa6a5b0a654601714792705d4704b573337;hp=cae6d407481ec14e799995e2af40a4853364c783;hpb=7d2f6de57c4def2f33ff81c1f602621255c63a3c;p=vlc diff --git a/include/vlc_common.h b/include/vlc_common.h index cae6d40748..158122b282 100644 --- a/include/vlc_common.h +++ b/include/vlc_common.h @@ -2,18 +2,18 @@ * common.h: common definitions * Collection of useful common types and macros definitions ***************************************************************************** - * Copyright (C) 1998, 1999, 2000 VideoLAN - * $Id: vlc_common.h,v 1.25 2002/08/29 23:53:22 massiot Exp $ + * Copyright (C) 1998-2005 the VideoLAN team + * $Id$ * * Authors: Samuel Hocevar * Vincent Seguin - * Gildas Bazin + * Gildas Bazin * * This program is free software; you can redistribute it and/or modify * 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 @@ -24,6 +24,11 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. *****************************************************************************/ +/** + * \file + * This file is a collection of common definitions and types + */ + /***************************************************************************** * Required vlc headers *****************************************************************************/ @@ -33,9 +38,22 @@ #include "config.h" +#if defined(PACKAGE) +# undef PACKAGE_NAME +# define PACKAGE_NAME PACKAGE +#endif +#if defined(VERSION) +# undef PACKAGE_VERSION +# define PACKAGE_VERSION VERSION +#endif + #if defined( __BORLANDC__ ) # undef HAVE_VARIADIC_MACROS # undef HAVE_STDINT_H +# undef HAVE_INTTYPES_H +# undef off_t +#elif defined( _MSC_VER ) +# pragma warning( disable : 4244 ) #endif #include "vlc_config.h" @@ -44,6 +62,9 @@ /***************************************************************************** * Required system headers *****************************************************************************/ +#include +#include + #ifdef HAVE_STRING_H # include /* strerror() */ #endif @@ -55,39 +76,48 @@ /***************************************************************************** * Basic types definitions *****************************************************************************/ -#ifdef HAVE_STDINT_H +#if defined( HAVE_STDINT_H ) # include - typedef uint8_t u8; - typedef int8_t s8; - - typedef uint16_t u16; - typedef int16_t s16; - - typedef uint32_t u32; - typedef int32_t s32; - - typedef uint64_t u64; - typedef int64_t s64; +#elif defined( HAVE_INTTYPES_H ) +# include +#elif defined( SYS_CYGWIN ) +# include + /* Cygwin only defines half of these... */ + typedef u_int8_t uint8_t; + typedef u_int16_t uint16_t; + typedef u_int32_t uint32_t; + typedef u_int64_t uint64_t; #else - typedef unsigned char u8; - typedef signed char s8; - - typedef unsigned short u16; - typedef signed short s16; - - typedef unsigned int u32; - typedef signed int s32; - -# if defined( _MSC_VER ) || ( defined( WIN32 ) && !defined( __MINGW32__ ) ) - typedef unsigned __int64 u64; - typedef signed __int64 s64; + /* Fallback types (very x86-centric, sorry) */ + typedef unsigned char uint8_t; + typedef signed char int8_t; + typedef unsigned short uint16_t; + typedef signed short int16_t; + typedef unsigned int uint32_t; + typedef signed int int32_t; +# if defined( _MSC_VER ) \ + || defined( UNDER_CE ) \ + || ( defined( WIN32 ) && !defined( __MINGW32__ ) ) + typedef unsigned __int64 uint64_t; + typedef signed __int64 int64_t; # else - typedef unsigned long long u64; - typedef signed long long s64; + typedef unsigned long long uint64_t; + typedef signed long long int64_t; # endif + typedef uint32_t uintptr_t; + typedef int32_t intptr_t; #endif -typedef u8 byte_t; +typedef uint8_t byte_t; + +/* Systems that don't have stdint.h may not define INT64_MIN and + INT64_MAX */ +#ifndef INT64_MIN +#define INT64_MIN (-9223372036854775807LL-1) +#endif +#ifndef INT64_MAX +#define INT64_MAX (9223372036854775807LL) +#endif /* ptrdiff_t definition */ #ifdef HAVE_STDDEF_H @@ -101,7 +131,14 @@ typedef int ptrdiff_t; # endif #endif -#if defined( WIN32 ) +#if defined( WIN32 ) || defined( UNDER_CE ) +# include +# ifndef PATH_MAX +# define PATH_MAX MAX_PATH +# endif +#endif + +#if (defined( WIN32 ) || defined( UNDER_CE )) && !defined( _SSIZE_T_ ) typedef int ssize_t; #endif @@ -109,53 +146,104 @@ typedef int ssize_t; typedef unsigned long count_t; /* DCT elements types */ -typedef s16 dctelem_t; +typedef int16_t dctelem_t; /* Video buffer types */ -typedef u8 yuv_data_t; +typedef uint8_t yuv_data_t; -/***************************************************************************** - * mtime_t: high precision date or time interval - ***************************************************************************** - * Store an high precision date or time interval. The maximum precision is the - * micro-second, and a 64 bits integer is used to avoid any overflow (maximum +/* Audio volume */ +typedef uint16_t audio_volume_t; + +#ifndef HAVE_SOCKLEN_T +typedef int socklen_t; +#endif + +/** + * High precision date or time interval + * + * Store a high precision date or time interval. The maximum precision is the + * microsecond, and a 64 bits integer is used to avoid overflows (maximum * time interval is then 292271 years, which should be long enough for any - * video). Date are stored as a time interval since a common date. - * Note that date and time intervals can be manipulated using regular + * video). Dates are stored as microseconds since a common date (usually the + * epoch). Note that date and time intervals can be manipulated using regular * arithmetic operators, and that no special functions are required. - *****************************************************************************/ -typedef s64 mtime_t; + */ +typedef int64_t mtime_t; -/***************************************************************************** +/** * The vlc_fourcc_t type. - ***************************************************************************** + * * See http://www.webartz.com/fourcc/ for a very detailed list. - *****************************************************************************/ -typedef u32 vlc_fourcc_t; + */ +typedef uint32_t vlc_fourcc_t; -#define VLC_FOURCC( a, b, c, d ) \ - ( ((u32)a) | ( ((u32)b) << 8 ) | ( ((u32)c) << 16 ) | ( ((u32)d) << 24 ) ) +#ifdef WORDS_BIGENDIAN +# define VLC_FOURCC( a, b, c, d ) \ + ( ((uint32_t)d) | ( ((uint32_t)c) << 8 ) \ + | ( ((uint32_t)b) << 16 ) | ( ((uint32_t)a) << 24 ) ) +# define VLC_TWOCC( a, b ) \ + ( (uint16_t)(b) | ( (uint16_t)(a) << 8 ) ) -#define VLC_TWOCC( a, b ) \ - ( (u16)(a) | ( (u16)(b) << 8 ) ) +#else +# define VLC_FOURCC( a, b, c, d ) \ + ( ((uint32_t)a) | ( ((uint32_t)b) << 8 ) \ + | ( ((uint32_t)c) << 16 ) | ( ((uint32_t)d) << 24 ) ) +# define VLC_TWOCC( a, b ) \ + ( (uint16_t)(a) | ( (uint16_t)(b) << 8 ) ) + +#endif /***************************************************************************** * Classes declaration *****************************************************************************/ +/* Internal types */ +typedef struct libvlc_t libvlc_t; +typedef struct vlc_t vlc_t; +typedef struct variable_t variable_t; +typedef struct date_t date_t; + /* Messages */ typedef struct msg_bank_t msg_bank_t; typedef struct msg_subscription_t msg_subscription_t; /* Playlist */ + +/* FIXME */ +/** + * Playlist commands + */ +typedef enum { + PLAYLIST_PLAY, /**< No arg. res=can fail*/ + PLAYLIST_AUTOPLAY, /**< No arg. res=cant fail*/ + PLAYLIST_VIEWPLAY, /**< arg1= int, arg2= playlist_item_t*,*/ + /** arg3 = playlist_item_t* , res=can fail */ + PLAYLIST_ITEMPLAY, /** +# if defined( UNDER_CE ) +# define IS_WINNT 0 +# else +# define IS_WINNT ( GetVersion() < 0x80000000 ) +# endif #endif #include "vlc_threads.h" @@ -244,6 +455,10 @@ typedef struct iso639_lang_t iso639_lang_t; /* VLC_COMMON_MEMBERS : members common to all basic vlc objects */ #define VLC_COMMON_MEMBERS \ +/** \name VLC_COMMON_MEMBERS \ + * these members are common for all vlc objects \ + */ \ +/**@{*/ \ int i_object_id; \ int i_object_type; \ char *psz_object_type; \ @@ -257,40 +472,33 @@ typedef struct iso639_lang_t iso639_lang_t; vlc_mutex_t object_lock; \ vlc_cond_t object_wait; \ \ - volatile vlc_bool_t b_error; /* set by the object */ \ - volatile vlc_bool_t b_die; /* set by the outside */ \ - volatile vlc_bool_t b_dead; /* set by the object */ \ - volatile vlc_bool_t b_attached; /* set by the object */ \ + /* Object properties */ \ + volatile vlc_bool_t b_error; /**< set by the object */ \ + volatile vlc_bool_t b_die; /**< set by the outside */ \ + volatile vlc_bool_t b_dead; /**< set by the object */ \ + volatile vlc_bool_t b_attached; /**< set by the object */ \ + vlc_bool_t b_force; /**< set by the outside (eg. module_Need()) */ \ + \ + /* Object variables */ \ + vlc_mutex_t var_lock; \ + int i_vars; \ + variable_t * p_vars; \ \ - vlc_t * p_vlc; /* root of all evil */ \ + /* Stuff related to the libvlc structure */ \ + libvlc_t * p_libvlc; /**< root of all evil */ \ + vlc_t * p_vlc; /**< (root of all evil) - 1 */ \ \ - volatile int i_refcount; /* usage count */ \ - vlc_object_t * p_parent; /* our parent */ \ - vlc_object_t ** pp_children; /* our children */ \ + volatile int i_refcount; /**< usage count */ \ + vlc_object_t * p_parent; /**< our parent */ \ + vlc_object_t ** pp_children; /**< our children */ \ volatile int i_children; \ \ /* Private data */ \ void * p_private; \ \ - /* Just a reminder so that people don't cast garbage */ \ + /** Just a reminder so that people don't cast garbage */ \ int be_sure_to_add_VLC_COMMON_MEMBERS_to_struct; \ - -/* The real vlc_object_t type. Yes, it's that simple :-) */ -struct vlc_object_t -{ - VLC_COMMON_MEMBERS -}; - -/* The object list */ -struct vlc_list_t -{ - int i_count; - vlc_object_t ** pp_objects; - - /* Private */ - int _i_extra; - vlc_object_t * _p_first; -}; +/**@}*/ \ /* VLC_OBJECT: attempt at doing a clever cast */ #define VLC_OBJECT( x ) \ @@ -302,7 +510,7 @@ struct vlc_list_t #ifdef NTOHL_IN_SYS_PARAM_H # include -#elif !defined(WIN32) /* NTOHL_IN_SYS_PARAM_H || WIN32 */ +#elif !defined(WIN32) && !defined( UNDER_CE ) # include #endif /* NTOHL_IN_SYS_PARAM_H || WIN32 */ @@ -321,27 +529,195 @@ struct vlc_list_t # define __MIN(a, b) ( ((a) < (b)) ? (a) : (b) ) #endif +static int64_t GCD( int64_t a, int64_t b ) +{ + if( b ) return GCD( b, a % b ); + else return a; +} + +/* Dynamic array handling: realloc array, move data, increment position */ +#if defined( _MSC_VER ) && _MSC_VER < 1300 +# define VLCCVP (void**) /* Work-around for broken compiler */ +#else +# define VLCCVP +#endif +#define INSERT_ELEM( p_ar, i_oldsize, i_pos, elem ) \ + do \ + { \ + if( !i_oldsize ) (p_ar) = NULL; \ + (p_ar) = VLCCVP realloc( p_ar, ((i_oldsize) + 1) * 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)++; \ + } \ + while( 0 ) + +#define REMOVE_ELEM( p_ar, i_oldsize, i_pos ) \ + do \ + { \ + 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) ) ); \ + } \ + else \ + { \ + free( p_ar ); \ + (p_ar) = NULL; \ + } \ + (i_oldsize)--; \ + } \ + while( 0 ) + + +#define TAB_APPEND( count, tab, p ) \ + if( (count) > 0 ) \ + { \ + (tab) = realloc( tab, sizeof( void ** ) * ( (count) + 1 ) ); \ + } \ + else \ + { \ + (tab) = malloc( sizeof( void ** ) ); \ + } \ + (tab)[count] = (p); \ + (count)++ + +#define TAB_FIND( count, tab, p, index ) \ + { \ + int _i_; \ + (index) = -1; \ + for( _i_ = 0; _i_ < (count); _i_++ ) \ + { \ + if( (tab)[_i_] == (p) ) \ + { \ + (index) = _i_; \ + break; \ + } \ + } \ + } + +#define TAB_REMOVE( count, tab, p ) \ + { \ + int _i_index_; \ + TAB_FIND( count, tab, p, _i_index_ ); \ + if( _i_index_ >= 0 ) \ + { \ + if( (count) > 1 ) \ + { \ + memmove( ((void**)(tab) + _i_index_), \ + ((void**)(tab) + _i_index_+1), \ + ( (count) - _i_index_ - 1 ) * sizeof( void* ) );\ + } \ + (count)--; \ + if( (count) == 0 ) \ + { \ + free( tab ); \ + (tab) = NULL; \ + } \ + } \ + } + /* MSB (big endian)/LSB (little endian) conversions - network order is always * MSB, and should be used for both network communications and files. Note that * byte orders other than little and big endians are not supported, but only * the VAX seems to have such exotic properties. */ -static inline u16 U16_AT( void * _p ) +static inline uint16_t U16_AT( void const * _p ) +{ + uint8_t * p = (uint8_t *)_p; + return ( ((uint16_t)p[0] << 8) | p[1] ); +} +static inline uint32_t U32_AT( void const * _p ) +{ + uint8_t * p = (uint8_t *)_p; + return ( ((uint32_t)p[0] << 24) | ((uint32_t)p[1] << 16) + | ((uint32_t)p[2] << 8) | p[3] ); +} +static inline uint64_t U64_AT( void const * _p ) { - u8 * p = (u8 *)_p; - return ( ((u16)p[0] << 8) | p[1] ); + uint8_t * p = (uint8_t *)_p; + return ( ((uint64_t)p[0] << 56) | ((uint64_t)p[1] << 48) + | ((uint64_t)p[2] << 40) | ((uint64_t)p[3] << 32) + | ((uint64_t)p[4] << 24) | ((uint64_t)p[5] << 16) + | ((uint64_t)p[6] << 8) | p[7] ); } -static inline u32 U32_AT( void * _p ) + +static inline uint16_t GetWLE( void const * _p ) +{ + uint8_t * p = (uint8_t *)_p; + return ( ((uint16_t)p[1] << 8) | p[0] ); +} +static inline uint32_t GetDWLE( void const * _p ) +{ + uint8_t * p = (uint8_t *)_p; + return ( ((uint32_t)p[3] << 24) | ((uint32_t)p[2] << 16) + | ((uint32_t)p[1] << 8) | p[0] ); +} +static inline uint64_t GetQWLE( void const * _p ) +{ + uint8_t * p = (uint8_t *)_p; + return ( ((uint64_t)p[7] << 56) | ((uint64_t)p[6] << 48) + | ((uint64_t)p[5] << 40) | ((uint64_t)p[4] << 32) + | ((uint64_t)p[3] << 24) | ((uint64_t)p[2] << 16) + | ((uint64_t)p[1] << 8) | p[0] ); +} + +#define GetWBE( p ) U16_AT( p ) +#define GetDWBE( p ) U32_AT( p ) +#define GetQWBE( p ) U64_AT( p ) + +/* Helper writer functions */ +#define SetWLE( p, v ) _SetWLE( (uint8_t*)p, v) +static inline void _SetWLE( uint8_t *p, uint16_t i_dw ) +{ + p[1] = ( i_dw >> 8 )&0xff; + p[0] = ( i_dw )&0xff; +} + +#define SetDWLE( p, v ) _SetDWLE( (uint8_t*)p, v) +static inline void _SetDWLE( uint8_t *p, uint32_t i_dw ) +{ + p[3] = ( i_dw >> 24 )&0xff; + p[2] = ( i_dw >> 16 )&0xff; + p[1] = ( i_dw >> 8 )&0xff; + p[0] = ( i_dw )&0xff; +} +#define SetQWLE( p, v ) _SetQWLE( (uint8_t*)p, v) +static inline void _SetQWLE( uint8_t *p, uint64_t i_qw ) +{ + SetDWLE( p, i_qw&0xffffffff ); + SetDWLE( p+4, ( i_qw >> 32)&0xffffffff ); +} +#define SetWBE( p, v ) _SetWBE( (uint8_t*)p, v) +static inline void _SetWBE( uint8_t *p, uint16_t i_dw ) +{ + p[0] = ( i_dw >> 8 )&0xff; + p[1] = ( i_dw )&0xff; +} + +#define SetDWBE( p, v ) _SetDWBE( (uint8_t*)p, v) +static inline void _SetDWBE( uint8_t *p, uint32_t i_dw ) { - u8 * p = (u8 *)_p; - return ( ((u32)p[0] << 24) | ((u32)p[1] << 16) | ((u32)p[2] << 8) | p[3] ); + p[0] = ( i_dw >> 24 )&0xff; + p[1] = ( i_dw >> 16 )&0xff; + p[2] = ( i_dw >> 8 )&0xff; + p[3] = ( i_dw )&0xff; } -static inline u64 U64_AT( void * _p ) +#define SetQWBE( p, v ) _SetQWBE( (uint8_t*)p, v) +static inline void _SetQWBE( uint8_t *p, uint64_t i_qw ) { - u8 * p = (u8 *)_p; - return ( ((u64)p[0] << 56) | ((u64)p[1] << 48) | ((u64)p[2] << 40) - | ((u64)p[3] << 32) | ((u64)p[4] << 24) | ((u64)p[5] << 16) - | ((u64)p[6] << 8) | p[7] ); + SetDWBE( p+4, i_qw&0xffffffff ); + SetDWBE( p, ( i_qw >> 32)&0xffffffff ); } + #if WORDS_BIGENDIAN # define hton16(i) ( i ) # define hton32(i) ( i ) @@ -358,6 +734,13 @@ static inline u64 U64_AT( void * _p ) # 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))) @@ -393,28 +776,191 @@ static inline u64 U64_AT( void * _p ) #endif -/* strndup (defined in src/misc/extras.c) */ +/* Stuff defined in src/extras/libc.c */ +#ifndef HAVE_STRDUP +# define strdup vlc_strdup + VLC_EXPORT( char *, vlc_strdup, ( const char *s ) ); +#elif !defined(__PLUGIN__) +# define vlc_strdup NULL +#endif + +#if !defined(HAVE_VASPRINTF) || defined(SYS_DARWIN) || defined(SYS_BEOS) +# define vasprintf vlc_vasprintf + VLC_EXPORT( int, vlc_vasprintf, (char **, const char *, va_list ) ); +#elif !defined(__PLUGIN__) +# define vlc_vasprintf NULL +#endif + +#if !defined(HAVE_ASPRINTF) || defined(SYS_DARWIN) || defined(SYS_BEOS) +# define asprintf vlc_asprintf + VLC_EXPORT( int, vlc_asprintf, (char **, const char *, ... ) ); +#elif !defined(__PLUGIN__) +# define vlc_asprintf 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 +#ifndef HAVE_ATOF +# define atof vlc_atof + VLC_EXPORT( double, vlc_atof, ( const char *nptr ) ); +#elif !defined(__PLUGIN__) +# define vlc_atof NULL +#endif -#define I64C(x) x##LL +#ifndef HAVE_STRTOF +# ifdef HAVE_STRTOD +# define strtof strtod +# endif +#endif + +#ifndef HAVE_ATOLL +# define atoll vlc_atoll + VLC_EXPORT( int64_t, vlc_atoll, ( const char *nptr ) ); +#elif !defined(__PLUGIN__) +# define vlc_atoll NULL +#endif + +#ifndef HAVE_STRTOLL +# define strtoll vlc_strtoll + VLC_EXPORT( int64_t, vlc_strtoll, ( const char *nptr, char **endptr, int base ) ); +#elif !defined(__PLUGIN__) +# define vlc_strtoll NULL +#endif -#ifdef WIN32 +#ifndef HAVE_GETENV +# define getenv vlc_getenv + VLC_EXPORT( char *, vlc_getenv, ( const char *name ) ); +#elif !defined(__PLUGIN__) +# define vlc_getenv NULL +#endif + +#ifndef HAVE_STRCASECMP +# ifndef HAVE_STRICMP +# define strcasecmp vlc_strcasecmp + VLC_EXPORT( int, vlc_strcasecmp, ( const char *s1, const char *s2 ) ); +# else +# define strcasecmp stricmp +# if !defined(__PLUGIN__) +# define vlc_strcasecmp NULL +# endif +# endif +#elif !defined(__PLUGIN__) +# define vlc_strcasecmp NULL +#endif + +#ifndef HAVE_STRNCASECMP +# ifndef HAVE_STRNICMP +# define strncasecmp vlc_strncasecmp + VLC_EXPORT( int, vlc_strncasecmp, ( const char *s1, const char *s2, size_t n ) ); +# else +# define strncasecmp strnicmp +# if !defined(__PLUGIN__) +# define vlc_strncasecmp NULL +# endif +# endif +#elif !defined(__PLUGIN__) +# define vlc_strncasecmp NULL +#endif + +#ifndef HAVE_STRCASESTR +# ifndef HAVE_STRISTR +# define strcasestr vlc_strcasestr + VLC_EXPORT( char *, vlc_strcasestr, ( const char *s1, const char *s2 ) ); +# else +# define strcasestr stristr +# if !defined(__PLUGIN__) +# define vlc_strcasestr NULL +# endif +# endif +#elif !defined(__PLUGIN__) +# define vlc_strcasestr NULL +#endif + +#ifndef HAVE_DIRENT_H + typedef void DIR; +# ifndef FILENAME_MAX +# define FILENAME_MAX (260) +# endif + struct dirent + { + long d_ino; /* Always zero. */ + unsigned short d_reclen; /* Always zero. */ + unsigned short d_namlen; /* Length of name in d_name. */ + char d_name[FILENAME_MAX]; /* File name. */ + }; +# define opendir vlc_opendir +# define readdir vlc_readdir +# define closedir vlc_closedir + VLC_EXPORT( void *, vlc_opendir, ( const char * ) ); + VLC_EXPORT( void *, vlc_readdir, ( void * ) ); + VLC_EXPORT( int, vlc_closedir, ( void * ) ); +#elif !defined(__PLUGIN__) +# define vlc_opendir NULL +# define vlc_readdir NULL +# define vlc_closedir NULL +#endif + +/* Format type specifiers for 64 bits numbers */ +#if defined(__CYGWIN32__) || (!defined(WIN32) && !defined(UNDER_CE)) +# if defined(__WORDSIZE) && __WORDSIZE == 64 +# define I64Fd "%ld" +# define I64Fi "%li" +# define I64Fo "%lo" +# define I64Fu "%lu" +# define I64Fx "%lx" +# define I64FX "%lX" +# else +# define I64Fd "%lld" +# define I64Fi "%lli" +# define I64Fo "%llo" +# define I64Fu "%llu" +# define I64Fx "%llx" +# define I64FX "%llX" +# endif +#else +# define I64Fd "%I64d" +# define I64Fi "%I64i" +# define I64Fo "%I64o" +# define I64Fu "%I64u" +# define I64Fx "%I64x" +# define I64FX "%I64X" +#endif /* defined(WIN32)||defined(UNDER_CE) */ + +/* 64 bits integer constant suffix */ +#if defined( __MINGW32__ ) || (!defined(WIN32) && !defined(UNDER_CE)) +# if defined(__WORDSIZE) && __WORDSIZE == 64 +# define I64C(x) x##L +# define UI64C(x) x##UL +# else +# define I64C(x) x##LL +# define UI64C(x) x##ULL +# endif +#else +# define I64C(x) x##i64 +# define UI64C(x) x##ui64 +#endif /* defined(WIN32)||defined(UNDER_CE) */ + +#if defined(WIN32) || defined(UNDER_CE) /* win32, cl and icl support */ # if defined( _MSC_VER ) || !defined( __MINGW32__ ) # define __attribute__(x) # define __inline__ __inline -# define strncasecmp strnicmp -# define strcasecmp stricmp # define S_IFBLK 0x3000 /* Block */ # define S_ISBLK(m) (0) # define S_ISCHR(m) (0) # define S_ISFIFO(m) (((m)&_S_IFMT) == _S_IFIFO) # define S_ISREG(m) (((m)&_S_IFMT) == _S_IFREG) -# undef I64C -# define I64C(x) x##i64 # endif /* several type definitions */ @@ -424,18 +970,24 @@ typedef long long _off_t; typedef _off_t off_t; # define _OFF_T_ # else +# ifdef off_t +# undef off_t +# endif # define off_t long long # endif # endif -# if defined( _MSC_VER ) +/* +# if (defined( _MSC_VER ) && (!defined(__WXMSW__))) # if !defined( _OFF_T_DEFINED ) typedef __int64 off_t; # define _OFF_T_DEFINED # else # define off_t __int64 + // for wx compatibility typedef long off_t; # endif # endif +*/ # if defined( __BORLANDC__ ) # undef off_t @@ -444,6 +996,10 @@ typedef __int64 off_t; # ifndef O_NONBLOCK # define O_NONBLOCK 0 +# endif + +# ifndef alloca +# define alloca _alloca # endif /* These two are not defined in mingw32 (bug?) */ @@ -454,8 +1010,22 @@ typedef __int64 off_t; # define vsnprintf _vsnprintf # endif +# include #endif +VLC_EXPORT( vlc_bool_t, vlc_ureduce, ( unsigned *, unsigned *, uint64_t, uint64_t, uint64_t ) ); +VLC_EXPORT( char **, vlc_parse_cmdline, ( const char *, int * ) ); + +/* vlc_wraptext (defined in src/extras/libc.c) */ +#define wraptext vlc_wraptext +VLC_EXPORT( char *, vlc_wraptext, ( const char *, int, vlc_bool_t ) ); + +/* iconv wrappers (defined in src/extras/libc.c) */ +typedef void *vlc_iconv_t; +VLC_EXPORT( vlc_iconv_t, vlc_iconv_open, ( const char *, const char * ) ); +VLC_EXPORT( size_t, vlc_iconv, ( vlc_iconv_t, char **, size_t *, char **, size_t * ) ); +VLC_EXPORT( int, vlc_iconv_close, ( vlc_iconv_t ) ); + /***************************************************************************** * CPU capabilities *****************************************************************************/ @@ -467,24 +1037,32 @@ typedef __int64 off_t; #define CPU_CAPABILITY_3DNOW (1<<4) #define CPU_CAPABILITY_MMXEXT (1<<5) #define CPU_CAPABILITY_SSE (1<<6) +#define CPU_CAPABILITY_SSE2 (1<<7) #define CPU_CAPABILITY_ALTIVEC (1<<16) #define CPU_CAPABILITY_FPU (1<<31) /***************************************************************************** * I18n stuff *****************************************************************************/ -#if defined( ENABLE_NLS ) && defined ( HAVE_GETTEXT ) && !defined( __BORLANDC__ ) && !defined( NEED_GNOMESUPPORT_H ) -# include -# undef _ -# define _(String) dgettext (PACKAGE, String) -# ifdef gettext_noop -# define N_(String) gettext_noop (String) +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)||\ + defined(MODULE_NAME_IS_pda)) + /* Declare nothing: gnome.h will do it for us */ +#elif defined( ENABLE_NLS ) +# if defined( HAVE_INCLUDED_GETTEXT ) +# include "libintl.h" # else -# define N_(String) (String) +# include # endif -#elif !defined( NEED_GNOMESUPPORT_H ) -# define _(String) (String) -# define N_(String) (String) +# undef _ +# define _(String) vlc_dgettext (PACKAGE_NAME, String) +# define N_(String) ((char*)(String)) +#else +# define _(String) ((char*)(String)) +# define N_(String) ((char*)(String)) #endif /***************************************************************************** @@ -493,12 +1071,13 @@ typedef __int64 off_t; #include "vlc_symbols.h" #include "os_specific.h" #include "vlc_messages.h" +#include "variables.h" +#include "vlc_objects.h" #include "vlc_threads_funcs.h" #include "mtime.h" #include "modules.h" #include "main.h" #include "configuration.h" -#include "vlc_objects.h" #if defined( __BORLANDC__ ) # undef PACKAGE