/*
 * 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
 */

/*
 * NOTE: this file was auto generated by the mkerr.pl script: any changes
 * made to it will be overwritten when the script next updates this file,
 * only reason strings will be preserved.
 */

#ifndef HEADER_OSSLTEST_ERR_H
# define HEADER_OSSLTEST_ERR_H

#ifdef  __cplusplus
extern "C" {
#endif

/* BEGIN ERROR CODES */
static void ERR_load_OSSLTEST_strings(void);
static void ERR_unload_OSSLTEST_strings(void);
static void ERR_OSSLTEST_error(int function, int reason, char *file, int line);
# define OSSLTESTerr(f,r) ERR_OSSLTEST_error((f),(r),OPENSSL_FILE,OPENSSL_LINE)

/* Error codes for the OSSLTEST functions. */

/* Function codes. */
# define OSSLTEST_F_BIND_OSSLTEST                         100
# define OSSLTEST_F_OSSLTEST_AES128_INIT_KEY              101

/* Reason codes. */
# define OSSLTEST_R_INIT_FAILED                           100

#ifdef  __cplusplus
}
#endif
#endif
