@ -147,27 +147,29 @@
# define ComboBox_GetCurItemData(hCtrl) ComboBox_GetItemData(hCtrl, ComboBox_GetCurSel(hCtrl))
# define safe_free(p) do {free((void*)p); p = NULL;} while(0)
# define safe_mm_free(p) do {_mm_free((void*)p); p = NULL;} while(0)
# define safe_min(a, b) min((size_t)(a), (size_t)(b))
# define safe_strcp(dst, dst_max, src, count) do { size_t _count = (count); memmove(dst, src, safe_min(_count, dst_max)); \
( ( char * ) ( dst ) ) [ safe_min ( _count , dst_max ) - 1 ] = 0 ; } while ( 0 )
# define safe_strcpy(dst, dst_max, src) safe_strcp(dst, dst_max, src, safe_strlen(src)+1)
# define safe_free(p) do { free((void*)p); p = NULL; } while(0)
# define safe_mm_free(p) do { _mm_free((void*)p); p = NULL; } while(0)
static __inline void safe_strcp ( char * dst , const size_t dst_max , const char * src , const size_t count ) {
memmove ( dst , src , min ( count , dst_max ) ) ;
dst [ min ( count , dst_max ) - 1 ] = 0 ;
}
# define safe_strcpy(dst, dst_max, src) safe_strcp(dst, dst_max, src, safe_strlen(src) + 1)
# define static_strcpy(dst, src) safe_strcpy(dst, sizeof(dst), src)
# define safe_strcat(dst, dst_max, src) strncat_s(dst, dst_max, src, _TRUNCATE)
# define static_strcat(dst, src) safe_strcat(dst, sizeof(dst), src)
# define safe_strcmp(str1, str2) strcmp(((str1==NULL)?"<NULL>":str1), ((str2==NULL)?"<NULL>":str2))
# define safe_strstr(str1, str2) strstr(((str1==NULL)?"<NULL>":str1), ((str2==NULL)?"<NULL>":str2))
# define safe_stricmp(str1, str2) _stricmp(((str1==NULL)?"<NULL>":str1), ((str2==NULL)?"<NULL>":str2))
# define safe_strncmp(str1, str2, count) strncmp(((str1==NULL)?"<NULL>":str1), ((str2==NULL)?"<NULL>":str2), count)
# define safe_strnicmp(str1, str2, count) _strnicmp(((str1==NULL)?"<NULL>":str1), ((str2==NULL)?"<NULL>":str2), count)
# define safe_closehandle(h) do {if ((h != INVALID_HANDLE_VALUE) && (h != NULL)) {CloseHandle(h); h = INVALID_HANDLE_VALUE;}} while(0)
# define safe_release_dc(hDlg, hDC) do {if ((hDC != INVALID_HANDLE_VALUE) && (hDC != NULL)) {ReleaseDC(hDlg, hDC); hDC = NULL;}} while(0)
# define safe_sprintf(dst, count, ...) do { size_t _count = (count); _snprintf_s(dst, _count, _TRUNCATE, __VA_ARGS__); (dst)[(_count)-1] = 0; } while(0)
# define safe_strcmp(str1, str2) strcmp(((str1 == NULL) ? "<NULL>" : str1), ((str2 == NULL) ? "<NULL>" : str2))
# define safe_strstr(str1, str2) strstr(((str1 == NULL) ? "<NULL>" : str1), ((str2 == NULL) ? "<NULL>" : str2))
# define safe_stricmp(str1, str2) _stricmp(((str1 == NULL) ? "<NULL>" : str1), ((str2 == NULL) ? "<NULL>" : str2))
# define safe_strncmp(str1, str2, count) strncmp(((str1 == NULL) ? "<NULL>" : str1), ((str2 == NULL) ? "<NULL>" : str2), count)
# define safe_strnicmp(str1, str2, count) _strnicmp(((str1 == NULL) ? "<NULL>" : str1), ((str2 == NULL) ? "<NULL>" : str2), count)
# define safe_closehandle(h) do { if ((h != INVALID_HANDLE_VALUE) && (h != NULL)) { CloseHandle(h); h = INVALID_HANDLE_VALUE; } } while(0)
# define safe_release_dc(hDlg, hDC) do { if ((hDC != INVALID_HANDLE_VALUE) && (hDC != NULL)) { ReleaseDC(hDlg, hDC); hDC = NULL; } } while(0)
# define safe_sprintf(dst, count, ...) do { size_t _count = count; char* _dst = dst; _snprintf_s(_dst, _count, _TRUNCATE, __VA_ARGS__); \
_dst [ ( _count ) - 1 ] = 0 ; } while ( 0 )
# define static_sprintf(dst, ...) safe_sprintf(dst, sizeof(dst), __VA_ARGS__)
# define safe_atoi(str) ((((char*)(str))==NULL)?0:atoi(str))
# define safe_strlen(str) ((((char*)(str))==NULL)?0:strlen(str))
# define safe_strdup(str) ((((char*)(str))==NULL)?NULL:_strdup(str))
# define safe_atoi(str) ((((char*)(str))==NULL) ? 0 : atoi(str))
# define safe_strlen(str) ((((char*)(str))==NULL) ? 0 : strlen(str))
# define safe_strdup(str) ((((char*)(str))==NULL) ? NULL : _strdup(str))
# if defined(_MSC_VER)
# define safe_vsnprintf(buf, size, format, arg) _vsnprintf_s(buf, size, _TRUNCATE, format, arg)
# else