summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbernard.xiong <[email protected]>2010-03-01 06:41:13 +0000
committerbernard.xiong <[email protected]>2010-03-01 06:41:13 +0000
commit8aaddbaf384c7a1599145e15919ae10c2373bf04 (patch)
tree5b417e357bfc98af8c9c1a8fbaa225d5e190e16a
parent9f58705a39958a2a70adb05a5dab94168b5b0eed (diff)
fix some bugs in finsh for NULL node.
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@455 bbd45198-f89e-11dd-88c7-29a3b14d5316
-rw-r--r--finsh/finsh_parser.c15
-rw-r--r--finsh/shell.c2
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]);