rtos: Rewrite rtos_try_next() for readability
authorPeter Stuge <peter@stuge.se>
Thu, 4 Oct 2012 12:35:18 +0000 (14:35 +0200)
committerPeter Stuge <peter@stuge.se>
Fri, 5 Oct 2012 21:03:04 +0000 (21:03 +0000)
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
src/rtos/rtos.c

index e0160839bbc4cc93566c73c97735b395fbe81a02..aa0976b5c5b2dede68dda6e3c4aef0413320269b 100644 (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)

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)