From f2c49da9ac486597a240cf62d23b8a85eb6fe6e9 Mon Sep 17 00:00:00 2001 From: Ramiro Polla 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 Signed-off-by: Michael Niedermayer --- 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);