Better error handling in parser_register_cmd()
authorlottaviano <lottaviano@38d2e660-2303-0410-9eaa-f027e97ec537>
Tue, 17 May 2011 09:49:37 +0000 (09:49 +0000)
committerlottaviano <lottaviano@38d2e660-2303-0410-9eaa-f027e97ec537>
Tue, 17 May 2011 09:49:37 +0000 (09:49 +0000)
The parser_register_cmd() function does not return any error in case the
hashtable used for storing the commands is full, a condition that is
hard to debug.

This patch modifies the function prototype to return success or failure
and changes the REGISTER_CMD macro to detect the error.

git-svn-id: https://src.develer.com/svnoss/bertos/trunk@4900 38d2e660-2303-0410-9eaa-f027e97ec537

bertos/mware/parser.c
bertos/mware/parser.h

index 142feba68c8a895b4c8932ccbc1c109707ac5c26..71aec30dc980f58d1c4b1ada8060224c96878e7c 100644 (file)
@@ -309,10 +309,11 @@ bool parser_process_line(const char* input)
  * Register a new command into the parser
  *
  * \param cmd Command template describing the command
+ * \return true if registration was successful, false otherwise
  */
-void parser_register_cmd(const struct CmdTemplate* cmd)
+bool parser_register_cmd(const struct CmdTemplate* cmd)
 {
-       ht_insert(&commands, cmd);
+       return ht_insert(&commands, cmd);
 }
 
 void parser_init(void)
index ca1d26e99bfa29b030acc86699db9554ace8657f..281db3964c05e51c8a85fe110daf8a670fb3947b 100644 (file)
 #include "cfg/cfg_parser.h"
 
 #include <cpu/types.h>
+#include <cfg/debug.h>
 
 /**
  * Error generated by the commands through the return code.
@@ -163,7 +164,11 @@ struct CmdTemplate
  *
  * \param NAME Command name to register
  */
-#define REGISTER_CMD(NAME) REGISTER_FUNCTION(&cmd_ ## NAME ## _template)
+#define REGISTER_CMD(NAME) \
+       do { \
+               if (!REGISTER_FUNCTION(&cmd_ ## NAME ## _template)) \
+                       ASSERT2(0, "Error in registering command, no space left"); \
+       } while (0)
 
 /**
  * Utility macro to create a command template.
@@ -219,7 +224,7 @@ MAKE_TEMPLATE(NAME, ARGS, RES, FLAGS)
  */
 void parser_init(void);
 
-void parser_register_cmd(const struct CmdTemplate* cmd);
+bool parser_register_cmd(const struct CmdTemplate* cmd);
 
 
 /**