/*
 * Copyright 2019 The OpenSSL Project Authors. All Rights Reserved.
 *
 * Licensed under the Apache License 2.0 (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
 */

#ifndef OSSL_INTERNAL_SYMHACKS_H
# define OSSL_INTERNAL_SYMHACKS_H

# include <openssl/e_os2.h>

# if defined(OPENSSL_SYS_VMS)

/* ossl_provider_available vs OSSL_PROVIDER_available */
#  undef ossl_provider_available
#  define ossl_provider_available                 ossl_int_prov_available
/* ossl_provider_gettable_params vs OSSL_PROVIDER_gettable_params */
#  undef ossl_provider_gettable_params
#  define ossl_provider_gettable_params            ossl_int_prov_gettable_params
/* ossl_provider_get_params vs OSSL_PROVIDER_get_params */
#  undef ossl_provider_get_params
#  define ossl_provider_get_params                ossl_int_prov_get_params

# endif

#endif                          /* ! defined HEADER_VMS_IDHACKS_H */
