/*
 * 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/buffer.h>

/* BEGIN ERROR CODES */
#ifndef OPENSSL_NO_ERR

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

static ERR_STRING_DATA BUF_str_functs[] = {
    {ERR_FUNC(BUF_F_BUF_MEM_GROW), "BUF_MEM_grow"},
    {ERR_FUNC(BUF_F_BUF_MEM_GROW_CLEAN), "BUF_MEM_grow_clean"},
    {ERR_FUNC(BUF_F_BUF_MEM_NEW), "BUF_MEM_new"},
    {0, NULL}
};

static ERR_STRING_DATA BUF_str_reasons[] = {
    {0, NULL}
};

#endif

int ERR_load_BUF_strings(void)
{
#ifndef OPENSSL_NO_ERR

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