1/*
2 * SPDX-FileCopyrightText: 2018-2022 Espressif Systems (Shanghai) CO LTD
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7@COMMENT@
8
9#include <string.h>
10#if __has_include(<bsd/string.h>)
11// for strlcpy
12#include <bsd/string.h>
13#endif
14#include "esp_err.h"
15#if __has_include("soc/soc.h")
16#include "soc/soc.h"
17#endif
18@HEADERS@
19
20#ifdef CONFIG_ESP_ERR_TO_NAME_LOOKUP
21#define ERR_TBL_IT(err)    {err, #err}
22
23typedef struct {
24    esp_err_t code;
25    const char *msg;
26} esp_err_msg_t;
27
28static const esp_err_msg_t esp_err_msg_table[] = {
29@ERROR_ITEMS@
30};
31#endif //CONFIG_ESP_ERR_TO_NAME_LOOKUP
32
33static const char esp_unknown_msg[] =
34#ifdef CONFIG_ESP_ERR_TO_NAME_LOOKUP
35    "ERROR";
36#else
37    "UNKNOWN ERROR";
38#endif //CONFIG_ESP_ERR_TO_NAME_LOOKUP
39
40const char *esp_err_to_name(esp_err_t code)
41{
42#ifdef CONFIG_ESP_ERR_TO_NAME_LOOKUP
43    size_t i;
44
45    for (i = 0; i < sizeof(esp_err_msg_table)/sizeof(esp_err_msg_table[0]); ++i) {
46        if (esp_err_msg_table[i].code == code) {
47            return esp_err_msg_table[i].msg;
48        }
49    }
50#endif //CONFIG_ESP_ERR_TO_NAME_LOOKUP
51
52    return esp_unknown_msg;
53}
54
55const char *esp_err_to_name_r(esp_err_t code, char *buf, size_t buflen)
56{
57#ifdef CONFIG_ESP_ERR_TO_NAME_LOOKUP
58    size_t i;
59
60    for (i = 0; i < sizeof(esp_err_msg_table)/sizeof(esp_err_msg_table[0]); ++i) {
61        if (esp_err_msg_table[i].code == code) {
62            strlcpy(buf, esp_err_msg_table[i].msg, buflen);
63            return buf;
64        }
65    }
66#endif //CONFIG_ESP_ERR_TO_NAME_LOOKUP
67
68    if (strerror_r(code, buf, buflen) == 0) {
69        return buf;
70    }
71
72    snprintf(buf, buflen, "%s 0x%x(%d)", esp_unknown_msg, code, code);
73
74    return buf;
75}
76