The branch, master has been updated
via 4cc3fa8a4675e46b8cf8b200175a28dd7fc027ca (commit)
from 26063beccb19527833b2d23877d61b56527b9985 (commit)
- Log -----------------------------------------------------------------
commit 4cc3fa8a4675e46b8cf8b200175a28dd7fc027ca
Author: Uwe Bonnes <bon@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Date: Tue Jun 21 15:15:39 2011 +0200
Fix all leak in the examples shown with no device connected
-----------------------------------------------------------------------
Summary of changes:
examples/bitbang.c | 7 +++++--
examples/bitbang2.c | 2 ++
examples/bitbang_cbus.c | 8 +++++++-
examples/bitbang_ft2232.c | 2 ++
examples/find_all.c | 12 +++++++++---
examples/simple.c | 2 ++
6 files changed, 27 insertions(+), 6 deletions(-)
diff --git a/examples/bitbang.c b/examples/bitbang.c
index ff2fbed..f4168ac 100644
--- a/examples/bitbang.c
+++ b/examples/bitbang.c
@@ -13,6 +13,7 @@ int main(int argc, char **argv)
struct ftdi_context ftdic;
int f,i;
unsigned char buf[1];
+ int retval = 0;
if (ftdi_init(&ftdic) < 0)
{
@@ -25,7 +26,8 @@ int main(int argc, char **argv)
if (f < 0 && f != -5)
{
fprintf(stderr, "unable to open ftdi device: %d (%s)\n", f,
ftdi_get_error_string(&ftdic));
- exit(-1);
+ retval = 1;
+ goto done;
}
printf("ftdi open succeeded: %d\n",f);
@@ -78,7 +80,8 @@ int main(int argc, char **argv)
ftdi_disable_bitbang(&ftdic);
ftdi_usb_close(&ftdic);
+done:
ftdi_deinit(&ftdic);
- return 0;
+ return retval;
}
diff --git a/examples/bitbang2.c b/examples/bitbang2.c
index df34bba..fa588f9 100644
--- a/examples/bitbang2.c
+++ b/examples/bitbang2.c
@@ -41,6 +41,7 @@ void ftdi_fatal (struct ftdi_context *ftdi, char *str)
{
fprintf (stderr, "%s: %s\n",
str, ftdi_get_error_string (ftdi));
+ ftdi_deinit(ftdi);
exit (1);
}
@@ -64,6 +65,7 @@ int main(int argc, char **argv)
if (ftdi_init(&ftdic) < 0)
{
fprintf(stderr, "ftdi_init failed\n");
+ ftdi_deinit(&ftdic);
return EXIT_FAILURE;
}
diff --git a/examples/bitbang_cbus.c b/examples/bitbang_cbus.c
index 17d27eb..f47c359 100644
--- a/examples/bitbang_cbus.c
+++ b/examples/bitbang_cbus.c
@@ -41,6 +41,7 @@ int main(void)
unsigned char buf[1];
unsigned char bitmask;
char input[10];
+ int retval = 0;
if (ftdi_init(&ftdic) < 0)
{
@@ -52,6 +53,7 @@ int main(void)
if (f < 0 && f != -5)
{
fprintf(stderr, "unable to open ftdi device: %d (%s)\n", f,
ftdi_get_error_string(&ftdic));
+ ftdi_deinit(&ftdic);
exit(-1);
}
printf("ftdi open succeeded: %d\n",f);
@@ -67,7 +69,9 @@ int main(void)
if (f < 0)
{
fprintf(stderr, "set_bitmode failed for 0x%x, error %d (%s)\n",
bitmask, f, ftdi_get_error_string(&ftdic));
- exit(-1);
+ ftdi_usb_close(&ftdic);
+ ftdi_deinit(&ftdic);
+ retval = -1;
}
// read CBUS
@@ -75,6 +79,8 @@ int main(void)
if (f < 0)
{
fprintf(stderr, "read_pins failed, error %d (%s)\n", f,
ftdi_get_error_string(&ftdic));
+ ftdi_usb_close(&ftdic);
+ ftdi_deinit(&ftdic);
exit(-1);
}
printf("Read returned 0x%01x\n", buf[0] & 0x0f);
diff --git a/examples/bitbang_ft2232.c b/examples/bitbang_ft2232.c
index c99e687..6eb223e 100644
--- a/examples/bitbang_ft2232.c
+++ b/examples/bitbang_ft2232.c
@@ -34,6 +34,7 @@ int main(int argc, char **argv)
if (f < 0 && f != -5)
{
fprintf(stderr, "unable to open ftdi device: %d (%s)\n", f,
ftdi_get_error_string(&ftdic));
+ ftdi_deinit(&ftdic);
exit(-1);
}
printf("ftdi open succeeded(channel 1): %d\n",f);
@@ -52,6 +53,7 @@ int main(int argc, char **argv)
if (f < 0 && f != -5)
{
fprintf(stderr, "unable to open ftdi device: %d (%s)\n", f,
ftdi_get_error_string(&ftdic2));
+ ftdi_deinit(&ftdic2);
exit(-1);
}
printf("ftdi open succeeded(channel 2): %d\n",f);
diff --git a/examples/find_all.c b/examples/find_all.c
index 936a824..7d1aab4 100644
--- a/examples/find_all.c
+++ b/examples/find_all.c
@@ -15,6 +15,7 @@ int main(void)
struct ftdi_context ftdic;
struct ftdi_device_list *devlist, *curdev;
char manufacturer[128], description[128];
+ int retval = EXIT_SUCCESS;
if (ftdi_init(&ftdic) < 0)
{
@@ -25,7 +26,9 @@ int main(void)
if ((ret = ftdi_usb_find_all(&ftdic, &devlist, 0x0403, 0x6001)) < 0)
{
fprintf(stderr, "ftdi_usb_find_all failed: %d (%s)\n", ret,
ftdi_get_error_string(&ftdic));
- return EXIT_FAILURE;
+ retval = EXIT_FAILURE;
+ return retval;
+ goto do_deinit;
}
printf("Number of FTDI devices found: %d\n", ret);
@@ -37,13 +40,16 @@ int main(void)
if ((ret = ftdi_usb_get_strings(&ftdic, curdev->dev, manufacturer,
128, description, 128, NULL, 0)) < 0)
{
fprintf(stderr, "ftdi_usb_get_strings failed: %d (%s)\n", ret,
ftdi_get_error_string(&ftdic));
- return EXIT_FAILURE;
+ retval = EXIT_FAILURE;
+ return retval;
+ goto done;
}
printf("Manufacturer: %s, Description: %s\n\n", manufacturer,
description);
curdev = curdev->next;
}
-
+done:
ftdi_list_free(&devlist);
+do_deinit:
ftdi_deinit(&ftdic);
return EXIT_SUCCESS;
diff --git a/examples/simple.c b/examples/simple.c
index 0fcf4e8..145e931 100644
--- a/examples/simple.c
+++ b/examples/simple.c
@@ -22,6 +22,7 @@ int main(void)
if ((ret = ftdi_usb_open(&ftdic, 0x0403, 0x6001)) < 0)
{
fprintf(stderr, "unable to open ftdi device: %d (%s)\n", ret,
ftdi_get_error_string(&ftdic));
+ ftdi_deinit(&ftdic);
return EXIT_FAILURE;
}
@@ -36,6 +37,7 @@ int main(void)
if ((ret = ftdi_usb_close(&ftdic)) < 0)
{
fprintf(stderr, "unable to close ftdi device: %d (%s)\n", ret,
ftdi_get_error_string(&ftdic));
+ ftdi_deinit(&ftdic);
return EXIT_FAILURE;
}
hooks/post-receive
--
port libftdi to libusb-1.0
--
libftdi-git - see http://www.intra2net.com/en/developer/libftdi for details.
To unsubscribe send a mail to libftdi-git+unsubscribe@xxxxxxxxxxxxxxxxxxxxxxx
|