1a8e1175bSopenharmony_ci/* 2a8e1175bSopenharmony_ci * Translate error code to error string 3a8e1175bSopenharmony_ci * 4a8e1175bSopenharmony_ci * Copyright The Mbed TLS Contributors 5a8e1175bSopenharmony_ci * SPDX-License-Identifier: Apache-2.0 6a8e1175bSopenharmony_ci * 7a8e1175bSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); you may 8a8e1175bSopenharmony_ci * not use this file except in compliance with the License. 9a8e1175bSopenharmony_ci * You may obtain a copy of the License at 10a8e1175bSopenharmony_ci * 11a8e1175bSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 12a8e1175bSopenharmony_ci * 13a8e1175bSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 14a8e1175bSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 15a8e1175bSopenharmony_ci * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16a8e1175bSopenharmony_ci * See the License for the specific language governing permissions and 17a8e1175bSopenharmony_ci * limitations under the License. 18a8e1175bSopenharmony_ci */ 19a8e1175bSopenharmony_ci 20a8e1175bSopenharmony_ci#include "mbedtls/build_info.h" 21a8e1175bSopenharmony_ci 22a8e1175bSopenharmony_ci#include "mbedtls/platform.h" 23a8e1175bSopenharmony_ci 24a8e1175bSopenharmony_ci#if defined(MBEDTLS_ERROR_C) || defined(MBEDTLS_ERROR_STRERROR_DUMMY) 25a8e1175bSopenharmony_ci#include "mbedtls/error.h" 26a8e1175bSopenharmony_ci 27a8e1175bSopenharmony_ci#include <stdio.h> 28a8e1175bSopenharmony_ci#include <stdlib.h> 29a8e1175bSopenharmony_ci#include <string.h> 30a8e1175bSopenharmony_ci#endif 31a8e1175bSopenharmony_ci 32a8e1175bSopenharmony_ci#define USAGE \ 33a8e1175bSopenharmony_ci "\n usage: strerror <errorcode>\n" \ 34a8e1175bSopenharmony_ci "\n where <errorcode> can be a decimal or hexadecimal (starts with 0x or -0x)\n" 35a8e1175bSopenharmony_ci 36a8e1175bSopenharmony_ci#if !defined(MBEDTLS_ERROR_C) && !defined(MBEDTLS_ERROR_STRERROR_DUMMY) 37a8e1175bSopenharmony_ciint main(void) 38a8e1175bSopenharmony_ci{ 39a8e1175bSopenharmony_ci mbedtls_printf("MBEDTLS_ERROR_C and/or MBEDTLS_ERROR_STRERROR_DUMMY not defined.\n"); 40a8e1175bSopenharmony_ci mbedtls_exit(0); 41a8e1175bSopenharmony_ci} 42a8e1175bSopenharmony_ci#else 43a8e1175bSopenharmony_ciint main(int argc, char *argv[]) 44a8e1175bSopenharmony_ci{ 45a8e1175bSopenharmony_ci long int val; 46a8e1175bSopenharmony_ci char *end = argv[1]; 47a8e1175bSopenharmony_ci 48a8e1175bSopenharmony_ci if (argc != 2) { 49a8e1175bSopenharmony_ci mbedtls_printf(USAGE); 50a8e1175bSopenharmony_ci mbedtls_exit(0); 51a8e1175bSopenharmony_ci } 52a8e1175bSopenharmony_ci 53a8e1175bSopenharmony_ci val = strtol(argv[1], &end, 10); 54a8e1175bSopenharmony_ci if (*end != '\0') { 55a8e1175bSopenharmony_ci val = strtol(argv[1], &end, 16); 56a8e1175bSopenharmony_ci if (*end != '\0') { 57a8e1175bSopenharmony_ci mbedtls_printf(USAGE); 58a8e1175bSopenharmony_ci return 0; 59a8e1175bSopenharmony_ci } 60a8e1175bSopenharmony_ci } 61a8e1175bSopenharmony_ci if (val > 0) { 62a8e1175bSopenharmony_ci val = -val; 63a8e1175bSopenharmony_ci } 64a8e1175bSopenharmony_ci 65a8e1175bSopenharmony_ci if (val != 0) { 66a8e1175bSopenharmony_ci char error_buf[200]; 67a8e1175bSopenharmony_ci mbedtls_strerror(val, error_buf, 200); 68a8e1175bSopenharmony_ci mbedtls_printf("Last error was: -0x%04x - %s\n\n", (unsigned int) -val, error_buf); 69a8e1175bSopenharmony_ci } 70a8e1175bSopenharmony_ci 71a8e1175bSopenharmony_ci mbedtls_exit(val); 72a8e1175bSopenharmony_ci} 73a8e1175bSopenharmony_ci#endif /* MBEDTLS_ERROR_C */ 74