#ifndef KMP_SAFE_C_API_H
#define KMP_SAFE_C_API_H
#include <type_traits>
#include "kmp_platform.h"
#include <string.h>
#if KMP_OS_WINDOWS && KMP_MSVC_COMPAT
#define RSIZE_MAX_STR …
#define KMP_ALLOCA …
#define KMP_MEMCPY_S …
#define KMP_SNPRINTF …
#define KMP_SSCANF …
#define KMP_STRCPY_S …
#define KMP_STRNCPY_S …
#define KMP_STRNCAT_S …
#define KMP_MEMCPY …
template <typename T, bool B = std::is_array<T>::value>
struct kmp_get_rmax_t {};
template <typename T> struct kmp_get_rmax_t<T, false> {
static const size_t value = RSIZE_MAX_STR;
};
template <typename T> struct kmp_get_rmax_t<T, true> {
static const size_t value = sizeof(T);
};
#define KMP_STRLEN …
#define KMP_STRNCPY …
#define KMP_VSNPRINTF …
#else
#if KMP_OS_NETBSD
#define KMP_ALLOCA …
#else
#define KMP_ALLOCA …
#endif
#define KMP_MEMCPY_S(dst, bsz, src, cnt) …
#define KMP_SNPRINTF …
#define KMP_SSCANF …
#define KMP_STRCPY_S(dst, bsz, src) …
#define KMP_STRNCPY_S(dst, bsz, src, cnt) …
#define KMP_STRNCAT_S(dst, bsz, src, cnt) …
#define KMP_VSNPRINTF …
#define KMP_STRNCPY …
#define KMP_STRLEN …
#define KMP_MEMCPY …
#endif
static inline void __kmp_strncpy_truncate(char *buffer, size_t buf_size,
char const *src, size_t src_size) { … }
#endif