#include "toolbox/vptr.h" #include "toolbox/errno.h" #include "toolbox/log.h" #define true ((unsigned char) 1L) #define false ((unsigned char) 0L) #define DEREF(PTR, POS) (*(((unsigned char *) (PTR)) + POS)) #define TEST_FOR_NULL(POINTER, RET) \ if ( POINTER == NULL ) { \ LOG_ERROR("Null Pointer Not Expected"); \ toolbox_errno = RET_EVN; \ return RET; \ } _Bool vptr_equal(const struct vptr *restrict p_vptr1 , const struct vptr *restrict p_vptr2) { toolbox_errno = RET_OK; TEST_FOR_NULL(p_vptr1, false); TEST_FOR_NULL(p_vptr2, false); TEST_FOR_NULL(p_vptr1->data, false); TEST_FOR_NULL(p_vptr2->data, false); if ( p_vptr1->size != p_vptr2->size ) return false; for ( size_t z = 0; z < p_vptr1->size; ++z ) { if ( DEREF(p_vptr1->data, z) != DEREF(p_vptr2->data, z) ) return false; } return true; } #undef TEST_FOR_NULL #undef DEREF #undef false #undef true