diff --git a/common/jack/systemdeps.h b/common/jack/systemdeps.h index 6b1b8a7f..4806533b 100644 --- a/common/jack/systemdeps.h +++ b/common/jack/systemdeps.h @@ -1,5 +1,5 @@ /* -Copyright (C) 2004-2009 Grame +Copyright (C) 2004-2012 Grame This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -20,66 +20,101 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #ifndef __jack_systemdeps_h__ #define __jack_systemdeps_h__ -#if defined(WIN32) && !defined(__CYGWIN__) && !defined(GNU_WIN32) +#ifndef POST_PACKED_STRUCTURE + + #ifdef __GNUC__ + /* POST_PACKED_STRUCTURE needs to be a macro which + expands into a compiler directive. The directive must + tell the compiler to arrange the preceding structure + declaration so that it is packed on byte-boundaries rather + than use the natural alignment of the processor and/or + compiler. + */ + + #define PRE_PACKED_STRUCTURE + #define POST_PACKED_STRUCTURE __attribute__((__packed__)) + + #else + + #ifdef _MSC_VER + #define PRE_PACKED_STRUCTURE1 __pragma(pack(push,1)) + #define PRE_PACKED_STRUCTURE PRE_PACKED_STRUCTURE1 + /* PRE_PACKED_STRUCTURE needs to be a macro which + expands into a compiler directive. The directive must + tell the compiler to arrange the following structure + declaration so that it is packed on byte-boundaries rather + than use the natural alignment of the processor and/or + compiler. + */ + #define POST_PACKED_STRUCTURE ;__pragma(pack(pop)) + /* and POST_PACKED_STRUCTURE needs to be a macro which + restores the packing to its previous setting */ + #endif -#include - -#ifdef _MSC_VER /* Microsoft compiler */ - #define __inline__ inline - #if (!defined(int8_t) && !defined(_STDINT_H)) - #define __int8_t_defined - typedef char int8_t; - typedef unsigned char uint8_t; - typedef short int16_t; - typedef unsigned short uint16_t; - typedef long int32_t; - typedef unsigned long uint32_t; - typedef LONGLONG int64_t; - typedef ULONGLONG uint64_t; #endif -#elif __MINGW32__ /* MINGW */ - #include - #include -#else /* other compilers ...*/ - #include - #include - #include + #endif -#if !defined(_PTHREAD_H) && !defined(PTHREAD_WIN32) - /** - * to make jack API independent of different thread implementations, - * we define jack_native_thread_t to HANDLE here. - */ - typedef HANDLE jack_native_thread_t; -#else - #ifdef PTHREAD_WIN32 // Added by JE - 10-10-2011 - #include // Makes sure we #include the ptw32 version ! +#if defined(WIN32) && !defined(__CYGWIN__) && !defined(GNU_WIN32) + + #include + + #ifdef _MSC_VER /* Microsoft compiler */ + #define __inline__ inline + #if (!defined(int8_t) && !defined(_STDINT_H)) + #define __int8_t_defined + typedef char int8_t; + typedef unsigned char uint8_t; + typedef short int16_t; + typedef unsigned short uint16_t; + typedef long int32_t; + typedef unsigned long uint32_t; + typedef LONGLONG int64_t; + typedef ULONGLONG uint64_t; + #endif + #elif __MINGW32__ /* MINGW */ + #include + #include + #else /* other compilers ...*/ + #include + #include + #include + #endif + + #if !defined(_PTHREAD_H) && !defined(PTHREAD_WIN32) + /** + * to make jack API independent of different thread implementations, + * we define jack_native_thread_t to HANDLE here. + */ + typedef HANDLE jack_native_thread_t; + #else + #ifdef PTHREAD_WIN32 // Added by JE - 10-10-2011 + #include // Makes sure we #include the ptw32 version ! + #endif + /** + * to make jack API independent of different thread implementations, + * we define jack_native_thread_t to pthread_t here. + */ + typedef pthread_t jack_native_thread_t; #endif - /** - * to make jack API independent of different thread implementations, - * we define jack_native_thread_t to pthread_t here. - */ - typedef pthread_t jack_native_thread_t; -#endif #endif // WIN32 && !__CYGWIN__ && !GNU_WIN32 */ #if defined(__APPLE__) || defined(__linux__) || defined(__sun__) || defined(sun) || defined(__unix__) || defined(__CYGWIN__) || defined(GNU_WIN32) -#if defined(__CYGWIN__) || defined(GNU_WIN32) - #include -#endif - #include - #include - #include + #if defined(__CYGWIN__) || defined(GNU_WIN32) + #include + #endif + #include + #include + #include - /** - * to make jack API independent of different thread implementations, - * we define jack_native_thread_t to pthread_t here. - */ - typedef pthread_t jack_native_thread_t; + /** + * to make jack API independent of different thread implementations, + * we define jack_native_thread_t to pthread_t here. + */ + typedef pthread_t jack_native_thread_t; -#endif /* __APPLE__ || __linux__ || __sun__ || sun */ + #endif /* __APPLE__ || __linux__ || __sun__ || sun */ #endif diff --git a/common/jack/types.h b/common/jack/types.h index a7d06983..cfad3e54 100644 --- a/common/jack/types.h +++ b/common/jack/types.h @@ -548,6 +548,7 @@ typedef enum { #define JACK_POSITION_MASK (JackPositionBBT|JackPositionTimecode) #define EXTENDED_TIME_INFO +PRE_PACKED_STRUCTURE typedef struct { /* these four cannot be set from clients: the server sets them */ @@ -614,7 +615,7 @@ typedef struct { /* When (unique_1 == unique_2) the contents are consistent. */ jack_unique_t unique_2; /**< unique ID */ -} jack_position_t; +} POST_PACKED_STRUCTURE jack_position_t; /** * Prototype for the @a sync_callback defined by slow-sync clients.