static uint_t utf8_get_char_bytes(YogEnv* env, YogHandle* self, const char* s) { #define RETURN_IF_MATCH(x, v) do { \ if ((s[0] & (x)) == (x)) { \ return (v); \ } \ } while (0) RETURN_IF_MATCH(0xfc, 6); RETURN_IF_MATCH(0xf8, 5); RETURN_IF_MATCH(0xf0, 4); RETURN_IF_MATCH(0xe0, 3); RETURN_IF_MATCH(0xc0, 2); #undef RETURN_IF_MATCH return 1; }
int convert_resource(char *input) { #define RETURN_IF_MATCH(i, r) \ if (strcmp((i), (#r)) == 0) return (RLIMIT_##r) RETURN_IF_MATCH(input, AS); RETURN_IF_MATCH(input, CORE); RETURN_IF_MATCH(input, CPU); RETURN_IF_MATCH(input, DATA); RETURN_IF_MATCH(input, FSIZE); RETURN_IF_MATCH(input, LOCKS); RETURN_IF_MATCH(input, MEMLOCK); RETURN_IF_MATCH(input, MSGQUEUE); RETURN_IF_MATCH(input, NICE); RETURN_IF_MATCH(input, NOFILE); RETURN_IF_MATCH(input, NPROC); RETURN_IF_MATCH(input, RSS); RETURN_IF_MATCH(input, RTPRIO); RETURN_IF_MATCH(input, RTTIME); RETURN_IF_MATCH(input, SIGPENDING); #undef RETURN_IF_MATCH /* FIXME: the returned value may collide with the defined resources */ return -1; }