/* common.h - common test routines This file is part of the nss-pam-ldapd library. Copyright (C) 2011, 2012 Arthur de Jong This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef TEST__COMMON_H #define TEST__COMMON_H 1 #include #ifndef __ASSERT_FUNCTION #define __ASSERT_FUNCTION "" #endif /* not __ASSERT_FUNCTION */ /* try to find the actual assert function */ #ifndef HAVE___ASSERT_FAIL /* for Solaris: */ #ifdef sun #define __assert_fail(assertion,file,line,function) __assert(assertion,file,line) #endif /* for FreeBSD: */ #ifdef __FreeBSD__ #define __assert_fail(assertion,file,line,function) __assert(assertion,file,line,function) #endif #endif /* not HAVE___ASSERT_FAIL */ /* extra assertion function that epxects both strings to be the same (special macro because strcmp() can be a macro that turns ugly in assert) */ #define assertstreq(str1,str2) \ (assertstreq_impl(str1,str2,"strcmp(" __STRING(str1) "," __STRING(str2) ")==0", \ __FILE__, __LINE__, __ASSERT_FUNCTION)) static inline void assertstreq_impl(const char *str1,const char *str2, const char *assertion,const char *file, int line,const char *function) { if (strcmp(str1,str2)!=0) __assert_fail(assertion,file,line,function); } /* extra assertion function that expects expr to be valid and prints an error message that include errno otherwise */ #define assertok(expr) \ ((expr) \ ? (void) (0) \ : __assertok_fail(__STRING(expr),__FILE__,__LINE__,__ASSERT_FUNCTION)) static inline void __assertok_fail(const char *expr,const char *file, int line,const char *function) { char msg[120]; snprintf(msg,sizeof(msg),"%s (errno=\"%s\")",expr,strerror(errno)); __assert_fail(msg,file,line,function); } #endif /* not TEST__COMMON_H */