#include #include #include "librez.h" #include "myserv.h" static int librez_dotokens(t_rez *d_rez, t_librez_fd rezid, char **tokens, int nbtokens) { int i; for (i = 0; d_rez->p_tokens_func[i].name; ++i) if (!strcmp(d_rez->p_tokens_func[i].name, tokens[0])) { if (d_rez->p_tokens_func[i].nbtokens > nbtokens) { if (d_rez->p_tokens_warn[LIBREZ_TOKENS_WARN_NBTOKENS]) (*d_rez->p_tokens_warn[LIBREZ_TOKENS_WARN_NBTOKENS])(rezid, d_rez->data, tokens, nbtokens); else librez_myserv_hup(d_rez->tl_rezid_2_ifds[rezid], d_rez); } else (*d_rez->p_tokens_func[i].f)(rezid, d_rez->data, tokens, nbtokens); break ; } return (d_rez->p_tokens_func[i].name ? !0 : 0); } void librez_dothis(t_rez *d_rez, void *data, t_librez_fd rezid) { char *buf; char *tokens[MY_TOKENS_SIZE]; char *p; int n = 0; int isok = 0; d_rez->data = data; buf = strdup(d_rez->list_buf); for (p = strtok(buf, " \t"); p; p = strtok(NULL, " \t")) if (n < MY_TOKENS_SIZE - 1) tokens[n++] = p; tokens[n] = NULL; if (tokens[0]) { isok = librez_dotokens(d_rez, rezid, tokens, n); if (!isok) { if (d_rez->p_tokens_warn[LIBREZ_TOKENS_WARN_NOTOKENS]) (*d_rez->p_tokens_warn[LIBREZ_TOKENS_WARN_NOTOKENS])(rezid, d_rez->data, tokens, n); else librez_myserv_hup(d_rez->tl_rezid_2_ifds[rezid], d_rez); } } free(buf); }