/* * Find the xattr_handler with the matching prefix. */ static struct xattr_handler * xattr_resolve_name(struct xattr_handler **handlers, const char **name) { struct xattr_handler *handler; if (!*name) return NULL; for_each_xattr_handler(handlers, handler) { const char *n = strcmp_prefix(*name, handler->prefix); if (n) { *name = n; break; } } return handler; }
/* * strに対応するキーコードとエスケープシーケンスの長さを返す * 見つからなかったらUKey_Escapeと、途中まで一致しているエスケープシー * ケンスがある場合はTRUEない場合はFALSEを返す */ int *escape_sequence2key(const char *str, int str_len) { static int rval[2]; int len; int not_enough = 0; if ( (not_enough += len = strcmp_prefix(str, str_len, _KEY_UP )), len > 0) { rval[0] = UKey_Up; } else if ( (not_enough += len = strcmp_prefix(str, str_len, _KEY_DOWN )), len > 0) { rval[0] = UKey_Down; } else if ( (not_enough += len = strcmp_prefix(str, str_len, _KEY_RIGHT )), len > 0) { rval[0] = UKey_Right; } else if ( (not_enough += len = strcmp_prefix(str, str_len, _KEY_LEFT )), len > 0) { rval[0] = UKey_Left; } else if (key_backspace != NULL && ((not_enough += len = strcmp_prefix(str, str_len, key_backspace)), len > 0)) { rval[0] = UKey_Backspace; } else if (key_dc != NULL && ((not_enough += len = strcmp_prefix(str, str_len, key_dc )), len > 0)) { rval[0] = UKey_Delete; } else if (key_left != NULL && ((not_enough += len = strcmp_prefix(str, str_len, key_left )), len > 0)) { rval[0] = UKey_Left; } else if (key_up != NULL && ((not_enough += len = strcmp_prefix(str, str_len, key_up )), len > 0)) { rval[0] = UKey_Up; } else if (key_right != NULL && ((not_enough += len = strcmp_prefix(str, str_len, key_right )), len > 0)) { rval[0] = UKey_Right; } else if (key_down != NULL && ((not_enough += len = strcmp_prefix(str, str_len, key_down )), len > 0)) { rval[0] = UKey_Down; } else if (key_ppage != NULL && ((not_enough += len = strcmp_prefix(str, str_len, key_ppage )), len > 0)) { rval[0] = UKey_Prior; } else if (key_npage != NULL && ((not_enough += len = strcmp_prefix(str, str_len, key_npage )), len > 0)) { rval[0] = UKey_Next; } else if (key_home != NULL && ((not_enough += len = strcmp_prefix(str, str_len, key_home )), len > 0)) { rval[0] = UKey_Home; } else if (key_end != NULL && ((not_enough += len = strcmp_prefix(str, str_len, key_end )), len > 0)) { rval[0] = UKey_End; } else if (key_ic != NULL && ((not_enough += len = strcmp_prefix(str, str_len, key_ic )), len > 0)) { rval[0] = UKey_Insert; } else if (key_f1 != NULL && ((not_enough += len = strcmp_prefix(str, str_len, key_f1 )), len > 0)) { rval[0] = UKey_F1; } else if (key_f2 != NULL && ((not_enough += len = strcmp_prefix(str, str_len, key_f2 )), len > 0)) { rval[0] = UKey_F2; } else if (key_f3 != NULL && ((not_enough += len = strcmp_prefix(str, str_len, key_f3 )), len > 0)) { rval[0] = UKey_F3; } else if (key_f4 != NULL && ((not_enough += len = strcmp_prefix(str, str_len, key_f4 )), len > 0)) { rval[0] = UKey_F4; } else if (key_f5 != NULL && ((not_enough += len = strcmp_prefix(str, str_len, key_f5 )), len > 0)) { rval[0] = UKey_F5; } else if (key_f6 != NULL && ((not_enough += len = strcmp_prefix(str, str_len, key_f6 )), len > 0)) { rval[0] = UKey_F6; } else if (key_f7 != NULL && ((not_enough += len = strcmp_prefix(str, str_len, key_f7 )), len > 0)) { rval[0] = UKey_F7; } else if (key_f8 != NULL && ((not_enough += len = strcmp_prefix(str, str_len, key_f8 )), len > 0)) { rval[0] = UKey_F8; } else if (key_f9 != NULL && ((not_enough += len = strcmp_prefix(str, str_len, key_f9 )), len > 0)) { rval[0] = UKey_F9; } else if (key_f10 != NULL && ((not_enough += len = strcmp_prefix(str, str_len, key_f10 )), len > 0)) { rval[0] = UKey_F10; } else if (key_f11 != NULL && ((not_enough += len = strcmp_prefix(str, str_len, key_f11 )), len > 0)) { rval[0] = UKey_F11; } else if (key_f12 != NULL && ((not_enough += len = strcmp_prefix(str, str_len, key_f12 )), len > 0)) { rval[0] = UKey_F12; } else { rval[0] = UKey_Other; len = not_enough < 0 ? TRUE : FALSE; } rval[1] = len; return rval; }