implemented macro overriding for polarssl_* library functions

This commit is contained in:
Rich Evans 2015-02-06 16:14:34 +00:00
parent 3d62e72648
commit 16f8cd8e87
3 changed files with 98 additions and 71 deletions

View file

@ -198,18 +198,11 @@
#error "POLARSSL_PKCS11_C defined, but not all prerequisites"
#endif
#if defined(POLARSSL_PLATFORM_ENABLE_FUNCTION_MACROS) &&\
!defined(POLARSSL_PLATFORM_C)
#error "POLARSSL_PLATFORM_ENABLE_FUNCTION_MACROS defined, but not prerequisites"
#endif
#if defined(POLARSSL_PLATFORM_EXIT_ALT) && !defined(POLARSSL_PLATFORM_C)
#error "POLARSSL_PLATFORM_EXIT_ALT defined, but not all prerequisites"
#endif
#if defined(POLARSSL_PLATFORM_EXIT_MACRO) &&\
( !defined(POLARSSL_PLATFORM_C) ||\
!defined(POLARSSL_PLATFORM_ENABLE_FUNCTION_MACROS) )
#if defined(POLARSSL_PLATFORM_EXIT_MACRO) && !defined(POLARSSL_PLATFORM_C)
#error "POLARSSL_PLATFORM_EXIT_MACRO defined, but not all prerequisites"
#endif
@ -223,9 +216,7 @@
#error "POLARSSL_PLATFORM_FPRINTF_ALT defined, but not all prerequisites"
#endif
#if defined(POLARSSL_PLATFORM_FPRINTF_MACRO) &&\
( !defined(POLARSSL_PLATFORM_C) ||\
!defined(POLARSSL_PLATFORM_ENABLE_FUNCTION_MACROS) )
#if defined(POLARSSL_PLATFORM_FPRINTF_MACRO) && !defined(POLARSSL_PLATFORM_C)
#error "POLARSSL_PLATFORM_FPRINTF_MACRO defined, but not all prerequisites"
#endif
@ -236,8 +227,7 @@
#endif
#if defined(POLARSSL_PLATFORM_FREE_MACRO) &&\
( !defined(POLARSSL_PLATFORM_C) || !defined(POLARSSL_PLATFORM_MEMORY) ||\
!defined(POLARSSL_PLATFORM_ENABLE_FUNCTION_MACROS) )
( !defined(POLARSSL_PLATFORM_C) || !defined(POLARSSL_PLATFORM_MEMORY) )
#error "POLARSSL_PLATFORM_FREE_MACRO defined, but not all prerequisites"
#endif
@ -246,9 +236,12 @@
#error "POLARSSL_PLATFORM_FREE_MACRO and POLARSSL_PLATFORM_STD_FREE cannot be defined simultaneously"
#endif
#if defined(POLARSSL_PLATFORM_FREE_MACRO) && !defined(POLARSSL_PLATFORM_MALLOC_MACRO)
#error "POLARSSL_PLATFORM_MALLOC_MACRO must be defined if POLARSSL_PLATFORM_FREE_MACRO is"
#endif
#if defined(POLARSSL_PLATFORM_MALLOC_MACRO) &&\
( !defined(POLARSSL_PLATFORM_C) || !defined(POLARSSL_PLATFORM_MEMORY) ||\
!defined(POLARSSL_PLATFORM_ENABLE_FUNCTION_MACROS) )
( !defined(POLARSSL_PLATFORM_C) || !defined(POLARSSL_PLATFORM_MEMORY) )
#error "POLARSSL_PLATFORM_MALLOC_MACRO defined, but not all prerequisites"
#endif
@ -257,6 +250,10 @@
#error "POLARSSL_PLATFORM_MALLOC_MACRO and POLARSSL_PLATFORM_STD_MALLOC cannot be defined simultaneously"
#endif
#if defined(POLARSSL_PLATFORM_MALLOC_MACRO) && !defined(POLARSSL_PLATFORM_FREE_MACRO)
#error "POLARSSL_PLATFORM_FREE_MACRO must be defined if POLARSSL_PLATFORM_MALLOC_MACRO is"
#endif
#if defined(POLARSSL_PLATFORM_MEMORY) && !defined(POLARSSL_PLATFORM_C)
#error "POLARSSL_PLATFORM_MEMORY defined, but not all prerequisites"
#endif
@ -265,9 +262,7 @@
#error "POLARSSL_PLATFORM_PRINTF_ALT defined, but not all prerequisites"
#endif
#if defined(POLARSSL_PLATFORM_PRINTF_MACRO) &&\
( !defined(POLARSSL_PLATFORM_C) ||\
!defined(POLARSSL_PLATFORM_ENABLE_FUNCTION_MACROS) )
#if defined(POLARSSL_PLATFORM_PRINTF_MACRO) && !defined(POLARSSL_PLATFORM_C)
#error "POLARSSL_PLATFORM_PRINTF_MACRO defined, but not all prerequisites"
#endif
@ -286,9 +281,7 @@
#error "POLARSSL_PLATFORM_SNPRINTF_ALT defined but not available on Windows"
#endif
#if defined(POLARSSL_PLATFORM_SNPRINTF_MACRO) &&\
( !defined(POLARSSL_PLATFORM_C) ||\
!defined(POLARSSL_PLATFORM_ENABLE_FUNCTION_MACROS) )
#if defined(POLARSSL_PLATFORM_SNPRINTF_MACRO) && !defined(POLARSSL_PLATFORM_C)
#error "POLARSSL_PLATFORM_SNPRINTF_MACRO defined, but not all prerequisites"
#endif

