From f2c49da9ac486597a240cf62d23b8a85eb6fe6e9 Mon Sep 17 00:00:00 2001
From: Ramiro Polla <ramiro.polla@gmail.com>
Date: Thu, 6 Dec 2012 02:32:47 -0200
Subject: [PATCH] dshow: fix return code when opening device

Successfully opening a device altered the ret variable, making the function
not cleanup properly and return an incorrect value for errors that happened
afterwards.

Reviewed-by: Stefano Sabatini <stefasab@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
---
 libavdevice/dshow.c | 18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)

diff --git a/libavdevice/dshow.c b/libavdevice/dshow.c
index ea01b2a30f..9485af6586 100644
--- a/libavdevice/dshow.c
+++ b/libavdevice/dshow.c
@@ -929,20 +929,18 @@ static int dshow_read_header(AVFormatContext *avctx)
     }
 
     if (ctx->device_name[VideoDevice]) {
-        ret = dshow_open_device(avctx, devenum, VideoDevice);
-        if (ret < 0)
-            goto error;
-        ret = dshow_add_device(avctx, VideoDevice);
-        if (ret < 0)
+        if ((r = dshow_open_device(avctx, devenum, VideoDevice)) < 0 ||
+            (r = dshow_add_device(avctx, VideoDevice)) < 0) {
+            ret = r;
             goto error;
+        }
     }
     if (ctx->device_name[AudioDevice]) {
-        ret = dshow_open_device(avctx, devenum, AudioDevice);
-        if (ret < 0)
-            goto error;
-        ret = dshow_add_device(avctx, AudioDevice);
-        if (ret < 0)
+        if ((r = dshow_open_device(avctx, devenum, AudioDevice)) < 0 ||
+            (r = dshow_add_device(avctx, AudioDevice)) < 0) {
+            ret = r;
             goto error;
+        }
     }
 
     ctx->mutex = CreateMutex(NULL, 0, NULL);