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("'... ");
|