annotate dvd_reader.c @ 44:92b4694792da src

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