1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#define SCRUBVAR 0xa5a5a5a5a5a5a5a5ULL
void finalizer_scrub8(void *ptr)
{
uint64_t *sz_ptr = (uint64_t *) ptr;
sz_ptr[0] = SCRUBVAR;
}
void finalizer_scrub16(void *ptr)
{
uint64_t *sz_ptr = (uint64_t *) ptr;
sz_ptr[0] = SCRUBVAR;
sz_ptr[1] = SCRUBVAR;
}
void finalizer_scrub24(void *ptr)
{
uint64_t *sz_ptr = (uint64_t *) ptr;
sz_ptr[0] = SCRUBVAR;
sz_ptr[1] = SCRUBVAR;
sz_ptr[2] = SCRUBVAR;
}
void finalizer_scrub32(void *ptr)
{
uint64_t *sz_ptr = (uint64_t *) ptr;
sz_ptr[0] = SCRUBVAR;
sz_ptr[1] = SCRUBVAR;
sz_ptr[2] = SCRUBVAR;
sz_ptr[3] = SCRUBVAR;
}
void finalizer_scrub64(void *ptr)
{
uint64_t *sz_ptr = (uint64_t *) ptr;
sz_ptr[0] = SCRUBVAR;
sz_ptr[1] = SCRUBVAR;
sz_ptr[2] = SCRUBVAR;
sz_ptr[3] = SCRUBVAR;
sz_ptr[4] = SCRUBVAR;
sz_ptr[5] = SCRUBVAR;
sz_ptr[6] = SCRUBVAR;
sz_ptr[7] = SCRUBVAR;
}
void finalizer_scrub128(void *ptr)
{
uint64_t *sz_ptr = (uint64_t *) ptr;
int i;
for (i = 0; i < 16; i++)
sz_ptr[i] = SCRUBVAR;
}
void finalizer_scrub256(void *ptr)
{
uint64_t *sz_ptr = (uint64_t *) ptr;
int i;
for (i = 0; i < 32; i++)
sz_ptr[i] = SCRUBVAR;
}
void finalizer_scrubvar(uint32_t sz, void *ptr)
{
memset(ptr, 0xa5, sz);
}
int compare_eq(uint32_t size, uint8_t *p1, uint8_t *p2)
{
uint32_t i;
int acc = 1;
for (i = 0; i < size; i++)
acc &= (p1[i] == p2[i]);
return acc;
}
#define COMPARE_LOOP(n) \
uint64_t *sp1, *sp2; \
int i, acc; \
sp1 = (uint64_t *) p1; sp2 = (uint64_t *) p2; \
acc = 1; \
for (i = 0; i < n; i++) \
acc &= (sp1[i] == sp2[i]); \
return acc; \
int compare_eq8(uint8_t *p1, uint8_t *p2)
{
uint64_t *sp1, *sp2;
sp1 = (uint64_t *) p1; sp2 = (uint64_t *) p2;
return (p1[0] == p2[0]);
}
int compare_eq16(uint8_t *p1, uint8_t *p2)
{
uint64_t *sp1, *sp2;
sp1 = (uint64_t *) p1; sp2 = (uint64_t *) p2;
return ((p1[0] == p2[0]) & (p1[1] == p2[1])) == 1;
}
int compare_eq24(uint8_t *p1, uint8_t *p2)
{
COMPARE_LOOP(3);
}
int compare_eq32(uint8_t *p1, uint8_t *p2)
{
COMPARE_LOOP(4);
}
int compare_eq64(uint8_t *p1, uint8_t *p2)
{
COMPARE_LOOP(8);
}
int compare_eq128(uint8_t *p1, uint8_t *p2)
{
COMPARE_LOOP(16);
}
int compare_eq256(uint8_t *p1, uint8_t *p2)
{
COMPARE_LOOP(32);
}
|