1570af302Sopenharmony_ci#include <string.h> 2570af302Sopenharmony_ci#include "test.h" 3570af302Sopenharmony_ci 4570af302Sopenharmony_cistatic char buf[512]; 5570af302Sopenharmony_ci 6570af302Sopenharmony_cistatic void *aligned(void *p) 7570af302Sopenharmony_ci{ 8570af302Sopenharmony_ci return (void*)(((uintptr_t)p + 63) & -64); 9570af302Sopenharmony_ci} 10570af302Sopenharmony_ci 11570af302Sopenharmony_cistatic void *aligncpy(void *p, size_t len, size_t a) 12570af302Sopenharmony_ci{ 13570af302Sopenharmony_ci return memcpy((char*)aligned(buf)+a, p, len); 14570af302Sopenharmony_ci} 15570af302Sopenharmony_ci 16570af302Sopenharmony_ci#define N(s, c) { \ 17570af302Sopenharmony_ci int align; \ 18570af302Sopenharmony_ci for (align=0; align<8; align++) { \ 19570af302Sopenharmony_ci char *p = aligncpy(s, sizeof s, align); \ 20570af302Sopenharmony_ci char *q = strchr(p, c); \ 21570af302Sopenharmony_ci if (q) \ 22570af302Sopenharmony_ci t_error("strchr(%s,%s) with align=%d returned str+%d, wanted 0\n", #s, #c, align, q-p); \ 23570af302Sopenharmony_ci } \ 24570af302Sopenharmony_ci} 25570af302Sopenharmony_ci 26570af302Sopenharmony_ci#define T(s, c, n) { \ 27570af302Sopenharmony_ci int align; \ 28570af302Sopenharmony_ci for (align=0; align<8; align++) { \ 29570af302Sopenharmony_ci char *p = aligncpy(s, sizeof s, align); \ 30570af302Sopenharmony_ci char *q = strchr(p, c); \ 31570af302Sopenharmony_ci if (q == 0) \ 32570af302Sopenharmony_ci t_error("strchr(%s,%s) with align=%d returned 0, wanted str+%d\n", #s, #c, align, n); \ 33570af302Sopenharmony_ci else if (q - p != n) \ 34570af302Sopenharmony_ci t_error("strchr(%s,%s) with align=%d returned str+%d, wanted str+%d\n", #s, #c, align, q-p, n); \ 35570af302Sopenharmony_ci } \ 36570af302Sopenharmony_ci} 37570af302Sopenharmony_ci 38570af302Sopenharmony_ciint main(void) 39570af302Sopenharmony_ci{ 40570af302Sopenharmony_ci int i; 41570af302Sopenharmony_ci char a[128]; 42570af302Sopenharmony_ci char s[256]; 43570af302Sopenharmony_ci 44570af302Sopenharmony_ci for (i = 0; i < 128; i++) 45570af302Sopenharmony_ci a[i] = (i+1) & 127; 46570af302Sopenharmony_ci for (i = 0; i < 256; i++) 47570af302Sopenharmony_ci *((unsigned char*)s+i) = i+1; 48570af302Sopenharmony_ci 49570af302Sopenharmony_ci N("\0aaa", 'a') 50570af302Sopenharmony_ci N("a\0bb", 'b') 51570af302Sopenharmony_ci N("ab\0c", 'c') 52570af302Sopenharmony_ci N("abc\0d", 'd') 53570af302Sopenharmony_ci N("abc abc\0x", 'x') 54570af302Sopenharmony_ci N(a, 128) 55570af302Sopenharmony_ci N(a, 255) 56570af302Sopenharmony_ci 57570af302Sopenharmony_ci T("", 0, 0) 58570af302Sopenharmony_ci T("a", 'a', 0) 59570af302Sopenharmony_ci T("a", 'a'+256, 0) 60570af302Sopenharmony_ci T("a", 0, 1) 61570af302Sopenharmony_ci T("abb", 'b', 1) 62570af302Sopenharmony_ci T("aabb", 'b', 2) 63570af302Sopenharmony_ci T("aaabb", 'b', 3) 64570af302Sopenharmony_ci T("aaaabb", 'b', 4) 65570af302Sopenharmony_ci T("aaaaabb", 'b', 5) 66570af302Sopenharmony_ci T("aaaaaabb", 'b', 6) 67570af302Sopenharmony_ci T("abc abc", 'c', 2) 68570af302Sopenharmony_ci T(s, 1, 0) 69570af302Sopenharmony_ci T(s, 2, 1) 70570af302Sopenharmony_ci T(s, 10, 9) 71570af302Sopenharmony_ci T(s, 11, 10) 72570af302Sopenharmony_ci T(s, 127, 126) 73570af302Sopenharmony_ci T(s, 128, 127) 74570af302Sopenharmony_ci T(s, 255, 254) 75570af302Sopenharmony_ci T(s, 0, 255) 76570af302Sopenharmony_ci 77570af302Sopenharmony_ci return t_status; 78570af302Sopenharmony_ci} 79