blob: b381e1bd0c944f505265d00baab35553779e69b4 [file] [log] [blame]
Paul Bakker747a83a2014-02-01 22:50:07 +01001/**
2 * \file platform.h
3 *
4 * \brief PolarSSL Platform abstraction layer
5 *
6 * Copyright (C) 2006-2014, Brainspark B.V.
7 *
Manuel Pégourié-Gonnard967a2a52015-01-22 14:28:16 +00008 * This file is part of mbed TLS (http://www.polarssl.org)
Paul Bakker747a83a2014-02-01 22:50:07 +01009 * Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org>
10 *
11 * All rights reserved.
12 *
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 2 of the License, or
16 * (at your option) any later version.
17 *
18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
22 *
23 * You should have received a copy of the GNU General Public License along
24 * with this program; if not, write to the Free Software Foundation, Inc.,
25 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
26 */
27#ifndef POLARSSL_PLATFORM_H
28#define POLARSSL_PLATFORM_H
29
Manuel Pégourié-Gonnardcef4ad22014-04-29 12:39:06 +020030#if !defined(POLARSSL_CONFIG_FILE)
Paul Bakker747a83a2014-02-01 22:50:07 +010031#include "config.h"
Manuel Pégourié-Gonnardcef4ad22014-04-29 12:39:06 +020032#else
33#include POLARSSL_CONFIG_FILE
34#endif
Paul Bakker747a83a2014-02-01 22:50:07 +010035
Paul Bakker747a83a2014-02-01 22:50:07 +010036#include <stdio.h>
37
38#ifdef __cplusplus
39extern "C" {
40#endif
41
Paul Bakker088c5c52014-04-25 11:11:10 +020042/**
43 * \name SECTION: Module settings
44 *
45 * The configuration options you can set for this module are in this section.
46 * Either change them in config.h or define them on the compiler command line.
47 * \{
48 */
49
50#if !defined(POLARSSL_PLATFORM_NO_STD_FUNCTIONS)
Paul Bakkera9066cf2014-02-05 15:13:04 +010051#include <stdlib.h>
Paul Bakker088c5c52014-04-25 11:11:10 +020052#if !defined(POLARSSL_PLATFORM_STD_PRINTF)
Paul Bakker747a83a2014-02-01 22:50:07 +010053#define POLARSSL_PLATFORM_STD_PRINTF printf /**< Default printf to use */
Paul Bakker088c5c52014-04-25 11:11:10 +020054#endif
55#if !defined(POLARSSL_PLATFORM_STD_FPRINTF)
Paul Bakker747a83a2014-02-01 22:50:07 +010056#define POLARSSL_PLATFORM_STD_FPRINTF fprintf /**< Default fprintf to use */
Paul Bakker088c5c52014-04-25 11:11:10 +020057#endif
58#if !defined(POLARSSL_PLATFORM_STD_MALLOC)
Paul Bakkerdefc0ca2014-02-04 17:30:24 +010059#define POLARSSL_PLATFORM_STD_MALLOC malloc /**< Default allocator to use */
Paul Bakker088c5c52014-04-25 11:11:10 +020060#endif
61#if !defined(POLARSSL_PLATFORM_STD_FREE)
Paul Bakkerdefc0ca2014-02-04 17:30:24 +010062#define POLARSSL_PLATFORM_STD_FREE free /**< Default free to use */
Paul Bakker088c5c52014-04-25 11:11:10 +020063#endif
64#else /* POLARSSL_PLATFORM_NO_STD_FUNCTIONS */
Manuel Pégourié-Gonnardeb82a742014-04-02 13:43:48 +020065#if defined(POLARSSL_PLATFORM_STD_MEM_HDR)
66#include POLARSSL_PLATFORM_STD_MEM_HDR
67#endif
Paul Bakker088c5c52014-04-25 11:11:10 +020068#endif /* POLARSSL_PLATFORM_NO_STD_FUNCTIONS */
69
70/* \} name SECTION: Module settings */
Paul Bakker747a83a2014-02-01 22:50:07 +010071
72/*
73 * The function pointers for malloc and free
74 */
Paul Bakkera9066cf2014-02-05 15:13:04 +010075#if defined(POLARSSL_PLATFORM_MEMORY)
Paul Bakkerdefc0ca2014-02-04 17:30:24 +010076extern void * (*polarssl_malloc)( size_t len );
77extern void (*polarssl_free)( void *ptr );
78
79/**
80 * \brief Set your own memory implementation function pointers
81 *
82 * \param malloc_func the malloc function implementation
83 * \param free_func the free function implementation
84 *
85 * \return 0 if successful
86 */
87int platform_set_malloc_free( void * (*malloc_func)( size_t ),
88 void (*free_func)( void * ) );
Paul Bakker9af723c2014-05-01 13:03:14 +020089#else /* POLARSSL_PLATFORM_ENTROPY */
Paul Bakker747a83a2014-02-01 22:50:07 +010090#define polarssl_malloc malloc
91#define polarssl_free free
Paul Bakker9af723c2014-05-01 13:03:14 +020092#endif /* POLARSSL_PLATFORM_ENTROPY */
Paul Bakker747a83a2014-02-01 22:50:07 +010093
94/*
95 * The function pointers for printf
96 */
97#if defined(POLARSSL_PLATFORM_PRINTF_ALT)
98extern int (*polarssl_printf)( const char *format, ... );
99
100/**
101 * \brief Set your own printf function pointer
102 *
103 * \param printf_func the printf function implementation
104 *
105 * \return 0
106 */
107int platform_set_printf( int (*printf_func)( const char *, ... ) );
Paul Bakker9af723c2014-05-01 13:03:14 +0200108#else /* POLARSSL_PLATFORM_PRINTF_ALT */
Paul Bakker747a83a2014-02-01 22:50:07 +0100109#define polarssl_printf printf
Paul Bakker9af723c2014-05-01 13:03:14 +0200110#endif /* POLARSSL_PLATFORM_PRINTF_ALT */
Paul Bakker747a83a2014-02-01 22:50:07 +0100111
112/*
113 * The function pointers for fprintf
114 */
115#if defined(POLARSSL_PLATFORM_FPRINTF_ALT)
116extern int (*polarssl_fprintf)( FILE *stream, const char *format, ... );
117
118int platform_set_fprintf( int (*fprintf_func)( FILE *stream, const char *,
119 ... ) );
120#else
121#define polarssl_fprintf fprintf
122#endif
123
124#ifdef __cplusplus
125}
126#endif
127
128#endif /* platform.h */