@@ -89,6 +89,25 @@ extern int mock_strerror_s(char *buffer, size_t sizeInBytes, int errnum);
8989/** @brief Mock macro for strerror_s */
9090#define strerror_s mock_strerror_s
9191#endif
92+ #if defined(C89STRINGUTILS_HAVE_STRERROR_R )
93+ #if defined(C89STRINGUTILS_STRERROR_R_CHAR_P )
94+ /** @brief External mock for strerror_r (GNU)
95+ * @param errnum error number
96+ * @param buf buffer
97+ * @param buflen size
98+ */
99+ extern char * mock_strerror_r (int errnum , char * buf , size_t buflen );
100+ #else
101+ /** @brief External mock for strerror_r (POSIX)
102+ * @param errnum error number
103+ * @param buf buffer
104+ * @param buflen size
105+ */
106+ extern int mock_strerror_r (int errnum , char * buf , size_t buflen );
107+ #endif
108+ /** @brief Mock macro for strerror_r */
109+ #define strerror_r mock_strerror_r
110+ #endif
92111#if defined(C89STRINGUTILS_HAVE_VFPRINTF_S )
93112/** @brief External mock for vfprintf_s
94113 * @param stream stream
@@ -109,6 +128,16 @@ extern int mock_fprintf_s(FILE *stream, const char *format, ...);
109128/** @brief Mock macro for fprintf_s */
110129#define fprintf_s mock_fprintf_s
111130#endif
131+ #if defined(C89STRINGUTILS_HAVE_REALLOCARRAY )
132+ /** @brief External mock for reallocarray
133+ * @param ptr pointer
134+ * @param nmemb number of members
135+ * @param size size
136+ */
137+ extern void * mock_reallocarray (void * ptr , size_t nmemb , size_t size );
138+ /** @brief Mock macro for reallocarray */
139+ #define reallocarray mock_reallocarray
140+ #endif
112141/** @brief Mock macro for malloc */
113142#define malloc mock_malloc
114143/** @brief Mock macro for realloc */
@@ -137,7 +166,11 @@ extern int mock_fprintf_s(FILE *stream, const char *format, ...);
137166#pragma warning(disable : 4100) /* unreferenced formal parameter */
138167#elif defined(__clang__ )
139168#pragma clang diagnostic push
169+ #if defined(__has_warning )
170+ #if __has_warning ("- Wnonnull - compare ")
140171#pragma clang diagnostic ignored "-Wnonnull-compare"
172+ #endif
173+ #endif
141174#pragma clang diagnostic ignored "-Wunused-parameter"
142175#elif defined(__GNUC__ ) && __GNUC__ >= 7
143176#pragma GCC diagnostic push
@@ -222,7 +255,7 @@ C89STRINGUTILS_EXPORT void c89stringutils_log_debug(const char *fmt, ...) {
222255 disable : 4244 4702) /* conversion from int to char, unreachable code */
223256#endif
224257#include "stb_sprintf.h"
225- #if defined(C89STRINGUTILS_HAVE_PRAGMA_WARNING )
258+ #if defined(_MSC_VER ) && _MSC_VER >= 1300
226259#pragma warning(pop)
227260#endif
228261#define C89STRINGUTILS_USE_STB_SPRINTF 1
@@ -308,6 +341,9 @@ C89STRINGUTILS_EXPORT errno_t c89stringutils_strerror_s(char *s,
308341 {
309342 char * res = strerror_r (errnum , s , maxsize );
310343 if (res != s ) {
344+ if (res == NULL ) {
345+ return 22 ; /* EINVAL */
346+ }
311347#if defined(C89STRINGUTILS_HAVE_STRNCPY_S )
312348 strncpy_s (s , maxsize , res , maxsize - 1 );
313349#else
@@ -318,7 +354,13 @@ C89STRINGUTILS_EXPORT errno_t c89stringutils_strerror_s(char *s,
318354 return 0 ;
319355 }
320356#else
321- return strerror_r (errnum , s , maxsize );
357+ {
358+ int rc = strerror_r (errnum , s , maxsize );
359+ if (rc != 0 ) {
360+ return 22 ; /* EINVAL */
361+ }
362+ return 0 ;
363+ }
322364#endif
323365#else
324366 {
@@ -1127,7 +1169,7 @@ C89STRINGUTILS_EXPORT int c89stringutils_jasprintf(char **unto, const char *fmt,
11271169 return 0 ;
11281170}
11291171
1130- #if defined(C89STRINGUTILS_HAVE_PRAGMA_WARNING )
1172+ #if defined(_MSC_VER ) && _MSC_VER >= 1300
11311173#pragma warning(pop)
11321174#elif defined(__clang__ )
11331175#pragma clang diagnostic pop
0 commit comments