Mercurial > mplayer.hg
changeset 3611:178c562948ff
checkings for malloc results (potential memleaks)
btw: C functions in .h files is dirty :)
author | pl |
---|---|
date | Wed, 19 Dec 2001 12:54:06 +0000 |
parents | 119d9400cc02 |
children | a1522fa7728a |
files | libmpdemux/tvi_def.h libmpdemux/tvi_v4l.c |
diffstat | 2 files changed, 21 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/libmpdemux/tvi_def.h Wed Dec 19 12:21:38 2001 +0000 +++ b/libmpdemux/tvi_def.h Wed Dec 19 12:54:06 2001 +0000 @@ -45,8 +45,9 @@ 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); + } }
--- a/libmpdemux/tvi_v4l.c Wed Dec 19 12:21:38 2001 +0000 +++ b/libmpdemux/tvi_v4l.c Wed Dec 19 12:54:06 2001 +0000 @@ -227,14 +227,14 @@ /* 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 @@ 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 @@ /* 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);