| 1 | /**************************************************************************************** |
| 2 | |
| 3 | Copyright (C) 2015 Autodesk, Inc. |
| 4 | All rights reserved. |
| 5 | |
| 6 | Use of this software is subject to the terms of the Autodesk license agreement |
| 7 | provided at the time of installation or download, or which otherwise accompanies |
| 8 | this software in either electronic or hard copy form. |
| 9 | |
| 10 | ****************************************************************************************/ |
| 11 | |
| 12 | /** \file fbxstdcompliant.h |
| 13 | * Macros to properly support the CRT secure functions. */ |
| 14 | #ifndef _FBXSDK_CORE_ARCH_STDCOMPLIANT_H_ |
| 15 | #define _FBXSDK_CORE_ARCH_STDCOMPLIANT_H_ |
| 16 | |
| 17 | #include <fbxsdk/fbxsdk_def.h> |
| 18 | |
| 19 | #include <fbxsdk/fbxsdk_nsbegin.h> |
| 20 | |
| 21 | #if defined(FBXSDK_ENV_WIN) |
| 22 | #define FBXSDK_printf printf_s |
| 23 | #define FBXSDK_fprintf fprintf_s |
| 24 | inline int FBXSDK_sprintf(char* dst, size_t dstsize, const char* format, ...){ va_list vl; va_start(vl, format); int ret = vsprintf_s(dst, dstsize, format, vl); va_end(vl); return ret; } |
| 25 | inline int FBXSDK_snprintf(char* dst, size_t dstsize, const char* format, ...){ va_list vl; va_start(vl, format); int ret = vsnprintf_s(dst, dstsize, _TRUNCATE, format, vl); va_end(vl); return ret; } |
| 26 | inline int FBXSDK_vsprintf(char* dst, size_t dstsize, const char* format, va_list vl){ return vsprintf_s(dst, dstsize, format, vl); } |
| 27 | inline int FBXSDK_vsnprintf(char* dst, size_t dstsize, const char* format, va_list vl){ return vsnprintf_s(dst, dstsize, _TRUNCATE, format, vl); } |
| 28 | #define FBXSDK_stricmp(dst, src) _stricmp(dst, src) |
| 29 | #define FBXSDK_strnicmp(dst, src, count) _strnicmp(dst, src, count) |
| 30 | #define FBXSDK_strcpy(dst, size, src) strcpy_s(dst, size, src) |
| 31 | #define FBXSDK_strncpy(dst, size, src, count) strncpy_s(dst, size, src, count) |
| 32 | #define FBXSDK_strcat(dst, size, src) strcat_s(dst, size, src) |
| 33 | #define FBXSDK_strtok(str, delim, ctx) strtok_s(str, delim, ctx) |
| 34 | #define FBXSDK_wcscpy(dst, size, src) wcscpy_s(dst, size, src) |
| 35 | #define FBXSDK_wcscat(dst, size, src) wcscat_s(dst, size, src) |
| 36 | #if !defined(FBXSDK_ENV_WINSTORE) |
| 37 | #define FBXSDK_getpid _getpid |
| 38 | #define FBXSDK_getcwd _getcwd |
| 39 | #else |
| 40 | inline int FBXSDK_getpid(){ return 0; } |
| 41 | inline char* FBXSDK_getcwd(char*,int){ return NULL; } |
| 42 | #endif |
| 43 | #define FBXSDK_localtime(ptm, time) { struct tm tms; ptm = &tms; localtime_s(ptm, time); } |
| 44 | #define FBXSDK_gmtime(ptm, time) { struct tm tms; ptm = &tms; gmtime_s(ptm, time); } |
| 45 | #define FBXSDK_fopen(fp, name, mode) fopen_s(&fp, name, mode) |
| 46 | |
| 47 | #elif defined(FBXSDK_ENV_MAC) || defined(FBXSDK_ENV_LINUX) |
| 48 | #define FBXSDK_printf printf |
| 49 | #define FBXSDK_fprintf fprintf |
| 50 | inline int FBXSDK_sprintf(char* dst, size_t dstsize, const char* format, ...){ va_list vl; va_start(vl, format); int ret = vsprintf(dst, format, vl); va_end(vl); return ret; } |
| 51 | inline int FBXSDK_snprintf(char* dst, size_t dstsize, const char* format, ...){ va_list vl; va_start(vl, format); int ret = vsnprintf(dst, dstsize, format, vl); va_end(vl); return ret; } |
| 52 | inline int FBXSDK_vsprintf(char* dst, size_t dstsize, const char* format, va_list vl){ return vsprintf(dst, format, vl); } |
| 53 | inline int FBXSDK_vsnprintf(char* dst, size_t dstsize, const char* format, va_list vl){ return vsnprintf(dst, dstsize, format, vl); } |
| 54 | #define FBXSDK_stricmp(dst, src) stricmp(dst, src) |
| 55 | #define FBXSDK_strnicmp(dst, src, count) strnicmp(dst, src, count) |
| 56 | #define FBXSDK_strcpy(dst, size, src) strcpy(dst, src) |
| 57 | #define FBXSDK_strncpy(dst, size, src, count) strncpy(dst, src, count) |
| 58 | #define FBXSDK_strcat(dst, size, src) strcat(dst, src) |
| 59 | #define FBXSDK_strtok(str, delim, ctx) strtok(str, delim) |
| 60 | #define FBXSDK_wcscpy(dst, size, src) wcscpy(dst, src) |
| 61 | #define FBXSDK_wcscat(dst, size, src) wcscat_s(dst, src) |
| 62 | #define FBXSDK_getpid getpid |
| 63 | #define FBXSDK_getcwd getcwd |
| 64 | #define FBXSDK_localtime(tm, time) tm=localtime(time) |
| 65 | #define FBXSDK_gmtime(tm, time) tm=gmtime(time) |
| 66 | #define FBXSDK_fopen(fp, name, mode) fp=fopen(name, mode) |
| 67 | |
| 68 | #else |
| 69 | #error Unsupported platform! |
| 70 | #endif |
| 71 | |
| 72 | #define FBXSDK_strdup FbxStrDup |
| 73 | |
| 74 | //The scanf family functions cannot easily be used in both secure and non-secure versions because |
| 75 | //Microsoft's secure version expects the size of the string/char* arguments following their address. |
| 76 | //On Unix machines the scanf family functions do not have this behavior and trying to use the same |
| 77 | //calls would result in compiler errors because the arguments would not match the format string. |
| 78 | //Using the following macros in the code will simply desable the warning at compile time. |
| 79 | #if defined(FBXSDK_COMPILER_MSC) && (_MSC_VER >= 1300) |
| 80 | #define FBXSDK_CRT_SECURE_NO_WARNING_BEGIN\ |
| 81 | {\ |
| 82 | __pragma(warning(push))\ |
| 83 | __pragma(warning(disable : 4996))\ |
| 84 | } |
| 85 | |
| 86 | #define FBXSDK_CRT_SECURE_NO_WARNING_END\ |
| 87 | {\ |
| 88 | __pragma(warning(pop))\ |
| 89 | } |
| 90 | #else |
| 91 | #define FBXSDK_CRT_SECURE_NO_WARNING_BEGIN |
| 92 | #define FBXSDK_CRT_SECURE_NO_WARNING_END |
| 93 | #endif |
| 94 | |
| 95 | #include <fbxsdk/fbxsdk_nsend.h> |
| 96 | |
| 97 | #endif /* _FBXSDK_CORE_ARCH_STDCOMPLIANT_H_ */ |
| 98 | |