--
Uwe Bonnes bon@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Institut fuer Kernphysik Schlossgartenstrasse 9 64289 Darmstadt
--------- Tel. 06151 162516 -------- Fax. 06151 164321 ----------
>From 3c6bde225a3a1ca84124c228072c4d31f24765bd Mon Sep 17 00:00:00 2001
From: Uwe Bonnes <bon@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Date: Mon, 20 Jun 2011 16:16:05 +0200
Subject: 1.0/example/baud_test.c: Clean up on error
---
examples/baud_test.c | 24 ++++++++++++++++++------
1 files changed, 18 insertions(+), 6 deletions(-)
diff --git a/examples/baud_test.c b/examples/baud_test.c
index d8d4886..d744a42 100644
--- a/examples/baud_test.c
+++ b/examples/baud_test.c
@@ -55,6 +55,7 @@ int main(int argc, char **argv)
unsigned char *txbuf;
unsigned char *rxbuf;
double start, duration, plan;
+ int retval= 0;
// default values
int baud=9600;
@@ -113,13 +114,15 @@ int main(int argc, char **argv)
if (ftdi_init(&ftdic) < 0)
{
fprintf(stderr, "ftdi_init failed\n");
- return EXIT_FAILURE;
+ retval = EXIT_FAILURE;
+ goto done;
}
if (ftdi_usb_open_string(&ftdic, devicedesc) < 0)
{
fprintf(stderr,"Can't open ftdi device:
%s\n",ftdi_get_error_string(&ftdic));
- return EXIT_FAILURE;
+ retval = EXIT_FAILURE;
+ goto do_deinit;
}
set_baud=baud;
@@ -135,7 +138,8 @@ int main(int argc, char **argv)
if (ftdi_set_bitmode(&ftdic, 0xFF,test_mode) < 0)
{
fprintf(stderr,"Can't set mode: %s\n",ftdi_get_error_string(&ftdic));
- return EXIT_FAILURE;
+ retval = EXIT_FAILURE;
+ goto do_close;
}
if (test_mode==BITMODE_RESET)
@@ -165,7 +169,8 @@ int main(int argc, char **argv)
ftdi_read_data_set_chunksize(&ftdic, txchunksize) < 0)
{
fprintf(stderr,"Can't set chunksize:
%s\n",ftdi_get_error_string(&ftdic));
- return EXIT_FAILURE;
+ retval = EXIT_FAILURE;
+ goto do_close;
}
if (test_mode==BITMODE_SYNCBB)
@@ -191,7 +196,8 @@ int main(int argc, char **argv)
{
fprintf(stderr,"write failed at %d: %s\n",
i, ftdi_get_error_string(&ftdic));
- return EXIT_FAILURE;
+ retval = EXIT_FAILURE;
+ goto do_close;
}
i+=sendsize;
@@ -205,8 +211,14 @@ int main(int argc, char **argv)
duration=get_prec_time()-start;
printf("and took %.4f seconds, this is %.0f baud or factor
%.3f\n",duration,(plan*baud)/duration,plan/duration);
-
+do_close:
ftdi_usb_close(&ftdic);
+do_deinit:
ftdi_deinit(&ftdic);
+done:
+ if(rxbuf)
+ free(rxbuf);
+ if(txbuf)
+ free(txbuf);
exit (0);
}
--
1.7.3.4
--
libftdi - see http://www.intra2net.com/en/developer/libftdi for details.
To unsubscribe send a mail to libftdi+unsubscribe@xxxxxxxxxxxxxxxxxxxxxxx
|