From fcce4d2de3ad8f702a66efb08f550edf3bcd1131 Mon Sep 17 00:00:00 2001 From: springob Date: Fri, 22 Oct 2010 14:29:56 +0000 Subject: [PATCH] * serial_open() calls will now return -1 on error (no call to exit()) git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk/avrdude@948 81a1dc3b-b13d-400b-aceb-764788c761c2 --- ChangeLog | 15 +++++++++++++++ arduino.c | 4 +++- avr910.c | 4 +++- buspirate.c | 4 +++- butterfly.c | 4 +++- jtagmkI.c | 4 +++- jtagmkII.c | 28 +++++++++++++++++++++------- ser_avrdoper.c | 4 +++- ser_posix.c | 10 ++++++---- serial.h | 3 ++- stk500.c | 4 +++- stk500v2.c | 20 +++++++++++++++----- usb_libusb.c | 4 ++-- 13 files changed, 82 insertions(+), 26 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4f4df927..58a65f87 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2010-10-22 Nils Springob + + * serial.h: serial_open() calls will now return -1 on error (no call to exit()) + * buspirate.c: (Dito.) + * jtagmkII.c: (Dito.) + * butterfly.c: (Dito.) + * jtagmkI.c: (Dito.) + * arduino.c: (Dito.) + * avr910.c: (Dito.) + * stk500.c: (Dito.) + * ser_avrdoper.c: (Dito.) + * stk500v2.c: (Dito.) + * ser_posix.c: (Dito.) + * usb_libusb.c: (Dito.) + 2010-07-27 Joerg Wunsch bug #30566: MinGW + Ubuntu 9.04 diff --git a/arduino.c b/arduino.c index b60954a6..123e83e8 100644 --- a/arduino.c +++ b/arduino.c @@ -86,7 +86,9 @@ static int arduino_read_sig_bytes(PROGRAMMER * pgm, AVRPART * p, AVRMEM * m) static int arduino_open(PROGRAMMER * pgm, char * port) { strcpy(pgm->port, port); - serial_open(port, pgm->baudrate? pgm->baudrate: 115200, &pgm->fd); + if (serial_open(port, pgm->baudrate? pgm->baudrate: 115200, &pgm->fd)==-1) { + return -1; + } /* Clear DTR and RTS to unload the RESET capacitor * (for example in Arduino) */ diff --git a/avr910.c b/avr910.c index b428989d..1bce60fa 100644 --- a/avr910.c +++ b/avr910.c @@ -383,7 +383,9 @@ static int avr910_open(PROGRAMMER * pgm, char * port) } strcpy(pgm->port, port); - serial_open(port, pgm->baudrate, &pgm->fd); + if (serial_open(port, pgm->baudrate, &pgm->fd)==-1) { + return -1; + } /* * drain any extraneous input diff --git a/buspirate.c b/buspirate.c index d57b9c3c..d2034aab 100644 --- a/buspirate.c +++ b/buspirate.c @@ -374,7 +374,9 @@ static int buspirate_open(struct programmer_t *pgm, char * port) pgm->baudrate = 115200; strcpy(pgm->port, port); - serial_open(port, pgm->baudrate, &pgm->fd); + if (serial_open(port, pgm->baudrate, &pgm->fd)==-1) { + return -1; + } /* drain any extraneous input */ serial_drain(&pgm->fd, 0); diff --git a/butterfly.c b/butterfly.c index 38149dfe..1a2ddf40 100644 --- a/butterfly.c +++ b/butterfly.c @@ -356,7 +356,9 @@ static int butterfly_open(PROGRAMMER * pgm, char * port) if(pgm->baudrate == 0) { pgm->baudrate = 19200; } - serial_open(port, pgm->baudrate, &pgm->fd); + if (serial_open(port, pgm->baudrate, &pgm->fd)==-1) { + return -1; + } /* * drain any extraneous input diff --git a/jtagmkI.c b/jtagmkI.c index 85f12811..cb1f84a6 100644 --- a/jtagmkI.c +++ b/jtagmkI.c @@ -673,7 +673,9 @@ static int jtagmkI_open(PROGRAMMER * pgm, char * port) fprintf(stderr, "%s: jtagmkI_open(): trying to sync at baud rate %ld:\n", progname, baudtab[i].baud); - serial_open(port, baudtab[i].baud, &pgm->fd); + if (serial_open(port, baudtab[i].baud, &pgm->fd)==-1) { + return -1; + } /* * drain any extraneous input diff --git a/jtagmkII.c b/jtagmkII.c index 6be7ae45..8ca265dc 100644 --- a/jtagmkII.c +++ b/jtagmkII.c @@ -1420,7 +1420,9 @@ static int jtagmkII_open(PROGRAMMER * pgm, char * port) } strcpy(pgm->port, port); - serial_open(port, baud, &pgm->fd); + if (serial_open(port, baud, &pgm->fd)==-1) { + return -1; + } /* * drain any extraneous input @@ -1465,7 +1467,9 @@ static int jtagmkII_open_dw(PROGRAMMER * pgm, char * port) } strcpy(pgm->port, port); - serial_open(port, baud, &pgm->fd); + if (serial_open(port, baud, &pgm->fd)==-1) { + return -1; + } /* * drain any extraneous input @@ -1510,7 +1514,9 @@ static int jtagmkII_open_pdi(PROGRAMMER * pgm, char * port) } strcpy(pgm->port, port); - serial_open(port, baud, &pgm->fd); + if (serial_open(port, baud, &pgm->fd)==-1) { + return -1; + } /* * drain any extraneous input @@ -1556,7 +1562,9 @@ static int jtagmkII_dragon_open(PROGRAMMER * pgm, char * port) } strcpy(pgm->port, port); - serial_open(port, baud, &pgm->fd); + if (serial_open(port, baud, &pgm->fd)==-1) { + return -1; + } /* * drain any extraneous input @@ -1602,7 +1610,9 @@ static int jtagmkII_dragon_open_dw(PROGRAMMER * pgm, char * port) } strcpy(pgm->port, port); - serial_open(port, baud, &pgm->fd); + if (serial_open(port, baud, &pgm->fd)==-1) { + return -1; + } /* * drain any extraneous input @@ -1648,7 +1658,9 @@ static int jtagmkII_dragon_open_pdi(PROGRAMMER * pgm, char * port) } strcpy(pgm->port, port); - serial_open(port, baud, &pgm->fd); + if (serial_open(port, baud, &pgm->fd)==-1) { + return -1; + } /* * drain any extraneous input @@ -3118,7 +3130,9 @@ static int jtagmkII_open32(PROGRAMMER * pgm, char * port) } strcpy(pgm->port, port); - serial_open(port, baud, &pgm->fd); + if (serial_open(port, baud, &pgm->fd)==-1) { + return -1; + } /* * drain any extraneous input diff --git a/ser_avrdoper.c b/ser_avrdoper.c index ed0af07a..e11fc39c 100644 --- a/ser_avrdoper.c +++ b/ser_avrdoper.c @@ -504,7 +504,7 @@ static char *usbErrorText(int usbErrno) /* ------------------------------------------------------------------------- */ -static void avrdoper_open(char *port, long baud, union filedescriptor *fdp) +static int avrdoper_open(char *port, long baud, union filedescriptor *fdp) { int rval; char *vname = "obdev.at"; @@ -514,7 +514,9 @@ static void avrdoper_open(char *port, long baud, union filedescriptor *fdp) if(rval != 0){ fprintf(stderr, "%s: avrdoper_open(): %s\n", progname, usbErrorText(rval)); exit(1); + //return -1; } + return 0; } /* ------------------------------------------------------------------------- */ diff --git a/ser_posix.c b/ser_posix.c index 5344115b..accabb02 100644 --- a/ser_posix.c +++ b/ser_posix.c @@ -247,7 +247,7 @@ static int ser_set_dtr_rts(union filedescriptor *fdp, int is_on) return 0; } -static void ser_open(char * port, long baud, union filedescriptor *fdp) +static int ser_open(char * port, long baud, union filedescriptor *fdp) { int rc; int fd; @@ -258,7 +258,7 @@ static void ser_open(char * port, long baud, union filedescriptor *fdp) */ if (strncmp(port, "net:", strlen("net:")) == 0) { net_open(port + strlen("net:"), fdp); - return; + return 0; } /* @@ -268,7 +268,7 @@ static void ser_open(char * port, long baud, union filedescriptor *fdp) if (fd < 0) { fprintf(stderr, "%s: ser_open(): can't open device \"%s\": %s\n", progname, port, strerror(errno)); - exit(1); + return -1; } fdp->ifd = fd; @@ -281,8 +281,10 @@ static void ser_open(char * port, long baud, union filedescriptor *fdp) fprintf(stderr, "%s: ser_open(): can't set attributes for device \"%s\": %s\n", progname, port, strerror(-rc)); - exit(1); + close(fd); + return -1; } + return 0; } diff --git a/serial.h b/serial.h index 4a52f19b..edb352a9 100644 --- a/serial.h +++ b/serial.h @@ -44,7 +44,8 @@ union filedescriptor struct serial_device { - void (*open)(char * port, long baud, union filedescriptor *fd); + // open should return -1 on error, other values on success + int (*open)(char * port, long baud, union filedescriptor *fd); int (*setspeed)(union filedescriptor *fd, long baud); void (*close)(union filedescriptor *fd); diff --git a/stk500.c b/stk500.c index 4e7c4fff..08050440 100644 --- a/stk500.c +++ b/stk500.c @@ -657,7 +657,9 @@ static void stk500_enable(PROGRAMMER * pgm) static int stk500_open(PROGRAMMER * pgm, char * port) { strcpy(pgm->port, port); - serial_open(port, pgm->baudrate? pgm->baudrate: 115200, &pgm->fd); + if (serial_open(port, pgm->baudrate? pgm->baudrate: 115200, &pgm->fd)==-1) { + return -1; + } /* * drain any extraneous input diff --git a/stk500v2.c b/stk500v2.c index 25f501be..62faacc9 100644 --- a/stk500v2.c +++ b/stk500v2.c @@ -1313,7 +1313,9 @@ static int stk500v2_open(PROGRAMMER * pgm, char * port) } strcpy(pgm->port, port); - serial_open(port, baud, &pgm->fd); + if (serial_open(port, baud, &pgm->fd)==-1) { + return -1; + } /* * drain any extraneous input @@ -1363,7 +1365,9 @@ static int stk600_open(PROGRAMMER * pgm, char * port) } strcpy(pgm->port, port); - serial_open(port, baud, &pgm->fd); + if (serial_open(port, baud, &pgm->fd)==-1) { + return -1; + } /* * drain any extraneous input @@ -2818,7 +2822,9 @@ static int stk500v2_jtagmkII_open(PROGRAMMER * pgm, char * port) } strcpy(pgm->port, port); - serial_open(port, baud, &pgm->fd); + if (serial_open(port, baud, &pgm->fd)==-1) { + return -1; + } /* * drain any extraneous input @@ -2906,7 +2912,9 @@ static int stk500v2_dragon_isp_open(PROGRAMMER * pgm, char * port) } strcpy(pgm->port, port); - serial_open(port, baud, &pgm->fd); + if (serial_open(port, baud, &pgm->fd)==-1) { + return -1; + } /* * drain any extraneous input @@ -2977,7 +2985,9 @@ static int stk500v2_dragon_hv_open(PROGRAMMER * pgm, char * port) } strcpy(pgm->port, port); - serial_open(port, baud, &pgm->fd); + if (serial_open(port, baud, &pgm->fd)==-1) { + return -1; + } /* * drain any extraneous input diff --git a/usb_libusb.c b/usb_libusb.c index 679f2eff..a3cbea04 100644 --- a/usb_libusb.c +++ b/usb_libusb.c @@ -56,7 +56,7 @@ static int usb_interface; * The "baud" parameter is meaningless for USB devices, so we reuse it * to pass the desired USB device ID. */ -static void usbdev_open(char * port, long baud, union filedescriptor *fd) +static int usbdev_open(char * port, long baud, union filedescriptor *fd) { char string[256]; char product[256]; @@ -220,7 +220,7 @@ static void usbdev_open(char * port, long baud, union filedescriptor *fd) progname, USBDEV_BULK_EP_READ); fd->usb.ep = USBDEV_BULK_EP_READ; } - return; + return 0; } trynext: usb_close(udev);