Я пытаюсь реализовать обработку ошибок для OpenSSL, чтобы генерировать ошибку в OpenSSL Я посмотрел функцию ERR_put_error, которая помещает ошибку, указанную в аргументах, в очередь ошибок потока. Эта функция имеет определение:
void ERR_put_error(int lib, int func, int reason, const char *file, int line);
Как видите, он принимает func в качестве целочисленного аргумента. Но мы называем эту функцию как:
ERR_put_error(ERR_LIB_SSL,
SSL_F_SSL3_GET_RECORD,
SSL_R_APPLICATION_DATA_AFTER_CLOSE_NOTIFY,
OPENSSL_FILE,
OPENSSL_LINE);
SSL_R_APPLICATION_DATA_AFTER_CLOSE_NOTIFY определяется в коде openssl по адресу include / openssl / sslerr.h и выглядит так:
#define SSL_R_APPLICATION_DATA_AFTER_CLOSE_NOTIFY 291
Это потому, что SSL_R_APPLICATION_DATA_AFTER_CLOSE_NOTIFY - это макрос, который соответствует целому числу. Я создал массив символов, содержащий имена всех ошибок. Теперь, когда я даю входные данные в виде строки (передавая целочисленный ввод в массив ошибок и получая имя), имя которого совпадает с именем SSL_R_APPLICATION_DATA_AFTER_CLOSE_NOTIFY.
Когда я передаю его этой функции, он выдает ошибку, поскольку ожидает целое число, но аргумент имеет тип char *. Итак, мой вопрос, почему эта строка не расширяется до целого числа? Кроме того, как я могу реализовать это, принимая входные данные в виде строки?