From: Erik M. <er...@us...> - 2001-09-15 20:35:55
|
Update of /cvsroot/blob/blob/src In directory usw-pr-cvs1:/tmp/cvs-serv27484 Modified Files: command.c Log Message: trying to explain your code to other people helps you understand it. this version actually works :) Index: command.c =================================================================== RCS file: /cvsroot/blob/blob/src/command.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- command.c 2001/09/15 20:14:23 1.3 +++ command.c 2001/09/15 20:35:52 1.4 @@ -42,8 +42,8 @@ #include "util.h" /* command list start and end. filled in by the linker */ -extern commandlist_t *__commandlist_start; -extern commandlist_t *__commandlist_end; +extern u32 __commandlist_start; +extern u32 __commandlist_end; #if 0 @@ -56,17 +56,18 @@ /* the first command */ static commandlist_t *commands; +static commandlist_t *lastcommand; - void init_commands(void) { SerialOutputString("Command list start: 0x"); - SerialOutputHex((unsigned int)__commandlist_start); + SerialOutputHex((unsigned int) &__commandlist_start); SerialOutputString("\nCommand list end: 0x"); - SerialOutputHex((unsigned int)__commandlist_end); + SerialOutputHex((unsigned int) &__commandlist_end); SerialOutputByte('\n'); - commands = __commandlist_start; + commands = (commandlist_t *) &__commandlist_start; + lastcommand = (commandlist_t *) &__commandlist_end; } @@ -76,31 +77,18 @@ int len; SerialOutputString("*** " __FUNCTION__ " called\n"); - - for(cmd = commands; cmd->callback != NULL; cmd++) { - SerialOutputString("\n*** cmd = 0x"); - SerialOutputHex((u32)cmd); - - SerialOutputString("\n*** cmd->magic = 0x"); - SerialOutputHex((u32)cmd->magic); - - SerialOutputString("\n*** cmd->name = 0x"); - SerialOutputHex((u32)cmd->name); - - SerialOutputString("\n*** cmd->help = 0x"); - SerialOutputHex((u32)cmd->help); - SerialOutputString("\n*** cmd->callback = 0x"); - SerialOutputHex((u32)cmd->callback); - - SerialOutputString("\n*** cmd->next = 0x"); - SerialOutputHex((u32)cmd->next); - + for(cmd = commands; cmd != lastcommand; cmd++) { if(cmd->magic != COMMAND_MAGIC) { - SerialOutputString("*** Oops, not a command, continuing...\n"); - continue; + SerialOutputString("*** Invalid command list entry\n"); + return -1; } + if(cmd->callback == NULL) { + SerialOutputString("*** No callback\n"); + continue; + } + SerialOutputString("\n*** Trying to match command '"); SerialOutputString(cmd->name); SerialOutputString("'... "); |