Browse Source

rtos: Rewrite rtos_try_next() for readability

The new code is almost functionally equivalent to the old.

The function now returns 0 instead of -1 if target->rtos has not yet
been allocated. All call sites only test for success, and in practise
that is also the only thing that matters; if the function successfully
iterated to the next RTOS or not.

Other than that the only difference is that the code is now readable.

Many thanks to Matthias Blaicher for the fix to the iteration error!

Change-Id: I3342826f653b5e46c99ad1f58eec26ff10795c33
Signed-off-by: Peter Stuge <peter@stuge.se>
Reviewed-on: http://openocd.zylin.com/894
Reviewed-by: Matthias Blaicher <matthias@blaicher.com>
Tested-by: jenkins
tags/v0.7.0-rc1
Peter Stuge 11 years ago
parent
commit
44e6d7720b
1 changed files with 15 additions and 18 deletions
  1. +15
    -18
      src/rtos/rtos.c

+ 15
- 18
src/rtos/rtos.c View File

@@ -456,28 +456,25 @@ int rtos_generic_stack_read(struct target *target,

int rtos_try_next(struct target *target)
{
int x;
struct rtos *os = target->rtos;
struct rtos_type **type = rtos_types;

if (target->rtos == NULL)
return -1;

for (x = 0; rtos_types[x]; x++) {
if (target->rtos->type == rtos_types[x]) {
/* found */
if (rtos_types[x+1] != NULL) {
target->rtos->type = rtos_types[x+1];
if (target->rtos->symbols != NULL)
free(target->rtos->symbols);
return 1;
} else {
/* No more rtos types */
return 0;
}
if (!os)
return 0;

}
while (*type && os->type != *type)
type++;

if (!*type || !*(++type))
return 0;

os->type = *type;
if (os->symbols) {
free(os->symbols);
os->symbols = NULL;
}
return 0;

return 1;
}

static void hex_to_str(char *dst, char *hex_src)


Loading…
Cancel
Save