media/webrtc/signaling/src/common/csf_common.h

changeset 0
6474c204b198
     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

mercurial