annotate dvd_reader.c @ 75:8e12b8e01713 src

Accommodate duplicate language units and pgcs. Many dvd's are showing up that have titles that have numerous repeated language unit tables and pgc's. The new release "Up" is an example. I believe "Dark Knight" also exhibits this. When scanning such discs with lsdvd (and other programs that scan all titles), libdvdread will consume many GB of data for these repeated elements and gets very slow (e.g hours to read all titles) on OS X due to reading the duplicate data from uncached raw devices. This patch detects duplicates and reference counts pgc's and pgcit's. When a duplicate is detected, a reference count is incremented instead of allocating new memory and re-reading the data. Patch by John Stebbins.
author rathann
date Sun, 09 Dec 2012 21:07:59 +0000
parents d16d554fa215
children 1b8797855771
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1 /*
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2 * Copyright (C) 2001-2004 Billy Biggs <vektor@dumbterm.net>,
22
447c5319a522 Convert all ISO8859-1 sequences to proper UTF-8.
diego
parents: 21
diff changeset
3 * Håkan Hjort <d95hjort@dtek.chalmers.se>,
447c5319a522 Convert all ISO8859-1 sequences to proper UTF-8.
diego
parents: 21
diff changeset
4 * Björn Englund <d4bjorn@dtek.chalmers.se>
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
5 *
21
4aa618ae094f Use consistent license headers everywhere: Fix FSF address and boilerplate.
diego
parents: 20
diff changeset
6 * This file is part of libdvdread.
4aa618ae094f Use consistent license headers everywhere: Fix FSF address and boilerplate.
diego
parents: 20
diff changeset
7 *
4aa618ae094f Use consistent license headers everywhere: Fix FSF address and boilerplate.
diego
parents: 20
diff changeset
8 * libdvdread is free software; you can redistribute it and/or modify
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
21
4aa618ae094f Use consistent license headers everywhere: Fix FSF address and boilerplate.
diego
parents: 20
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
4aa618ae094f Use consistent license headers everywhere: Fix FSF address and boilerplate.
diego
parents: 20
diff changeset
11 * (at your option) any later version.
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
12 *
21
4aa618ae094f Use consistent license headers everywhere: Fix FSF address and boilerplate.
diego
parents: 20
diff changeset
13 * libdvdread is distributed in the hope that it will be useful,
4aa618ae094f Use consistent license headers everywhere: Fix FSF address and boilerplate.
diego
parents: 20
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
4aa618ae094f Use consistent license headers everywhere: Fix FSF address and boilerplate.
diego
parents: 20
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4aa618ae094f Use consistent license headers everywhere: Fix FSF address and boilerplate.
diego
parents: 20
diff changeset
16 * GNU General Public License for more details.
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
17 *
21
4aa618ae094f Use consistent license headers everywhere: Fix FSF address and boilerplate.
diego
parents: 20
diff changeset
18 * You should have received a copy of the GNU General Public License along
4aa618ae094f Use consistent license headers everywhere: Fix FSF address and boilerplate.
diego
parents: 20
diff changeset
19 * with libdvdread; if not, write to the Free Software Foundation, Inc.,
4aa618ae094f Use consistent license headers everywhere: Fix FSF address and boilerplate.
diego
parents: 20
diff changeset
20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
21 */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
22
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
23 #include <sys/types.h>
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
24 #include <sys/stat.h>
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
25 #include <sys/time.h> /* For the timing of dvdcss_title crack. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
26 #include <fcntl.h>
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
27 #include <stdlib.h>
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
28 #include <stdio.h>
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
29 #include <errno.h>
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
30 #include <string.h>
52
645a8b52b951 in OS/2 Use DVDOpenImageFile() only if it is a drive; patch by komh chollian net
nicodvb
parents: 50
diff changeset
31 #include <ctype.h>
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
32 #include <unistd.h>
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
33 #include <limits.h>
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
34 #include <dirent.h>
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
35
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
36 /* misc win32 helpers */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
37 #ifdef WIN32
6
e5663591d13c gettimeofday() doesn't exist in windows, but recent mingw32 runtime
nicodvb
parents: 3
diff changeset
38 #ifndef HAVE_GETTIMEOFDAY
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
39 /* replacement gettimeofday implementation */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
40 #include <sys/timeb.h>
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
41 static inline int _private_gettimeofday( struct timeval *tv, void *tz )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
42 {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
43 struct timeb t;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
44 ftime( &t );
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
45 tv->tv_sec = t.time;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
46 tv->tv_usec = t.millitm * 1000;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
47 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
48 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
49 #define gettimeofday(TV, TZ) _private_gettimeofday((TV), (TZ))
6
e5663591d13c gettimeofday() doesn't exist in windows, but recent mingw32 runtime
nicodvb
parents: 3
diff changeset
50 #endif
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
51 #include <io.h> /* read() */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
52 #define lseek64 _lseeki64
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
53 #endif
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
54
36
79c9b639bf9d Use __APPLE__ instead of __DARWIN__ in preprocessor check.
diego
parents: 35
diff changeset
55 #if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__bsdi__) || defined(__APPLE__)
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
56 #define SYS_BSD 1
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
57 #endif
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
58
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
59 #if defined(__sun)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
60 #include <sys/mnttab.h>
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
61 #elif defined(SYS_BSD)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
62 #include <fstab.h>
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
63 #elif defined(__linux__)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
64 #include <mntent.h>
66
d16d554fa215 Replace deprecated MOUNTED with _PATH_MOUNTED.
reimar
parents: 57
diff changeset
65 #include <paths.h>
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
66 #endif
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
67
33
c743d79f187b Move installed headers into dvdread directory to make them easier to
reimar
parents: 30
diff changeset
68 #include "dvdread/dvd_udf.h"
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
69 #include "dvd_input.h"
33
c743d79f187b Move installed headers into dvdread directory to make them easier to
reimar
parents: 30
diff changeset
70 #include "dvdread/dvd_reader.h"
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
71 #include "md5.h"
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
72
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
73 #define DEFAULT_UDF_CACHE_LEVEL 1
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
74
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
75 struct dvd_reader_s {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
76 /* Basic information. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
77 int isImageFile;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
78
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
79 /* Hack for keeping track of the css status.
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
80 * 0: no css, 1: perhaps (need init of keys), 2: have done init */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
81 int css_state;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
82 int css_title; /* Last title that we have called dvdinpute_title for. */
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
83
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
84 /* Information required for an image file. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
85 dvd_input_t dev;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
86
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
87 /* Information required for a directory path drive. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
88 char *path_root;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
89
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
90 /* Filesystem cache */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
91 int udfcache_level; /* 0 - turned off, 1 - on */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
92 void *udfcache;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
93 };
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
94
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
95 #define TITLES_MAX 9
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
96
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
97 struct dvd_file_s {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
98 /* Basic information. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
99 dvd_reader_t *dvd;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
100
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
101 /* Hack for selecting the right css title. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
102 int css_title;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
103
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
104 /* Information required for an image file. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
105 uint32_t lb_start;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
106 uint32_t seek_pos;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
107
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
108 /* Information required for a directory path drive. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
109 size_t title_sizes[ TITLES_MAX ];
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
110 dvd_input_t title_devs[ TITLES_MAX ];
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
111
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
112 /* Calculated at open-time, size in blocks. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
113 ssize_t filesize;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
114 };
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
115
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
116 int UDFReadBlocksRaw( dvd_reader_t *device, uint32_t lb_number,
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
117 size_t block_count, unsigned char *data,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
118 int encrypted );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
119
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
120 /**
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
121 * Set the level of caching on udf
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
122 * level = 0 (no caching)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
123 * level = 1 (caching filesystem info)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
124 */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
125 int DVDUDFCacheLevel(dvd_reader_t *device, int level)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
126 {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
127 struct dvd_reader_s *dev = (struct dvd_reader_s *)device;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
128
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
129 if(level > 0) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
130 level = 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
131 } else if(level < 0) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
132 return dev->udfcache_level;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
133 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
134
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
135 dev->udfcache_level = level;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
136
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
137 return level;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
138 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
139
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
140 void *GetUDFCacheHandle(dvd_reader_t *device)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
141 {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
142 struct dvd_reader_s *dev = (struct dvd_reader_s *)device;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
143
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
144 return dev->udfcache;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
145 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
146
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
147 void SetUDFCacheHandle(dvd_reader_t *device, void *cache)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
148 {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
149 struct dvd_reader_s *dev = (struct dvd_reader_s *)device;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
150
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
151 dev->udfcache = cache;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
152 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
153
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
154
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
155
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
156 /* Loop over all titles and call dvdcss_title to crack the keys. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
157 static int initAllCSSKeys( dvd_reader_t *dvd )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
158 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
159 struct timeval all_s, all_e;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
160 struct timeval t_s, t_e;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
161 char filename[ MAX_UDF_FILE_NAME_LEN ];
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
162 uint32_t start, len;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
163 int title;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
164
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
165 char *nokeys_str = getenv("DVDREAD_NOKEYS");
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
166 if(nokeys_str != NULL)
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
167 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
168
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
169 fprintf( stderr, "\n" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
170 fprintf( stderr, "libdvdread: Attempting to retrieve all CSS keys\n" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
171 fprintf( stderr, "libdvdread: This can take a _long_ time, "
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
172 "please be patient\n\n" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
173 gettimeofday(&all_s, NULL);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
174
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
175 for( title = 0; title < 100; title++ ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
176 gettimeofday( &t_s, NULL );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
177 if( title == 0 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
178 sprintf( filename, "/VIDEO_TS/VIDEO_TS.VOB" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
179 } else {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
180 sprintf( filename, "/VIDEO_TS/VTS_%02d_%d.VOB", title, 0 );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
181 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
182 start = UDFFindFile( dvd, filename, &len );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
183 if( start != 0 && len != 0 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
184 /* Perform CSS key cracking for this title. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
185 fprintf( stderr, "libdvdread: Get key for %s at 0x%08x\n",
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
186 filename, start );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
187 if( dvdinput_title( dvd->dev, (int)start ) < 0 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
188 fprintf( stderr, "libdvdread: Error cracking CSS key for %s (0x%08x)\n", filename, start);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
189 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
190 gettimeofday( &t_e, NULL );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
191 fprintf( stderr, "libdvdread: Elapsed time %ld\n",
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
192 (long int) t_e.tv_sec - t_s.tv_sec );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
193 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
194
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
195 if( title == 0 ) continue;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
196
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
197 gettimeofday( &t_s, NULL );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
198 sprintf( filename, "/VIDEO_TS/VTS_%02d_%d.VOB", title, 1 );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
199 start = UDFFindFile( dvd, filename, &len );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
200 if( start == 0 || len == 0 ) break;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
201
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
202 /* Perform CSS key cracking for this title. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
203 fprintf( stderr, "libdvdread: Get key for %s at 0x%08x\n",
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
204 filename, start );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
205 if( dvdinput_title( dvd->dev, (int)start ) < 0 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
206 fprintf( stderr, "libdvdread: Error cracking CSS key for %s (0x%08x)!!\n", filename, start);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
207 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
208 gettimeofday( &t_e, NULL );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
209 fprintf( stderr, "libdvdread: Elapsed time %ld\n",
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
210 (long int) t_e.tv_sec - t_s.tv_sec );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
211 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
212 title--;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
213
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
214 fprintf( stderr, "libdvdread: Found %d VTS's\n", title );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
215 gettimeofday(&all_e, NULL);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
216 fprintf( stderr, "libdvdread: Elapsed time %ld\n",
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
217 (long int) all_e.tv_sec - all_s.tv_sec );
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
218
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
219 return 0;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
220 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
221
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
222
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
223
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
224 /**
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
225 * Open a DVD image or block device file.
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
226 */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
227 static dvd_reader_t *DVDOpenImageFile( const char *location, int have_css )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
228 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
229 dvd_reader_t *dvd;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
230 dvd_input_t dev;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
231
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
232 dev = dvdinput_open( location );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
233 if( !dev ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
234 fprintf( stderr, "libdvdread: Can't open %s for reading\n", location );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
235 return NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
236 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
237
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
238 dvd = (dvd_reader_t *) malloc( sizeof( dvd_reader_t ) );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
239 if( !dvd ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
240 dvdinput_close(dev);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
241 return NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
242 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
243 dvd->isImageFile = 1;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
244 dvd->dev = dev;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
245 dvd->path_root = NULL;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
246
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
247 dvd->udfcache_level = DEFAULT_UDF_CACHE_LEVEL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
248 dvd->udfcache = NULL;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
249
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
250 if( have_css ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
251 /* Only if DVDCSS_METHOD = title, a bit if it's disc or if
35
7b3c6a7220c3 spelling fixes by Erik Hovland
nicodvb
parents: 33
diff changeset
252 * DVDCSS_METHOD = key but region mismatch. Unfortunately we
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
253 * don't have that information. */
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
254
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
255 dvd->css_state = 1; /* Need key init. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
256 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
257 dvd->css_title = 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
258
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
259 return dvd;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
260 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
261
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
262 static dvd_reader_t *DVDOpenPath( const char *path_root )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
263 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
264 dvd_reader_t *dvd;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
265
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
266 dvd = (dvd_reader_t *) malloc( sizeof( dvd_reader_t ) );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
267 if( !dvd ) return NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
268 dvd->isImageFile = 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
269 dvd->dev = 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
270 dvd->path_root = strdup( path_root );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
271 if(!dvd->path_root) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
272 free(dvd);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
273 return 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
274 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
275 dvd->udfcache_level = DEFAULT_UDF_CACHE_LEVEL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
276 dvd->udfcache = NULL;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
277
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
278 dvd->css_state = 0; /* Only used in the UDF path */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
279 dvd->css_title = 0; /* Only matters in the UDF path */
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
280
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
281 return dvd;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
282 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
283
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
284 #if defined(__sun)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
285 /* /dev/rdsk/c0t6d0s0 (link to /devices/...)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
286 /vol/dev/rdsk/c0t6d0/??
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
287 /vol/rdsk/<name> */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
288 static char *sun_block2char( const char *path )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
289 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
290 char *new_path;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
291
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
292 /* Must contain "/dsk/" */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
293 if( !strstr( path, "/dsk/" ) ) return (char *) strdup( path );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
294
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
295 /* Replace "/dsk/" with "/rdsk/" */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
296 new_path = malloc( strlen(path) + 2 );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
297 strcpy( new_path, path );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
298 strcpy( strstr( new_path, "/dsk/" ), "" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
299 strcat( new_path, "/rdsk/" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
300 strcat( new_path, strstr( path, "/dsk/" ) + strlen( "/dsk/" ) );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
301
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
302 return new_path;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
303 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
304 #endif
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
305
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
306 #if defined(SYS_BSD)
35
7b3c6a7220c3 spelling fixes by Erik Hovland
nicodvb
parents: 33
diff changeset
307 /* FreeBSD /dev/(r)(a)cd0c (a is for atapi), recommended to _not_ use r
45
3307493f20c5 Add *BSD porting bits from 0.9.7
erik
parents: 44
diff changeset
308 update: FreeBSD and DragonFly no longer uses the prefix so don't add it.
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
309 OpenBSD /dev/rcd0c, it needs to be the raw device
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
310 NetBSD /dev/rcd0[d|c|..] d for x86, c (for non x86), perhaps others
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
311 Darwin /dev/rdisk0, it needs to be the raw device
45
3307493f20c5 Add *BSD porting bits from 0.9.7
erik
parents: 44
diff changeset
312 BSD/OS /dev/sr0c (if not mounted) or /dev/rsr0c ('c' any letter will do)
3307493f20c5 Add *BSD porting bits from 0.9.7
erik
parents: 44
diff changeset
313 returns a string allocated with strdup. It should be freed when no longer
3307493f20c5 Add *BSD porting bits from 0.9.7
erik
parents: 44
diff changeset
314 used. */
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
315 static char *bsd_block2char( const char *path )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
316 {
45
3307493f20c5 Add *BSD porting bits from 0.9.7
erik
parents: 44
diff changeset
317 #if defined(__FreeBSD__) || defined(__DragonFly__)
3307493f20c5 Add *BSD porting bits from 0.9.7
erik
parents: 44
diff changeset
318 return (char *) strdup( path );
3307493f20c5 Add *BSD porting bits from 0.9.7
erik
parents: 44
diff changeset
319 #else
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
320 char *new_path;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
321
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
322 /* If it doesn't start with "/dev/" or does start with "/dev/r" exit */
57
4554518224d7 Fix the test of whether disk names should be raw devices
erik
parents: 56
diff changeset
323 if( strncmp( path, "/dev/", 5 ) || !strncmp( path, "/dev/r", 6 ) )
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
324 return (char *) strdup( path );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
325
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
326 /* Replace "/dev/" with "/dev/r" */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
327 new_path = malloc( strlen(path) + 2 );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
328 strcpy( new_path, "/dev/r" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
329 strcat( new_path, path + strlen( "/dev/" ) );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
330
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
331 return new_path;
45
3307493f20c5 Add *BSD porting bits from 0.9.7
erik
parents: 44
diff changeset
332 #endif /* __FreeBSD__ || __DragonFly__ */
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
333 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
334 #endif
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
335
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
336
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
337 dvd_reader_t *DVDOpen( const char *ppath )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
338 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
339 struct stat fileinfo;
47
9db0de5db7c8 100l, initialize file descriptor to -1, not 0.
reimar
parents: 46
diff changeset
340 int ret, have_css, retval, cdir = -1;
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
341 dvd_reader_t *ret_val = NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
342 char *dev_name = NULL;
37
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
343 char *path = NULL, *new_path = NULL, *path_copy = NULL;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
344
53
f7e7938944e9 As for win32 strip off the trailing \ if it is not a drive
nicodvb
parents: 52
diff changeset
345 #if defined(_WIN32) || defined(__OS2__)
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
346 int len;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
347 #endif
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
348
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
349 if( ppath == NULL )
37
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
350 goto DVDOpen_error;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
351
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
352 path = strdup(ppath);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
353 if( path == NULL )
37
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
354 goto DVDOpen_error;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
355
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
356 /* Try to open libdvdcss or fall back to standard functions */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
357 have_css = dvdinput_setup();
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
358
53
f7e7938944e9 As for win32 strip off the trailing \ if it is not a drive
nicodvb
parents: 52
diff changeset
359 #if defined(_WIN32) || defined(__OS2__)
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
360 /* Strip off the trailing \ if it is not a drive */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
361 len = strlen(path);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
362 if ((len > 1) &&
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
363 (path[len - 1] == '\\') &&
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
364 (path[len - 2] != ':'))
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
365 {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
366 path[len-1] = '\0';
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
367 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
368 #endif
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
369
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
370 ret = stat( path, &fileinfo );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
371
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
372 if( ret < 0 ) {
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
373
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
374 /* maybe "host:port" url? try opening it with acCeSS library */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
375 if( strchr(path,':') ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
376 ret_val = DVDOpenImageFile( path, have_css );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
377 free(path);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
378 return ret_val;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
379 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
380
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
381 /* If we can't stat the file, give up */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
382 fprintf( stderr, "libdvdread: Can't stat %s\n", path );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
383 perror("");
37
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
384 goto DVDOpen_error;
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
385 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
386
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
387 /* First check if this is a block/char device or a file*/
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
388 if( S_ISBLK( fileinfo.st_mode ) ||
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
389 S_ISCHR( fileinfo.st_mode ) ||
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
390 S_ISREG( fileinfo.st_mode ) ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
391
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
392 /**
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
393 * Block devices and regular files are assumed to be DVD-Video images.
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
394 */
45
3307493f20c5 Add *BSD porting bits from 0.9.7
erik
parents: 44
diff changeset
395 dvd_reader_t *dvd = NULL;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
396 #if defined(__sun)
45
3307493f20c5 Add *BSD porting bits from 0.9.7
erik
parents: 44
diff changeset
397 dev_name = sun_block2char( path );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
398 #elif defined(SYS_BSD)
45
3307493f20c5 Add *BSD porting bits from 0.9.7
erik
parents: 44
diff changeset
399 dev_name = bsd_block2char( path );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
400 #else
45
3307493f20c5 Add *BSD porting bits from 0.9.7
erik
parents: 44
diff changeset
401 dev_name = strdup( path );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
402 #endif
45
3307493f20c5 Add *BSD porting bits from 0.9.7
erik
parents: 44
diff changeset
403 dvd = DVDOpenImageFile( dev_name, have_css );
3307493f20c5 Add *BSD porting bits from 0.9.7
erik
parents: 44
diff changeset
404 free( dev_name );
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
405 free(path);
45
3307493f20c5 Add *BSD porting bits from 0.9.7
erik
parents: 44
diff changeset
406 return dvd;
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
407 } else if( S_ISDIR( fileinfo.st_mode ) ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
408 dvd_reader_t *auth_drive = 0;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
409 #if defined(SYS_BSD)
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
410 struct fstab* fe;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
411 #elif defined(__sun) || defined(__linux__)
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
412 FILE *mntfile;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
413 #endif
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
414
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
415 /* XXX: We should scream real loud here. */
37
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
416 if( !(path_copy = strdup( path ) ) )
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
417 goto DVDOpen_error;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
418
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
419 #ifndef WIN32 /* don't have fchdir, and getcwd( NULL, ... ) is strange */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
420 /* Also WIN32 does not have symlinks, so we don't need this bit of code. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
421
35
7b3c6a7220c3 spelling fixes by Erik Hovland
nicodvb
parents: 33
diff changeset
422 /* Resolve any symlinks and get the absolute dir name. */
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
423 {
37
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
424 if( ( cdir = open( ".", O_RDONLY ) ) >= 0 ) {
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
425 if( chdir( path_copy ) == -1 ) {
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
426 goto DVDOpen_error;
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
427 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
428 new_path = malloc(PATH_MAX+1);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
429 if(!new_path) {
37
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
430 goto DVDOpen_error;
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
431 }
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
432 if( getcwd( new_path, PATH_MAX ) == NULL ) {
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
433 goto DVDOpen_error;
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
434 }
37
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
435 retval = fchdir( cdir );
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
436 close( cdir );
37
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
437 cdir = -1;
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
438 if( retval == -1 ) {
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
439 goto DVDOpen_error;
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
440 }
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
441 path_copy = new_path;
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
442 new_path = NULL;
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
443 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
444 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
445 #endif
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
446
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
447 /**
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
448 * If we're being asked to open a directory, check if that directory
35
7b3c6a7220c3 spelling fixes by Erik Hovland
nicodvb
parents: 33
diff changeset
449 * is the mount point for a DVD-ROM which we can use instead.
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
450 */
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
451
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
452 if( strlen( path_copy ) > 1 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
453 if( path_copy[ strlen( path_copy ) - 1 ] == '/' ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
454 path_copy[ strlen( path_copy ) - 1 ] = '\0';
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
455 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
456 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
457
54
de60b270bd83 as for win32 check for \video_ts as /video_ts in OS/2; patch by komh chollian net
nicodvb
parents: 53
diff changeset
458 #if defined(_WIN32) || defined(__OS2__)
50
60720f86d145 in _WIN32 do a sanity check against \video_ts in addition to /video_ts, because both paths are admitted; patch by John Stebbins from Handbrake
nicodvb
parents: 47
diff changeset
459 if(strlen(path_copy) > TITLES_MAX) {
60720f86d145 in _WIN32 do a sanity check against \video_ts in addition to /video_ts, because both paths are admitted; patch by John Stebbins from Handbrake
nicodvb
parents: 47
diff changeset
460 if(!strcasecmp(&(path_copy[strlen( path_copy ) - TITLES_MAX]),
60720f86d145 in _WIN32 do a sanity check against \video_ts in addition to /video_ts, because both paths are admitted; patch by John Stebbins from Handbrake
nicodvb
parents: 47
diff changeset
461 "\\video_ts"))
60720f86d145 in _WIN32 do a sanity check against \video_ts in addition to /video_ts, because both paths are admitted; patch by John Stebbins from Handbrake
nicodvb
parents: 47
diff changeset
462 path_copy[strlen(path_copy) - (TITLES_MAX-1)] = '\0';
60720f86d145 in _WIN32 do a sanity check against \video_ts in addition to /video_ts, because both paths are admitted; patch by John Stebbins from Handbrake
nicodvb
parents: 47
diff changeset
463 }
60720f86d145 in _WIN32 do a sanity check against \video_ts in addition to /video_ts, because both paths are admitted; patch by John Stebbins from Handbrake
nicodvb
parents: 47
diff changeset
464 #endif
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
465 if( strlen( path_copy ) > TITLES_MAX ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
466 if( !strcasecmp( &(path_copy[ strlen( path_copy ) - TITLES_MAX ]),
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
467 "/video_ts" ) ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
468 path_copy[ strlen( path_copy ) - TITLES_MAX ] = '\0';
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
469 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
470 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
471
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
472 if(path_copy[0] == '\0') {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
473 path_copy[0] = '/';
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
474 path_copy[1] = '\0';
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
475 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
476
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
477 #if defined(SYS_BSD)
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
478 if( ( fe = getfsfile( path_copy ) ) ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
479 dev_name = bsd_block2char( fe->fs_spec );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
480 fprintf( stderr,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
481 "libdvdread: Attempting to use device %s"
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
482 " mounted on %s for CSS authentication\n",
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
483 dev_name,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
484 fe->fs_file );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
485 auth_drive = DVDOpenImageFile( dev_name, have_css );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
486 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
487 #elif defined(__sun)
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
488 mntfile = fopen( MNTTAB, "r" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
489 if( mntfile ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
490 struct mnttab mp;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
491 int res;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
492
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
493 while( ( res = getmntent( mntfile, &mp ) ) != -1 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
494 if( res == 0 && !strcmp( mp.mnt_mountp, path_copy ) ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
495 dev_name = sun_block2char( mp.mnt_special );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
496 fprintf( stderr,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
497 "libdvdread: Attempting to use device %s"
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
498 " mounted on %s for CSS authentication\n",
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
499 dev_name,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
500 mp.mnt_mountp );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
501 auth_drive = DVDOpenImageFile( dev_name, have_css );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
502 break;
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
503 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
504 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
505 fclose( mntfile );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
506 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
507 #elif defined(__linux__)
66
d16d554fa215 Replace deprecated MOUNTED with _PATH_MOUNTED.
reimar
parents: 57
diff changeset
508 mntfile = fopen( _PATH_MOUNTED, "r" );
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
509 if( mntfile ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
510 struct mntent *me;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
511
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
512 while( ( me = getmntent( mntfile ) ) ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
513 if( !strcmp( me->mnt_dir, path_copy ) ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
514 fprintf( stderr,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
515 "libdvdread: Attempting to use device %s"
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
516 " mounted on %s for CSS authentication\n",
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
517 me->mnt_fsname,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
518 me->mnt_dir );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
519 auth_drive = DVDOpenImageFile( me->mnt_fsname, have_css );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
520 dev_name = strdup(me->mnt_fsname);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
521 break;
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
522 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
523 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
524 fclose( mntfile );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
525 }
41
ef679522d00f replaced conditional checks on MSC with _WIN32 to permit MINGW to mount and decrypt images; patch by John Stebbins (stebbing jetheaddev com)
nicodvb
parents: 38
diff changeset
526 #elif defined(_WIN32) || defined(__OS2__)
52
645a8b52b951 in OS/2 Use DVDOpenImageFile() only if it is a drive; patch by komh chollian net
nicodvb
parents: 50
diff changeset
527 #ifdef __OS2__
645a8b52b951 in OS/2 Use DVDOpenImageFile() only if it is a drive; patch by komh chollian net
nicodvb
parents: 50
diff changeset
528 /* Use DVDOpenImageFile() only if it is a drive */
56
af0a1be87264 in DVDOPen() use isalpha() rather than checking the first char of the device against 'A'..'Z'
nicodvb
parents: 55
diff changeset
529 if(isalpha(path[0]) && path[1] == ':' &&
52
645a8b52b951 in OS/2 Use DVDOpenImageFile() only if it is a drive; patch by komh chollian net
nicodvb
parents: 50
diff changeset
530 ( !path[2] ||
645a8b52b951 in OS/2 Use DVDOpenImageFile() only if it is a drive; patch by komh chollian net
nicodvb
parents: 50
diff changeset
531 ((path[2] == '\\' || path[2] == '/') && !path[3])))
645a8b52b951 in OS/2 Use DVDOpenImageFile() only if it is a drive; patch by komh chollian net
nicodvb
parents: 50
diff changeset
532 #endif
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
533 auth_drive = DVDOpenImageFile( path, have_css );
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
534 #endif
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
535
41
ef679522d00f replaced conditional checks on MSC with _WIN32 to permit MINGW to mount and decrypt images; patch by John Stebbins (stebbing jetheaddev com)
nicodvb
parents: 38
diff changeset
536 #if !defined(_WIN32) && !defined(__OS2__)
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
537 if( !dev_name ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
538 fprintf( stderr, "libdvdread: Couldn't find device name.\n" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
539 } else if( !auth_drive ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
540 fprintf( stderr, "libdvdread: Device %s inaccessible, "
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
541 "CSS authentication not available.\n", dev_name );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
542 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
543 #else
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
544 if( !auth_drive ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
545 fprintf( stderr, "libdvdread: Device %s inaccessible, "
55
950bb037bedb in OS2 and WIN32 when CSS is not available print the correct message using path rather than dev_name; patch by komh chollium net
nicodvb
parents: 54
diff changeset
546 "CSS authentication not available.\n", path );
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
547 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
548 #endif
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
549
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
550 free( dev_name );
37
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
551 dev_name = NULL;
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
552 free( path_copy );
37
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
553 path_copy = NULL;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
554
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
555 /**
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
556 * If we've opened a drive, just use that.
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
557 */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
558 if( auth_drive ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
559 free(path);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
560 return auth_drive;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
561 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
562 /**
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
563 * Otherwise, we now try to open the directory tree instead.
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
564 */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
565 ret_val = DVDOpenPath( path );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
566 free( path );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
567 return ret_val;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
568 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
569
37
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
570 DVDOpen_error:
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
571 /* If it's none of the above, screw it. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
572 fprintf( stderr, "libdvdread: Could not open %s\n", path );
37
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
573 if( path != NULL )
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
574 free( path );
37
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
575 if ( path_copy != NULL )
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
576 free( path_copy );
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
577 if ( cdir >= 0 )
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
578 close( cdir );
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
579 if ( new_path != NULL )
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
580 free( new_path );
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
581 return NULL;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
582 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
583
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
584 void DVDClose( dvd_reader_t *dvd )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
585 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
586 if( dvd ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
587 if( dvd->dev ) dvdinput_close( dvd->dev );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
588 if( dvd->path_root ) free( dvd->path_root );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
589 if( dvd->udfcache ) FreeUDFCache( dvd->udfcache );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
590 free( dvd );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
591 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
592 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
593
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
594 /**
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
595 * Open an unencrypted file on a DVD image file.
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
596 */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
597 static dvd_file_t *DVDOpenFileUDF( dvd_reader_t *dvd, char *filename )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
598 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
599 uint32_t start, len;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
600 dvd_file_t *dvd_file;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
601
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
602 start = UDFFindFile( dvd, filename, &len );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
603 if( !start ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
604 fprintf( stderr, "libdvdnav:DVDOpenFileUDF:UDFFindFile %s failed\n", filename );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
605 return NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
606 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
607
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
608 dvd_file = (dvd_file_t *) malloc( sizeof( dvd_file_t ) );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
609 if( !dvd_file ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
610 fprintf( stderr, "libdvdnav:DVDOpenFileUDF:malloc failed\n" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
611 return NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
612 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
613 dvd_file->dvd = dvd;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
614 dvd_file->lb_start = start;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
615 dvd_file->seek_pos = 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
616 memset( dvd_file->title_sizes, 0, sizeof( dvd_file->title_sizes ) );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
617 memset( dvd_file->title_devs, 0, sizeof( dvd_file->title_devs ) );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
618 dvd_file->filesize = len / DVD_VIDEO_LB_LEN;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
619
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
620 return dvd_file;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
621 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
622
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
623 /**
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
624 * Searches for <file> in directory <path>, ignoring case.
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
625 * Returns 0 and full filename in <filename>.
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
626 * or -1 on file not found.
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
627 * or -2 on path not found.
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
628 */
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
629 static int findDirFile( const char *path, const char *file, char *filename )
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
630 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
631 DIR *dir;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
632 struct dirent *ent;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
633
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
634 dir = opendir( path );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
635 if( !dir ) return -2;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
636
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
637 while( ( ent = readdir( dir ) ) != NULL ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
638 if( !strcasecmp( ent->d_name, file ) ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
639 sprintf( filename, "%s%s%s", path,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
640 ( ( path[ strlen( path ) - 1 ] == '/' ) ? "" : "/" ),
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
641 ent->d_name );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
642 closedir(dir);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
643 return 0;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
644 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
645 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
646 closedir(dir);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
647 return -1;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
648 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
649
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
650 static int findDVDFile( dvd_reader_t *dvd, const char *file, char *filename )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
651 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
652 char video_path[ PATH_MAX + 1 ];
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
653 const char *nodirfile;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
654 int ret;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
655
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
656 /* Strip off the directory for our search */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
657 if( !strncasecmp( "/VIDEO_TS/", file, 10 ) ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
658 nodirfile = &(file[ 10 ]);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
659 } else {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
660 nodirfile = file;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
661 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
662
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
663 ret = findDirFile( dvd->path_root, nodirfile, filename );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
664 if( ret < 0 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
665 /* Try also with adding the path, just in case. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
666 sprintf( video_path, "%s/VIDEO_TS/", dvd->path_root );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
667 ret = findDirFile( video_path, nodirfile, filename );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
668 if( ret < 0 ) {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
669 /* Try with the path, but in lower case. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
670 sprintf( video_path, "%s/video_ts/", dvd->path_root );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
671 ret = findDirFile( video_path, nodirfile, filename );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
672 if( ret < 0 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
673 return 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
674 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
675 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
676 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
677
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
678 return 1;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
679 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
680
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
681 /**
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
682 * Open an unencrypted file from a DVD directory tree.
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
683 */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
684 static dvd_file_t *DVDOpenFilePath( dvd_reader_t *dvd, char *filename )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
685 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
686 char full_path[ PATH_MAX + 1 ];
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
687 dvd_file_t *dvd_file;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
688 struct stat fileinfo;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
689 dvd_input_t dev;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
690
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
691 /* Get the full path of the file. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
692 if( !findDVDFile( dvd, filename, full_path ) ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
693 fprintf( stderr, "libdvdnav:DVDOpenFilePath:findDVDFile %s failed\n", filename );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
694 return NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
695 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
696
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
697 dev = dvdinput_open( full_path );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
698 if( !dev ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
699 fprintf( stderr, "libdvdnav:DVDOpenFilePath:dvdinput_open %s failed\n", full_path );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
700 return NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
701 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
702
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
703 dvd_file = (dvd_file_t *) malloc( sizeof( dvd_file_t ) );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
704 if( !dvd_file ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
705 fprintf( stderr, "libdvdnav:DVDOpenFilePath:dvd_file malloc failed\n" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
706 dvdinput_close(dev);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
707 return NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
708 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
709 dvd_file->dvd = dvd;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
710 dvd_file->lb_start = 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
711 dvd_file->seek_pos = 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
712 memset( dvd_file->title_sizes, 0, sizeof( dvd_file->title_sizes ) );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
713 memset( dvd_file->title_devs, 0, sizeof( dvd_file->title_devs ) );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
714 dvd_file->filesize = 0;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
715
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
716 if( stat( full_path, &fileinfo ) < 0 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
717 fprintf( stderr, "libdvdread: Can't stat() %s.\n", filename );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
718 free( dvd_file );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
719 return NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
720 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
721 dvd_file->title_sizes[ 0 ] = fileinfo.st_size / DVD_VIDEO_LB_LEN;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
722 dvd_file->title_devs[ 0 ] = dev;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
723 dvd_file->filesize = dvd_file->title_sizes[ 0 ];
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
724
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
725 return dvd_file;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
726 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
727
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
728 static dvd_file_t *DVDOpenVOBUDF( dvd_reader_t *dvd, int title, int menu )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
729 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
730 char filename[ MAX_UDF_FILE_NAME_LEN ];
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
731 uint32_t start, len;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
732 dvd_file_t *dvd_file;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
733
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
734 if( title == 0 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
735 sprintf( filename, "/VIDEO_TS/VIDEO_TS.VOB" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
736 } else {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
737 sprintf( filename, "/VIDEO_TS/VTS_%02d_%d.VOB", title, menu ? 0 : 1 );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
738 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
739 start = UDFFindFile( dvd, filename, &len );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
740 if( start == 0 ) return NULL;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
741
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
742 dvd_file = (dvd_file_t *) malloc( sizeof( dvd_file_t ) );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
743 if( !dvd_file ) return NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
744 dvd_file->dvd = dvd;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
745 /*Hack*/ dvd_file->css_title = title << 1 | menu;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
746 dvd_file->lb_start = start;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
747 dvd_file->seek_pos = 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
748 memset( dvd_file->title_sizes, 0, sizeof( dvd_file->title_sizes ) );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
749 memset( dvd_file->title_devs, 0, sizeof( dvd_file->title_devs ) );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
750 dvd_file->filesize = len / DVD_VIDEO_LB_LEN;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
751
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
752 /* Calculate the complete file size for every file in the VOBS */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
753 if( !menu ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
754 int cur;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
755
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
756 for( cur = 2; cur < 10; cur++ ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
757 sprintf( filename, "/VIDEO_TS/VTS_%02d_%d.VOB", title, cur );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
758 if( !UDFFindFile( dvd, filename, &len ) ) break;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
759 dvd_file->filesize += len / DVD_VIDEO_LB_LEN;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
760 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
761 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
762
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
763 if( dvd->css_state == 1 /* Need key init */ ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
764 initAllCSSKeys( dvd );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
765 dvd->css_state = 2;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
766 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
767 /*
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
768 if( dvdinput_title( dvd_file->dvd->dev, (int)start ) < 0 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
769 fprintf( stderr, "libdvdread: Error cracking CSS key for %s\n",
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
770 filename );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
771 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
772 */
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
773
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
774 return dvd_file;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
775 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
776
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
777 static dvd_file_t *DVDOpenVOBPath( dvd_reader_t *dvd, int title, int menu )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
778 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
779 char filename[ MAX_UDF_FILE_NAME_LEN ];
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
780 char full_path[ PATH_MAX + 1 ];
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
781 struct stat fileinfo;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
782 dvd_file_t *dvd_file;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
783 int i;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
784
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
785 dvd_file = (dvd_file_t *) malloc( sizeof( dvd_file_t ) );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
786 if( !dvd_file ) return NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
787 dvd_file->dvd = dvd;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
788 /*Hack*/ dvd_file->css_title = title << 1 | menu;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
789 dvd_file->lb_start = 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
790 dvd_file->seek_pos = 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
791 memset( dvd_file->title_sizes, 0, sizeof( dvd_file->title_sizes ) );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
792 memset( dvd_file->title_devs, 0, sizeof( dvd_file->title_devs ) );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
793 dvd_file->filesize = 0;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
794
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
795 if( menu ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
796 dvd_input_t dev;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
797
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
798 if( title == 0 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
799 sprintf( filename, "VIDEO_TS.VOB" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
800 } else {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
801 sprintf( filename, "VTS_%02i_0.VOB", title );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
802 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
803 if( !findDVDFile( dvd, filename, full_path ) ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
804 free( dvd_file );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
805 return NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
806 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
807
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
808 dev = dvdinput_open( full_path );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
809 if( dev == NULL ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
810 free( dvd_file );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
811 return NULL;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
812 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
813
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
814 if( stat( full_path, &fileinfo ) < 0 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
815 fprintf( stderr, "libdvdread: Can't stat() %s.\n", filename );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
816 dvdinput_close(dev);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
817 free( dvd_file );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
818 return NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
819 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
820 dvd_file->title_sizes[ 0 ] = fileinfo.st_size / DVD_VIDEO_LB_LEN;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
821 dvd_file->title_devs[ 0 ] = dev;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
822 dvdinput_title( dvd_file->title_devs[0], 0);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
823 dvd_file->filesize = dvd_file->title_sizes[ 0 ];
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
824
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
825 } else {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
826 for( i = 0; i < TITLES_MAX; ++i ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
827
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
828 sprintf( filename, "VTS_%02i_%i.VOB", title, i + 1 );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
829 if( !findDVDFile( dvd, filename, full_path ) ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
830 break;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
831 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
832
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
833 if( stat( full_path, &fileinfo ) < 0 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
834 fprintf( stderr, "libdvdread: Can't stat() %s.\n", filename );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
835 break;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
836 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
837
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
838 dvd_file->title_sizes[ i ] = fileinfo.st_size / DVD_VIDEO_LB_LEN;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
839 dvd_file->title_devs[ i ] = dvdinput_open( full_path );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
840 dvdinput_title( dvd_file->title_devs[ i ], 0 );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
841 dvd_file->filesize += dvd_file->title_sizes[ i ];
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
842 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
843 if( !dvd_file->title_devs[ 0 ] ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
844 free( dvd_file );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
845 return NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
846 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
847 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
848
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
849 return dvd_file;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
850 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
851
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
852 dvd_file_t *DVDOpenFile( dvd_reader_t *dvd, int titlenum,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
853 dvd_read_domain_t domain )
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
854 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
855 char filename[ MAX_UDF_FILE_NAME_LEN ];
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
856
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
857 /* Check arguments. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
858 if( dvd == NULL || titlenum < 0 )
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
859 return NULL;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
860
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
861 switch( domain ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
862 case DVD_READ_INFO_FILE:
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
863 if( titlenum == 0 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
864 sprintf( filename, "/VIDEO_TS/VIDEO_TS.IFO" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
865 } else {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
866 sprintf( filename, "/VIDEO_TS/VTS_%02i_0.IFO", titlenum );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
867 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
868 break;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
869 case DVD_READ_INFO_BACKUP_FILE:
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
870 if( titlenum == 0 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
871 sprintf( filename, "/VIDEO_TS/VIDEO_TS.BUP" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
872 } else {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
873 sprintf( filename, "/VIDEO_TS/VTS_%02i_0.BUP", titlenum );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
874 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
875 break;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
876 case DVD_READ_MENU_VOBS:
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
877 if( dvd->isImageFile ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
878 return DVDOpenVOBUDF( dvd, titlenum, 1 );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
879 } else {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
880 return DVDOpenVOBPath( dvd, titlenum, 1 );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
881 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
882 break;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
883 case DVD_READ_TITLE_VOBS:
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
884 if( titlenum == 0 ) return 0;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
885 if( dvd->isImageFile ) {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
886 return DVDOpenVOBUDF( dvd, titlenum, 0 );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
887 } else {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
888 return DVDOpenVOBPath( dvd, titlenum, 0 );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
889 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
890 break;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
891 default:
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
892 fprintf( stderr, "libdvdread: Invalid domain for file open.\n" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
893 return NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
894 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
895
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
896 if( dvd->isImageFile ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
897 return DVDOpenFileUDF( dvd, filename );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
898 } else {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
899 return DVDOpenFilePath( dvd, filename );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
900 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
901 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
902
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
903 void DVDCloseFile( dvd_file_t *dvd_file )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
904 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
905 int i;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
906
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
907 if( dvd_file ) {
42
3aa39a1cff0f Remove empty if clause.
erik
parents: 41
diff changeset
908 if( !dvd_file->dvd->isImageFile ) {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
909 for( i = 0; i < TITLES_MAX; ++i ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
910 if( dvd_file->title_devs[ i ] ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
911 dvdinput_close( dvd_file->title_devs[i] );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
912 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
913 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
914 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
915
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
916 free( dvd_file );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
917 dvd_file = 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
918 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
919 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
920
44
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
921 static int DVDFileStatVOBUDF( dvd_reader_t *dvd, int title,
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
922 int menu, dvd_stat_t *statbuf )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
923 {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
924 char filename[ MAX_UDF_FILE_NAME_LEN ];
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
925 uint32_t size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
926 off_t tot_size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
927 off_t parts_size[ 9 ];
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
928 int nr_parts = 0;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
929 int n;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
930
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
931 if( title == 0 )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
932 sprintf( filename, "/VIDEO_TS/VIDEO_TS.VOB" );
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
933 else
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
934 sprintf( filename, "/VIDEO_TS/VTS_%02d_%d.VOB", title, menu ? 0 : 1 );
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
935
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
936 if( !UDFFindFile( dvd, filename, &size ) )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
937 return -1;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
938
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
939 tot_size = size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
940 nr_parts = 1;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
941 parts_size[ 0 ] = size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
942
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
943 if( !menu ) {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
944 int cur;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
945
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
946 for( cur = 2; cur < 10; cur++ ) {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
947 sprintf( filename, "/VIDEO_TS/VTS_%02d_%d.VOB", title, cur );
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
948 if( !UDFFindFile( dvd, filename, &size ) )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
949 break;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
950
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
951 parts_size[ nr_parts ] = size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
952 tot_size += size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
953 nr_parts++;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
954 }
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
955 }
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
956
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
957 statbuf->size = tot_size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
958 statbuf->nr_parts = nr_parts;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
959 for( n = 0; n < nr_parts; n++ )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
960 statbuf->parts_size[ n ] = parts_size[ n ];
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
961
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
962 return 0;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
963 }
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
964
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
965
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
966 static int DVDFileStatVOBPath( dvd_reader_t *dvd, int title,
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
967 int menu, dvd_stat_t *statbuf )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
968 {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
969 char filename[ MAX_UDF_FILE_NAME_LEN ];
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
970 char full_path[ PATH_MAX + 1 ];
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
971 struct stat fileinfo;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
972 off_t tot_size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
973 off_t parts_size[ 9 ];
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
974 int nr_parts = 0;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
975 int n;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
976
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
977 if( title == 0 )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
978 sprintf( filename, "VIDEO_TS.VOB" );
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
979 else
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
980 sprintf( filename, "VTS_%02d_%d.VOB", title, menu ? 0 : 1 );
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
981
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
982 if( !findDVDFile( dvd, filename, full_path ) )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
983 return -1;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
984
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
985 if( stat( full_path, &fileinfo ) < 0 ) {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
986 fprintf( stderr, "libdvdread: Can't stat() %s.\n", filename );
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
987 return -1;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
988 }
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
989
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
990 tot_size = fileinfo.st_size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
991 nr_parts = 1;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
992 parts_size[ 0 ] = fileinfo.st_size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
993
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
994 if( !menu ) {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
995 int cur;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
996 for( cur = 2; cur < 10; cur++ ) {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
997 sprintf( filename, "VTS_%02d_%d.VOB", title, cur );
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
998 if( !findDVDFile( dvd, filename, full_path ) )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
999 break;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1000
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1001 if( stat( full_path, &fileinfo ) < 0 ) {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1002 fprintf( stderr, "libdvdread: Can't stat() %s.\n", filename );
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1003 break;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1004 }
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1005
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1006 parts_size[ nr_parts ] = fileinfo.st_size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1007 tot_size += parts_size[ nr_parts ];
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1008 nr_parts++;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1009 }
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1010 }
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1011
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1012 statbuf->size = tot_size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1013 statbuf->nr_parts = nr_parts;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1014 for( n = 0; n < nr_parts; n++ )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1015 statbuf->parts_size[ n ] = parts_size[ n ];
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1016
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1017 return 0;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1018 }
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1019
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1020
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1021 int DVDFileStat( dvd_reader_t *dvd, int titlenum,
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1022 dvd_read_domain_t domain, dvd_stat_t *statbuf )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1023 {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1024 char filename[ MAX_UDF_FILE_NAME_LEN ];
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1025 char full_path[ PATH_MAX + 1 ];
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1026 struct stat fileinfo;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1027 uint32_t size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1028
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1029 /* Check arguments. */
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1030 if( dvd == NULL || titlenum < 0 ) {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1031 errno = EINVAL;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1032 return -1;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1033 }
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1034
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1035 switch( domain ) {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1036 case DVD_READ_INFO_FILE:
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1037 if( titlenum == 0 )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1038 sprintf( filename, "/VIDEO_TS/VIDEO_TS.IFO" );
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1039 else
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1040 sprintf( filename, "/VIDEO_TS/VTS_%02i_0.IFO", titlenum );
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1041
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1042 break;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1043 case DVD_READ_INFO_BACKUP_FILE:
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1044 if( titlenum == 0 )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1045 sprintf( filename, "/VIDEO_TS/VIDEO_TS.BUP" );
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1046 else
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1047 sprintf( filename, "/VIDEO_TS/VTS_%02i_0.BUP", titlenum );
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1048
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1049 break;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1050 case DVD_READ_MENU_VOBS:
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1051 if( dvd->isImageFile )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1052 return DVDFileStatVOBUDF( dvd, titlenum, 1, statbuf );
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1053 else
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1054 return DVDFileStatVOBPath( dvd, titlenum, 1, statbuf );
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1055
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1056 break;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1057 case DVD_READ_TITLE_VOBS:
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1058 if( titlenum == 0 )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1059 return -1;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1060
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1061 if( dvd->isImageFile )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1062 return DVDFileStatVOBUDF( dvd, titlenum, 0, statbuf );
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1063 else
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1064 return DVDFileStatVOBPath( dvd, titlenum, 0, statbuf );
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1065
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1066 break;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1067 default:
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1068 fprintf( stderr, "libdvdread: Invalid domain for file stat.\n" );
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1069 errno = EINVAL;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1070 return -1;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1071 }
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1072
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1073 if( dvd->isImageFile ) {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1074 if( UDFFindFile( dvd, filename, &size ) ) {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1075 statbuf->size = size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1076 statbuf->nr_parts = 1;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1077 statbuf->parts_size[ 0 ] = size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1078 return 0;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1079 }
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1080 } else {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1081 if( findDVDFile( dvd, filename, full_path ) ) {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1082 if( stat( full_path, &fileinfo ) < 0 )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1083 fprintf( stderr, "libdvdread: Can't stat() %s.\n", filename );
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1084 else {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1085 statbuf->size = fileinfo.st_size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1086 statbuf->nr_parts = 1;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1087 statbuf->parts_size[ 0 ] = statbuf->size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1088 return 0;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1089 }
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1090 }
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1091 }
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1092 return -1;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1093 }
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1094
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1095 /* Internal, but used from dvd_udf.c */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1096 int UDFReadBlocksRaw( dvd_reader_t *device, uint32_t lb_number,
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1097 size_t block_count, unsigned char *data,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1098 int encrypted )
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1099 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1100 int ret;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1101
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1102 if( !device->dev ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1103 fprintf( stderr, "libdvdread: Fatal error in block read.\n" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1104 return 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1105 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1106
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1107 ret = dvdinput_seek( device->dev, (int) lb_number );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1108 if( ret != (int) lb_number ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1109 fprintf( stderr, "libdvdread: Can't seek to block %u\n", lb_number );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1110 return 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1111 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1112
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1113 ret = dvdinput_read( device->dev, (char *) data,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1114 (int) block_count, encrypted );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1115 return ret;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1116 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1117
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1118 /* This is using a single input and starting from 'dvd_file->lb_start' offset.
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1119 *
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1120 * Reads 'block_count' blocks from 'dvd_file' at block offset 'offset'
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1121 * into the buffer located at 'data' and if 'encrypted' is set
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1122 * descramble the data if it's encrypted. Returning either an
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1123 * negative error or the number of blocks read. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1124 static int DVDReadBlocksUDF( dvd_file_t *dvd_file, uint32_t offset,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1125 size_t block_count, unsigned char *data,
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1126 int encrypted )
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1127 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1128 return UDFReadBlocksRaw( dvd_file->dvd, dvd_file->lb_start + offset,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1129 block_count, data, encrypted );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1130 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1131
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1132 /* This is using possibly several inputs and starting from an offset of '0'.
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1133 *
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1134 * Reads 'block_count' blocks from 'dvd_file' at block offset 'offset'
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1135 * into the buffer located at 'data' and if 'encrypted' is set
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1136 * descramble the data if it's encrypted. Returning either an
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1137 * negative error or the number of blocks read. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1138 static int DVDReadBlocksPath( dvd_file_t *dvd_file, unsigned int offset,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1139 size_t block_count, unsigned char *data,
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1140 int encrypted )
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1141 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1142 int i;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1143 int ret, ret2, off;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1144
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1145 ret = 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1146 ret2 = 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1147 for( i = 0; i < TITLES_MAX; ++i ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1148 if( !dvd_file->title_sizes[ i ] ) return 0; /* Past end of file */
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1149
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1150 if( offset < dvd_file->title_sizes[ i ] ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1151 if( ( offset + block_count ) <= dvd_file->title_sizes[ i ] ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1152 off = dvdinput_seek( dvd_file->title_devs[ i ], (int)offset );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1153 if( off < 0 || off != (int)offset ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1154 fprintf( stderr, "libdvdread: Can't seek to block %d\n",
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1155 offset );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1156 return off < 0 ? off : 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1157 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1158 ret = dvdinput_read( dvd_file->title_devs[ i ], data,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1159 (int)block_count, encrypted );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1160 break;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1161 } else {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1162 size_t part1_size = dvd_file->title_sizes[ i ] - offset;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1163 /* FIXME: Really needs to be a while loop.
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1164 * (This is only true if you try and read >1GB at a time) */
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1165
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1166 /* Read part 1 */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1167 off = dvdinput_seek( dvd_file->title_devs[ i ], (int)offset );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1168 if( off < 0 || off != (int)offset ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1169 fprintf( stderr, "libdvdread: Can't seek to block %d\n",
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1170 offset );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1171 return off < 0 ? off : 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1172 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1173 ret = dvdinput_read( dvd_file->title_devs[ i ], data,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1174 (int)part1_size, encrypted );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1175 if( ret < 0 ) return ret;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1176 /* FIXME: This is wrong if i is the last file in the set.
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1177 * also error from this read will not show in ret. */
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1178
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1179 /* Does the next part exist? If not then return now. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1180 if( i + 1 >= TITLES_MAX || !dvd_file->title_devs[ i + 1 ] )
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1181 return ret;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1182
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1183 /* Read part 2 */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1184 off = dvdinput_seek( dvd_file->title_devs[ i + 1 ], 0 );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1185 if( off < 0 || off != 0 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1186 fprintf( stderr, "libdvdread: Can't seek to block %d\n",
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1187 0 );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1188 return off < 0 ? off : 0;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1189 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1190 ret2 = dvdinput_read( dvd_file->title_devs[ i + 1 ],
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1191 data + ( part1_size
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1192 * (int64_t)DVD_VIDEO_LB_LEN ),
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1193 (int)(block_count - part1_size),
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1194 encrypted );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1195 if( ret2 < 0 ) return ret2;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1196 break;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1197 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1198 } else {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1199 offset -= dvd_file->title_sizes[ i ];
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1200 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1201 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1202
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1203 return ret + ret2;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1204 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1205
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1206 /* This is broken reading more than 2Gb at a time is ssize_t is 32-bit. */
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1207 ssize_t DVDReadBlocks( dvd_file_t *dvd_file, int offset,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1208 size_t block_count, unsigned char *data )
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1209 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1210 int ret;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1211
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1212 /* Check arguments. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1213 if( dvd_file == NULL || offset < 0 || data == NULL )
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1214 return -1;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1215
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1216 /* Hack, and it will still fail for multiple opens in a threaded app ! */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1217 if( dvd_file->dvd->css_title != dvd_file->css_title ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1218 dvd_file->dvd->css_title = dvd_file->css_title;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1219 if( dvd_file->dvd->isImageFile ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1220 dvdinput_title( dvd_file->dvd->dev, (int)dvd_file->lb_start );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1221 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1222 /* Here each vobu has it's own dvdcss handle, so no need to update
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1223 else {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1224 dvdinput_title( dvd_file->title_devs[ 0 ], (int)dvd_file->lb_start );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1225 }*/
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1226 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1227
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1228 if( dvd_file->dvd->isImageFile ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1229 ret = DVDReadBlocksUDF( dvd_file, (uint32_t)offset,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1230 block_count, data, DVDINPUT_READ_DECRYPT );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1231 } else {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1232 ret = DVDReadBlocksPath( dvd_file, (unsigned int)offset,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1233 block_count, data, DVDINPUT_READ_DECRYPT );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1234 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1235
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1236 return (ssize_t)ret;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1237 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1238
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1239 int32_t DVDFileSeek( dvd_file_t *dvd_file, int32_t offset )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1240 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1241 /* Check arguments. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1242 if( dvd_file == NULL || offset < 0 )
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1243 return -1;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1244
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1245 if( offset > dvd_file->filesize * DVD_VIDEO_LB_LEN ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1246 return -1;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1247 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1248 dvd_file->seek_pos = (uint32_t) offset;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1249 return offset;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1250 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1251
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1252 int DVDFileSeekForce(dvd_file_t *dvd_file, int offset, int force_size)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1253 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1254 /* Check arguments. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1255 if( dvd_file == NULL || offset <= 0 )
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1256 return -1;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1257
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1258 if( dvd_file->dvd->isImageFile ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1259 if( force_size < 0 )
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1260 force_size = (offset - 1) / DVD_VIDEO_LB_LEN + 1;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1261 if( dvd_file->filesize < force_size ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1262 dvd_file->filesize = force_size;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1263 fprintf(stderr, "libdvdread: Ignored size of file indicated in UDF.\n");
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1264 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1265 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1266
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1267 if( offset > dvd_file->filesize * DVD_VIDEO_LB_LEN )
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1268 return -1;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1269
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1270 dvd_file->seek_pos = (uint32_t) offset;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1271 return offset;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1272 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1273
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1274 ssize_t DVDReadBytes( dvd_file_t *dvd_file, void *data, size_t byte_size )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1275 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1276 unsigned char *secbuf_base, *secbuf;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1277 unsigned int numsec, seek_sector, seek_byte;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1278 int ret;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1279
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1280 /* Check arguments. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1281 if( dvd_file == NULL || data == NULL )
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1282 return -1;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1283
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1284 seek_sector = dvd_file->seek_pos / DVD_VIDEO_LB_LEN;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1285 seek_byte = dvd_file->seek_pos % DVD_VIDEO_LB_LEN;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1286
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1287 numsec = ( ( seek_byte + byte_size ) / DVD_VIDEO_LB_LEN ) +
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1288 ( ( ( seek_byte + byte_size ) % DVD_VIDEO_LB_LEN ) ? 1 : 0 );
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1289
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1290 secbuf_base = (unsigned char *) malloc( numsec * DVD_VIDEO_LB_LEN + 2048 );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1291 secbuf = (unsigned char *)(((uintptr_t)secbuf_base & ~((uintptr_t)2047)) + 2048);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1292 if( !secbuf_base ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1293 fprintf( stderr, "libdvdread: Can't allocate memory "
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1294 "for file read!\n" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1295 return 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1296 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1297
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1298 if( dvd_file->dvd->isImageFile ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1299 ret = DVDReadBlocksUDF( dvd_file, (uint32_t) seek_sector,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1300 (size_t) numsec, secbuf, DVDINPUT_NOFLAGS );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1301 } else {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1302 ret = DVDReadBlocksPath( dvd_file, seek_sector,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1303 (size_t) numsec, secbuf, DVDINPUT_NOFLAGS );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1304 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1305
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1306 if( ret != (int) numsec ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1307 free( secbuf_base );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1308 return ret < 0 ? ret : 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1309 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1310
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1311 memcpy( data, &(secbuf[ seek_byte ]), byte_size );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1312 free( secbuf_base );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1313
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1314 DVDFileSeekForce(dvd_file, dvd_file->seek_pos + byte_size, -1);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1315 return byte_size;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1316 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1317
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1318 ssize_t DVDFileSize( dvd_file_t *dvd_file )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1319 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1320 /* Check arguments. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1321 if( dvd_file == NULL )
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1322 return -1;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1323
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1324 return dvd_file->filesize;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1325 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1326
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1327 int DVDDiscID( dvd_reader_t *dvd, unsigned char *discid )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1328 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1329 struct md5_ctx ctx;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1330 int title;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1331 int nr_of_files = 0;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1332
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1333 /* Check arguments. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1334 if( dvd == NULL || discid == NULL )
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1335 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1336
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1337 /* Go through the first 10 IFO:s, in order,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1338 * and md5sum them, i.e VIDEO_TS.IFO and VTS_0?_0.IFO */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1339 md5_init_ctx( &ctx );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1340 for( title = 0; title < 10; title++ ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1341 dvd_file_t *dvd_file = DVDOpenFile( dvd, title, DVD_READ_INFO_FILE );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1342 if( dvd_file != NULL ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1343 ssize_t bytes_read;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1344 size_t file_size = dvd_file->filesize * DVD_VIDEO_LB_LEN;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1345 char *buffer_base = malloc( file_size + 2048 );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1346 char *buffer = (char *)(((uintptr_t)buffer_base & ~((uintptr_t)2047)) + 2048);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1347
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1348 if( buffer_base == NULL ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1349 DVDCloseFile( dvd_file );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1350 fprintf( stderr, "libdvdread: DVDDiscId, failed to "
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1351 "allocate memory for file read!\n" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1352 return -1;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1353 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1354
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1355 bytes_read = DVDReadBytes( dvd_file, buffer, file_size );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1356 if( bytes_read != file_size ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1357 fprintf( stderr, "libdvdread: DVDDiscId read returned %zd bytes"
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1358 ", wanted %zd\n", bytes_read, file_size );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1359 DVDCloseFile( dvd_file );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1360 free( buffer_base );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1361 return -1;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1362 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1363
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1364 md5_process_bytes( buffer, file_size, &ctx );
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1365
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1366 DVDCloseFile( dvd_file );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1367 free( buffer_base );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1368 nr_of_files++;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1369 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1370 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1371 md5_finish_ctx( &ctx, discid );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1372 if(!nr_of_files)
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1373 return -1;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1374
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1375 return 0;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1376 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1377
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1378
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1379 int DVDISOVolumeInfo( dvd_reader_t *dvd,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1380 char *volid, unsigned int volid_size,
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1381 unsigned char *volsetid, unsigned int volsetid_size )
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1382 {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1383 unsigned char *buffer, *buffer_base;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1384 int ret;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1385
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1386 /* Check arguments. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1387 if( dvd == NULL )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1388 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1389
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1390 if( dvd->dev == NULL ) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1391 /* No block access, so no ISO... */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1392 return -1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1393 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1394
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1395 buffer_base = malloc( DVD_VIDEO_LB_LEN + 2048 );
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1396 buffer = (unsigned char *)(((uintptr_t)buffer_base & ~((uintptr_t)2047)) + 2048);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1397
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1398 if( buffer_base == NULL ) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1399 fprintf( stderr, "libdvdread: DVDISOVolumeInfo, failed to "
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1400 "allocate memory for file read!\n" );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1401 return -1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1402 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1403
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1404 ret = UDFReadBlocksRaw( dvd, 16, 1, buffer, 0 );
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1405 if( ret != 1 ) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1406 fprintf( stderr, "libdvdread: DVDISOVolumeInfo, failed to "
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1407 "read ISO9660 Primary Volume Descriptor!\n" );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1408 free( buffer_base );
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1409 return -1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1410 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1411
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1412 if( (volid != NULL) && (volid_size > 0) ) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1413 unsigned int n;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1414 for(n = 0; n < 32; n++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1415 if(buffer[40+n] == 0x20) {
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1416 break;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1417 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1418 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1419
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1420 if(volid_size > n+1) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1421 volid_size = n+1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1422 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1423
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1424 memcpy(volid, &buffer[40], volid_size-1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1425 volid[volid_size-1] = '\0';
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1426 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1427
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1428 if( (volsetid != NULL) && (volsetid_size > 0) ) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1429 if(volsetid_size > 128) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1430 volsetid_size = 128;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1431 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1432 memcpy(volsetid, &buffer[190], volsetid_size);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1433 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1434 free( buffer_base );
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1435 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1436 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1437
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1438
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1439 int DVDUDFVolumeInfo( dvd_reader_t *dvd,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1440 char *volid, unsigned int volid_size,
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1441 unsigned char *volsetid, unsigned int volsetid_size )
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1442 {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1443 int ret;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1444 /* Check arguments. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1445 if( dvd == NULL )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1446 return -1;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1447
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1448 if( dvd->dev == NULL ) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1449 /* No block access, so no UDF VolumeSet Identifier */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1450 return -1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1451 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1452
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1453 if( (volid != NULL) && (volid_size > 0) ) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1454 ret = UDFGetVolumeIdentifier(dvd, volid, volid_size);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1455 if(!ret) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1456 return -1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1457 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1458 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1459 if( (volsetid != NULL) && (volsetid_size > 0) ) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1460 ret = UDFGetVolumeSetIdentifier(dvd, volsetid, volsetid_size);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1461 if(!ret) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1462 return -1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1463 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1464 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1465
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1466 return 0;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1467 }