File libcdio-0.94-leak-12.patch of Package libcdio.24379
From 3cb2a4458b81b1e866ec4466582727b8550d0c86 Mon Sep 17 00:00:00 2001
From: "R. Bernstein" <rocky@gnu.org>
Date: Sat, 2 Dec 2017 08:11:25 -0500
Subject: [PATCH 12/20] Remove memory leak in cdio_eject_media_drive
---
example/C++/eject.cpp | 16 ++++++++--------
example/eject.c | 16 +++++++---------
lib/driver/device.c | 5 ++++-
3 files changed, 19 insertions(+), 18 deletions(-)
diff --git a/example/C++/eject.cpp b/example/C++/eject.cpp
index e4835279..7cced180 100644
--- a/example/C++/eject.cpp
+++ b/example/C++/eject.cpp
@@ -1,6 +1,6 @@
/*
- Copyright (C) 2005, 2006, 2008, 209 Rocky Bernstein <rocky@gnu.org>
-
+ Copyright (C) 2005, 2006, 2008, 2009 Rocky Bernstein <rocky@gnu.org>
+
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
@@ -17,7 +17,7 @@
/* Simple program to eject a CD-ROM drive door and then close it again.
- If a single argument is given, it is used as the CD-ROM device to
+ If a single argument is given, it is used as the CD-ROM device to
eject/close. Otherwise a CD-ROM drive will be scanned for.
*/
#ifdef HAVE_CONFIG_H
@@ -43,8 +43,8 @@ main(int argc, const char *argv[])
driver_return_code_t ret;
driver_id_t driver_id = DRIVER_DEVICE;
char *psz_drive = NULL;
-
- if (argc > 1)
+
+ if (argc > 1)
psz_drive = strdup(argv[1]);
if (!psz_drive) {
@@ -66,14 +66,14 @@ main(int argc, const char *argv[])
printf("Eject of CD-ROM drive %s failed.\n", psz_drive);
break;
}
-
+
if (DRIVER_OP_SUCCESS == cdio_close_tray(psz_drive, &driver_id)) {
printf("Closed tray of CD-ROM drive %s.\n", psz_drive);
} else {
printf("Closing tray of CD-ROM drive %s failed.\n", psz_drive);
}
free(psz_drive);
-
+
ret = cdio_eject_media_drive(NULL);
switch(ret) {
case DRIVER_OP_UNSUPPORTED:
@@ -89,7 +89,7 @@ main(int argc, const char *argv[])
driver_id = DRIVER_DEVICE;
if (DRIVER_OP_SUCCESS == cdio_close_tray(NULL, &driver_id)) {
- printf("Closed tray of CD-ROM drive for default disc driver:\n\t%s\n",
+ printf("Closed tray of CD-ROM drive for default disc driver:\n\t%s\n",
cdio_driver_describe(driver_id));
} else {
printf("Closing tray of CD-ROM drive failed for default "
diff --git a/example/eject.c b/example/eject.c
index b278b019..5092d388 100644
--- a/example/eject.c
+++ b/example/eject.c
@@ -1,8 +1,6 @@
/*
- $Id: eject.c,v 1.5 2008/03/24 15:30:55 karl Exp $
-
Copyright (C) 2005, 2006, 2008 Rocky Bernstein <rocky@gnu.org>
-
+
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
@@ -19,10 +17,10 @@
/* Simple program to eject a CD-ROM drive door and then close it again.
- If a single argument is given, it is used as the CD-ROM device to
+ If a single argument is given, it is used as the CD-ROM device to
eject/close. Otherwise a CD-ROM drive will be scanned for.
- See also corresponding C++ program of a similar name.
+ See also corresponding C++ program of a similar name.
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -47,8 +45,8 @@ main(int argc, const char *argv[])
driver_return_code_t ret;
driver_id_t driver_id = DRIVER_DEVICE;
char *psz_drive = NULL;
-
- if (argc > 1)
+
+ if (argc > 1)
psz_drive = strdup(argv[1]);
if (!psz_drive) {
@@ -70,7 +68,7 @@ main(int argc, const char *argv[])
printf("Eject of CD-ROM drive %s failed.\n", psz_drive);
break;
}
-
+
if (DRIVER_OP_SUCCESS == cdio_close_tray(psz_drive, &driver_id)) {
printf("Closed tray of CD-ROM drive %s.\n", psz_drive);
} else {
@@ -93,7 +91,7 @@ main(int argc, const char *argv[])
driver_id = DRIVER_DEVICE;
if (DRIVER_OP_SUCCESS == cdio_close_tray(NULL, &driver_id)) {
- printf("Closed tray of CD-ROM drive for default disc driver:\n\t%s\n",
+ printf("Closed tray of CD-ROM drive for default disc driver:\n\t%s\n",
cdio_driver_describe(driver_id));
} else {
printf("Closing tray of CD-ROM drive failed for default "
diff --git a/lib/driver/device.c b/lib/driver/device.c
index 12dc9153..1f6b2988 100644
--- a/lib/driver/device.c
+++ b/lib/driver/device.c
@@ -458,7 +458,10 @@ cdio_eject_media_drive (const char *psz_drive)
{
CdIo_t *p_cdio = cdio_open (psz_drive, DRIVER_DEVICE);
if (p_cdio) {
- return cdio_eject_media(&p_cdio);
+ driver_return_code_t rc;
+ rc = cdio_eject_media(&p_cdio);
+ cdio_destroy(p_cdio);
+ return rc;
} else {
return DRIVER_OP_UNINIT;
}
--
2.17.0