From d8925752b84cfa3570a9d1ef45d490b2d0f0ee0b Mon Sep 17 00:00:00 2001 From: pl Date: Wed, 19 Dec 2001 12:54:06 +0000 Subject: [PATCH] checkings for malloc results (potential memleaks) btw: C functions in .h files is dirty :) git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@3612 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpdemux/tvi_def.h | 7 ++++--- libmpdemux/tvi_v4l.c | 24 +++++++++++++++++------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/libmpdemux/tvi_def.h b/libmpdemux/tvi_def.h index aaca6d5a2f..9684127aca 100644 --- a/libmpdemux/tvi_def.h +++ b/libmpdemux/tvi_def.h @@ -45,8 +45,9 @@ static tvi_handle_t *new_handle() static void free_handle(tvi_handle_t *h) { - if (h->priv) - free(h->priv); - if (h) + if (h) { + if (h->priv) + free(h->priv); free(h); + } } diff --git a/libmpdemux/tvi_v4l.c b/libmpdemux/tvi_v4l.c index 1547ff5e00..5454f120c0 100644 --- a/libmpdemux/tvi_v4l.c +++ b/libmpdemux/tvi_v4l.c @@ -227,14 +227,14 @@ tvi_handle_t *tvi_init_v4l(char *device) /* set video device name */ if (!device) - { - priv->video_device = (char *)malloc(strlen("/dev/video0")); - sprintf(priv->video_device, "/dev/video0"); - } + priv->video_device = strdup("/dev/video0"); else - { - priv->video_device = (char *)malloc(strlen(device)); - strcpy(priv->video_device, device); + priv->video_device = strdup(device); + + /* allocation failed */ + if (!priv->video_device) { + free_handle(h); + return(NULL); } return(h); @@ -278,6 +278,8 @@ static int init(priv_t *priv, tvi_param_t *params) mp_msg(MSGT_TV, MSGL_INFO, " Inputs: %d\n", priv->capability.channels); priv->channels = (struct video_channel *)malloc(sizeof(struct video_channel)*priv->capability.channels); + if (!priv->channels) + goto malloc_failed; memset(priv->channels, 0, sizeof(struct video_channel)*priv->capability.channels); for (i = 0; i < priv->capability.channels; i++) { @@ -357,10 +359,18 @@ static int init(priv_t *priv, tvi_param_t *params) /* video buffers */ priv->buf = (struct video_mmap *)malloc(priv->nbuf * sizeof(struct video_mmap)); + if (!priv->buf) + goto malloc_failed; memset(priv->buf, 0, priv->nbuf * sizeof(struct video_mmap)); return(1); + +malloc_failed: + if (priv->channels) + free(priv->channels); + if (priv->buf) + free(priv->buf); err: if (priv->fd != -1) close(priv->fd);