Fix all leak in the examples shown with no device connected
authorUwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
Tue, 21 Jun 2011 13:15:39 +0000 (15:15 +0200)
committerThomas Jarosch <thomas.jarosch@intra2net.com>
Tue, 28 Jun 2011 14:35:16 +0000 (16:35 +0200)
examples/bitbang.c
examples/bitbang2.c
examples/bitbang_cbus.c
examples/bitbang_ft2232.c
examples/find_all.c
examples/simple.c

index ff2fbed..f4168ac 100644 (file)
@@ -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;
 }
index df34bba..fa588f9 100644 (file)
@@ -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;
     }
 
index 17d27eb..f47c359 100644 (file)
@@ -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);
index c99e687..6eb223e 100644 (file)
@@ -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);
index 936a824..7d1aab4 100644 (file)
@@ -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;
index 0fcf4e8..145e931 100644 (file)
@@ -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;
     }