diff --git a/include/polarssl/check_config.h b/include/polarssl/check_config.h index eb2fecd8d..818aef3fe 100644 --- a/include/polarssl/check_config.h +++ b/include/polarssl/check_config.h @@ -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 diff --git a/include/polarssl/config.h b/include/polarssl/config.h index 6f134401e..742550852 100644 --- a/include/polarssl/config.h +++ b/include/polarssl/config.h @@ -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 */ diff --git a/include/polarssl/platform.h b/include/polarssl/platform.h index 171503005..dd7e55808 100644 --- a/include/polarssl/platform.h +++ b/include/polarssl/platform.h @@ -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