View file

@ -120,8 +120,14 @@
* This allows different allocators (self-implemented or provided) to be
* provided to the platform abstraction layer.
*
* Enabling POLARSSL_PLATFORM_MEMORY will provide "platform_set_malloc_free()"
* to allow you to set an alternative malloc() and free() function pointer.
* Enabling POLARSSL_PLATFORM_MEMORY without the
* POLARSSL_PLATFORM_{FREE,MALLOC}_MACROs will provide
* "platform_set_malloc_free()" allowing you to set an alternative malloc() and
* free() function pointer at runtime.
*
* Enabling POLARSSL_PLATFORM_MEMORY and specifying
* POLARSSL_PLATFORM_{MALLOC,FREE}_MACROs will allow you to specify the
* alternate function at compile time.
*
* Requires: POLARSSL_PLATFORM_C
*
@ -138,7 +144,8 @@
* This makes sure there are no linking errors on platforms that do not support
* these functions. You will HAVE to provide alternatives, either at runtime
* via the platform_set_xxx() functions or at compile time by setting
* the POLARSSL_PLATFORM_STD_XXX defines.
* the POLARSSL_PLATFORM_STD_XXX defines, or enabling a
* POLARSSL_PLATFORM_XXX_MACRO.
*
* Requires: POLARSSL_PLATFORM_C
*
@ -147,16 +154,6 @@
*/
//#define POLARSSL_PLATFORM_NO_STD_FUNCTIONS
/**
* \def POLARSSL_PLATFORM_ENABLE_FUNCTION_MACROS
*
* TO-DO: ADD DESCRIPTION & ANY WARNINGS ETC
*
* Requires: POLARSSL_PLATFORM_C
*
*/
//#define POLARSSL_PLATFORM_ENABLE_FUNCTION_MACROS
/**
* \def POLARSSL_PLATFORM_XXX_ALT
*
@ -172,6 +169,9 @@
* WARNING: POLARSSL_PLATFORM_SNPRINTF_ALT is not available on Windows
* for compatibility reasons.
*
* WARNING: POLARSSL_PLATFORM_XXX_ALT cannot be defined at the same time as
* POLARSSL_PLATFORM_XXX_MACRO!
*
* Uncomment a macro to enable alternate implementation of specific base
* platform function
*/
@ -1907,6 +1907,10 @@
* Enable the platform abstraction layer that allows you to re-assign
* functions like malloc(), free(), snprintf(), printf(), fprintf(), exit()
*
* Enabling POLARSSL_PLATFORM_C enables to use of POLARSSL_PLATFORM_XXX_ALT
* or POLARSSL_PLATFORM_XXX_MACRO directives, allowing the functions mentioned
* above to be specified at runtime or compile time respectively.
*
* Module: library/platform.c
* Caller: Most other .c files
*
@ -2258,6 +2262,8 @@
//#define POLARSSL_PLATFORM_STD_PRINTF printf /**< Default printf to use, can be undefined */
//#define POLARSSL_PLATFORM_STD_SNPRINTF snprintf /**< Default snprintf to use, can be undefined */
/* To Use Function Macros POLARSSL_PLATFORM_C must be enabled */
/* POLARSSL_PLATFORM_XXX_MACRO and POLARSSL_PLATFORM_XXX_ALT cannot both be defined */
//#define POLARSSL_PLATFORM_MALLOC_MACRO malloc /**< Default allocator macro to use, can be undefined */
//#define POLARSSL_PLATFORM_FREE_MACRO free /**< Default free macro to use, can be undefined */
//#define POLARSSL_PLATFORM_EXIT_MACRO exit /**< Default exit macro to use, can be undefined */

View file

