/*
 * Generated by util/mkerr.pl DO NOT EDIT
 * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
 *
 * Licensed under the OpenSSL license (the "License").  You may not use
 * this file except in compliance with the License.  You can obtain a copy
 * in the file LICENSE in the source distribution or at
 * https://www.openssl.org/source/license.html
 */

#include <stdio.h>
#include <openssl/err.h>
#include <openssl/ui.h>

/* BEGIN ERROR CODES */
#ifndef OPENSSL_NO_ERR

# define ERR_FUNC(func) ERR_PACK(ERR_LIB_UI,func,0)
# define ERR_REASON(reason) ERR_PACK(ERR_LIB_UI,0,reason)

static ERR_STRING_DATA UI_str_functs[] = {
    {ERR_FUNC(UI_F_CLOSE_CONSOLE), "close_console"},
    {ERR_FUNC(UI_F_ECHO_CONSOLE), "echo_console"},
    {ERR_FUNC(UI_F_GENERAL_ALLOCATE_BOOLEAN), "general_allocate_boolean"},
    {ERR_FUNC(UI_F_GENERAL_ALLOCATE_PROMPT), "general_allocate_prompt"},
    {ERR_FUNC(UI_F_NOECHO_CONSOLE), "noecho_console"},
    {ERR_FUNC(UI_F_OPEN_CONSOLE), "open_console"},
    {ERR_FUNC(UI_F_UI_CREATE_METHOD), "UI_create_method"},
    {ERR_FUNC(UI_F_UI_CTRL), "UI_ctrl"},
    {ERR_FUNC(UI_F_UI_DUP_ERROR_STRING), "UI_dup_error_string"},
    {ERR_FUNC(UI_F_UI_DUP_INFO_STRING), "UI_dup_info_string"},
    {ERR_FUNC(UI_F_UI_DUP_INPUT_BOOLEAN), "UI_dup_input_boolean"},
    {ERR_FUNC(UI_F_UI_DUP_INPUT_STRING), "UI_dup_input_string"},
    {ERR_FUNC(UI_F_UI_DUP_VERIFY_STRING), "UI_dup_verify_string"},
    {ERR_FUNC(UI_F_UI_GET0_RESULT), "UI_get0_result"},
    {ERR_FUNC(UI_F_UI_NEW_METHOD), "UI_new_method"},
    {ERR_FUNC(UI_F_UI_PROCESS), "UI_process"},
    {ERR_FUNC(UI_F_UI_SET_RESULT), "UI_set_result"},
    {0, NULL}
};

static ERR_STRING_DATA UI_str_reasons[] = {
    {ERR_REASON(UI_R_COMMON_OK_AND_CANCEL_CHARACTERS),
     "common ok and cancel characters"},
    {ERR_REASON(UI_R_INDEX_TOO_LARGE), "index too large"},
    {ERR_REASON(UI_R_INDEX_TOO_SMALL), "index too small"},
    {ERR_REASON(UI_R_NO_RESULT_BUFFER), "no result buffer"},
    {ERR_REASON(UI_R_PROCESSING_ERROR), "processing error"},
    {ERR_REASON(UI_R_RESULT_TOO_LARGE), "result too large"},
    {ERR_REASON(UI_R_RESULT_TOO_SMALL), "result too small"},
    {ERR_REASON(UI_R_SYSASSIGN_ERROR), "sys$assign error"},
    {ERR_REASON(UI_R_SYSDASSGN_ERROR), "sys$dassgn error"},
    {ERR_REASON(UI_R_SYSQIOW_ERROR), "sys$qiow error"},
    {ERR_REASON(UI_R_UNKNOWN_CONTROL_COMMAND), "unknown control command"},
    {ERR_REASON(UI_R_UNKNOWN_TTYGET_ERRNO_VALUE),
     "unknown ttyget errno value"},
    {0, NULL}
};

#endif

int ERR_load_UI_strings(void)
{
#ifndef OPENSSL_NO_ERR

    if (ERR_func_error_string(UI_str_functs[0].error) == NULL) {
        ERR_load_strings(0, UI_str_functs);
        ERR_load_strings(0, UI_str_reasons);
    }
#endif
    return 1;
}
