diff options
author | snj <snj> | 2007-02-26 17:55:14 +0000 |
---|---|---|
committer | snj <snj> | 2007-02-26 17:55:14 +0000 |
commit | a55d26e7a8907a6a0cfb7ca3dbef046032dbe7c0 (patch) | |
tree | 088e7e8bfa55afb7bc80edcc2184b259ea835ac4 /multimedia/lsdvd/patches | |
parent | 09610352fb245e420905fdc285f44aae03ac1462 (diff) | |
download | pkgsrc-a55d26e7a8907a6a0cfb7ca3dbef046032dbe7c0.tar.gz |
Apply patch from Kimura Fuyuki in PR pkg/35703: Fix printing of DVD titles.
Originally from FreeBSD ports.
Bump PKGREVISION.
Diffstat (limited to 'multimedia/lsdvd/patches')
-rw-r--r-- | multimedia/lsdvd/patches/patch-ab | 67 |
1 files changed, 66 insertions, 1 deletions
diff --git a/multimedia/lsdvd/patches/patch-ab b/multimedia/lsdvd/patches/patch-ab index 9c17ae118bd..d4992af8c1e 100644 --- a/multimedia/lsdvd/patches/patch-ab +++ b/multimedia/lsdvd/patches/patch-ab @@ -1,4 +1,4 @@ -$NetBSD: patch-ab,v 1.2 2006/08/24 09:58:15 xtraeme Exp $ +$NetBSD: patch-ab,v 1.3 2007/02/26 17:55:14 snj Exp $ --- lsdvd.c.orig 2006-08-24 11:51:58.000000000 +0200 +++ lsdvd.c 2006-08-24 11:52:09.000000000 +0200 @@ -10,3 +10,68 @@ $NetBSD: patch-ab,v 1.2 2006/08/24 09:58:15 xtraeme Exp $ #include <dvdread/ifo_read.h> #include <string.h> #include <sys/stat.h> +@@ -131,19 +132,26 @@ int get_title_name(const char* dvd_devic + return -1; + } + +- if ( fseek(filehandle, 32808, SEEK_SET )) { ++ if ( fseek(filehandle, 32768, SEEK_SET )) { + fclose(filehandle); + fprintf(stderr, "Couldn't seek in %s for title\n", dvd_device); + strcpy(title, "unknown"); + return -1; + } + +- if ( 32 != (i = fread(title, 1, 32, filehandle)) ) { ++ { ++ #define DVD_SEC_SIZ 2048 ++ char tempBuf[ DVD_SEC_SIZ ]; ++ ++ if ( DVD_SEC_SIZ != fread(tempBuf, 1, DVD_SEC_SIZ, filehandle) ) { + fclose(filehandle); + fprintf(stderr, "Couldn't read enough bytes for title.\n"); + strcpy(title, "unknown"); + return -1; + } ++ snprintf( title, 32, "%s", tempBuf + 40 ); ++ i=32; ++ } + + fclose (filehandle); + +@@ -239,6 +247,7 @@ int main(int argc, char *argv[]) + int has_title = 0, ret = 0; + int max_length = 0, max_track = 0; + struct stat dvd_stat; ++ struct dvd_info dvd_info; + + program_name = argv[0]; + +@@ -309,8 +318,6 @@ int main(int argc, char *argv[]) + + vmgi_mat = ifo_zero->vmgi_mat; + +- struct dvd_info dvd_info; +- + dvd_info.discinfo.device = dvd_device; + dvd_info.discinfo.disc_title = has_title ? "unknown" : title; + dvd_info.discinfo.vmg_id = vmgi_mat->vmg_identifier; +@@ -409,14 +416,16 @@ int main(int argc, char *argv[]) + + cell = 0; + if (opt_c) { ++ int ms; ++ + dvd_info.titles[j].chapter_count = pgc->nr_of_programs; + dvd_info.titles[j].chapters = calloc(dvd_info.titles[j].chapter_count, sizeof(*dvd_info.titles[j].chapters)); + +- int ms; + for (i=0; i<pgc->nr_of_programs; i++) + { ++ int next; + ms=0; +- int next = pgc->program_map[i+1]; ++ next = pgc->program_map[i+1]; + if (i == pgc->nr_of_programs - 1) next = pgc->nr_of_cells + 1; + + while (cell < next - 1) |