Adapted two callers to handle return codes instead of relying on the
exit call. Rest of upstream callers are prepared to handle return
values.

Signed-off-by: Niklas Söderlund <[email protected]>
---
 serprog.c |   34 ++++++++++++++++++++++------------
 1 file changed, 22 insertions(+), 12 deletions(-)

diff --git a/serprog.c b/serprog.c
index f03d332..aac10af 100644
--- a/serprog.c
+++ b/serprog.c
@@ -246,17 +246,23 @@ static int sp_docommand(uint8_t command, uint32_t parmlen,
        unsigned char c;
        if (sp_automatic_cmdcheck(command))
                return 1;
-       if (write(sp_fd, &command, 1) != 1)
-               sp_die("Error: cannot write op code");
-       if (write(sp_fd, params, parmlen) != (parmlen))
-               sp_die("Error: cannot write parameters");
-       if (read(sp_fd, &c, 1) != 1)
-               sp_die("Error: cannot read from device");
+       if (write(sp_fd, &command, 1) != 1) {
+               msg_perr("Error: cannot write op code: %s\n", strerror(errno));
+               return 1;
+       }
+       if (write(sp_fd, params, parmlen) != (parmlen)) {
+               msg_perr("Error: cannot write parameters: %s\n", 
strerror(errno));
+               return 1;
+       }
+       if (read(sp_fd, &c, 1) != 1) {
+               msg_perr("Error: cannot read from device: %s\n", 
strerror(errno));
+               return 1;
+       }
        if (c == S_NAK)
                return 1;
        if (c != S_ACK) {
-               msg_perr("Error: invalid response 0x%02X from device\n",c);
-               exit(1);
+               msg_perr("Error: invalid response 0x%02X from device\n", c);
+               return 1;
        }
        if (retlen) {
                int rd_bytes = 0;
@@ -264,8 +270,10 @@ static int sp_docommand(uint8_t command, uint32_t parmlen,
                        int r;
                        r = read(sp_fd, retparms + rd_bytes,
                                 retlen - rd_bytes);
-                       if (r <= 0)
-                               sp_die("Error: cannot read return parameters");
+                       if (r <= 0) {
+                               msg_perr("Error: cannot read return parameters: 
%s\n", strerror(errno));
+                               return 1;
+                       }
                        rd_bytes += r;
                } while (rd_bytes != retlen);
        }
@@ -491,7 +499,8 @@ int serprog_init(void)
                   the programmer to tell us its limits, but if it doesn't, we
                   will assume stuff, so it's in the programmers best interest
                   to tell us. */
-               sp_docommand(S_CMD_S_BUSTYPE, 1, &bt, 0, NULL);
+               if (sp_docommand(S_CMD_S_BUSTYPE, 1, &bt, 0, NULL))
+                       return 1;
                if (!sp_docommand(S_CMD_Q_WRNMAXLEN, 0, NULL, 3, rbuf)) {
                        uint32_t v;
                        v = ((unsigned int)(rbuf[0]) << 0);
@@ -513,7 +522,8 @@ int serprog_init(void)
                        msg_pdbg(MSGHEADER "Maximum read-n length is %d\n", v);
                }
                bt = serprog_buses_supported;
-               sp_docommand(S_CMD_S_BUSTYPE, 1, &bt, 0, NULL);
+               if (sp_docommand(S_CMD_S_BUSTYPE, 1, &bt, 0, NULL))
+                       return 1;
        }
 
        if (serprog_buses_supported & BUS_NONSPI) {
-- 
1.7.10.3


_______________________________________________
flashrom mailing list
[email protected]
http://www.flashrom.org/mailman/listinfo/flashrom

Reply via email to