[libdvdcss-devel] Properly check for and return errors from close().

[email protected] (Diego Biurrun) Fri, 14 Nov 2014 16:45:57 +0100 (CET)
Newsgroups gmane.comp.video.videolan.libdvdcss,gmane.comp.video.videolan.libdvdcss.devel
Message-ID <[email protected]>
libdvdcss | branch: master | Diego Biurrun <[email protected]> | Wed Nov 12 23:53:41 2014 +0100| [76a8dee9721ac948f4e008f80ffe09c43b899586] | committer: Diego Biurrun

Properly check for and return errors from close().

Also fix a memory leak on close() failure.

> http://git.videolan.org/gitweb.cgi/libdvdcss.git/?a=commit;h=76a8dee9721ac948f4e008f80ffe09c43b899586
---

 src/device.c    |   11 +++++++----
 src/libdvdcss.c |    7 +------
 2 files changed, 8 insertions(+), 10 deletions(-)

diff --git a/src/device.c b/src/device.c
index ddb216e..d62561c 100644
--- a/src/device.c
+++ b/src/device.c
@@ -426,13 +426,16 @@ int dvdcss_close_device ( dvdcss_t dvdcss )
     free( dvdcss->p_readv_buffer );
     dvdcss->p_readv_buffer   = NULL;
     dvdcss->i_readv_buf_size = 0;
-
-    return 0;
 #else
-    close( dvdcss->i_fd );
+    int i_ret = close( dvdcss->i_fd );
+    if( i_ret < 0 )
+    {
+        print_error( dvdcss, "Failed to close fd, data loss possible." );
+        return i_ret;
+    }
+#endif
 
     return 0;
-#endif
 }
 
 /* Following functions are local */
diff --git a/src/libdvdcss.c b/src/libdvdcss.c
index 44d740b..0eb2298 100644
--- a/src/libdvdcss.c
+++ b/src/libdvdcss.c
@@ -781,15 +781,10 @@ LIBDVDCSS_EXPORT int dvdcss_close ( dvdcss_t dvdcss )
 
     i_ret = dvdcss_close_device( dvdcss );
 
-    if( i_ret < 0 )
-    {
-        return i_ret;
-    }
-
     free( dvdcss->psz_device );
     free( dvdcss );
 
-    return 0;
+    return i_ret;
 }
 
 /**

_______________________________________________
libdvdcss-devel mailing list
[email protected]
https://mailman.videolan.org/listinfo/libdvdcss-devel