void Xmatch(void) { word *p; char *subject; subject = list2str(runq->argv->words); setstatus("no match"); for(p = runq->argv->next->words;p;p = p->next) if(match(subject, p->word, '\0')){ setstatus(""); break; } efree(subject); poplist(); poplist(); }
void Xcase(void) { word *p; char *s; int ok = 0; s = list2str(runq->argv->next->words); for(p = runq->argv->words;p;p = p->next){ if(match(s, p->word, '\0')){ ok = 1; break; } } efree(s); if(ok) runq->pc++; else runq->pc = runq->code[runq->pc].i; poplist(); }
int run_net_script(envid_t veid, int op, list_head_t *ip_h, int state, int skip_arpdetect) { char *argv[3]; char *envp[10]; char *script; int ret; char buf[STR_SIZE]; int i = 0; char *skip_str = "SKIP_ARPDETECT=yes"; if (list_empty(ip_h)) return 0; snprintf(buf, sizeof(buf), "VEID=%d", veid); envp[i++] = strdup(buf); snprintf(buf, sizeof(buf), "VE_STATE=%s", state2str(state)); envp[i++] = strdup(buf); envp[i++] = list2str("IP_ADDR", ip_h); envp[i++] = strdup(ENV_PATH); if (skip_arpdetect) envp[i++] = strdup(skip_str); envp[i] = NULL; switch (op) { case ADD: script = VPS_NET_ADD; break; case DEL: script = VPS_NET_DEL; break; default: return 0; } argv[0] = script; argv[1] = NULL; ret = run_script(script, argv, envp, 0); free_arg(envp); return ret; }