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);