#define PRIo64 "llo"
#undef PRIx64
#define PRIx64 "llx"
- #define snprintf __mingw_snprintf
- #define vsnprintf __mingw_vsnprintf
#endif
/* Function attributes for compiler warnings */
/* stat/lstat/fstat */
#ifdef WIN32
-#include <sys/stat.h>
+# include <sys/stat.h>
# ifndef UNDER_CE
struct _stati64;
-#define stat _stati64
-#define fstat _fstati64
+# define stat _stati64
+# define fstat _fstati64
#endif
/* You should otherwise use vlc_stat and vlc_lstat. */
* OS-specific headers and thread types
*****************************************************************************/
#if defined( WIN32 ) || defined( UNDER_CE )
-# define WIN32_LEAN_AND_MEAN
-# include <windows.h>
+/* WIN32_LEAN_AND_MEAN is needed to be able to include winsock2.h because else,
+ * windows.h will also include winsock.h and declarations will conflict */
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
#endif
#include "vlc_mtime.h"
{
#if VLC_GCC_VERSION(4,3)
return __builtin_bswap64 (x);
-#else
+#elif !defined (__cplusplus)
return ((x & 0x00000000000000FF) << 56)
| ((x & 0x000000000000FF00) << 40)
| ((x & 0x0000000000FF0000) << 24)
| ((x & 0x0000FF0000000000) >> 24)
| ((x & 0x00FF000000000000) >> 40)
| ((x & 0xFF00000000000000) >> 56);
+#else
+ return ((x & 0x00000000000000FFLLU) << 56)
+ | ((x & 0x000000000000FF00LLU) << 40)
+ | ((x & 0x0000000000FF0000LLU) << 24)
+ | ((x & 0x00000000FF000000LLU) << 8)
+ | ((x & 0x000000FF00000000LLU) >> 8)
+ | ((x & 0x0000FF0000000000LLU) >> 24)
+ | ((x & 0x00FF000000000000LLU) >> 40)
+ | ((x & 0xFF00000000000000LLU) >> 56);
#endif
}
#ifdef WORDS_BIGENDIAN
# define hton16(i) ((uint16_t)(i))
# define hton32(i) ((uint32_t)(i))
-# define hton64(i) ((uint32_t)(i))
+# define hton64(i) ((uint64_t)(i))
#else
# define hton16(i) bswap16(i)
# define hton32(i) bswap32(i)
}
/** Writes 16 bits in network byte order */
-static inline void SetWLE (void *p, uint16_t w)
+static inline void SetWBE (void *p, uint16_t w)
{
w = hton16 (w);
memcpy (p, &w, sizeof (w));
}
/** Writes 32 bits in network byte order */
-static inline void SetDWLE (void *p, uint32_t dw)
+static inline void SetDWBE (void *p, uint32_t dw)
{
dw = hton32 (dw);
memcpy (p, &dw, sizeof (dw));
}
/** Writes 64 bits in network byte order */
-static inline void SetQWLE (void *p, uint64_t qw)
+static inline void SetQWBE (void *p, uint64_t qw)
{
qw = hton64 (qw);
memcpy (p, &qw, sizeof (qw));
}
/** Writes 16 bits in little endian order */
-static inline void SetWBE (void *p, uint16_t w)
+static inline void SetWLE (void *p, uint16_t w)
{
#ifdef WORDS_BIGENDIAN
w = bswap16 (w);
}
/** Writes 32 bits in little endian order */
-static inline void SetDWBE (void *p, uint32_t dw)
+static inline void SetDWLE (void *p, uint32_t dw)
{
#ifdef WORDS_BIGENDIAN
dw = bswap32 (dw);
}
/** Writes 64 bits in little endian order */
-static inline void SetQWBE (void *p, uint64_t qw)
+static inline void SetQWLE (void *p, uint64_t qw)
{
#ifdef WORDS_BIGENDIAN
- qw = bswap32 (qw);
+ qw = bswap64 (qw);
#endif
memcpy (p, &qw, sizeof (qw));
}
# endif
# endif
-# if defined( _MSC_VER ) && !defined( __WXMSW__ )
+# if defined( _MSC_VER )
# if !defined( _OFF_T_DEFINED )
typedef __int64 off_t;
# define _OFF_T_DEFINED
VLC_API bool vlc_ureduce( unsigned *, unsigned *, uint64_t, uint64_t, uint64_t );
-VLC_API void * vlc_memalign( void **base, size_t alignment, size_t size ) VLC_USED;
+/* Aligned memory allocator */
+#ifdef __APPLE__
+#include <AvailabilityMacros.h>
+#endif
+
+#ifdef WIN32
+# include <malloc.h>
+# define vlc_memalign(align, size) (__mingw_aligned_malloc(size, align))
+# define vlc_free(base) (__mingw_aligned_free(base))
+#elif defined(__APPLE__) && !defined(MAC_OS_X_VERSION_10_6)
+static inline void *vlc_memalign(size_t align, size_t size)
+{
+ long diff;
+ void *ptr;
+
+ ptr = malloc(size+align);
+ if(!ptr)
+ return ptr;
+ diff = ((-(long)ptr - 1)&(align-1)) + 1;
+ ptr = (char*)ptr + diff;
+ ((char*)ptr)[-1]= diff;
+ return ptr;
+}
+
+static void vlc_free(void *ptr)
+{
+ if (ptr)
+ free((char*)ptr - ((char*)ptr)[-1]);
+}
+#elif defined(__ANDROID__)
+# define vlc_memalign(align, size) memalign(align, size)
+# define vlc_free(base) free(base)
+#else
+static inline void *vlc_memalign(size_t align, size_t size)
+{
+ void *base;
+ if (unlikely(posix_memalign(&base, align, size)))
+ base = NULL;
+ return base;
+}
+# define vlc_free(base) free(base)
+#endif
VLC_API void vlc_tdestroy( void *, void (*)(void *) );