1/* 2 * Error message information 3 * 4 * Copyright The Mbed TLS Contributors 5 * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 6 * 7 * This file is provided under the Apache License 2.0, or the 8 * GNU General Public License v2.0 or later. 9 * 10 * ********** 11 * Apache License 2.0: 12 * 13 * Licensed under the Apache License, Version 2.0 (the "License"); you may 14 * not use this file except in compliance with the License. 15 * You may obtain a copy of the License at 16 * 17 * http://www.apache.org/licenses/LICENSE-2.0 18 * 19 * Unless required by applicable law or agreed to in writing, software 20 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 21 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 22 * See the License for the specific language governing permissions and 23 * limitations under the License. 24 * 25 * ********** 26 * 27 * ********** 28 * GNU General Public License v2.0 or later: 29 * 30 * This program is free software; you can redistribute it and/or modify 31 * it under the terms of the GNU General Public License as published by 32 * the Free Software Foundation; either version 2 of the License, or 33 * (at your option) any later version. 34 * 35 * This program is distributed in the hope that it will be useful, 36 * but WITHOUT ANY WARRANTY; without even the implied warranty of 37 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 38 * GNU General Public License for more details. 39 * 40 * You should have received a copy of the GNU General Public License along 41 * with this program; if not, write to the Free Software Foundation, Inc., 42 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 43 * 44 * ********** 45 */ 46 47#if !defined(MBEDTLS_CONFIG_FILE) 48#include "mbedtls/config.h" 49#else 50#include MBEDTLS_CONFIG_FILE 51#endif 52 53#if defined(MBEDTLS_ERROR_C) || defined(MBEDTLS_ERROR_STRERROR_DUMMY) 54 55#include "mbedtls/error.h" 56 57#if defined(MBEDTLS_ERROR_C) 58 59#if defined(MBEDTLS_PLATFORM_C) 60#include "mbedtls/platform.h" 61#else 62#define mbedtls_snprintf snprintf 63#endif 64 65#include <stdio.h> 66#include <string.h> 67 68HEADER_INCLUDED 69 70void mbedtls_strerror( int ret, char *buf, size_t buflen ) 71{ 72 size_t len; 73 int use_ret; 74 75 if( buflen == 0 ) 76 return; 77 78 memset( buf, 0x00, buflen ); 79 80 if( ret < 0 ) 81 ret = -ret; 82 83 if( ret & 0xFF80 ) 84 { 85 use_ret = ret & 0xFF80; 86 87 // High level error codes 88 // 89 // BEGIN generated code 90HIGH_LEVEL_CODE_CHECKS 91 // END generated code 92 93 if( strlen( buf ) == 0 ) 94 mbedtls_snprintf( buf, buflen, "UNKNOWN ERROR CODE (%04X)", use_ret ); 95 } 96 97 use_ret = ret & ~0xFF80; 98 99 if( use_ret == 0 ) 100 return; 101 102 // If high level code is present, make a concatenation between both 103 // error strings. 104 // 105 len = strlen( buf ); 106 107 if( len > 0 ) 108 { 109 if( buflen - len < 5 ) 110 return; 111 112 mbedtls_snprintf( buf + len, buflen - len, " : " ); 113 114 buf += len + 3; 115 buflen -= len + 3; 116 } 117 118 // Low level error codes 119 // 120 // BEGIN generated code 121LOW_LEVEL_CODE_CHECKS 122 // END generated code 123 124 if( strlen( buf ) != 0 ) 125 return; 126 127 mbedtls_snprintf( buf, buflen, "UNKNOWN ERROR CODE (%04X)", use_ret ); 128} 129 130#else /* MBEDTLS_ERROR_C */ 131 132/* 133 * Provide an non-function in case MBEDTLS_ERROR_C is not defined 134 */ 135void mbedtls_strerror( int ret, char *buf, size_t buflen ) 136{ 137 ((void) ret); 138 139 if( buflen > 0 ) 140 buf[0] = '\0'; 141} 142 143#endif /* MBEDTLS_ERROR_C */ 144 145#endif /* MBEDTLS_ERROR_C || MBEDTLS_ERROR_STRERROR_DUMMY */ 146