/* * TermInfo#setupterm(term, fd) => int * * TermInfo#setupterm initializes TermInfo object. * * term is a string of nil. * If nil is given, the environment variable $TERM is used. * * fd is a file descriptor for target terminal. */ static VALUE rt_setupterm(VALUE self, VALUE v_term, VALUE v_fd) { char *term; int fd; int err; int ret; if (check_rt(self) != NULL) { rb_raise(eTermInfoError, "terminfo object already initialized"); } if (v_term == Qnil) term = NULL; else term = StringValueCStr(v_term); fd = NUM2INT(v_fd); ret = setupterm(term, fd, &err); if (ret == ERR) { if (err == 1) rb_raise(eTermInfoError, "hardcopy terminal"); else if (err == 0) rb_raise(eTermInfoError, "terminal could not be found"); else if (err == -1) rb_raise(eTermInfoError, "terminfo database could not be found"); else rb_raise(eTermInfoError, "unexpected setupterm error"); } DATA_PTR(self) = cur_term; return INT2NUM(err); }
static void setup(VALUE self) { TERMINAL *old; TERMINAL *term = check_rt(self); if (term == NULL) { rb_raise(eTermInfoError, "terminfo object not initialized"); } if (cur_term == term) return; old = set_curterm(term); }
/* Warning this function assumes the lock is already taken */ rt_info_t* find_rule_by_prefix_unsafe(ptree_t *pt, ptree_node_t *noprefix, str prefix, unsigned int grp_id, unsigned int *matched_len) { unsigned int rule_idx = 0; rt_info_t *rt_info; rt_info = get_prefix(pt, &prefix, grp_id,matched_len, &rule_idx); if (rt_info==NULL) { LM_DBG("no matching for prefix \"%.*s\"\n", prefix.len, prefix.s); /* try prefixless rules */ rt_info = check_rt( noprefix, grp_id); if (rt_info == NULL) LM_DBG("no prefixless matching for " "grp %d\n", grp_id); } return rt_info; }