@ -97,43 +97,18 @@ int platform_set_malloc_free( void * (*malloc_func)( size_t ),
#define polarssl_malloc malloc
#define polarssl_free free
#endif /* POLARSSL_PLATFORM_MEMORY */
/*
* The function pointers for snprintf
*/
#if defined(POLARSSL_PLATFORM_SNPRINTF_ALT)
extern int (*polarssl_snprintf)( char * s, size_t n, const char * format, ... );
/**
* \brief Set your own snprintf function pointer
*
* \param snprintf_func the snprintf function implementation
*
* \return 0
*/
int platform_set_snprintf( int (*snprintf_func)( char * s, size_t n,
const char * format, ... ) );
#else /* POLARSSL_PLATFORM_SNPRINTF_ALT */
#define polarssl_snprintf snprintf
#endif /* POLARSSL_PLATFORM_SNPRINTF_ALT */
/*
* The function pointers for printf
*/
#if defined(POLARSSL_PLATFORM_PRINTF_ALT)
extern int (*polarssl_printf)( const char *format, ... );
/**
* \brief Set your own printf function pointer
*
* \param printf_func the printf function implementation
*
* \return 0
*/
int platform_set_printf( int (*printf_func)( const char *, ... ) );
#else /* POLARSSL_PLATFORM_PRINTF_ALT */
#define polarssl_printf printf
#endif /* POLARSSL_PLATFORM_PRINTF_ALT */
#else /* POLARSSL_PLATFORM_ENTROPY */
#if defined(POLARSSL_PLATFORM_FREE_MACRO)
#define polarssl_free POLARSSL_PLATFORM_FREE_MACRO
#else
#define polarssl_free free
#endif /* POLARSSL_PLATFORM_FREE_MACRO */
#if defined(POLARSSL_PLATFORM_MALLOC_MACRO)
#define polarssl_malloc POLARSSL_PLATFORM_MALLOC_MACRO
#else
#define polarssl_malloc malloc
#endif /* POLARSSL_PLATFORM_MALLOC_MACRO */
#endif /* POLARSSL_PLATFORM_ENTROPY */
/*
* The function pointers for fprintf
@ -151,9 +126,58 @@ extern int (*polarssl_fprintf)( FILE *stream, const char *format, ... );
int platform_set_fprintf( int (*fprintf_func)( FILE *stream, const char *,
... ) );
#else
#if defined(POLARSSL_PLATFORM_FPRINTF_MACRO)
#define polarssl_fprintf POLARSSL_PLATFORM_FPRINTF_MACRO
#else
#define polarssl_fprintf fprintf
#endif /* POLARSSL_PLATFORM_FPRINTF_MACRO */
#endif /* POLARSSL_PLATFORM_FPRINTF_ALT */
/*
* The function pointers for printf
*/
#if defined(POLARSSL_PLATFORM_PRINTF_ALT)
extern int (*polarssl_printf)( const char *format, ... );
/**
* \brief Set your own printf function pointer
*
* \param printf_func the printf function implementation
*
* \return 0
*/
int platform_set_printf( int (*printf_func)( const char *, ... ) );
#else /* !POLARSSL_PLATFORM_PRINTF_ALT */
#if defined(POLARSSL_PLATFORM_PRINTF_MACRO)
#define polarssl_printf POLARSSL_PLATFORM_PRINTF_MACRO
#else
#define polarssl_printf printf
#endif /* POLARSSL_PLATFORM_PRINTF_MACRO */
#endif /* POLARSSL_PLATFORM_PRINTF_ALT */
/*
* The function pointers for snprintf
*/
#if defined(POLARSSL_PLATFORM_SNPRINTF_ALT)
extern int (*polarssl_snprintf)( char * s, size_t n, const char * format, ... );
/**
* \brief Set your own snprintf function pointer
*
* \param snprintf_func the snprintf function implementation
*
* \return 0
*/
int platform_set_snprintf( int (*snprintf_func)( char * s, size_t n,
const char * format, ... ) );
#else /* POLARSSL_PLATFORM_SNPRINTF_ALT */
#if defined(POLARSSL_PLATFORM_SNPRINTF_MACRO)
#define polarssl_snprintf POLARSSL_PLATFORM_SNPRINTF_MACRO
#else
#define polarssl_snprintf snprintf
#endif /* POLARSSL_PLATFORM_SNPRINTF_MACRO */
#endif /* POLARSSL_PLATFORM_SNPRINTF_ALT */
/*
* The function pointers for exit
*/
@ -169,7 +193,11 @@ extern void (*polarssl_exit)( int status );
*/
int platform_set_exit( void (*exit_func)( int status ) );
#else
#if defined(POLARSSL_PLATFORM_EXIT_MACRO)
#define polarssl_exit POLARSSL_PLATFORM_EXIT_MACRO
#else
#define polarssl_exit exit
#endif /* POLARSSL_PLATFORM_EXIT_MACRO */
#endif /* POLARSSL_PLATFORM_EXIT_ALT */
#ifdef __cplusplus