xsvf: add missing error propagation
[openocd.git] / src / xsvf / xsvf.c
index dff1a1ec2ab0c862246ce913e880fce660b5835c..14b9e28d89c56a7a00c6e379a74921599ec429aa 100644 (file)
@@ -269,7 +269,6 @@ COMMAND_HANDLER(handle_xsvf_command)
                 */
                if (collecting_path) {
                        tap_state_t     mystate;
-                       uint8_t         uc;
 
                        switch (opcode) {
                        case XCOMMENT:
@@ -332,7 +331,7 @@ COMMAND_HANDLER(handle_xsvf_command)
                                else
                                        jtag_add_pathmove(pathlen, path);
 
-                               result = jtag_get_error();
+                               result = jtag_execute_queue();
                                if (result != ERROR_OK) {
                                        LOG_ERROR("XSVF: pathmove error %d",
                                                        result);
@@ -511,61 +510,65 @@ COMMAND_HANDLER(handle_xsvf_command)
                                if (xruntest)
                                {
                                        result = svf_add_statemove(TAP_IDLE);
+                                       if (result != ERROR_OK)
+                                               return result;
 
                                        if (runtest_requires_tck)
                                                jtag_add_clocks(xruntest);
                                        else
                                                jtag_add_sleep(xruntest);
-                               }
-                               else if (xendir != TAP_DRPAUSE) /* we are already in TAP_DRPAUSE */
+                               } else if (xendir != TAP_DRPAUSE) {
+                                       /* we are already in TAP_DRPAUSE */
                                        result = svf_add_statemove(xenddr);
+                                       if (result != ERROR_OK)
+                                               return result;
+                               }
                        }
                        break;
 
                case XSETSDRMASKS:
-                       LOG_ERROR("unsupported XSETSDRMASKS\n");
+                       LOG_ERROR("unsupported XSETSDRMASKS");
                        unsupported = 1;
                        break;
 
                case XSDRINC:
-                       LOG_ERROR("unsupported XSDRINC\n");
+                       LOG_ERROR("unsupported XSDRINC");
                        unsupported = 1;
                        break;
 
                case XSDRB:
-                       LOG_ERROR("unsupported XSDRB\n");
+                       LOG_ERROR("unsupported XSDRB");
                        unsupported = 1;
                        break;
 
                case XSDRC:
-                       LOG_ERROR("unsupported XSDRC\n");
+                       LOG_ERROR("unsupported XSDRC");
                        unsupported = 1;
                        break;
 
                case XSDRE:
-                       LOG_ERROR("unsupported XSDRE\n");
+                       LOG_ERROR("unsupported XSDRE");
                        unsupported = 1;
                        break;
 
                case XSDRTDOB:
-                       LOG_ERROR("unsupported XSDRTDOB\n");
+                       LOG_ERROR("unsupported XSDRTDOB");
                        unsupported = 1;
                        break;
 
                case XSDRTDOC:
-                       LOG_ERROR("unsupported XSDRTDOC\n");
+                       LOG_ERROR("unsupported XSDRTDOC");
                        unsupported = 1;
                        break;
 
                case XSDRTDOE:
-                       LOG_ERROR("unsupported XSDRTDOE\n");
+                       LOG_ERROR("unsupported XSDRTDOE");
                        unsupported = 1;
                        break;
 
                case XSTATE:
                        {
                                tap_state_t     mystate;
-                               uint8_t                 uc;
 
                                if (read(xsvf_fd, &uc, 1) < 0)
                                {
@@ -762,7 +765,7 @@ COMMAND_HANDLER(handle_xsvf_command)
                                   XWAIT <uint8_t wait_state> <uint8_t end_state> <uint32_t usecs>
                                */
 
-                               uint8_t wait;
+                               uint8_t wait_local;
                                uint8_t end;
                                uint8_t delay_buf[4];
 
@@ -770,7 +773,7 @@ COMMAND_HANDLER(handle_xsvf_command)
                                tap_state_t end_state;
                                int     delay;
 
-                               if (read(xsvf_fd, &wait, 1) < 0
+                               if (read(xsvf_fd, &wait_local, 1) < 0
                                  || read(xsvf_fd, &end, 1) < 0
                                  || read(xsvf_fd, delay_buf, 4) < 0)
                                {
@@ -778,7 +781,7 @@ COMMAND_HANDLER(handle_xsvf_command)
                                        break;
                                }
 
-                               wait_state = xsvf_to_tap(wait);
+                               wait_state = xsvf_to_tap(wait_local);
                                end_state  = xsvf_to_tap(end);
                                delay      = be_to_h_u32(delay_buf);
 
@@ -792,8 +795,12 @@ COMMAND_HANDLER(handle_xsvf_command)
                                {
                                        /* FIXME handle statemove errors ... */
                                        result = svf_add_statemove(wait_state);
+                                       if (result != ERROR_OK)
+                                               return result;
                                        jtag_add_sleep(delay);
                                        result = svf_add_statemove(end_state);
+                                       if (result != ERROR_OK)
+                                               return result;
                                }
                        }
                        break;
@@ -806,14 +813,14 @@ COMMAND_HANDLER(handle_xsvf_command)
 
                                uint8_t  clock_buf[4];
                                uint8_t usecs_buf[4];
-                               uint8_t wait;
+                               uint8_t wait_local;
                                uint8_t end;
                                tap_state_t wait_state;
                                tap_state_t end_state;
                                int clock_count;
                                int usecs;
 
-                               if (read(xsvf_fd, &wait, 1) < 0
+                               if (read(xsvf_fd, &wait_local, 1) < 0
                                 ||  read(xsvf_fd, &end, 1) < 0
                                 ||  read(xsvf_fd, clock_buf, 4) < 0
                                 ||  read(xsvf_fd, usecs_buf, 4) < 0)
@@ -822,7 +829,7 @@ COMMAND_HANDLER(handle_xsvf_command)
                                        break;
                                }
 
-                               wait_state = xsvf_to_tap(wait);
+                               wait_state = xsvf_to_tap(wait_local);
                                end_state  = xsvf_to_tap(end);
 
                                clock_count = be_to_h_u32(clock_buf);
@@ -848,12 +855,16 @@ COMMAND_HANDLER(handle_xsvf_command)
 
                                /* FIXME handle statemove errors ... */
                                result = svf_add_statemove(wait_state);
+                               if (result != ERROR_OK)
+                                       return result;
 
                                jtag_add_clocks(clock_count);
 
                                jtag_add_sleep(usecs);
 
                                result = svf_add_statemove(end_state);
+                               if (result != ERROR_OK)
+                                       return result;
                        }
                        break;
 
@@ -927,6 +938,8 @@ COMMAND_HANDLER(handle_xsvf_command)
                                        struct scan_field field;
 
                                        result = svf_add_statemove(loop_state);
+                                       if (result != ERROR_OK)
+                                               return result;
                                        jtag_add_clocks(loop_clocks);
                                        jtag_add_sleep(loop_usecs);
 
@@ -995,7 +1008,7 @@ COMMAND_HANDLER(handle_xsvf_command)
                        break;
 
                default:
-                       LOG_ERROR("unknown xsvf command (0x%02X)\n", uc);
+                       LOG_ERROR("unknown xsvf command (0x%02X)", uc);
                        unsupported = 1;
                }
 
@@ -1005,7 +1018,11 @@ COMMAND_HANDLER(handle_xsvf_command)
 
                        /* upon error, return the TAPs to a reasonable state */
                        result = svf_add_statemove(TAP_IDLE);
+                       if (result != ERROR_OK)
+                               return result;
                        result = jtag_execute_queue();
+                       if (result != ERROR_OK)
+                               return result;
                        break;
                }
        }

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)