Login Register






Thread Rating:
  • 0 Vote(s) - 0 Average


Implementing a basic jump table for dynamic command parsing filter_list
Author
Message
Implementing a basic jump table for dynamic command parsing #1
So, was in a PM with another member who was complaining about having to have a massive command parser with a shitload of if-strncmp's in it. I gave him this C code to solve that problem and be more clean, maybe you guys will like it as well:

Code:
#define ALLOWED_COMMANDS 2

void helpfunc(void)
{
   printf("help message\n");
}
void clearfunc(void)
{
   // some clear function
}

struct jmp_tbl_s
{
   const char *command;
   void (*handler)(void);
} jump_table[ALLOWED_COMMANDS] =
{
   (struct jmp_tbl_s)
   {
       .command = "help",
       .handler = &helpfunc
   },
   (struct jmp_tbl_s)
   {
       .command = "clear",
       .handler = &clearfunc
   }
};

void processCommand(const char *command)
{
   int i;
   size_t cmdlen;
   const size_t len = strlen(command);
   for (i = 0; i < ALLOWED_COMMANDS; ++i)
   {
       cmdlen = strlen(jump_table[i].command);
       if (!strncpy(jump_table[i].command, command, len > cmdlen ? cmdlen : len))
       {
           *(jump_table[i].handler)();
           break;
       }
   }
}

Reply





Messages In This Thread
Implementing a basic jump table for dynamic command parsing - by phyrrus9 - 04-17-2018, 04:43 PM



Users browsing this thread: 1 Guest(s)