summaryrefslogtreecommitdiff
path: root/multimedia
diff options
context:
space:
mode:
Diffstat (limited to 'multimedia')
-rw-r--r--multimedia/dvdbackup/README3
-rw-r--r--multimedia/dvdbackup/dvdbackup.SlackBuild19
-rw-r--r--multimedia/dvdbackup/patches/dvdbackup-dvdread-6.1.patch (renamed from multimedia/dvdbackup/patches/dvdbackup-build-with-new-libdvdread.patch)70
-rw-r--r--multimedia/dvdbackup/patches/remove_PATH_MAX_limitation.patch463
4 files changed, 42 insertions, 513 deletions
diff --git a/multimedia/dvdbackup/README b/multimedia/dvdbackup/README
index 7b398dfdbd..a512714f7a 100644
--- a/multimedia/dvdbackup/README
+++ b/multimedia/dvdbackup/README
@@ -6,6 +6,9 @@ underscores with spaces and converting to "Proper Case".
To turn this "feature" off and retain the original VOLUME_ID
formatting, pass CLOBBER="no" to the script.
+To build on current (15.0 EXPERIMENTAL), pass CURRENT=yes to
+the script.
+
NOTE: Copyright laws vary from nation to nation, so bear in mind
that this program is only intended for personal backups.
diff --git a/multimedia/dvdbackup/dvdbackup.SlackBuild b/multimedia/dvdbackup/dvdbackup.SlackBuild
index 7eeca58d1f..58b5f28812 100644
--- a/multimedia/dvdbackup/dvdbackup.SlackBuild
+++ b/multimedia/dvdbackup/dvdbackup.SlackBuild
@@ -3,7 +3,7 @@
# Slackware build script for dvdbackup
# Copyright 2013 John Vogel Corning, New York US
-# Copyright 2017 Lenard Spencer <lspencer31_at_cfl_dot_rr_dot_com>
+# Copyright 2020 Lenard Spence, Orlando, Florida USA
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
@@ -25,7 +25,7 @@
PRGNAM=dvdbackup
VERSION=${VERSION:-0.4.2}
-BUILD=${BUILD:-2}
+BUILD=${BUILD:-3}
TAG=${TAG:-_SBo}
if [ -z "$ARCH" ]; then
@@ -70,14 +70,19 @@ find -L . \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
-# Patch to not clobber the DVD title
-if [ {$CLOBBER:-"yes"} == "no" ]; then
+# Patch to not treat automake warnings as errors
+patch -p0 < $CWD/patches/do_not_treat_automake_warnings_as_errors.patch
+
+# Patch to not change VOLUME_ID to Volume Id
+if [ ${CLOBBER:-"yes"} == "no" ]; then
patch -p1 < $CWD/patches/dvdbackup_no-convert-title.patch
fi
-# Patches from lauchpad bazaar repo.
-patch -p0 < $CWD/patches/do_not_treat_automake_warnings_as_errors.patch
-patch -p0 < $CWD/patches/remove_PATH_MAX_limitation.patch
+if [ "${CURRENT:-no}" = "yes" ]; then
+ patch -p0 < $CWD/patches/dvdbackup-dvdread-6.1.patch
+fi
+
+autoreconf -fiv
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
diff --git a/multimedia/dvdbackup/patches/dvdbackup-build-with-new-libdvdread.patch b/multimedia/dvdbackup/patches/dvdbackup-dvdread-6.1.patch
index dc30d2c31e..88f88cbecd 100644
--- a/multimedia/dvdbackup/patches/dvdbackup-build-with-new-libdvdread.patch
+++ b/multimedia/dvdbackup/patches/dvdbackup-dvdread-6.1.patch
@@ -1,43 +1,44 @@
-diff -Naur dvdbackup-0.4.2/src/dvdbackup.c dvdbackup-0.4.2.new/src/dvdbackup.c
---- dvdbackup-0.4.2/src/dvdbackup.c 2020-04-08 10:56:55.630771977 -0400
-+++ dvdbackup-0.4.2.new/src/dvdbackup.c 2020-04-08 11:38:48.851465230 -0400
-@@ -1180,7 +1180,7 @@
+--- src/dvdbackup.c.orig 2012-06-24 01:10:29 UTC
++++ src/dvdbackup.c
+@@ -1132,7 +1132,7 @@ static int DVDCopyIfoBup(dvd_reader_t* dvd, title_set_
int size;
/* DVD handler */
- ifo_handle_t* ifo_file = NULL;
+ dvd_file_t* ifo_file = NULL;
-
if (title_set_info->number_of_title_sets + 1 < title_set) {
-@@ -1245,7 +1245,7 @@
+ return(1);
+@@ -1181,7 +1181,7 @@ static int DVDCopyIfoBup(dvd_reader_t* dvd, title_set_
if ((streamout_ifo = open(targetname_ifo, O_WRONLY | O_CREAT | O_TRUNC, 0666)) == -1) {
fprintf(stderr, _("Error creating %s\n"), targetname_ifo);
perror(PACKAGE);
- ifoClose(ifo_file);
+ DVDCloseFile(ifo_file);
free(buffer);
- free(targetname_ifo);
- free(targetname_bup);
-@@ -1257,7 +1257,7 @@
+ close(streamout_ifo);
+ close(streamout_bup);
+@@ -1191,7 +1191,7 @@ static int DVDCopyIfoBup(dvd_reader_t* dvd, title_set_
if ((streamout_bup = open(targetname_bup, O_WRONLY | O_CREAT | O_TRUNC, 0666)) == -1) {
fprintf(stderr, _("Error creating %s\n"), targetname_bup);
perror(PACKAGE);
- ifoClose(ifo_file);
+ DVDCloseFile(ifo_file);
free(buffer);
- free(targetname_ifo);
- free(targetname_bup);
-@@ -1270,7 +1270,7 @@
+ close(streamout_ifo);
+ close(streamout_bup);
+@@ -1200,31 +1200,31 @@ static int DVDCopyIfoBup(dvd_reader_t* dvd, title_set_
+
+ /* Copy VIDEO_TS.IFO, since it's a small file try to copy it in one shot */
- if ((ifo_file = ifoOpen(dvd, title_set))== 0) {
+- if ((ifo_file = ifoOpen(dvd, title_set))== 0) {
++ if ((ifo_file = DVDOpenFile(dvd, title_set, DVD_READ_INFO_FILE))== 0) {
fprintf(stderr, _("Failed opening IFO for title set %d\n"), title_set);
- ifoClose(ifo_file);
+ DVDCloseFile(ifo_file);
free(buffer);
- free(targetname_ifo);
- free(targetname_bup);
-@@ -1279,11 +1279,11 @@
+ close(streamout_ifo);
+ close(streamout_bup);
return 1;
}
@@ -49,9 +50,8 @@ diff -Naur dvdbackup-0.4.2/src/dvdbackup.c dvdbackup-0.4.2.new/src/dvdbackup.c
- ifoClose(ifo_file);
+ DVDCloseFile(ifo_file);
free(buffer);
- free(targetname_ifo);
- free(targetname_bup);
-@@ -1292,11 +1292,11 @@
+ close(streamout_ifo);
+ close(streamout_bup);
return 1;
}
@@ -64,39 +64,23 @@ diff -Naur dvdbackup-0.4.2/src/dvdbackup.c dvdbackup-0.4.2.new/src/dvdbackup.c
- ifoClose(ifo_file);
+ DVDCloseFile(ifo_file);
free(buffer);
- free(targetname_ifo);
- free(targetname_bup);
-@@ -1308,7 +1308,7 @@
+ close(streamout_ifo);
+ close(streamout_bup);
+@@ -1234,7 +1234,7 @@ static int DVDCopyIfoBup(dvd_reader_t* dvd, title_set_
if (write(streamout_ifo,buffer,size) != size) {
fprintf(stderr, _("Error writing %s\n"),targetname_ifo);
- ifoClose(ifo_file);
+ DVDCloseFile(ifo_file);
free(buffer);
- free(targetname_ifo);
- free(targetname_bup);
-@@ -1319,7 +1319,7 @@
+ close(streamout_ifo);
+ close(streamout_bup);
+@@ -1243,7 +1243,7 @@ static int DVDCopyIfoBup(dvd_reader_t* dvd, title_set_
if (write(streamout_bup,buffer,size) != size) {
fprintf(stderr, _("Error writing %s\n"),targetname_bup);
- ifoClose(ifo_file);
+ DVDCloseFile(ifo_file);
free(buffer);
- free(targetname_ifo);
- free(targetname_bup);
-@@ -1626,7 +1626,6 @@
-
- title_set_info = DVDGetFileSet(_dvd);
- if (!title_set_info) {
-- DVDClose(_dvd);
- return(1);
- }
-
-@@ -1653,7 +1652,6 @@
- title_set_info = DVDGetFileSet(_dvd);
-
- if (!title_set_info) {
-- DVDClose(_dvd);
- return(1);
- }
-
+ close(streamout_ifo);
+ close(streamout_bup);
diff --git a/multimedia/dvdbackup/patches/remove_PATH_MAX_limitation.patch b/multimedia/dvdbackup/patches/remove_PATH_MAX_limitation.patch
deleted file mode 100644
index 75a1295566..0000000000
--- a/multimedia/dvdbackup/patches/remove_PATH_MAX_limitation.patch
+++ /dev/null
@@ -1,463 +0,0 @@
-=== modified file 'src/dvdbackup.c'
---- src/dvdbackup.c 2012-06-24 01:13:07 +0000
-+++ src/dvdbackup.c 2013-07-04 12:06:44 +0000
-@@ -2,7 +2,7 @@
- * dvdbackup - tool to rip DVDs from the command line
- *
- * Copyright (C) 2002 Olaf Beck <olaf_sc@yahoo.com>
-- * Copyright (C) 2008-2012 Benjamin Drung <benjamin.drung@gmail.com>
-+ * Copyright (C) 2008-2013 Benjamin Drung <benjamin.drung@gmail.com>
- *
- * 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
-@@ -179,7 +179,8 @@
- int vob = 1;
-
- /* Temp filename,dirname */
-- char targetname[PATH_MAX];
-+ char *targetname;
-+ size_t targetname_length;
-
- /* Write buffer */
-
-@@ -217,10 +218,18 @@
- fprintf(stderr,"DVDWriteCells: vob files are %d\n", number_of_vob_files);
- #endif
-
-+ // Reserve space for "<targetdir>/<title_name>/VIDEO_TS/VTS_XX_X.VOB" and terminating "\0"
-+ targetname_length = strlen(targetdir) + strlen(title_name) + 24;
-+ targetname = malloc(targetname_length);
-+ if (targetname == NULL) {
-+ fprintf(stderr, _("Failed to allocate %zu bytes for a filename.\n"), targetname_length);
-+ return 1;
-+ }
-+
- /* Remove all old files silently if they exists */
-
- for ( i = 0 ; i < 10 ; i++ ) {
-- sprintf(targetname,"%s/%s/VIDEO_TS/VTS_%02i_%i.VOB",targetdir, title_name, title_set, i + 1);
-+ snprintf(targetname, targetname_length, "%s/%s/VIDEO_TS/VTS_%02i_%i.VOB", targetdir, title_name, title_set, i + 1);
- #ifdef DEBUG
- fprintf(stderr,"DVDWriteCells: file is %s\n", targetname);
- #endif
-@@ -237,9 +246,10 @@
- /* Create VTS_XX_X.VOB */
- if (title_set == 0) {
- fprintf(stderr,_("Do not try to copy chapters from the VMG domain; there are none.\n"));
-+ free(targetname);
- return(1);
- } else {
-- sprintf(targetname,"%s/%s/VIDEO_TS/VTS_%02i_%i.VOB",targetdir, title_name, title_set, vob);
-+ snprintf(targetname, targetname_length, "%s/%s/VIDEO_TS/VTS_%02i_%i.VOB", targetdir, title_name, title_set, vob);
- }
-
- #ifdef DEBUG
-@@ -248,6 +258,7 @@
-
- if ((buffer = (unsigned char *)malloc(BUFFER_SIZE * DVD_VIDEO_LB_LEN * sizeof(unsigned char))) == NULL) {
- fprintf(stderr, _("Out of memory copying %s\n"), targetname);
-+ free(targetname);
- return(1);
- }
-
-@@ -259,6 +270,7 @@
- if ((streamout = open(targetname, O_WRONLY | O_CREAT | O_APPEND, 0666)) == -1) {
- fprintf(stderr, _("Error creating %s\n"), targetname);
- perror(PACKAGE);
-+ free(targetname);
- return(1);
- }
-
-@@ -271,6 +283,7 @@
- fprintf(stderr, _("Failed opening TITLE VOB\n"));
- free(buffer);
- close(streamout);
-+ free(targetname);
- return(1);
- }
-
-@@ -294,6 +307,7 @@
- free(buffer);
- DVDCloseFile(dvd_file);
- close(streamout);
-+ free(targetname);
- return(1);
- }
- if (have_read < to_read) {
-@@ -303,6 +317,7 @@
- fprintf(stderr, _("Error writing TITLE VOB\n"));
- free(buffer);
- close(streamout);
-+ free(targetname);
- return(1);
- }
- #ifdef DEBUG
-@@ -321,10 +336,11 @@
- close(streamout);
- vob = vob + 1;
- size = 0;
-- sprintf(targetname,"%s/%s/VIDEO_TS/VTS_%02i_%i.VOB",targetdir, title_name, title_set, vob);
-+ snprintf(targetname, targetname_length, "%s/%s/VIDEO_TS/VTS_%02i_%i.VOB", targetdir, title_name, title_set, vob);
- if ((streamout = open(targetname, O_WRONLY | O_CREAT | O_APPEND, 0666)) == -1) {
- fprintf(stderr, _("Error creating %s\n"), targetname);
- perror(PACKAGE);
-+ free(targetname);
- return(1);
- }
- }
-@@ -334,6 +350,7 @@
- DVDCloseFile(dvd_file);
- free(buffer);
- close(streamout);
-+ free(targetname);
-
- return(0);
- }
-@@ -925,8 +942,10 @@
- int i;
-
- /* Temp filename,dirname */
-- char filename[PATH_MAX] = "VIDEO_TS.VOB";
-- char targetname[PATH_MAX];
-+ // filename is either "VIDEO_TS.VOB" or "VTS_XX_X.VOB" and terminating "\0"
-+ char filename[13] = "VIDEO_TS.VOB";
-+ char *targetname;
-+ size_t targetname_length;
- struct stat fileinfo;
-
- /* File Handler */
-@@ -943,9 +962,10 @@
- /* Return value */
- int result;
-
-+
- /* create filename VIDEO_TS.VOB or VTS_XX_X.VOB */
- if(title_set > 0) {
-- sprintf(filename, "VTS_%02i_%i.VOB", title_set, vob);
-+ sprintf(filename, "VTS_%02i_%1i.VOB", title_set, vob);
- }
-
- if (title_set_info->number_of_title_sets + 1 < title_set) {
-@@ -980,7 +1000,14 @@
- fprintf(stderr,_("Do not try to copy a Title VOB from the VMG domain; there are none.\n"));
- return(1);
- } else {
-- sprintf(targetname,"%s/%s/VIDEO_TS/VTS_%02i_%i.VOB",targetdir, title_name, title_set, vob);
-+ // Reserve space for "<targetdir>/<title_name>/VIDEO_TS/<filename>" and terminating "\0"
-+ targetname_length = strlen(targetdir) + strlen(title_name) + strlen(filename) + 12;
-+ targetname = malloc(targetname_length);
-+ if (targetname == NULL) {
-+ fprintf(stderr, _("Failed to allocate %zu bytes for a filename.\n"), targetname_length);
-+ return 1;
-+ }
-+ snprintf(targetname, targetname_length, "%s/%s/VIDEO_TS/%s", targetdir, title_name, filename);
- }
-
-
-@@ -990,6 +1017,7 @@
- tsize = title_set_info->title_set[title_set].size_vob[i];
- if (tsize%DVD_VIDEO_LB_LEN != 0) {
- fprintf(stderr, _("The Title VOB number %d of title set %d does not have a valid DVD size\n"), i + 1, title_set);
-+ free(targetname);
- return(1);
- } else {
- offset = offset + tsize/DVD_VIDEO_LB_LEN;
-@@ -1006,11 +1034,13 @@
- if (! S_ISREG(fileinfo.st_mode)) {
- /* TRANSLATORS: The sentence starts with "The title file %s is not valid[...]" */
- fprintf(stderr,_("The %s %s is not valid, it may be a directory.\n"), _("title file"), targetname);
-+ free(targetname);
- return(1);
- } else {
- if ((streamout = open(targetname, O_WRONLY | O_TRUNC, 0666)) == -1) {
- fprintf(stderr, _("Error opening %s\n"), targetname);
- perror(PACKAGE);
-+ free(targetname);
- return(1);
- }
- }
-@@ -1018,6 +1048,7 @@
- if ((streamout = open(targetname, O_WRONLY | O_CREAT, 0666)) == -1) {
- fprintf(stderr, _("Error creating %s\n"), targetname);
- perror(PACKAGE);
-+ free(targetname);
- return(1);
- }
- }
-@@ -1025,6 +1056,7 @@
- if ((dvd_file = DVDOpenFile(dvd, title_set, DVD_READ_TITLE_VOBS))== 0) {
- fprintf(stderr, _("Failed opening TITLE VOB\n"));
- close(streamout);
-+ free(targetname);
- return(1);
- }
-
-@@ -1032,6 +1064,7 @@
-
- DVDCloseFile(dvd_file);
- close(streamout);
-+ free(targetname);
- return result;
- }
-
-@@ -1039,8 +1072,10 @@
- static int DVDCopyMenu(dvd_reader_t * dvd, title_set_info_t * title_set_info, int title_set, char * targetdir,char * title_name, read_error_strategy_t errorstrat) {
-
- /* Temp filename,dirname */
-- char filename[PATH_MAX] = "VIDEO_TS.VOB";
-- char targetname[PATH_MAX];
-+ // filename is either "VIDEO_TS.VOB" or "VTS_XX_0.VOB" and terminating "\0"
-+ char filename[13] = "VIDEO_TS.VOB";
-+ char *targetname;
-+ size_t targetname_length;
- struct stat fileinfo;
-
- /* File Handler */
-@@ -1077,8 +1112,15 @@
- return(1);
- }
-
-+ // Reserve space for "<targetdir>/<title_name>/VIDEO_TS/<filename>" and terminating "\0"
-+ targetname_length = strlen(targetdir) + strlen(title_name) + strlen(filename) + 12;
-+ targetname = malloc(targetname_length);
-+ if (targetname == NULL) {
-+ fprintf(stderr, _("Failed to allocate %zu bytes for a filename.\n"), targetname_length);
-+ return 1;
-+ }
- /* Create VIDEO_TS.VOB or VTS_XX_0.VOB */
-- sprintf(targetname,"%s/%s/VIDEO_TS/%s",targetdir, title_name, filename);
-+ snprintf(targetname, targetname_length, "%s/%s/VIDEO_TS/%s", targetdir, title_name, filename);
-
- if (stat(targetname, &fileinfo) == 0) {
- /* TRANSLATORS: The sentence starts with "The menu file %s exists[...]" */
-@@ -1087,12 +1129,14 @@
- /* TRANSLATORS: The sentence starts with "The menu file %s is not valid[...]" */
- fprintf(stderr,_("The %s %s is not valid, it may be a directory.\n"), _("menu file"), targetname);
- DVDCloseFile(dvd_file);
-+ free(targetname);
- return(1);
- } else {
- if ((streamout = open(targetname, O_WRONLY | O_TRUNC, 0666)) == -1) {
- fprintf(stderr, _("Error opening %s\n"), targetname);
- perror(PACKAGE);
- DVDCloseFile(dvd_file);
-+ free(targetname);
- return(1);
- }
- }
-@@ -1101,6 +1145,7 @@
- fprintf(stderr, _("Error creating %s\n"), targetname);
- perror(PACKAGE);
- DVDCloseFile(dvd_file);
-+ free(targetname);
- return(1);
- }
- }
-@@ -1113,6 +1158,7 @@
-
- DVDCloseFile(dvd_file);
- close(streamout);
-+ free(targetname);
- return result;
-
- }
-@@ -1120,7 +1166,9 @@
-
- static int DVDCopyIfoBup(dvd_reader_t* dvd, title_set_info_t* title_set_info, int title_set, char* targetdir, char* title_name) {
- /* Temp filename, dirname */
-- char targetname_ifo[PATH_MAX], targetname_bup[PATH_MAX];
-+ char *targetname_ifo;
-+ char *targetname_bup;
-+ size_t string_length;
- struct stat fileinfo;
-
- /* Write buffer */
-@@ -1148,14 +1196,26 @@
- }
- }
-
-+ // Reserve space for "<targetdir>/<title_name>/VIDEO_TS/VIDEO_TS.IFO" or
-+ // "<targetdir>/<title_name>/VIDEO_TS/VTS_XX_0.IFO" and terminating "\0"
-+ string_length = strlen(targetdir) + strlen(title_name) + 24;
-+ targetname_ifo = malloc(string_length);
-+ targetname_bup = malloc(string_length);
-+ if (targetname_ifo == NULL || targetname_bup == NULL) {
-+ fprintf(stderr, _("Failed to allocate %zu bytes for a filename.\n"), string_length);
-+ free(targetname_ifo);
-+ free(targetname_bup);
-+ return 1;
-+ }
-+
- /* Create VIDEO_TS.IFO or VTS_XX_0.IFO */
-
- if (title_set == 0) {
-- sprintf(targetname_ifo,"%s/%s/VIDEO_TS/VIDEO_TS.IFO",targetdir, title_name);
-- sprintf(targetname_bup,"%s/%s/VIDEO_TS/VIDEO_TS.BUP",targetdir, title_name);
-+ snprintf(targetname_ifo, string_length, "%s/%s/VIDEO_TS/VIDEO_TS.IFO", targetdir, title_name);
-+ snprintf(targetname_bup, string_length, "%s/%s/VIDEO_TS/VIDEO_TS.BUP", targetdir, title_name);
- } else {
-- sprintf(targetname_ifo,"%s/%s/VIDEO_TS/VTS_%02i_0.IFO",targetdir, title_name, title_set);
-- sprintf(targetname_bup,"%s/%s/VIDEO_TS/VTS_%02i_0.BUP",targetdir, title_name, title_set);
-+ snprintf(targetname_ifo, string_length, "%s/%s/VIDEO_TS/VTS_%02i_0.IFO", targetdir, title_name, title_set);
-+ snprintf(targetname_bup, string_length, "%s/%s/VIDEO_TS/VTS_%02i_0.BUP", targetdir, title_name, title_set);
- }
-
- if (stat(targetname_ifo, &fileinfo) == 0) {
-@@ -1164,6 +1224,8 @@
- if (! S_ISREG(fileinfo.st_mode)) {
- /* TRANSLATORS: The sentence starts with "The IFO file %s is not valid[...]" */
- fprintf(stderr,_("The %s %s is not valid, it may be a directory.\n"), _("IFO file"), targetname_ifo);
-+ free(targetname_ifo);
-+ free(targetname_bup);
- return(1);
- }
- }
-@@ -1174,6 +1236,8 @@
- if (! S_ISREG(fileinfo.st_mode)) {
- /* TRANSLATORS: The sentence starts with "The BUP file %s is not valid[...]" */
- fprintf(stderr,_("The %s %s is not valid, it may be a directory.\n"), _("BUP file"), targetname_bup);
-+ free(targetname_ifo);
-+ free(targetname_bup);
- return(1);
- }
- }
-@@ -1183,6 +1247,8 @@
- perror(PACKAGE);
- ifoClose(ifo_file);
- free(buffer);
-+ free(targetname_ifo);
-+ free(targetname_bup);
- close(streamout_ifo);
- close(streamout_bup);
- return 1;
-@@ -1193,6 +1259,8 @@
- perror(PACKAGE);
- ifoClose(ifo_file);
- free(buffer);
-+ free(targetname_ifo);
-+ free(targetname_bup);
- close(streamout_ifo);
- close(streamout_bup);
- return 1;
-@@ -1204,6 +1272,8 @@
- fprintf(stderr, _("Failed opening IFO for title set %d\n"), title_set);
- ifoClose(ifo_file);
- free(buffer);
-+ free(targetname_ifo);
-+ free(targetname_bup);
- close(streamout_ifo);
- close(streamout_bup);
- return 1;
-@@ -1215,6 +1285,8 @@
- perror(PACKAGE);
- ifoClose(ifo_file);
- free(buffer);
-+ free(targetname_ifo);
-+ free(targetname_bup);
- close(streamout_ifo);
- close(streamout_bup);
- return 1;
-@@ -1226,6 +1298,8 @@
- fprintf(stderr, _("Error reading IFO for title set %d\n"), title_set);
- ifoClose(ifo_file);
- free(buffer);
-+ free(targetname_ifo);
-+ free(targetname_bup);
- close(streamout_ifo);
- close(streamout_bup);
- return 1;
-@@ -1236,6 +1310,8 @@
- fprintf(stderr, _("Error writing %s\n"),targetname_ifo);
- ifoClose(ifo_file);
- free(buffer);
-+ free(targetname_ifo);
-+ free(targetname_bup);
- close(streamout_ifo);
- close(streamout_bup);
- return 1;
-@@ -1245,11 +1321,15 @@
- fprintf(stderr, _("Error writing %s\n"),targetname_bup);
- ifoClose(ifo_file);
- free(buffer);
-+ free(targetname_ifo);
-+ free(targetname_bup);
- close(streamout_ifo);
- close(streamout_bup);
- return 1;
- }
-
-+ free(targetname_ifo);
-+ free(targetname_bup);
- return 0;
- }
-
-
-=== modified file 'src/main.c'
---- src/main.c 2012-06-24 01:13:07 +0000
-+++ src/main.c 2013-07-04 12:06:44 +0000
-@@ -2,7 +2,7 @@
- * dvdbackup - tool to rip DVDs from the command line
- *
- * Copyright (C) 2002 Olaf Beck <olaf_sc@yahoo.com>
-- * Copyright (C) 2008-2012 Benjamin Drung <benjamin.drung@gmail.com>
-+ * Copyright (C) 2008-2013 Benjamin Drung <benjamin.drung@gmail.com>
- *
- * 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
-@@ -172,7 +172,8 @@
- char* targetdir = ".";
-
- /* Temp filename,dirname */
-- char targetname[PATH_MAX];
-+ char *targetname;
-+ size_t targetname_length;
- struct stat fileinfo;
-
- /* The DVD main structure */
-@@ -403,9 +404,15 @@
- }
- }
-
--
--
-- sprintf(targetname,"%s",targetdir);
-+ // Reserve space for "<targetdir>/<title_name>/VIDEO_TS" and terminating "\0"
-+ targetname_length = strlen(targetdir) + strlen(title_name) + 11;
-+ targetname = malloc(targetname_length);
-+ if (targetname == NULL) {
-+ fprintf(stderr, _("Failed to allocate %zu bytes for a filename.\n"), targetname_length);
-+ DVDClose(_dvd);
-+ return 1;
-+ }
-+ snprintf(targetname, targetname_length, "%s", targetdir);
-
- if (stat(targetname, &fileinfo) == 0) {
- if (! S_ISDIR(fileinfo.st_mode)) {
-@@ -421,7 +428,7 @@
- }
-
-
-- sprintf(targetname,"%s/%s",targetdir, title_name);
-+ snprintf(targetname, targetname_length, "%s/%s", targetdir, title_name);
-
- if (stat(targetname, &fileinfo) == 0) {
- if (! S_ISDIR(fileinfo.st_mode)) {
-@@ -436,7 +443,7 @@
- }
- }
-
-- sprintf(targetname,"%s/%s/VIDEO_TS",targetdir, title_name);
-+ snprintf(targetname, targetname_length, "%s/%s/VIDEO_TS", targetdir, title_name);
-
- if (stat(targetname, &fileinfo) == 0) {
- if (! S_ISDIR(fileinfo.st_mode)) {
-@@ -513,7 +520,7 @@
- }
- }
-
--
-+ free(targetname);
- DVDClose(_dvd);
- exit(return_code);
- }
-