X-Git-Url: http://lists.indexdata.dk/cgi-bin?a=blobdiff_plain;f=kernel%2Furp.c;h=1f1315b986fae50d3dbbd5bdad1c564f74984b6c;hb=ce3ef5c24347417e973e9e6739466dfc701fe19d;hp=8ab8af8dc5964607d04ca697e57aac67f538fe44;hpb=44d726c4960ab2aa9914d27a9cb423983701bb85;p=egate.git diff --git a/kernel/urp.c b/kernel/urp.c index 8ab8af8..1f1315b 100644 --- a/kernel/urp.c +++ b/kernel/urp.c @@ -45,7 +45,20 @@ * Europagate, 1995 * * $Log: urp.c,v $ - * Revision 1.42 1995/07/03 12:59:29 adam + * Revision 1.46 1995/07/28 10:51:09 adam + * Bug fix: account from previous session had effect when new target command + * was executed. + * + * Revision 1.45 1995/07/20 08:20:24 adam + * Minor changes. + * + * Revision 1.44 1995/07/11 12:28:53 adam + * New functions ccl_token_simple and ccl_token_del used. + * + * Revision 1.43 1995/07/11 11:49:13 adam + * LINE_MAX renamed to STR_LINE_MAX. + * + * Revision 1.42 1995/07/03 12:59:29 adam * New option for eti: -c dir to chdir before start. * Setting change: gw.max.show defaults to 100. * @@ -209,7 +222,7 @@ static void present (const char *set, int offset, int number, struct ccl_token *format_token); -static char line_buf[LINE_MAX+1]; +static char line_buf[STR_LINE_MAX+1]; static void put_esc_str (const char *s) { @@ -267,14 +280,13 @@ struct command_word { char *resource_suffix; }; -static int command_search (struct command_word *tab, struct ccl_token *cmd, -const char *resource_prefix) +static int command_search_str (struct command_word *tab, const char *cmd_name, + int cmd_len, const char *resource_prefix) { int no = 1; assert (resource_prefix); assert (tab); - assert (cmd); while (tab->default_value) { char *cp, command_names[60]; @@ -293,8 +305,8 @@ const char *resource_prefix) if ((split = strchr (cp, ' '))) *split = '\0'; - if (cmd->len == strlen(cp) && - !memcmp (cmd->name, cp, cmd->len)) + if (cmd_len == strlen(cp) && + !memcmp (cmd_name, cp, cmd_len)) return no; if (!split) break; @@ -306,6 +318,12 @@ const char *resource_prefix) return 0; } +static int command_search (struct command_word *tab, struct ccl_token *cmd, + const char *resource_prefix) +{ + return command_search_str (tab, cmd->name, cmd->len, resource_prefix); +} + static struct error_no_struct { int no; char *resource_name; @@ -343,7 +361,7 @@ static int email_header (struct str_queue *sq, { *from_str = '\0'; *subject_str = '\0'; - while (str_queue_deq (sq, line_buf, LINE_MAX)) + while (str_queue_deq (sq, line_buf, STR_LINE_MAX)) { if (line_buf[0] == '\n') return 0; @@ -498,6 +516,7 @@ static int exec_account (struct ccl_token *list) } else *info.account = '\0'; + info.account_in_session = 1; return 0; } @@ -509,7 +528,10 @@ static int exec_target (struct ccl_token *list) len = list->len; memcpy (info.target, list->name, len); info.target [len] = '\0'; - + + if (!info.account_in_session) + *info.account = '\0'; + info.account_in_session = 0; read_kernel_res (); return reopen_target (); } @@ -977,12 +999,16 @@ static int exec_command (const char *str, int *stop_flag) { NULL, NULL } }; - struct ccl_token *cmd = ccl_tokenize (str); + struct ccl_token *cmd; + const char *cp = str; int no; + while (*cp && *cp != ' ' && *cp != '\n' && *cp != '\t' && *cp != '\r') + cp++; + *stop_flag = 0; - if (cmd->kind != CCL_TOK_EOL && - (no = command_search (command_tab, cmd, "ccl.command."))) + no = command_search_str (command_tab, str, cp-str, "ccl.command."); + if (no) { if (no == 1 || no == 2 || no == 3) /* find/show/base? */ { @@ -1002,33 +1028,50 @@ static int exec_command (const char *str, int *stop_flag) fprintf (reply_fd, "\n> %s\n", str); switch (no) { - case 1: - return exec_find (cmd->next, str); - case 2: - return exec_show (cmd->next); - case 3: - return exec_base (cmd->next); - case 4: - return exec_help (cmd->next); + case 1: /* find */ + cmd = ccl_tokenize (cp); + exec_find (cmd, str); + break; + case 2: /* show */ + cmd = ccl_tokenize (cp); + exec_show (cmd); + break; + case 3: /* base */ + cmd = ccl_token_simple (cp); + exec_base (cmd); + break; + case 4: /* help */ + cmd = ccl_token_simple (cp); + exec_help (cmd); + break; case 6: /* continue */ *stop_flag = 2; return 0; case 7: /* status */ - return exec_status (cmd->next); + exec_status (cmd); + return 0; case 8: /* stop */ *stop_flag = 1; return 0; case 9: /* target */ - return exec_target (cmd->next); + cmd = ccl_token_simple (cp); + exec_target (cmd); + break; case 10: /* def */ - return exec_def (cmd->next); - case 11: - return exec_account (cmd->next); + cmd = ccl_token_simple (cp); + exec_def (cmd); + break; + case 11: /* account */ + cmd = ccl_token_simple (cp); + exec_account (cmd); + break; default: + cmd = NULL; fprintf (reply_fd, "%s\n", gw_res_get (info.kernel_res, "gw.err.unimplemented", "Not implemented yet")); } + ccl_token_del (cmd); } else { @@ -1097,7 +1140,7 @@ int urp_command (struct str_queue *queue) char *cp; int stop_flag; - while (str_queue_deq (queue, line_buf, LINE_MAX)) + while (str_queue_deq (queue, line_buf, STR_LINE_MAX)) { if (line_buf[0] == '\n') if (info.command_no) @@ -1117,7 +1160,7 @@ int urp_command (struct str_queue *queue) if (stop_flag) { info.command_no++; /* prevent help! */ - while (str_queue_deq (queue, line_buf, LINE_MAX)) + while (str_queue_deq (queue, line_buf, STR_LINE_MAX)) ; return stop_flag; }