1 #ifndef _SAFE_STRINGS_H_INCLUDED_
2 #define _SAFE_STRINGS_H_INCLUDED_
29 #if ( !defined( _MSC_VER ) && !defined(NO_SAFE_STRINGS) ) || defined( _MSC_VER ) && _MSC_VER >= 1400 && !defined(NO_SAFE_STRINGS)
37 #ifndef SAFESTRINGS_TEST_APP
39 # ifndef __safe_strings_error_handler
40 # define __safe_strings_error_handler( val ) Error(file, line,"%s: String error. Please Report.\nTrying to put into " SIZE_T_ARG " byte buffer:\n%s", #val, sizeInBytes,strSource)
46 # define __safe_strings_error_handler( errnoVal ) extern void error_handler( int errnoValue, const char* errnoStr, const char* file, const char* function, int line );\
47 error_handler( errnoVal, #errnoVal, __FILE__, __FUNCTION__, __LINE__ );
50 extern errno_t scp_strcpy_s(
const char* file,
int line,
char* strDest,
size_t sizeInBytes,
const char* strSource );
51 extern errno_t scp_strcat_s(
const char* file,
int line,
char* strDest,
size_t sizeInBytes,
const char* strSource );
53 template<
size_t size>
57 return scp_strcpy_s( file, line, strDest, size, strSource );
60 template<
size_t size >
64 return scp_strcat_s( file, line, strDest, size, strSource );
67 #define strcpy_s( ... ) scp_strcpy_s( __FILE__, __LINE__, __VA_ARGS__ )
68 #define strcat_s( ... ) scp_strcat_s( __FILE__, __LINE__, __VA_ARGS__ )
70 #elif defined(_MSC_VER) && _MSC_VER < 1400 || defined(NO_SAFE_STRINGS)
72 #pragma message("safe_strings disabled - this is not good!")
74 inline errno_t strcpy_s(
char* strDest,
size_t sizeInBytes,
const char* strSource )
76 strcpy( strDest, strSource );
80 inline errno_t strcat_s(
char* strDest,
size_t sizeInBytes,
const char* strSource )
82 strcat( strDest, strSource );
88 strcpy( strDest, strSource );
94 strcat( strDest, strSource );
100 #endif // _SAFE_STRINGS_H_INCLUDED_
errno_t scp_strcat_s(const char *file, int line, char *strDest, size_t sizeInBytes, const char *strSource)
errno_t scp_strcpy_s(const char *file, int line, char *strDest, size_t sizeInBytes, const char *strSource)