annotate dvd_reader.c @ 46:4f40782ab5fc src

Expose the dvd_stat_t struct. The commits that brought in the DVDFileStat() function from libdvdread 0.9.7 incorrectly made the stat struct opaque. This can't be done because the API does not use any allocation or deallocation code. So callers of DVDFileStat cannot declare stat structs. Since we are attempting to maintain the API compatibility w/ those releases of libdvdread, the struct has been brought into the header. Thanks again to Rathann for bringing this issue to the dvdnav list. And thanks to the original bug reportera(O. Rolland) to fedora.
author erik
date Mon, 07 Dec 2009 03:50:20 +0000
parents 3307493f20c5
children 9db0de5db7c8
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>
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
31 #include <unistd.h>
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
32 #include <limits.h>
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
33 #include <dirent.h>
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
34
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
35 /* misc win32 helpers */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
36 #ifdef WIN32
6
e5663591d13c gettimeofday() doesn't exist in windows, but recent mingw32 runtime
nicodvb
parents: 3
diff changeset
37 #ifndef HAVE_GETTIMEOFDAY
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
38 /* replacement gettimeofday implementation */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
39 #include <sys/timeb.h>
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
40 static inline int _private_gettimeofday( struct timeval *tv, void *tz )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
41 {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
42 struct timeb t;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
43 ftime( &t );
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
44 tv->tv_sec = t.time;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
45 tv->tv_usec = t.millitm * 1000;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
46 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
47 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
48 #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
49 #endif
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
50 #include <io.h> /* read() */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
51 #define lseek64 _lseeki64
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
52 #endif
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
53
36
79c9b639bf9d Use __APPLE__ instead of __DARWIN__ in preprocessor check.
diego
parents: 35
diff changeset
54 #if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__bsdi__) || defined(__APPLE__)
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
55 #define SYS_BSD 1
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
56 #endif
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
57
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
58 #if defined(__sun)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
59 #include <sys/mnttab.h>
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
60 #elif defined(SYS_BSD)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
61 #include <fstab.h>
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
62 #elif defined(__linux__)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
63 #include <mntent.h>
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
64 #endif
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
65
33
c743d79f187b Move installed headers into dvdread directory to make them easier to
reimar
parents: 30
diff changeset
66 #include "dvdread/dvd_udf.h"
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
67 #include "dvd_input.h"
33
c743d79f187b Move installed headers into dvdread directory to make them easier to
reimar
parents: 30
diff changeset
68 #include "dvdread/dvd_reader.h"
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
69 #include "md5.h"
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
70
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
71 #define DEFAULT_UDF_CACHE_LEVEL 1
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
72
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
73 struct dvd_reader_s {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
74 /* Basic information. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
75 int isImageFile;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
76
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
77 /* 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
78 * 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
79 int css_state;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
80 int css_title; /* Last title that we have called dvdinpute_title for. */
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
81
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
82 /* Information required for an image file. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
83 dvd_input_t dev;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
84
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
85 /* Information required for a directory path drive. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
86 char *path_root;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
87
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
88 /* Filesystem cache */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
89 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
90 void *udfcache;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
91 };
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
92
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
93 #define TITLES_MAX 9
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
94
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
95 struct dvd_file_s {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
96 /* Basic information. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
97 dvd_reader_t *dvd;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
98
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
99 /* Hack for selecting the right css title. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
100 int css_title;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
101
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
102 /* Information required for an image file. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
103 uint32_t lb_start;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
104 uint32_t seek_pos;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
105
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
106 /* Information required for a directory path drive. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
107 size_t title_sizes[ TITLES_MAX ];
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
108 dvd_input_t title_devs[ TITLES_MAX ];
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
109
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
110 /* Calculated at open-time, size in blocks. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
111 ssize_t filesize;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
112 };
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
113
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
114 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
115 size_t block_count, unsigned char *data,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
116 int encrypted );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
117
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
118 /**
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
119 * Set the level of caching on udf
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
120 * level = 0 (no caching)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
121 * level = 1 (caching filesystem info)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
122 */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
123 int DVDUDFCacheLevel(dvd_reader_t *device, int level)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
124 {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
125 struct dvd_reader_s *dev = (struct dvd_reader_s *)device;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
126
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
127 if(level > 0) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
128 level = 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
129 } else if(level < 0) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
130 return dev->udfcache_level;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
131 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
132
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
133 dev->udfcache_level = level;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
134
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
135 return level;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
136 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
137
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
138 void *GetUDFCacheHandle(dvd_reader_t *device)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
139 {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
140 struct dvd_reader_s *dev = (struct dvd_reader_s *)device;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
141
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
142 return dev->udfcache;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
143 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
144
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
145 void SetUDFCacheHandle(dvd_reader_t *device, void *cache)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
146 {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
147 struct dvd_reader_s *dev = (struct dvd_reader_s *)device;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
148
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
149 dev->udfcache = cache;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
150 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
151
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 /* Loop over all titles and call dvdcss_title to crack the keys. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
155 static int initAllCSSKeys( dvd_reader_t *dvd )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
156 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
157 struct timeval all_s, all_e;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
158 struct timeval t_s, t_e;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
159 char filename[ MAX_UDF_FILE_NAME_LEN ];
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
160 uint32_t start, len;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
161 int title;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
162
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
163 char *nokeys_str = getenv("DVDREAD_NOKEYS");
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
164 if(nokeys_str != NULL)
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
165 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
166
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
167 fprintf( stderr, "\n" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
168 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
169 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
170 "please be patient\n\n" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
171 gettimeofday(&all_s, NULL);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
172
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
173 for( title = 0; title < 100; title++ ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
174 gettimeofday( &t_s, NULL );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
175 if( title == 0 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
176 sprintf( filename, "/VIDEO_TS/VIDEO_TS.VOB" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
177 } else {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
178 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
179 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
180 start = UDFFindFile( dvd, filename, &len );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
181 if( start != 0 && len != 0 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
182 /* Perform CSS key cracking for this title. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
183 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
184 filename, start );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
185 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
186 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
187 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
188 gettimeofday( &t_e, NULL );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
189 fprintf( stderr, "libdvdread: Elapsed time %ld\n",
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
190 (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
191 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
192
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
193 if( title == 0 ) continue;
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 gettimeofday( &t_s, NULL );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
196 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
197 start = UDFFindFile( dvd, filename, &len );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
198 if( start == 0 || len == 0 ) break;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
199
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
200 /* Perform CSS key cracking for this title. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
201 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
202 filename, start );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
203 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
204 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
205 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
206 gettimeofday( &t_e, NULL );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
207 fprintf( stderr, "libdvdread: Elapsed time %ld\n",
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
208 (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
209 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
210 title--;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
211
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
212 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
213 gettimeofday(&all_e, NULL);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
214 fprintf( stderr, "libdvdread: Elapsed time %ld\n",
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
215 (long int) all_e.tv_sec - all_s.tv_sec );
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
216
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
217 return 0;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
218 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
219
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 * Open a DVD image or block device file.
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
224 */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
225 static dvd_reader_t *DVDOpenImageFile( const char *location, int have_css )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
226 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
227 dvd_reader_t *dvd;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
228 dvd_input_t dev;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
229
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
230 dev = dvdinput_open( location );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
231 if( !dev ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
232 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
233 return NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
234 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
235
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
236 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
237 if( !dvd ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
238 dvdinput_close(dev);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
239 return NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
240 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
241 dvd->isImageFile = 1;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
242 dvd->dev = dev;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
243 dvd->path_root = NULL;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
244
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
245 dvd->udfcache_level = DEFAULT_UDF_CACHE_LEVEL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
246 dvd->udfcache = NULL;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
247
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
248 if( have_css ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
249 /* 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
250 * 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
251 * don't have that information. */
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
252
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
253 dvd->css_state = 1; /* Need key init. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
254 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
255 dvd->css_title = 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
256
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
257 return dvd;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
258 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
259
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
260 static dvd_reader_t *DVDOpenPath( const char *path_root )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
261 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
262 dvd_reader_t *dvd;
3
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 = (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
265 if( !dvd ) return NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
266 dvd->isImageFile = 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
267 dvd->dev = 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
268 dvd->path_root = strdup( path_root );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
269 if(!dvd->path_root) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
270 free(dvd);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
271 return 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
272 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
273 dvd->udfcache_level = DEFAULT_UDF_CACHE_LEVEL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
274 dvd->udfcache = NULL;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
275
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
276 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
277 dvd->css_title = 0; /* Only matters in the UDF path */
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
278
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
279 return dvd;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
280 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
281
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
282 #if defined(__sun)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
283 /* /dev/rdsk/c0t6d0s0 (link to /devices/...)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
284 /vol/dev/rdsk/c0t6d0/??
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
285 /vol/rdsk/<name> */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
286 static char *sun_block2char( const char *path )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
287 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
288 char *new_path;
3
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 /* Must contain "/dsk/" */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
291 if( !strstr( path, "/dsk/" ) ) return (char *) strdup( path );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
292
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
293 /* Replace "/dsk/" with "/rdsk/" */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
294 new_path = malloc( strlen(path) + 2 );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
295 strcpy( new_path, path );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
296 strcpy( strstr( new_path, "/dsk/" ), "" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
297 strcat( new_path, "/rdsk/" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
298 strcat( new_path, strstr( path, "/dsk/" ) + strlen( "/dsk/" ) );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
299
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
300 return new_path;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
301 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
302 #endif
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
303
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
304 #if defined(SYS_BSD)
35
7b3c6a7220c3 spelling fixes by Erik Hovland
nicodvb
parents: 33
diff changeset
305 /* 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
306 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
307 OpenBSD /dev/rcd0c, it needs to be the raw device
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
308 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
309 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
310 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
311 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
312 used. */
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
313 static char *bsd_block2char( const char *path )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
314 {
45
3307493f20c5 Add *BSD porting bits from 0.9.7
erik
parents: 44
diff changeset
315 #if defined(__FreeBSD__) || defined(__DragonFly__)
3307493f20c5 Add *BSD porting bits from 0.9.7
erik
parents: 44
diff changeset
316 return (char *) strdup( path );
3307493f20c5 Add *BSD porting bits from 0.9.7
erik
parents: 44
diff changeset
317 #else
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
318 char *new_path;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
319
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
320 /* If it doesn't start with "/dev/" or does start with "/dev/r" exit */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
321 if( !strncmp( path, "/dev/", 5 ) || strncmp( path, "/dev/r", 6 ) )
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
322 return (char *) strdup( path );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
323
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
324 /* Replace "/dev/" with "/dev/r" */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
325 new_path = malloc( strlen(path) + 2 );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
326 strcpy( new_path, "/dev/r" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
327 strcat( new_path, path + strlen( "/dev/" ) );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
328
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
329 return new_path;
45
3307493f20c5 Add *BSD porting bits from 0.9.7
erik
parents: 44
diff changeset
330 #endif /* __FreeBSD__ || __DragonFly__ */
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
331 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
332 #endif
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
333
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
334
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
335 dvd_reader_t *DVDOpen( const char *ppath )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
336 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
337 struct stat fileinfo;
37
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
338 int ret, have_css, retval, cdir = 0;
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
339 dvd_reader_t *ret_val = NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
340 char *dev_name = NULL;
37
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
341 char *path = NULL, *new_path = NULL, *path_copy = NULL;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
342
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
343 #ifdef _WIN32
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
344 int len;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
345 #endif
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
346
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
347 if( ppath == NULL )
37
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
348 goto DVDOpen_error;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
349
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
350 path = strdup(ppath);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
351 if( path == NULL )
37
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
352 goto DVDOpen_error;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
353
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
354 /* 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
355 have_css = dvdinput_setup();
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
356
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
357 #ifdef _WIN32
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
358 /* 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
359 len = strlen(path);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
360 if ((len > 1) &&
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
361 (path[len - 1] == '\\') &&
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
362 (path[len - 2] != ':'))
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
363 {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
364 path[len-1] = '\0';
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
365 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
366 #endif
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
367
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
368 ret = stat( path, &fileinfo );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
369
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
370 if( ret < 0 ) {
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 /* 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
373 if( strchr(path,':') ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
374 ret_val = DVDOpenImageFile( path, have_css );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
375 free(path);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
376 return ret_val;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
377 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
378
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
379 /* 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
380 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
381 perror("");
37
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
382 goto DVDOpen_error;
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
383 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
384
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
385 /* 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
386 if( S_ISBLK( fileinfo.st_mode ) ||
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
387 S_ISCHR( fileinfo.st_mode ) ||
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
388 S_ISREG( fileinfo.st_mode ) ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
389
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
390 /**
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
391 * 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
392 */
45
3307493f20c5 Add *BSD porting bits from 0.9.7
erik
parents: 44
diff changeset
393 dvd_reader_t *dvd = NULL;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
394 #if defined(__sun)
45
3307493f20c5 Add *BSD porting bits from 0.9.7
erik
parents: 44
diff changeset
395 dev_name = sun_block2char( path );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
396 #elif defined(SYS_BSD)
45
3307493f20c5 Add *BSD porting bits from 0.9.7
erik
parents: 44
diff changeset
397 dev_name = bsd_block2char( path );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
398 #else
45
3307493f20c5 Add *BSD porting bits from 0.9.7
erik
parents: 44
diff changeset
399 dev_name = strdup( path );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
400 #endif
45
3307493f20c5 Add *BSD porting bits from 0.9.7
erik
parents: 44
diff changeset
401 dvd = DVDOpenImageFile( dev_name, have_css );
3307493f20c5 Add *BSD porting bits from 0.9.7
erik
parents: 44
diff changeset
402 free( dev_name );
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
403 free(path);
45
3307493f20c5 Add *BSD porting bits from 0.9.7
erik
parents: 44
diff changeset
404 return dvd;
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
405 } else if( S_ISDIR( fileinfo.st_mode ) ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
406 dvd_reader_t *auth_drive = 0;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
407 #if defined(SYS_BSD)
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
408 struct fstab* fe;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
409 #elif defined(__sun) || defined(__linux__)
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
410 FILE *mntfile;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
411 #endif
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
412
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
413 /* 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
414 if( !(path_copy = strdup( path ) ) )
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
415 goto DVDOpen_error;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
416
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
417 #ifndef WIN32 /* don't have fchdir, and getcwd( NULL, ... ) is strange */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
418 /* 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
419
35
7b3c6a7220c3 spelling fixes by Erik Hovland
nicodvb
parents: 33
diff changeset
420 /* 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
421 {
37
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
422 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
423 if( chdir( path_copy ) == -1 ) {
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
424 goto DVDOpen_error;
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
425 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
426 new_path = malloc(PATH_MAX+1);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
427 if(!new_path) {
37
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
428 goto DVDOpen_error;
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
429 }
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
430 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
431 goto DVDOpen_error;
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
432 }
37
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
433 retval = fchdir( cdir );
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
434 close( cdir );
37
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
435 cdir = -1;
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
436 if( retval == -1 ) {
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
437 goto DVDOpen_error;
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
438 }
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
439 path_copy = new_path;
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
440 new_path = NULL;
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
441 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
442 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
443 #endif
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
444
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
445 /**
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
446 * 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
447 * 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
448 */
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
449
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
450 if( strlen( path_copy ) > 1 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
451 if( path_copy[ strlen( path_copy ) - 1 ] == '/' ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
452 path_copy[ strlen( path_copy ) - 1 ] = '\0';
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
453 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
454 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
455
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
456 if( strlen( path_copy ) > TITLES_MAX ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
457 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
458 "/video_ts" ) ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
459 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
460 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
461 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
462
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
463 if(path_copy[0] == '\0') {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
464 path_copy[0] = '/';
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
465 path_copy[1] = '\0';
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
466 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
467
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
468 #if defined(SYS_BSD)
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
469 if( ( fe = getfsfile( path_copy ) ) ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
470 dev_name = bsd_block2char( fe->fs_spec );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
471 fprintf( stderr,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
472 "libdvdread: Attempting to use device %s"
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
473 " mounted on %s for CSS authentication\n",
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
474 dev_name,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
475 fe->fs_file );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
476 auth_drive = DVDOpenImageFile( dev_name, have_css );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
477 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
478 #elif defined(__sun)
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
479 mntfile = fopen( MNTTAB, "r" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
480 if( mntfile ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
481 struct mnttab mp;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
482 int res;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
483
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
484 while( ( res = getmntent( mntfile, &mp ) ) != -1 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
485 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
486 dev_name = sun_block2char( mp.mnt_special );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
487 fprintf( stderr,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
488 "libdvdread: Attempting to use device %s"
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
489 " mounted on %s for CSS authentication\n",
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
490 dev_name,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
491 mp.mnt_mountp );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
492 auth_drive = DVDOpenImageFile( dev_name, have_css );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
493 break;
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
494 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
495 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
496 fclose( mntfile );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
497 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
498 #elif defined(__linux__)
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
499 mntfile = fopen( MOUNTED, "r" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
500 if( mntfile ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
501 struct mntent *me;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
502
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
503 while( ( me = getmntent( mntfile ) ) ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
504 if( !strcmp( me->mnt_dir, path_copy ) ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
505 fprintf( stderr,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
506 "libdvdread: Attempting to use device %s"
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
507 " mounted on %s for CSS authentication\n",
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
508 me->mnt_fsname,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
509 me->mnt_dir );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
510 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
511 dev_name = strdup(me->mnt_fsname);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
512 break;
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
513 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
514 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
515 fclose( mntfile );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
516 }
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
517 #elif defined(_WIN32) || defined(__OS2__)
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
518 auth_drive = DVDOpenImageFile( path, have_css );
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
519 #endif
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
520
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
521 #if !defined(_WIN32) && !defined(__OS2__)
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
522 if( !dev_name ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
523 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
524 } else if( !auth_drive ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
525 fprintf( stderr, "libdvdread: Device %s inaccessible, "
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
526 "CSS authentication not available.\n", dev_name );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
527 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
528 #else
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
529 if( !auth_drive ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
530 fprintf( stderr, "libdvdread: Device %s inaccessible, "
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
531 "CSS authentication not available.\n", dev_name );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
532 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
533 #endif
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
534
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
535 free( dev_name );
37
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
536 dev_name = NULL;
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
537 free( path_copy );
37
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
538 path_copy = NULL;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
539
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
540 /**
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
541 * 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
542 */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
543 if( auth_drive ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
544 free(path);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
545 return auth_drive;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
546 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
547 /**
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
548 * 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
549 */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
550 ret_val = DVDOpenPath( path );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
551 free( path );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
552 return ret_val;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
553 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
554
37
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
555 DVDOpen_error:
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
556 /* 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
557 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
558 if( path != NULL )
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
559 free( path );
37
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
560 if ( path_copy != NULL )
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
561 free( path_copy );
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
562 if ( cdir >= 0 )
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
563 close( cdir );
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
564 if ( new_path != NULL )
a57cd30a83bb modified DVDOpen() to use a unified DVDOpen_error label; patch by Erik Hovland
nicodvb
parents: 36
diff changeset
565 free( new_path );
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
566 return NULL;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
567 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
568
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
569 void DVDClose( dvd_reader_t *dvd )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
570 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
571 if( dvd ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
572 if( dvd->dev ) dvdinput_close( dvd->dev );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
573 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
574 if( dvd->udfcache ) FreeUDFCache( dvd->udfcache );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
575 free( dvd );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
576 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
577 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
578
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
579 /**
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
580 * Open an unencrypted file on a DVD image file.
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
581 */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
582 static dvd_file_t *DVDOpenFileUDF( dvd_reader_t *dvd, char *filename )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
583 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
584 uint32_t start, len;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
585 dvd_file_t *dvd_file;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
586
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
587 start = UDFFindFile( dvd, filename, &len );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
588 if( !start ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
589 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
590 return NULL;
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
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
593 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
594 if( !dvd_file ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
595 fprintf( stderr, "libdvdnav:DVDOpenFileUDF:malloc failed\n" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
596 return NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
597 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
598 dvd_file->dvd = dvd;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
599 dvd_file->lb_start = start;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
600 dvd_file->seek_pos = 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
601 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
602 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
603 dvd_file->filesize = len / DVD_VIDEO_LB_LEN;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
604
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
605 return dvd_file;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
606 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
607
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
608 /**
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
609 * Searches for <file> in directory <path>, ignoring case.
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
610 * Returns 0 and full filename in <filename>.
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
611 * or -1 on file not found.
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
612 * or -2 on path not found.
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
613 */
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
614 static int findDirFile( const char *path, const char *file, char *filename )
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
615 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
616 DIR *dir;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
617 struct dirent *ent;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
618
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
619 dir = opendir( path );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
620 if( !dir ) return -2;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
621
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
622 while( ( ent = readdir( dir ) ) != NULL ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
623 if( !strcasecmp( ent->d_name, file ) ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
624 sprintf( filename, "%s%s%s", path,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
625 ( ( path[ strlen( path ) - 1 ] == '/' ) ? "" : "/" ),
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
626 ent->d_name );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
627 closedir(dir);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
628 return 0;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
629 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
630 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
631 closedir(dir);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
632 return -1;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
633 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
634
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
635 static int findDVDFile( dvd_reader_t *dvd, const char *file, char *filename )
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 char video_path[ PATH_MAX + 1 ];
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
638 const char *nodirfile;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
639 int ret;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
640
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
641 /* Strip off the directory for our search */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
642 if( !strncasecmp( "/VIDEO_TS/", file, 10 ) ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
643 nodirfile = &(file[ 10 ]);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
644 } else {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
645 nodirfile = file;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
646 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
647
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
648 ret = findDirFile( dvd->path_root, nodirfile, filename );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
649 if( ret < 0 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
650 /* 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
651 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
652 ret = findDirFile( video_path, nodirfile, filename );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
653 if( ret < 0 ) {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
654 /* 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
655 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
656 ret = findDirFile( video_path, nodirfile, filename );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
657 if( ret < 0 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
658 return 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
659 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
660 }
27
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 return 1;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
664 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
665
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
666 /**
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
667 * Open an unencrypted file from a DVD directory tree.
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
668 */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
669 static dvd_file_t *DVDOpenFilePath( dvd_reader_t *dvd, char *filename )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
670 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
671 char full_path[ PATH_MAX + 1 ];
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
672 dvd_file_t *dvd_file;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
673 struct stat fileinfo;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
674 dvd_input_t dev;
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 /* Get the full path of the file. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
677 if( !findDVDFile( dvd, filename, full_path ) ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
678 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
679 return NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
680 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
681
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
682 dev = dvdinput_open( full_path );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
683 if( !dev ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
684 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
685 return NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
686 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
687
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
688 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
689 if( !dvd_file ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
690 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
691 dvdinput_close(dev);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
692 return NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
693 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
694 dvd_file->dvd = dvd;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
695 dvd_file->lb_start = 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
696 dvd_file->seek_pos = 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
697 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
698 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
699 dvd_file->filesize = 0;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
700
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
701 if( stat( full_path, &fileinfo ) < 0 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
702 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
703 free( dvd_file );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
704 return NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
705 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
706 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
707 dvd_file->title_devs[ 0 ] = dev;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
708 dvd_file->filesize = dvd_file->title_sizes[ 0 ];
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
709
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
710 return dvd_file;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
711 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
712
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
713 static dvd_file_t *DVDOpenVOBUDF( dvd_reader_t *dvd, int title, int menu )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
714 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
715 char filename[ MAX_UDF_FILE_NAME_LEN ];
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
716 uint32_t start, len;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
717 dvd_file_t *dvd_file;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
718
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
719 if( title == 0 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
720 sprintf( filename, "/VIDEO_TS/VIDEO_TS.VOB" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
721 } else {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
722 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
723 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
724 start = UDFFindFile( dvd, filename, &len );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
725 if( start == 0 ) return NULL;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
726
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
727 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
728 if( !dvd_file ) return NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
729 dvd_file->dvd = dvd;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
730 /*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
731 dvd_file->lb_start = start;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
732 dvd_file->seek_pos = 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
733 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
734 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
735 dvd_file->filesize = len / DVD_VIDEO_LB_LEN;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
736
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
737 /* 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
738 if( !menu ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
739 int cur;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
740
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
741 for( cur = 2; cur < 10; cur++ ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
742 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
743 if( !UDFFindFile( dvd, filename, &len ) ) break;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
744 dvd_file->filesize += len / DVD_VIDEO_LB_LEN;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
745 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
746 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
747
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
748 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
749 initAllCSSKeys( dvd );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
750 dvd->css_state = 2;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
751 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
752 /*
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
753 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
754 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
755 filename );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
756 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
757 */
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
758
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
759 return dvd_file;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
760 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
761
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
762 static dvd_file_t *DVDOpenVOBPath( dvd_reader_t *dvd, int title, int menu )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
763 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
764 char filename[ MAX_UDF_FILE_NAME_LEN ];
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
765 char full_path[ PATH_MAX + 1 ];
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
766 struct stat fileinfo;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
767 dvd_file_t *dvd_file;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
768 int i;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
769
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
770 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
771 if( !dvd_file ) return NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
772 dvd_file->dvd = dvd;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
773 /*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
774 dvd_file->lb_start = 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
775 dvd_file->seek_pos = 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
776 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
777 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
778 dvd_file->filesize = 0;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
779
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
780 if( menu ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
781 dvd_input_t dev;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
782
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
783 if( title == 0 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
784 sprintf( filename, "VIDEO_TS.VOB" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
785 } else {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
786 sprintf( filename, "VTS_%02i_0.VOB", title );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
787 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
788 if( !findDVDFile( dvd, filename, full_path ) ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
789 free( dvd_file );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
790 return NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
791 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
792
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
793 dev = dvdinput_open( full_path );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
794 if( dev == NULL ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
795 free( dvd_file );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
796 return NULL;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
797 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
798
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
799 if( stat( full_path, &fileinfo ) < 0 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
800 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
801 dvdinput_close(dev);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
802 free( dvd_file );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
803 return NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
804 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
805 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
806 dvd_file->title_devs[ 0 ] = dev;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
807 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
808 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
809
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
810 } else {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
811 for( i = 0; i < TITLES_MAX; ++i ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
812
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
813 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
814 if( !findDVDFile( dvd, filename, full_path ) ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
815 break;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
816 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
817
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
818 if( stat( full_path, &fileinfo ) < 0 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
819 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
820 break;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
821 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
822
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
823 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
824 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
825 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
826 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
827 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
828 if( !dvd_file->title_devs[ 0 ] ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
829 free( dvd_file );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
830 return NULL;
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
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
834 return dvd_file;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
835 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
836
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
837 dvd_file_t *DVDOpenFile( dvd_reader_t *dvd, int titlenum,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
838 dvd_read_domain_t domain )
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
839 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
840 char filename[ MAX_UDF_FILE_NAME_LEN ];
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
841
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
842 /* Check arguments. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
843 if( dvd == NULL || titlenum < 0 )
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
844 return NULL;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
845
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
846 switch( domain ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
847 case DVD_READ_INFO_FILE:
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
848 if( titlenum == 0 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
849 sprintf( filename, "/VIDEO_TS/VIDEO_TS.IFO" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
850 } else {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
851 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
852 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
853 break;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
854 case DVD_READ_INFO_BACKUP_FILE:
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
855 if( titlenum == 0 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
856 sprintf( filename, "/VIDEO_TS/VIDEO_TS.BUP" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
857 } else {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
858 sprintf( filename, "/VIDEO_TS/VTS_%02i_0.BUP", titlenum );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
859 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
860 break;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
861 case DVD_READ_MENU_VOBS:
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
862 if( dvd->isImageFile ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
863 return DVDOpenVOBUDF( dvd, titlenum, 1 );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
864 } else {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
865 return DVDOpenVOBPath( dvd, titlenum, 1 );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
866 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
867 break;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
868 case DVD_READ_TITLE_VOBS:
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
869 if( titlenum == 0 ) return 0;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
870 if( dvd->isImageFile ) {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
871 return DVDOpenVOBUDF( dvd, titlenum, 0 );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
872 } else {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
873 return DVDOpenVOBPath( dvd, titlenum, 0 );
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 default:
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
877 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
878 return NULL;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
879 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
880
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
881 if( dvd->isImageFile ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
882 return DVDOpenFileUDF( dvd, filename );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
883 } else {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
884 return DVDOpenFilePath( dvd, filename );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
885 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
886 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
887
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
888 void DVDCloseFile( dvd_file_t *dvd_file )
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 int i;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
891
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
892 if( dvd_file ) {
42
3aa39a1cff0f Remove empty if clause.
erik
parents: 41
diff changeset
893 if( !dvd_file->dvd->isImageFile ) {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
894 for( i = 0; i < TITLES_MAX; ++i ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
895 if( dvd_file->title_devs[ i ] ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
896 dvdinput_close( dvd_file->title_devs[i] );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
897 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
898 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
899 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
900
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
901 free( dvd_file );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
902 dvd_file = 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
903 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
904 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
905
44
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
906 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
907 int menu, dvd_stat_t *statbuf )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
908 {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
909 char filename[ MAX_UDF_FILE_NAME_LEN ];
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
910 uint32_t size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
911 off_t tot_size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
912 off_t parts_size[ 9 ];
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
913 int nr_parts = 0;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
914 int n;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
915
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
916 if( title == 0 )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
917 sprintf( filename, "/VIDEO_TS/VIDEO_TS.VOB" );
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
918 else
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
919 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
920
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
921 if( !UDFFindFile( dvd, filename, &size ) )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
922 return -1;
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 tot_size = size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
925 nr_parts = 1;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
926 parts_size[ 0 ] = size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
927
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
928 if( !menu ) {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
929 int cur;
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 for( cur = 2; cur < 10; cur++ ) {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
932 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
933 if( !UDFFindFile( dvd, filename, &size ) )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
934 break;
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 parts_size[ nr_parts ] = size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
937 tot_size += size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
938 nr_parts++;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
939 }
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
940 }
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
941
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
942 statbuf->size = tot_size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
943 statbuf->nr_parts = nr_parts;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
944 for( n = 0; n < nr_parts; n++ )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
945 statbuf->parts_size[ n ] = parts_size[ n ];
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
946
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
947 return 0;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
948 }
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
949
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 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
952 int menu, dvd_stat_t *statbuf )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
953 {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
954 char filename[ MAX_UDF_FILE_NAME_LEN ];
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
955 char full_path[ PATH_MAX + 1 ];
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
956 struct stat fileinfo;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
957 off_t tot_size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
958 off_t parts_size[ 9 ];
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
959 int nr_parts = 0;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
960 int 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 if( title == 0 )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
963 sprintf( filename, "VIDEO_TS.VOB" );
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
964 else
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
965 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
966
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
967 if( !findDVDFile( dvd, filename, full_path ) )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
968 return -1;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
969
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
970 if( stat( full_path, &fileinfo ) < 0 ) {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
971 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
972 return -1;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
973 }
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
974
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
975 tot_size = fileinfo.st_size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
976 nr_parts = 1;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
977 parts_size[ 0 ] = fileinfo.st_size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
978
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
979 if( !menu ) {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
980 int cur;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
981 for( cur = 2; cur < 10; cur++ ) {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
982 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
983 if( !findDVDFile( dvd, filename, full_path ) )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
984 break;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
985
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
986 if( stat( full_path, &fileinfo ) < 0 ) {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
987 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
988 break;
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
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
991 parts_size[ nr_parts ] = fileinfo.st_size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
992 tot_size += parts_size[ nr_parts ];
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
993 nr_parts++;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
994 }
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
995 }
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
996
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
997 statbuf->size = tot_size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
998 statbuf->nr_parts = nr_parts;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
999 for( n = 0; n < nr_parts; n++ )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1000 statbuf->parts_size[ n ] = parts_size[ n ];
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1001
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1002 return 0;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1003 }
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 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
1007 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
1008 {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1009 char filename[ MAX_UDF_FILE_NAME_LEN ];
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1010 char full_path[ PATH_MAX + 1 ];
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1011 struct stat fileinfo;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1012 uint32_t size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1013
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1014 /* Check arguments. */
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1015 if( dvd == NULL || titlenum < 0 ) {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1016 errno = EINVAL;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1017 return -1;
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 switch( domain ) {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1021 case DVD_READ_INFO_FILE:
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1022 if( titlenum == 0 )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1023 sprintf( filename, "/VIDEO_TS/VIDEO_TS.IFO" );
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1024 else
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1025 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
1026
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1027 break;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1028 case DVD_READ_INFO_BACKUP_FILE:
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1029 if( titlenum == 0 )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1030 sprintf( filename, "/VIDEO_TS/VIDEO_TS.BUP" );
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1031 else
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1032 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
1033
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1034 break;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1035 case DVD_READ_MENU_VOBS:
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1036 if( dvd->isImageFile )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1037 return DVDFileStatVOBUDF( dvd, titlenum, 1, statbuf );
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1038 else
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1039 return DVDFileStatVOBPath( dvd, titlenum, 1, statbuf );
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1040
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1041 break;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1042 case DVD_READ_TITLE_VOBS:
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1043 if( titlenum == 0 )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1044 return -1;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1045
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1046 if( dvd->isImageFile )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1047 return DVDFileStatVOBUDF( dvd, titlenum, 0, statbuf );
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1048 else
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1049 return DVDFileStatVOBPath( dvd, titlenum, 0, statbuf );
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1050
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1051 break;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1052 default:
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1053 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
1054 errno = EINVAL;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1055 return -1;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1056 }
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1057
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1058 if( dvd->isImageFile ) {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1059 if( UDFFindFile( dvd, filename, &size ) ) {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1060 statbuf->size = size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1061 statbuf->nr_parts = 1;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1062 statbuf->parts_size[ 0 ] = size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1063 return 0;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1064 }
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1065 } else {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1066 if( findDVDFile( dvd, filename, full_path ) ) {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1067 if( stat( full_path, &fileinfo ) < 0 )
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1068 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
1069 else {
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1070 statbuf->size = fileinfo.st_size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1071 statbuf->nr_parts = 1;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1072 statbuf->parts_size[ 0 ] = statbuf->size;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1073 return 0;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1074 }
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1075 }
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1076 }
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1077 return -1;
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1078 }
92b4694792da Add DVD file stat from version 0.9.7 to libdvdread
erik
parents: 42
diff changeset
1079
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1080 /* Internal, but used from dvd_udf.c */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1081 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
1082 size_t block_count, unsigned char *data,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1083 int encrypted )
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1084 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1085 int ret;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1086
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1087 if( !device->dev ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1088 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
1089 return 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1090 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1091
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1092 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
1093 if( ret != (int) lb_number ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1094 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
1095 return 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1096 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1097
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1098 ret = dvdinput_read( device->dev, (char *) data,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1099 (int) block_count, encrypted );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1100 return ret;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1101 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1102
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1103 /* 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
1104 *
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1105 * Reads 'block_count' blocks from 'dvd_file' at block offset 'offset'
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1106 * into the buffer located at 'data' and if 'encrypted' is set
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1107 * descramble the data if it's encrypted. Returning either an
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1108 * negative error or the number of blocks read. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1109 static int DVDReadBlocksUDF( dvd_file_t *dvd_file, uint32_t offset,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1110 size_t block_count, unsigned char *data,
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1111 int encrypted )
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 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
1114 block_count, data, encrypted );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1115 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1116
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1117 /* This is using possibly several inputs and starting from an offset of '0'.
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1118 *
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1119 * Reads 'block_count' blocks from 'dvd_file' at block offset 'offset'
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1120 * into the buffer located at 'data' and if 'encrypted' is set
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1121 * descramble the data if it's encrypted. Returning either an
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1122 * negative error or the number of blocks read. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1123 static int DVDReadBlocksPath( dvd_file_t *dvd_file, unsigned int offset,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1124 size_t block_count, unsigned char *data,
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1125 int encrypted )
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1126 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1127 int i;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1128 int ret, ret2, off;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1129
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1130 ret = 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1131 ret2 = 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1132 for( i = 0; i < TITLES_MAX; ++i ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1133 if( !dvd_file->title_sizes[ i ] ) return 0; /* Past end of file */
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1134
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1135 if( offset < dvd_file->title_sizes[ i ] ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1136 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
1137 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
1138 if( off < 0 || off != (int)offset ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1139 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
1140 offset );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1141 return off < 0 ? off : 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1142 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1143 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
1144 (int)block_count, encrypted );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1145 break;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1146 } else {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1147 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
1148 /* 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
1149 * (This is only true if you try and read >1GB at a time) */
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1150
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1151 /* Read part 1 */
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)part1_size, encrypted );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1160 if( ret < 0 ) return ret;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1161 /* 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
1162 * also error from this read will not show in ret. */
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1163
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1164 /* 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
1165 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
1166 return ret;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1167
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1168 /* Read part 2 */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1169 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
1170 if( off < 0 || off != 0 ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1171 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
1172 0 );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1173 return off < 0 ? off : 0;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1174 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1175 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
1176 data + ( part1_size
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1177 * (int64_t)DVD_VIDEO_LB_LEN ),
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1178 (int)(block_count - part1_size),
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1179 encrypted );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1180 if( ret2 < 0 ) return ret2;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1181 break;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1182 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1183 } else {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1184 offset -= dvd_file->title_sizes[ i ];
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1185 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1186 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1187
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1188 return ret + ret2;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1189 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1190
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1191 /* 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
1192 ssize_t DVDReadBlocks( dvd_file_t *dvd_file, int offset,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1193 size_t block_count, unsigned char *data )
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1194 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1195 int ret;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1196
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1197 /* Check arguments. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1198 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
1199 return -1;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1200
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1201 /* 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
1202 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
1203 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
1204 if( dvd_file->dvd->isImageFile ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1205 dvdinput_title( dvd_file->dvd->dev, (int)dvd_file->lb_start );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1206 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1207 /* 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
1208 else {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1209 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
1210 }*/
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1211 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1212
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1213 if( dvd_file->dvd->isImageFile ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1214 ret = DVDReadBlocksUDF( dvd_file, (uint32_t)offset,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1215 block_count, data, DVDINPUT_READ_DECRYPT );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1216 } else {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1217 ret = DVDReadBlocksPath( dvd_file, (unsigned int)offset,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1218 block_count, data, DVDINPUT_READ_DECRYPT );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1219 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1220
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1221 return (ssize_t)ret;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1222 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1223
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1224 int32_t DVDFileSeek( dvd_file_t *dvd_file, int32_t offset )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1225 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1226 /* Check arguments. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1227 if( dvd_file == NULL || offset < 0 )
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1228 return -1;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1229
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1230 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
1231 return -1;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1232 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1233 dvd_file->seek_pos = (uint32_t) offset;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1234 return offset;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1235 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1236
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1237 int DVDFileSeekForce(dvd_file_t *dvd_file, int offset, int force_size)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1238 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1239 /* Check arguments. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1240 if( dvd_file == NULL || offset <= 0 )
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1241 return -1;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1242
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1243 if( dvd_file->dvd->isImageFile ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1244 if( force_size < 0 )
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1245 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
1246 if( dvd_file->filesize < force_size ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1247 dvd_file->filesize = force_size;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1248 fprintf(stderr, "libdvdread: Ignored size of file indicated in UDF.\n");
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1249 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1250 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1251
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1252 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
1253 return -1;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1254
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1255 dvd_file->seek_pos = (uint32_t) offset;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1256 return offset;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1257 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1258
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1259 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
1260 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1261 unsigned char *secbuf_base, *secbuf;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1262 unsigned int numsec, seek_sector, seek_byte;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1263 int ret;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1264
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1265 /* Check arguments. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1266 if( dvd_file == NULL || data == NULL )
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1267 return -1;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1268
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1269 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
1270 seek_byte = dvd_file->seek_pos % DVD_VIDEO_LB_LEN;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1271
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1272 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
1273 ( ( ( seek_byte + byte_size ) % DVD_VIDEO_LB_LEN ) ? 1 : 0 );
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1274
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1275 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
1276 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
1277 if( !secbuf_base ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1278 fprintf( stderr, "libdvdread: Can't allocate memory "
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1279 "for file read!\n" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1280 return 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1281 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1282
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1283 if( dvd_file->dvd->isImageFile ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1284 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
1285 (size_t) numsec, secbuf, DVDINPUT_NOFLAGS );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1286 } else {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1287 ret = DVDReadBlocksPath( dvd_file, seek_sector,
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1288 (size_t) numsec, secbuf, DVDINPUT_NOFLAGS );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1289 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1290
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1291 if( ret != (int) numsec ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1292 free( secbuf_base );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1293 return ret < 0 ? ret : 0;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1294 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1295
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1296 memcpy( data, &(secbuf[ seek_byte ]), byte_size );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1297 free( secbuf_base );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1298
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1299 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
1300 return byte_size;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1301 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1302
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1303 ssize_t DVDFileSize( dvd_file_t *dvd_file )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1304 {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1305 /* Check arguments. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1306 if( dvd_file == NULL )
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1307 return -1;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1308
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1309 return dvd_file->filesize;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1310 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1311
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1312 int DVDDiscID( dvd_reader_t *dvd, unsigned char *discid )
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 struct md5_ctx ctx;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1315 int title;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1316 int nr_of_files = 0;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1317
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1318 /* Check arguments. */
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1319 if( dvd == NULL || discid == NULL )
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1320 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1321
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1322 /* 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
1323 * 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
1324 md5_init_ctx( &ctx );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1325 for( title = 0; title < 10; title++ ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1326 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
1327 if( dvd_file != NULL ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1328 ssize_t bytes_read;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1329 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
1330 char *buffer_base = malloc( file_size + 2048 );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1331 char *buffer = (char *)(((uintptr_t)buffer_base & ~((uintptr_t)2047)) + 2048);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1332
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1333 if( buffer_base == NULL ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1334 DVDCloseFile( dvd_file );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1335 fprintf( stderr, "libdvdread: DVDDiscId, failed to "
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1336 "allocate memory for file read!\n" );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1337 return -1;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1338 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1339
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1340 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
1341 if( bytes_read != file_size ) {
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1342 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
1343 ", wanted %zd\n", bytes_read, file_size );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1344 DVDCloseFile( dvd_file );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1345 free( buffer_base );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1346 return -1;
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1347 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1348
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1349 md5_process_bytes( buffer, file_size, &ctx );
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1350
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1351 DVDCloseFile( dvd_file );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1352 free( buffer_base );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1353 nr_of_files++;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1354 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1355 }
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1356 md5_finish_ctx( &ctx, discid );
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1357 if(!nr_of_files)
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1358 return -1;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1359
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1360 return 0;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1361 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1362
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1363
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1364 int DVDISOVolumeInfo( dvd_reader_t *dvd,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1365 char *volid, unsigned int volid_size,
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1366 unsigned char *volsetid, unsigned int volsetid_size )
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1367 {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1368 unsigned char *buffer, *buffer_base;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1369 int ret;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1370
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1371 /* Check arguments. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1372 if( dvd == NULL )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1373 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1374
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1375 if( dvd->dev == NULL ) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1376 /* No block access, so no ISO... */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1377 return -1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1378 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1379
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1380 buffer_base = malloc( DVD_VIDEO_LB_LEN + 2048 );
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1381 buffer = (unsigned char *)(((uintptr_t)buffer_base & ~((uintptr_t)2047)) + 2048);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1382
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1383 if( buffer_base == NULL ) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1384 fprintf( stderr, "libdvdread: DVDISOVolumeInfo, failed to "
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1385 "allocate memory for file read!\n" );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1386 return -1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1387 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1388
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1389 ret = UDFReadBlocksRaw( dvd, 16, 1, buffer, 0 );
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1390 if( ret != 1 ) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1391 fprintf( stderr, "libdvdread: DVDISOVolumeInfo, failed to "
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1392 "read ISO9660 Primary Volume Descriptor!\n" );
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1393 free( buffer_base );
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1394 return -1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1395 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1396
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1397 if( (volid != NULL) && (volid_size > 0) ) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1398 unsigned int n;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1399 for(n = 0; n < 32; n++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1400 if(buffer[40+n] == 0x20) {
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1401 break;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1402 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1403 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1404
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1405 if(volid_size > n+1) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1406 volid_size = n+1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1407 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1408
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1409 memcpy(volid, &buffer[40], volid_size-1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1410 volid[volid_size-1] = '\0';
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1411 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1412
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1413 if( (volsetid != NULL) && (volsetid_size > 0) ) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1414 if(volsetid_size > 128) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1415 volsetid_size = 128;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1416 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1417 memcpy(volsetid, &buffer[190], volsetid_size);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1418 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1419 free( buffer_base );
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1420 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1421 }
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 int DVDUDFVolumeInfo( dvd_reader_t *dvd,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1425 char *volid, unsigned int volid_size,
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1426 unsigned char *volsetid, unsigned int volsetid_size )
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1427 {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1428 int ret;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1429 /* Check arguments. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1430 if( dvd == NULL )
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1431 return -1;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1432
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1433 if( dvd->dev == NULL ) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1434 /* No block access, so no UDF VolumeSet Identifier */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1435 return -1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1436 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1437
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1438 if( (volid != NULL) && (volid_size > 0) ) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1439 ret = UDFGetVolumeIdentifier(dvd, volid, volid_size);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1440 if(!ret) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1441 return -1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1442 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1443 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1444 if( (volsetid != NULL) && (volsetid_size > 0) ) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1445 ret = UDFGetVolumeSetIdentifier(dvd, volsetid, volsetid_size);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1446 if(!ret) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1447 return -1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1448 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1449 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1450
fce16251755c Remove all trailing whitespace,
rathann
parents: 7
diff changeset
1451 return 0;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1452 }