vptr.c 919 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #include "toolbox/vptr.h"
  2. #include "toolbox/errno.h"
  3. #include "toolbox/log.h"
  4. #define true ((unsigned char) 1L)
  5. #define false ((unsigned char) 0L)
  6. #define DEREF(PTR, POS) (*(((unsigned char *) (PTR)) + POS))
  7. #define TEST_FOR_NULL(POINTER, RET) \
  8. if ( POINTER == NULL ) { \
  9. LOG_ERROR("Null Pointer Not Expected"); \
  10. toolbox_errno = RET_EVN; \
  11. return RET; \
  12. }
  13. _Bool
  14. vptr_equal(const struct vptr *restrict p_vptr1
  15. , const struct vptr *restrict p_vptr2) {
  16. toolbox_errno = RET_OK;
  17. TEST_FOR_NULL(p_vptr1, false);
  18. TEST_FOR_NULL(p_vptr2, false);
  19. TEST_FOR_NULL(p_vptr1->data, false);
  20. TEST_FOR_NULL(p_vptr2->data, false);
  21. if ( p_vptr1->size != p_vptr2->size )
  22. return false;
  23. for ( size_t z = 0; z < p_vptr1->size; ++z ) {
  24. if ( DEREF(p_vptr1->data, z) != DEREF(p_vptr2->data, z) )
  25. return false;
  26. }
  27. return true;
  28. }
  29. #undef TEST_FOR_NULL
  30. #undef DEREF
  31. #undef false
  32. #undef true