X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Frtos%2Frtos.c;h=aa0976b5c5b2dede68dda6e3c4aef0413320269b;hp=e0160839bbc4cc93566c73c97735b395fbe81a02;hb=44e6d7720be9f5536d0ff4f1bcbff96ce8d4d336;hpb=16cd4e6fce1fd760517cf4d41ac54416c246bd83 diff --git a/src/rtos/rtos.c b/src/rtos/rtos.c index e0160839bb..aa0976b5c5 100644 --- a/src/rtos/rtos.c +++ b/src/rtos/rtos.c @@ -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)