4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs/*
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs * Copyright 2008 Google Inc.
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs *
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs * Licensed under the Apache License, Version 2.0 (the "License");
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs * you may not use this file except in compliance with the License.
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs * You may obtain a copy of the License at
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs *
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs * http://www.apache.org/licenses/LICENSE-2.0
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs *
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs * Unless required by applicable law or agreed to in writing, software
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs * distributed under the License is distributed on an "AS IS" BASIS,
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs * See the License for the specific language governing permissions and
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs * limitations under the License.
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs */
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#ifndef CMOCKA_PRIVATE_H_
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#define CMOCKA_PRIVATE_H_
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#include "config.h"
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#include <stdint.h>
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#ifdef _WIN32
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#include <windows.h>
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# ifdef _MSC_VER
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# include <stdio.h> /* _snprintf */
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# undef inline
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# define inline __inline
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# define strcasecmp _stricmp
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# define strncasecmp _strnicmp
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# if defined(HAVE__SNPRINTF_S)
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# undef snprintf
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# define snprintf(d, n, ...) _snprintf_s((d), (n), _TRUNCATE, __VA_ARGS__)
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# else /* HAVE__SNPRINTF_S */
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# if defined(HAVE__SNPRINTF)
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# undef snprintf
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# define snprintf _snprintf
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# else /* HAVE__SNPRINTF */
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# if !defined(HAVE_SNPRINTF)
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# error "no snprintf compatible function found"
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# endif /* HAVE_SNPRINTF */
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# endif /* HAVE__SNPRINTF */
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# endif /* HAVE__SNPRINTF_S */
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# if defined(HAVE__VSNPRINTF_S)
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# undef vsnprintf
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# define vsnprintf(s, n, f, v) _vsnprintf_s((s), (n), _TRUNCATE, (f), (v))
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# else /* HAVE__VSNPRINTF_S */
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# if defined(HAVE__VSNPRINTF)
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# undef vsnprintf
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# define vsnprintf _vsnprintf
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# else
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# if !defined(HAVE_VSNPRINTF)
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# error "No vsnprintf compatible function found"
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# endif /* HAVE_VSNPRINTF */
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# endif /* HAVE__VSNPRINTF */
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# endif /* HAVE__VSNPRINTF_S */
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# endif /* _MSC_VER */
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs/*
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs * Backwards compatibility with headers shipped with Visual Studio 2005 and
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs * earlier.
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs */
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks MalnacsWINBASEAPI BOOL WINAPI IsDebuggerPresent(VOID);
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#ifndef PRIdS
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# define PRIdS "Id"
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#endif
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#ifndef PRIu64
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# define PRIu64 "I64u"
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#endif
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#ifndef PRIuMAX
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# define PRIuMAX PRIu64
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#endif
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#ifndef PRIxMAX
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#define PRIxMAX "I64x"
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#endif
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#ifndef PRIXMAX
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#define PRIXMAX "I64X"
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#endif
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#else /* _WIN32 */
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#ifndef __PRI64_PREFIX
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# if __WORDSIZE == 64
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# define __PRI64_PREFIX "l"
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# else
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# define __PRI64_PREFIX "ll"
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# endif
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#endif
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#ifndef PRIdS
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# define PRIdS "zd"
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#endif
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#ifndef PRIu64
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# define PRIu64 __PRI64_PREFIX "u"
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#endif
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#ifndef PRIuMAX
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs# define PRIuMAX __PRI64_PREFIX "u"
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#endif
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#ifndef PRIxMAX
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#define PRIxMAX __PRI64_PREFIX "x"
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#endif
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#ifndef PRIXMAX
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#define PRIXMAX __PRI64_PREFIX "X"
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#endif
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#endif /* _WIN32 */
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs/** Free memory space */
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#define SAFE_FREE(x) do { if ((x) != NULL) {free(x); x=NULL;} } while(0)
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs/** Zero a structure */
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#define ZERO_STRUCT(x) memset((char *)&(x), 0, sizeof(x))
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs/** Zero a structure given a pointer to the structure */
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#define ZERO_STRUCTP(x) do { if ((x) != NULL) memset((char *)(x), 0, sizeof(*(x))); } while(0)
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs/** Get the size of an array */
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs/** Overwrite the complete string with 'X' */
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#define BURN_STRING(x) do { if ((x) != NULL) memset((x), 'X', strlen((x))); } while(0)
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs/**
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs * This is a hack to fix warnings. The idea is to use this everywhere that we
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs * get the "discarding const" warning by the compiler. That doesn't actually
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs * fix the real issue, but marks the place and you can search the code for
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs * discard_const.
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs *
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs * Please use this macro only when there is no other way to fix the warning.
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs * We should use this function in only in a very few places.
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs *
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs * Also, please call this via the discard_const_p() macro interface, as that
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs * makes the return type safe.
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs */
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#define discard_const(ptr) ((void *)((uintptr_t)(ptr)))
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs/**
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs * Type-safe version of discard_const
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs */
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#define discard_const_p(type, ptr) ((type *)discard_const(ptr))
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#endif /* CMOCKA_PRIVATE_H_ */