diff options
| author | bernard.xiong <[email protected]> | 2010-03-01 06:41:13 +0000 |
|---|---|---|
| committer | bernard.xiong <[email protected]> | 2010-03-01 06:41:13 +0000 |
| commit | 8aaddbaf384c7a1599145e15919ae10c2373bf04 (patch) | |
| tree | 5b417e357bfc98af8c9c1a8fbaa225d5e190e16a | |
| parent | 9f58705a39958a2a70adb05a5dab94168b5b0eed (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.c | 15 | ||||
| -rw-r--r-- | 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]); |
