1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/media/webrtc/signaling/src/common/csf_common.h Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,79 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 + 1.8 +#ifndef _CSF_COMMON_E58E5677_950A_424c_B6C2_CA180092E6A2_H 1.9 +#define _CSF_COMMON_E58E5677_950A_424c_B6C2_CA180092E6A2_H 1.10 + 1.11 +#include <assert.h> 1.12 +#include <memory> 1.13 +#include <vector> 1.14 +#include <stdlib.h> 1.15 + 1.16 +/* 1.17 + 1.18 +This header file defines: 1.19 + 1.20 +csf_countof 1.21 +csf_sprintf 1.22 +csf_vsprintf 1.23 + 1.24 +*/ 1.25 + 1.26 +/* 1.27 + General security tip: Ensure that "format" is never a user-defined string. Format should ALWAYS be something that's built into your code, not 1.28 + user supplied. For example: never write: 1.29 + 1.30 + csf_sprintf(buffer, csf_countof(buffer), pUserSuppliedString); 1.31 + 1.32 + Instead write: 1.33 + 1.34 + csf_sprintf(buffer, csf_countof(buffer), "%s", pUserSuppliedString); 1.35 + 1.36 +*/ 1.37 + 1.38 +#ifdef WIN32 1.39 + #if !defined(_countof) 1.40 + #if !defined(__cplusplus) 1.41 + #define _countof(_Array) (sizeof(_Array) / sizeof(_Array[0])) 1.42 + #else 1.43 + extern "C++" 1.44 + { 1.45 + template <typename _CountofType, size_t _SizeOfArray> 1.46 + char (*_csf_countof_helper(_CountofType (&_Array)[_SizeOfArray]))[_SizeOfArray]; 1.47 + #define _countof(_Array) sizeof(*_csf_countof_helper(_Array)) 1.48 + } 1.49 + #endif 1.50 + #endif 1.51 +#else 1.52 + #define _countof(_Array) (sizeof(_Array) / sizeof(_Array[0])) 1.53 +#endif 1.54 +//csf_countof 1.55 + 1.56 +#define csf_countof(anArray) _countof(anArray) 1.57 + 1.58 +//csf_sprintf 1.59 + 1.60 +#ifdef _WIN32 1.61 + //Unlike snprintf, sprintf_s guarantees that the buffer will be null-terminated (unless the buffer size is zero). 1.62 + #define csf_sprintf(/* char* */ buffer, /* size_t */ sizeOfBufferInCharsInclNullTerm, /* const char * */ format, ...)\ 1.63 + _snprintf_s (buffer, sizeOfBufferInCharsInclNullTerm, _TRUNCATE, format, __VA_ARGS__) 1.64 +#else 1.65 + #define csf_sprintf(/* char */ buffer, /* size_t */ sizeOfBufferInCharsInclNullTerm, /* const char * */ format, ...)\ 1.66 + snprintf (buffer, sizeOfBufferInCharsInclNullTerm, format, __VA_ARGS__);\ 1.67 + buffer[sizeOfBufferInCharsInclNullTerm-1] = '\0' 1.68 +#endif 1.69 + 1.70 +//csf_vsprintf 1.71 + 1.72 +#ifdef _WIN32 1.73 + #define csf_vsprintf(/* char* */ buffer, /* size_t */ sizeOfBufferInCharsInclNullTerm, /* const char * */ format, /* va_list */ vaList)\ 1.74 + vsnprintf_s (buffer, sizeOfBufferInCharsInclNullTerm, _TRUNCATE, format, vaList);\ 1.75 + buffer[sizeOfBufferInCharsInclNullTerm-1] = '\0' 1.76 +#else 1.77 + #define csf_vsprintf(/* char */ buffer, /* size_t */ sizeOfBufferInCharsInclNullTerm, /* const char * */ format, /* va_list */ vaList)\ 1.78 + vsprintf (buffer, format, vaList);\ 1.79 + buffer[sizeOfBufferInCharsInclNullTerm-1] = '\0' 1.80 +#endif 1.81 + 1.82 +#endif