/* Escape a single character. Writes the escaped value into dest, and * increments dest. * * NOTE: Most of this code is stolen from Dave McCormack's SLPEscape() code. * (For OpenSLP). */ void escape(char to_escape, char **dest, SLPBoolean (test_fn)(const char)) { char hex_digit; if (test_fn(to_escape) == SLP_FALSE) { /* Insert the escape character. */ **dest = ESCAPE_CHARACTER; (*dest)++; /* Do the first digit. */ hex_digit = (to_escape & 0xF0)/0x0F; if ((hex_digit >= 0) && (hex_digit <= 9)) **dest = hex_digit + '0'; else **dest = hex_digit + 'A' - 0x0A; (*dest)++; /* Do the last digit. */ hex_digit = to_escape & 0x0F; if ((hex_digit >= 0) && (hex_digit <= 9)) **dest = hex_digit + '0'; else **dest = hex_digit + 'A' - 0x0A; (*dest)++; } else { /* It's legal. */ **dest = to_escape; (*dest)++; } }
int main(int argc, char **argv) { if (getenv("ZDTM_REEXEC")) return test_fn(argc, argv); test_init_ns(argc, argv, CLONE_NEWNS, test_fn); return 0; }
int main(int argc, char **argv) { #ifdef NEW_IPC_NS test_init_ns(argc, argv, CLONE_NEWIPC, test_fn); #else test_init(argc, argv); test_fn(argc, argv); #endif return 0; }
const void * LOCAL_PREFIX(cpu_select)(const void *impls, size_t impl_size, impl_test test_fn) { unsigned long cpu_flags = LOCAL_PREFIX(cpuid)(); const unsigned char *p = (const unsigned char *)impls; for (;;) { const cpu_specific_impl_t *impl = (const cpu_specific_impl_t *)p; if (impl->cpu_flags == (impl->cpu_flags & cpu_flags)) { if (test_fn(impl) == 0) return impl; } if (impl->cpu_flags == CPUID_GENERIC) return NULL; p += impl_size; } }
void test_basics(void) { CORD x = CORD_from_char_star("ab"); register int i; char c; CORD y; CORD_pos p; x = CORD_cat(x,x); if (x == CORD_EMPTY) ABORT("CORD_cat(x,x) returned empty cord"); if (!CORD_IS_STRING(x)) ABORT("short cord should usually be a string"); if (strcmp(x, "abab") != 0) ABORT("bad CORD_cat result"); for (i = 1; i < 16; i++) { x = CORD_cat(x,x); } x = CORD_cat(x,"c"); if (CORD_len(x) != 128*1024+1) ABORT("bad length"); count = 0; if (CORD_iter5(x, 64*1024-1, test_fn, CORD_NO_FN, (void *)13) == 0) { ABORT("CORD_iter5 failed"); } if (count != 64*1024 + 2) ABORT("CORD_iter5 failed"); count = 0; CORD_set_pos(p, x, 64*1024-1); while(CORD_pos_valid(p)) { (void) test_fn(CORD_pos_fetch(p), (void *)13); CORD_next(p); } if (count != 64*1024 + 2) ABORT("Position based iteration failed"); y = CORD_substr(x, 1023, 5); if (!y) ABORT("CORD_substr returned NULL"); if (!CORD_IS_STRING(y)) ABORT("short cord should usually be a string"); if (strcmp(y, "babab") != 0) ABORT("bad CORD_substr result"); y = CORD_substr(x, 1024, 8); if (!y) ABORT("CORD_substr returned NULL"); if (!CORD_IS_STRING(y)) ABORT("short cord should usually be a string"); if (strcmp(y, "abababab") != 0) ABORT("bad CORD_substr result"); y = CORD_substr(x, 128*1024-1, 8); if (!y) ABORT("CORD_substr returned NULL"); if (!CORD_IS_STRING(y)) ABORT("short cord should usually be a string"); if (strcmp(y, "bc") != 0) ABORT("bad CORD_substr result"); x = CORD_balance(x); if (CORD_len(x) != 128*1024+1) ABORT("bad length"); count = 0; if (CORD_iter5(x, 64*1024-1, test_fn, CORD_NO_FN, (void *)13) == 0) { ABORT("CORD_iter5 failed"); } if (count != 64*1024 + 2) ABORT("CORD_iter5 failed"); y = CORD_substr(x, 1023, 5); if (!y) ABORT("CORD_substr returned NULL"); if (!CORD_IS_STRING(y)) ABORT("short cord should usually be a string"); if (strcmp(y, "babab") != 0) ABORT("bad CORD_substr result"); y = CORD_from_fn(id_cord_fn, 0, 13); i = 0; CORD_set_pos(p, y, i); while(CORD_pos_valid(p)) { c = CORD_pos_fetch(p); if(c != i) ABORT("Traversal of function node failed"); CORD_next(p); i++; } if (i != 13) ABORT("Bad apparent length for function node"); }
BMBVHTree *BKE_bmbvh_new_ex( BMesh *bm, BMLoop *(*looptris)[3], int looptris_tot, int flag, const float (*cos_cage)[3], const bool cos_cage_free, bool (*test_fn)(BMFace *, void *user_data), void *user_data) { /* could become argument */ const float epsilon = FLT_EPSILON * 2.0f; BMBVHTree *bmtree = MEM_callocN(sizeof(*bmtree), "BMBVHTree"); float cos[3][3]; int i; int tottri; /* avoid testing every tri */ BMFace *f_test, *f_test_prev; bool test_fn_ret; /* BKE_editmesh_tessface_calc() must be called already */ BLI_assert(looptris_tot != 0 || bm->totface == 0); if (cos_cage) { BM_mesh_elem_index_ensure(bm, BM_VERT); } bmtree->looptris = looptris; bmtree->looptris_tot = looptris_tot; bmtree->bm = bm; bmtree->cos_cage = cos_cage; bmtree->cos_cage_free = cos_cage_free; bmtree->flag = flag; if (test_fn) { /* callback must do... */ BLI_assert(!(flag & (BMBVH_RESPECT_SELECT | BMBVH_RESPECT_HIDDEN))); f_test_prev = NULL; test_fn_ret = false; tottri = 0; for (i = 0; i < looptris_tot; i++) { f_test = looptris[i][0]->f; if (f_test != f_test_prev) { test_fn_ret = test_fn(f_test, user_data); f_test_prev = f_test; } if (test_fn_ret) { tottri++; } } } else { tottri = looptris_tot; } bmtree->tree = BLI_bvhtree_new(tottri, epsilon, 8, 8); f_test_prev = NULL; test_fn_ret = false; for (i = 0; i < looptris_tot; i++) { if (test_fn) { /* note, the arrays wont align now! take care */ f_test = looptris[i][0]->f; if (f_test != f_test_prev) { test_fn_ret = test_fn(f_test, user_data); f_test_prev = f_test; } if (!test_fn_ret) { continue; } } if (cos_cage) { copy_v3_v3(cos[0], cos_cage[BM_elem_index_get(looptris[i][0]->v)]); copy_v3_v3(cos[1], cos_cage[BM_elem_index_get(looptris[i][1]->v)]); copy_v3_v3(cos[2], cos_cage[BM_elem_index_get(looptris[i][2]->v)]); } else { copy_v3_v3(cos[0], looptris[i][0]->v->co); copy_v3_v3(cos[1], looptris[i][1]->v->co); copy_v3_v3(cos[2], looptris[i][2]->v->co); } BLI_bvhtree_insert(bmtree->tree, i, (float *)cos, 3); } BLI_bvhtree_balance(bmtree->tree); return bmtree; }