aboutsummaryrefslogtreecommitdiff
path: root/src/rtos
diff options
context:
space:
mode:
authorPeter Stuge <peter@stuge.se>2012-10-04 14:35:18 +0200
committerPeter Stuge <peter@stuge.se>2012-10-05 21:03:04 +0000
commit44e6d7720be9f5536d0ff4f1bcbff96ce8d4d336 (patch)
tree58d8452cbd56d5280fbeaf65c31f601b5efbb7f9 /src/rtos
parent16cd4e6fce1fd760517cf4d41ac54416c246bd83 (diff)
downloadriscv-openocd-44e6d7720be9f5536d0ff4f1bcbff96ce8d4d336.zip
riscv-openocd-44e6d7720be9f5536d0ff4f1bcbff96ce8d4d336.tar.gz
riscv-openocd-44e6d7720be9f5536d0ff4f1bcbff96ce8d4d336.tar.bz2
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
Diffstat (limited to 'src/rtos')
-rw-r--r--src/rtos/rtos.c33
1 files changed, 15 insertions, 18 deletions
diff --git a/src/rtos/rtos.c b/src/rtos/rtos.c
index e016083..aa0976b 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)