fix segmentaion fault in CMDList

This commit is contained in:
Laila van Reenen 2024-04-06 13:36:47 +02:00
parent d99ad2ad6d
commit b350e78f7d

View File

@ -53,13 +53,11 @@ int CMDList_add(CMDList_t *list, CMD_t* cmd)
if (*list_p == NULL) if (*list_p == NULL)
{ // it does not point to another list { // it does not point to another list
printf("create new sub list\n");
// allocate a new list for it // allocate a new list for it
*list_p = CMDList_init(); *list_p = CMDList_init();
if (list_p == NULL) if (list_p == NULL)
{ // allocation faild (memory full?) { // allocation faild (memory full?)
returnCode = -2; returnCode = -2;
printf("ERROR: failt to init CMDList\n");
} }
// update list_p for the next list // update list_p for the next list
@ -67,14 +65,12 @@ int CMDList_add(CMDList_t *list, CMD_t* cmd)
} }
else else
{ // it points to an other list { // it points to an other list
printf("move to sub list\n");
// update pointer to this list // update pointer to this list
list_p = (CMDList_t**)(*list_p); list_p = (CMDList_t**)(*list_p);
} }
} }
else else
{ // invalid caracter { // invalid caracter
printf("invaled char\n");
break; break;
} }
@ -82,14 +78,17 @@ int CMDList_add(CMDList_t *list, CMD_t* cmd)
read_p += 1; read_p += 1;
} }
printf("return code: %i\n", returnCode);
if (returnCode >= 0) if (returnCode >= 0)
{ // no errors { // no errors
if (((CMDList_t*)list_p)->cmd != NULL)
{ // replacing a command
returnCode = 1;
}
// add command in it's spot // add command in it's spot
(**list_p).cmd = cmd; ((CMDList_t*)list_p)->cmd = cmd;
} }
printf("return code: %i\n", returnCode);
return returnCode; return returnCode;
} }
@ -109,37 +108,7 @@ CMD_t* CMDList_get(CMDList_t *list, char* cmd)
{ // valid character { // valid character
// get memory address of the caracter in the CMDList // get memory address of the caracter in the CMDList
// list_p += (c - 'A') * sizeof(CMDList_t*); list_p += (c - 'A');
switch (c)
{
case 'A': list_p = list_p->a; break;
case 'B': list_p = list_p->b; break;
case 'C': list_p = list_p->c; break;
case 'D': list_p = list_p->d; break;
case 'E': list_p = list_p->e; break;
case 'F': list_p = list_p->f; break;
case 'G': list_p = list_p->g; break;
case 'H': list_p = list_p->h; break;
case 'I': list_p = list_p->i; break;
case 'J': list_p = list_p->j; break;
case 'K': list_p = list_p->k; break;
case 'L': list_p = list_p->l; break;
case 'M': list_p = list_p->m; break;
case 'N': list_p = list_p->n; break;
case 'O': list_p = list_p->o; break;
case 'P': list_p = list_p->p; break;
case 'Q': list_p = list_p->q; break;
case 'R': list_p = list_p->r; break;
case 'S': list_p = list_p->s; break;
case 'T': list_p = list_p->t; break;
case 'U': list_p = list_p->u; break;
case 'V': list_p = list_p->v; break;
case 'W': list_p = list_p->w; break;
case 'X': list_p = list_p->x; break;
case 'Y': list_p = list_p->y; break;
case 'Z': list_p = list_p->z; break;
}
if (*((CMDList_t**)list_p) == NULL) if (*((CMDList_t**)list_p) == NULL)
{ // no command found { // no command found
@ -165,12 +134,17 @@ CMD_t* CMDList_get(CMDList_t *list, char* cmd)
if (list_p->cmd == NULL) if (list_p->cmd == NULL)
{ // command incomplete { // command incomplete
found = false; found = false;
cmd_object = NULL;
} }
else else
{ {
cmd_object = list_p->cmd; cmd_object = list_p->cmd;
} }
} }
else
{
cmd_object = NULL;
}
return cmd_object; return cmd_object;
} }