From 8aaddbaf384c7a1599145e15919ae10c2373bf04 Mon Sep 17 00:00:00 2001 From: "bernard.xiong" Date: Mon, 1 Mar 2010 06:41:13 +0000 Subject: [PATCH] fix some bugs in finsh for NULL node. git-svn-id: https://rt-thread.googlecode.com/svn/trunk@455 bbd45198-f89e-11dd-88c7-29a3b14d5316 --- finsh/finsh_parser.c | 15 +++++++++++---- finsh/shell.c | 2 ++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/finsh/finsh_parser.c b/finsh/finsh_parser.c index b308e6d8f5..210ae5e04e 100644 --- a/finsh/finsh_parser.c +++ b/finsh/finsh_parser.c @@ -656,8 +656,11 @@ static struct finsh_node* proc_cast_expr(struct finsh_parser* self) match_token(token, &(self->token), finsh_token_type_right_paren); cast = proc_cast_expr(self); - cast->data_type = type; - return cast; + if (cast != NULL) + { + cast->data_type = type; + return cast; + } } finsh_token_replay(&(self->token)); @@ -835,6 +838,7 @@ static struct finsh_node* proc_param_list(struct finsh_parser* self) struct finsh_node *node, *assign; assign = proc_assign_expr(self); + if (assign == NULL) return NULL; node = assign; next_token(token, &(self->token)); @@ -867,8 +871,11 @@ static struct finsh_node* make_sys_node(u_char type, struct finsh_node* node1, s node = finsh_node_allocate(type); - finsh_node_child(node) = node1; - if (node1 != NULL) finsh_node_sibling(node1) = node2; + if (node1 != NULL) + { + finsh_node_child(node) = node1; + finsh_node_sibling(node1) = node2; + } else finsh_error_set(FINSH_ERROR_NULL_NODE); return node; diff --git a/finsh/shell.c b/finsh/shell.c index e87a7dc0ed..59293f0814 100644 --- a/finsh/shell.c +++ b/finsh/shell.c @@ -326,6 +326,8 @@ void finsh_thread_entry(void* parameter) continue; } + if (pos >= 256) /* it's a large line, discard it */ + pos = 0; line[pos] = ch; rt_kprintf("%c", line[pos]); -- GitLab