annotate libmpdvdkit2/device.c @ 18715:30d7ddf08889

Fix window position when changing videos while in fullscreen and for window managers that modify position on Map. Oked by Alexander Strasser.
author reimar
date Thu, 15 Jun 2006 08:00:37 +0000
parents 2ab52c9b72b9
children 0783dd397f74
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
1 /*****************************************************************************
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
2 * device.h: DVD device access
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
3 *****************************************************************************
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
4 * Copyright (C) 1998-2002 VideoLAN
16631
0af14c5fee82 modification notices according to GPL 2a
diego
parents: 16630
diff changeset
5 *
0af14c5fee82 modification notices according to GPL 2a
diego
parents: 16630
diff changeset
6 * Modified for use with MPlayer, changes contained in libdvdcss_changes.diff.
0af14c5fee82 modification notices according to GPL 2a
diego
parents: 16630
diff changeset
7 * detailed CVS changelog at http://www.mplayerhq.hu/cgi-bin/cvsweb.cgi/main/
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
8 * $Id$
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
9 *
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
10 * Authors: Stéphane Borel <stef@via.ecp.fr>
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
11 * Samuel Hocevar <sam@zoy.org>
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
12 * Håkan Hjort <d95hjort@dtek.chalmers.se>
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
13 *
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
14 * This program is free software; you can redistribute it and/or modify
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
15 * it under the terms of the GNU General Public License as published by
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
16 * the Free Software Foundation; either version 2 of the License, or
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
17 * (at your option) any later version.
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
18 *
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
19 * This program is distributed in the hope that it will be useful,
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
22 * GNU General Public License for more details.
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
23 *
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
24 * You should have received a copy of the GNU General Public License
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
25 * along with this program; if not, write to the Free Software
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
26 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
27 *****************************************************************************/
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
28
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
29 /*****************************************************************************
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
30 * Preamble
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
31 *****************************************************************************/
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
32 #include "config.h"
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
33
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
34 #include <stdio.h>
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
35 #include <stdlib.h>
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
36 #include <string.h>
16714
2ab52c9b72b9 Replace unconditional #defines by build system trickery.
diego
parents: 16631
diff changeset
37 #ifdef HAVE_ERRNO_H
16630
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
38 # include <errno.h>
16714
2ab52c9b72b9 Replace unconditional #defines by build system trickery.
diego
parents: 16631
diff changeset
39 #endif
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
40 #include <sys/types.h>
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
41 #include <sys/stat.h>
16714
2ab52c9b72b9 Replace unconditional #defines by build system trickery.
diego
parents: 16631
diff changeset
42 #ifdef HAVE_SYS_PARAM_H
2ab52c9b72b9 Replace unconditional #defines by build system trickery.
diego
parents: 16631
diff changeset
43 # include <sys/param.h>
2ab52c9b72b9 Replace unconditional #defines by build system trickery.
diego
parents: 16631
diff changeset
44 #endif
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
45 #include <fcntl.h>
16714
2ab52c9b72b9 Replace unconditional #defines by build system trickery.
diego
parents: 16631
diff changeset
46
2ab52c9b72b9 Replace unconditional #defines by build system trickery.
diego
parents: 16631
diff changeset
47 #ifdef HAVE_UNISTD_H
16630
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
48 # include <unistd.h>
16714
2ab52c9b72b9 Replace unconditional #defines by build system trickery.
diego
parents: 16631
diff changeset
49 #endif
2ab52c9b72b9 Replace unconditional #defines by build system trickery.
diego
parents: 16631
diff changeset
50
2ab52c9b72b9 Replace unconditional #defines by build system trickery.
diego
parents: 16631
diff changeset
51 #ifdef HAVE_LIMITS_H
16630
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
52 # include <limits.h>
16714
2ab52c9b72b9 Replace unconditional #defines by build system trickery.
diego
parents: 16631
diff changeset
53 #endif
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
54
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
55 #if defined( WIN32 ) && !defined( SYS_CYGWIN )
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
56 # include <io.h> /* read() */
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
57 #else
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
58 # include <sys/uio.h> /* struct iovec */
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
59 #endif
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
60
7033
596919e4f601 apply mplayer-specific patches
arpi
parents: 7027
diff changeset
61 #include "dvdcss.h"
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
62
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
63 #include "common.h"
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
64 #include "css.h"
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
65 #include "libdvdcss.h"
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
66 #include "ioctl.h"
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
67 #include "device.h"
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
68
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
69 /*****************************************************************************
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
70 * Device reading prototypes
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
71 *****************************************************************************/
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
72 static int libc_open ( dvdcss_t, char const * );
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
73 static int libc_seek ( dvdcss_t, int );
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
74 static int libc_read ( dvdcss_t, void *, int );
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
75 static int libc_readv ( dvdcss_t, struct iovec *, int );
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
76
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
77 #ifdef WIN32
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
78 static int win2k_open ( dvdcss_t, char const * );
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
79 static int aspi_open ( dvdcss_t, char const * );
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
80 static int win2k_seek ( dvdcss_t, int );
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
81 static int aspi_seek ( dvdcss_t, int );
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
82 static int win2k_read ( dvdcss_t, void *, int );
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
83 static int aspi_read ( dvdcss_t, void *, int );
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
84 static int win_readv ( dvdcss_t, struct iovec *, int );
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
85
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
86 static int aspi_read_internal ( int, void *, int );
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
87 #endif
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
88
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
89 int _dvdcss_use_ioctls( dvdcss_t dvdcss )
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
90 {
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
91 #if defined( WIN32 )
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
92 if( dvdcss->b_file )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
93 {
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
94 return 0;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
95 }
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
96
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
97 /* FIXME: implement this for Windows */
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
98 if( WIN2K )
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
99 {
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
100 return 1;
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
101 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
102 else
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
103 {
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
104 return 1;
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
105 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
106 #else
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
107 struct stat fileinfo;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
108 int ret;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
109
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
110 ret = fstat( dvdcss->i_fd, &fileinfo );
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
111 if( ret < 0 )
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
112 {
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
113 return 1; /* What to do? Be conservative and try to use the ioctls */
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
114 }
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
115
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
116 /* Complete this list and check that we test for the right things
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
117 * (I've assumed for all OSs that 'r', (raw) device, are char devices
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
118 * and those that don't contain/use an 'r' in the name are block devices)
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
119 *
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
120 * Linux needs a block device
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
121 * Solaris needs a char device
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
122 * Darwin needs a char device
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
123 * OpenBSD needs a char device
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
124 * NetBSD needs a char device
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
125 * FreeBSD can use either the block or the char device
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
126 * BSD/OS can use either the block or the char device
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
127 */
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
128
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
129 /* Check if this is a block/char device */
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
130 if( S_ISBLK( fileinfo.st_mode ) ||
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
131 S_ISCHR( fileinfo.st_mode ) )
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
132 {
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
133 return 1;
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
134 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
135 else
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
136 {
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
137 return 0;
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
138 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
139 #endif
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
140 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
141
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
142 int _dvdcss_open ( dvdcss_t dvdcss )
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
143 {
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
144 char const *psz_device = dvdcss->psz_device;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
145
16630
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
146 print_debug( dvdcss, "opening target `%s'", psz_device );
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
147
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
148 #if defined( WIN32 )
13011
5dc4583b1901 mpdvdkit now accepts X:\ as a device name, as well as X:
joey
parents: 10441
diff changeset
149 dvdcss->b_file = 1;
5dc4583b1901 mpdvdkit now accepts X:\ as a device name, as well as X:
joey
parents: 10441
diff changeset
150 /* If device is "X:" or "X:\", we are not actually opening a file. */
5dc4583b1901 mpdvdkit now accepts X:\ as a device name, as well as X:
joey
parents: 10441
diff changeset
151 if (psz_device[0] && psz_device[1] == ':' &&
5dc4583b1901 mpdvdkit now accepts X:\ as a device name, as well as X:
joey
parents: 10441
diff changeset
152 (!psz_device[2] || (psz_device[2] == '\\' && !psz_device[3])))
5dc4583b1901 mpdvdkit now accepts X:\ as a device name, as well as X:
joey
parents: 10441
diff changeset
153 dvdcss->b_file = 0;
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
154
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
155 /* Initialize readv temporary buffer */
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
156 dvdcss->p_readv_buffer = NULL;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
157 dvdcss->i_readv_buf_size = 0;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
158
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
159 if( !dvdcss->b_file && WIN2K )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
160 {
16630
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
161 print_debug( dvdcss, "using Win2K API for access" );
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
162 dvdcss->pf_seek = win2k_seek;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
163 dvdcss->pf_read = win2k_read;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
164 dvdcss->pf_readv = win_readv;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
165 return win2k_open( dvdcss, psz_device );
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
166 }
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
167 else if( !dvdcss->b_file )
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
168 {
16630
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
169 print_debug( dvdcss, "using ASPI for access" );
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
170 dvdcss->pf_seek = aspi_seek;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
171 dvdcss->pf_read = aspi_read;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
172 dvdcss->pf_readv = win_readv;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
173 return aspi_open( dvdcss, psz_device );
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
174 }
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
175 else
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
176 #endif
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
177 {
16630
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
178 print_debug( dvdcss, "using libc for access" );
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
179 dvdcss->pf_seek = libc_seek;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
180 dvdcss->pf_read = libc_read;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
181 dvdcss->pf_readv = libc_readv;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
182 return libc_open( dvdcss, psz_device );
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
183 }
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
184 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
185
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
186 #ifndef WIN32
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
187 int _dvdcss_raw_open ( dvdcss_t dvdcss, char const *psz_device )
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
188 {
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
189 dvdcss->i_raw_fd = open( psz_device, 0 );
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
190
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
191 if( dvdcss->i_raw_fd == -1 )
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
192 {
16630
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
193 print_debug( dvdcss, "cannot open %s (%s)",
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
194 psz_device, strerror(errno) );
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
195 print_error( dvdcss, "failed to open raw device, but continuing" );
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
196 return -1;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
197 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
198 else
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
199 {
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
200 dvdcss->i_read_fd = dvdcss->i_raw_fd;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
201 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
202
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
203 return 0;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
204 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
205 #endif
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
206
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
207 int _dvdcss_close ( dvdcss_t dvdcss )
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
208 {
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
209 #if defined( WIN32 )
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
210 if( dvdcss->b_file )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
211 {
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
212 close( dvdcss->i_fd );
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
213 }
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
214 else if( WIN2K )
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
215 {
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
216 CloseHandle( (HANDLE) dvdcss->i_fd );
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
217 }
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
218 else /* ASPI */
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
219 {
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
220 struct w32_aspidev *fd = (struct w32_aspidev *) dvdcss->i_fd;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
221
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
222 /* Unload aspi and free w32_aspidev structure */
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
223 FreeLibrary( (HMODULE) fd->hASPI );
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
224 free( (void*) dvdcss->i_fd );
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
225 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
226
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
227 /* Free readv temporary buffer */
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
228 if( dvdcss->p_readv_buffer )
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
229 {
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
230 free( dvdcss->p_readv_buffer );
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
231 dvdcss->p_readv_buffer = NULL;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
232 dvdcss->i_readv_buf_size = 0;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
233 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
234
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
235 return 0;
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
236 #else
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
237 close( dvdcss->i_fd );
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
238
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
239 if( dvdcss->i_raw_fd >= 0 )
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
240 {
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
241 close( dvdcss->i_raw_fd );
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
242 dvdcss->i_raw_fd = -1;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
243 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
244
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
245 return 0;
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
246 #endif
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
247 }
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
248
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
249 /* Following functions are local */
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
250
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
251 /*****************************************************************************
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
252 * Open commands.
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
253 *****************************************************************************/
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
254 static int libc_open ( dvdcss_t dvdcss, char const *psz_device )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
255 {
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
256 #if !defined( WIN32 )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
257 dvdcss->i_fd = dvdcss->i_read_fd = open( psz_device, 0 );
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
258 #else
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
259 dvdcss->i_fd = dvdcss->i_read_fd = open( psz_device, O_BINARY );
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
260 #endif
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
261
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
262 if( dvdcss->i_fd == -1 )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
263 {
16630
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
264 print_debug( dvdcss, "cannot open %s (%s)",
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
265 psz_device, strerror(errno) );
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
266 print_error( dvdcss, "failed to open device" );
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
267 return -1;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
268 }
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
269
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
270 dvdcss->i_pos = 0;
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
271
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
272 return 0;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
273 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
274
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
275 #if defined( WIN32 )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
276 static int win2k_open ( dvdcss_t dvdcss, char const *psz_device )
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
277 {
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
278 char psz_dvd[7];
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
279 _snprintf( psz_dvd, 7, "\\\\.\\%c:", psz_device[0] );
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
280
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
281 /* To work around an M$ bug in IOCTL_DVD_READ_STRUCTURE, we need read
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
282 * _and_ write access to the device (so we can make SCSI Pass Through
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
283 * Requests). Unfortunately this is only allowed if you have
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
284 * administrator priviledges so we allow for a fallback method with
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
285 * only read access to the device (in this case ioctl_ReadCopyright()
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
286 * won't send back the right result).
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
287 * (See Microsoft Q241374: Read and Write Access Required for SCSI
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
288 * Pass Through Requests) */
15689
80494fefb7ea mingw gcc 4.1 support patch by Gianluigi Tiesi <mplayer at netfarm.it>
faust3
parents: 14860
diff changeset
289 dvdcss->i_fd = (int)
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
290 CreateFile( psz_dvd, GENERIC_READ | GENERIC_WRITE,
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
291 FILE_SHARE_READ | FILE_SHARE_WRITE,
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
292 NULL, OPEN_EXISTING,
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
293 FILE_FLAG_RANDOM_ACCESS, NULL );
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
294
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
295 if( (HANDLE) dvdcss->i_fd == INVALID_HANDLE_VALUE )
15689
80494fefb7ea mingw gcc 4.1 support patch by Gianluigi Tiesi <mplayer at netfarm.it>
faust3
parents: 14860
diff changeset
296 dvdcss->i_fd = (int)
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
297 CreateFile( psz_dvd, GENERIC_READ, FILE_SHARE_READ,
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
298 NULL, OPEN_EXISTING,
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
299 FILE_FLAG_RANDOM_ACCESS, NULL );
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
300
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
301 if( (HANDLE) dvdcss->i_fd == INVALID_HANDLE_VALUE )
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
302 {
16630
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
303 print_error( dvdcss, "failed opening device" );
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
304 return -1;
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
305 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
306
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
307 dvdcss->i_pos = 0;
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
308
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
309 return 0;
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
310 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
311
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
312 static int aspi_open( dvdcss_t dvdcss, char const * psz_device )
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
313 {
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
314 HMODULE hASPI;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
315 DWORD dwSupportInfo;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
316 struct w32_aspidev *fd;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
317 int i, j, i_hostadapters;
15689
80494fefb7ea mingw gcc 4.1 support patch by Gianluigi Tiesi <mplayer at netfarm.it>
faust3
parents: 14860
diff changeset
318 GETASPI32SUPPORTINFO lpGetSupport;
80494fefb7ea mingw gcc 4.1 support patch by Gianluigi Tiesi <mplayer at netfarm.it>
faust3
parents: 14860
diff changeset
319 SENDASPI32COMMAND lpSendCommand;
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
320 char c_drive = psz_device[0];
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
321
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
322 /* load aspi and init w32_aspidev structure */
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
323 hASPI = LoadLibrary( "wnaspi32.dll" );
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
324 if( hASPI == NULL )
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
325 {
16630
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
326 print_error( dvdcss, "unable to load wnaspi32.dll" );
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
327 return -1;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
328 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
329
15689
80494fefb7ea mingw gcc 4.1 support patch by Gianluigi Tiesi <mplayer at netfarm.it>
faust3
parents: 14860
diff changeset
330 lpGetSupport = (GETASPI32SUPPORTINFO) GetProcAddress( hASPI, "GetASPI32SupportInfo" );
80494fefb7ea mingw gcc 4.1 support patch by Gianluigi Tiesi <mplayer at netfarm.it>
faust3
parents: 14860
diff changeset
331 lpSendCommand = (SENDASPI32COMMAND) GetProcAddress( hASPI, "SendASPI32Command" );
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
332
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
333 if(lpGetSupport == NULL || lpSendCommand == NULL )
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
334 {
16630
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
335 print_error( dvdcss, "unable to get aspi function pointers" );
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
336 FreeLibrary( hASPI );
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
337 return -1;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
338 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
339
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
340 dwSupportInfo = lpGetSupport();
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
341
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
342 if( HIBYTE( LOWORD ( dwSupportInfo ) ) == SS_NO_ADAPTERS )
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
343 {
16630
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
344 print_error( dvdcss, "no ASPI adapters found" );
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
345 FreeLibrary( hASPI );
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
346 return -1;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
347 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
348
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
349 if( HIBYTE( LOWORD ( dwSupportInfo ) ) != SS_COMP )
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
350 {
16630
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
351 print_error( dvdcss, "unable to initalize aspi layer" );
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
352 FreeLibrary( hASPI );
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
353 return -1;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
354 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
355
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
356 i_hostadapters = LOBYTE( LOWORD( dwSupportInfo ) );
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
357 if( i_hostadapters == 0 )
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
358 {
16630
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
359 print_error( dvdcss, "no ASPI adapters ready" );
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
360 FreeLibrary( hASPI );
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
361 return -1;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
362 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
363
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
364 fd = malloc( sizeof( struct w32_aspidev ) );
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
365 if( fd == NULL )
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
366 {
16630
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
367 print_error( dvdcss, "not enough memory" );
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
368 FreeLibrary( hASPI );
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
369 return -1;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
370 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
371
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
372 fd->i_blocks = 0;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
373 fd->hASPI = (long) hASPI;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
374 fd->lpSendCommand = lpSendCommand;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
375
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
376 c_drive = c_drive > 'Z' ? c_drive - 'a' : c_drive - 'A';
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
377
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
378 for( i = 0; i < i_hostadapters; i++ )
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
379 {
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
380 for( j = 0; j < 15; j++ )
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
381 {
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
382 struct SRB_GetDiskInfo srbDiskInfo;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
383
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
384 srbDiskInfo.SRB_Cmd = SC_GET_DISK_INFO;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
385 srbDiskInfo.SRB_HaId = i;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
386 srbDiskInfo.SRB_Flags = 0;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
387 srbDiskInfo.SRB_Hdr_Rsvd = 0;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
388 srbDiskInfo.SRB_Target = j;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
389 srbDiskInfo.SRB_Lun = 0;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
390
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
391 lpSendCommand( (void*) &srbDiskInfo );
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
392
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
393 if( (srbDiskInfo.SRB_Status == SS_COMP) &&
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
394 (srbDiskInfo.SRB_Int13HDriveInfo == c_drive) )
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
395 {
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
396 /* Make sure this is a cdrom device */
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
397 struct SRB_GDEVBlock srbGDEVBlock;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
398
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
399 memset( &srbGDEVBlock, 0, sizeof(struct SRB_GDEVBlock) );
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
400 srbGDEVBlock.SRB_Cmd = SC_GET_DEV_TYPE;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
401 srbGDEVBlock.SRB_HaId = i;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
402 srbGDEVBlock.SRB_Target = j;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
403
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
404 lpSendCommand( (void*) &srbGDEVBlock );
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
405
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
406 if( ( srbGDEVBlock.SRB_Status == SS_COMP ) &&
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
407 ( srbGDEVBlock.SRB_DeviceType == DTYPE_CDROM ) )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
408 {
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
409 fd->i_sid = MAKEWORD( i, j );
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
410 dvdcss->i_fd = (int) fd;
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
411 dvdcss->i_pos = 0;
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
412 return 0;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
413 }
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
414 else
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
415 {
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
416 free( (void*) fd );
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
417 FreeLibrary( hASPI );
16630
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
418 print_error( dvdcss,"this is not a cdrom drive" );
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
419 return -1;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
420 }
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
421 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
422 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
423 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
424
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
425 free( (void*) fd );
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
426 FreeLibrary( hASPI );
16630
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
427 print_error( dvdcss, "unable to get haid and target (aspi)" );
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
428 return -1;
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
429 }
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
430 #endif
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
431
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
432 /*****************************************************************************
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
433 * Seek commands.
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
434 *****************************************************************************/
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
435 static int libc_seek( dvdcss_t dvdcss, int i_blocks )
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
436 {
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
437 off_t i_seek;
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
438
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
439 if( dvdcss->i_pos == i_blocks )
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
440 {
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
441 /* We are already in position */
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
442 return i_blocks;
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
443 }
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
444
16630
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
445 i_seek = (off_t)i_blocks * (off_t)DVDCSS_BLOCK_SIZE;
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
446 i_seek = lseek( dvdcss->i_read_fd, i_seek, SEEK_SET );
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
447
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
448 if( i_seek < 0 )
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
449 {
16630
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
450 print_error( dvdcss, "seek error" );
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
451 dvdcss->i_pos = -1;
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
452 return i_seek;
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
453 }
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
454
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
455 dvdcss->i_pos = i_seek / DVDCSS_BLOCK_SIZE;
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
456
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
457 return dvdcss->i_pos;
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
458 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
459
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
460 #if defined( WIN32 )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
461 static int win2k_seek( dvdcss_t dvdcss, int i_blocks )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
462 {
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
463 LARGE_INTEGER li_seek;
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
464
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
465 #ifndef INVALID_SET_FILE_POINTER
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
466 # define INVALID_SET_FILE_POINTER ((DWORD)-1)
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
467 #endif
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
468
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
469 if( dvdcss->i_pos == i_blocks )
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
470 {
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
471 /* We are already in position */
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
472 return i_blocks;
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
473 }
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
474
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
475 li_seek.QuadPart = (LONGLONG)i_blocks * DVDCSS_BLOCK_SIZE;
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
476
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
477 li_seek.LowPart = SetFilePointer( (HANDLE) dvdcss->i_fd,
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
478 li_seek.LowPart,
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
479 &li_seek.HighPart, FILE_BEGIN );
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
480 if( (li_seek.LowPart == INVALID_SET_FILE_POINTER)
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
481 && GetLastError() != NO_ERROR)
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
482 {
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
483 dvdcss->i_pos = -1;
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
484 return -1;
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
485 }
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
486
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
487 dvdcss->i_pos = li_seek.QuadPart / DVDCSS_BLOCK_SIZE;
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
488
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
489 return dvdcss->i_pos;
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
490 }
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
491
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
492 static int aspi_seek( dvdcss_t dvdcss, int i_blocks )
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
493 {
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
494 int i_old_blocks;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
495 char sz_buf[ DVDCSS_BLOCK_SIZE ];
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
496 struct w32_aspidev *fd = (struct w32_aspidev *) dvdcss->i_fd;
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
497
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
498 if( dvdcss->i_pos == i_blocks )
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
499 {
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
500 /* We are already in position */
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
501 return i_blocks;
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
502 }
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
503
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
504 i_old_blocks = fd->i_blocks;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
505 fd->i_blocks = i_blocks;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
506
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
507 if( aspi_read_internal( dvdcss->i_fd, sz_buf, 1 ) == -1 )
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
508 {
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
509 fd->i_blocks = i_old_blocks;
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
510 dvdcss->i_pos = -1;
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
511 return -1;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
512 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
513
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
514 (fd->i_blocks)--;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
515
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
516 dvdcss->i_pos = fd->i_blocks;
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
517
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
518 return dvdcss->i_pos;
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
519 }
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
520 #endif
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
521
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
522 /*****************************************************************************
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
523 * Read commands.
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
524 *****************************************************************************/
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
525 static int libc_read ( dvdcss_t dvdcss, void *p_buffer, int i_blocks )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
526 {
16630
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
527 off_t i_size, i_ret;
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
528
16630
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
529 i_size = (off_t)i_blocks * (off_t)DVDCSS_BLOCK_SIZE;
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
530 i_ret = read( dvdcss->i_read_fd, p_buffer, i_size );
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
531
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
532 if( i_ret < 0 )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
533 {
16630
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
534 print_error( dvdcss, "read error" );
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
535 dvdcss->i_pos = -1;
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
536 return i_ret;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
537 }
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
538
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
539 /* Handle partial reads */
16630
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
540 if( i_ret != i_size )
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
541 {
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
542 int i_seek;
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
543
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
544 dvdcss->i_pos = -1;
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
545 i_seek = libc_seek( dvdcss, i_ret / DVDCSS_BLOCK_SIZE );
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
546 if( i_seek < 0 )
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
547 {
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
548 return i_seek;
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
549 }
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
550
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
551 /* We have to return now so that i_pos isn't clobbered */
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
552 return i_ret / DVDCSS_BLOCK_SIZE;
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
553 }
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
554
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
555 dvdcss->i_pos += i_ret / DVDCSS_BLOCK_SIZE;
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
556 return i_ret / DVDCSS_BLOCK_SIZE;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
557 }
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
558
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
559 #if defined( WIN32 )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
560 static int win2k_read ( dvdcss_t dvdcss, void *p_buffer, int i_blocks )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
561 {
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
562 int i_bytes;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
563
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
564 if( !ReadFile( (HANDLE) dvdcss->i_fd, p_buffer,
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
565 i_blocks * DVDCSS_BLOCK_SIZE,
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
566 (LPDWORD)&i_bytes, NULL ) )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
567 {
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
568 dvdcss->i_pos = -1;
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
569 return -1;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
570 }
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
571
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
572 dvdcss->i_pos += i_bytes / DVDCSS_BLOCK_SIZE;
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
573 return i_bytes / DVDCSS_BLOCK_SIZE;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
574 }
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
575
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
576 static int aspi_read ( dvdcss_t dvdcss, void *p_buffer, int i_blocks )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
577 {
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
578 int i_read = aspi_read_internal( dvdcss->i_fd, p_buffer, i_blocks );
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
579
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
580 if( i_read < 0 )
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
581 {
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
582 dvdcss->i_pos = -1;
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
583 return i_read;
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
584 }
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
585
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
586 dvdcss->i_pos += i_read;
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
587 return i_read;
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
588 }
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
589 #endif
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
590
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
591 /*****************************************************************************
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
592 * Readv commands.
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
593 *****************************************************************************/
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
594 static int libc_readv ( dvdcss_t dvdcss, struct iovec *p_iovec, int i_blocks )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
595 {
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
596 #if defined( WIN32 )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
597 int i_index, i_len, i_total = 0;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
598 unsigned char *p_base;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
599 int i_bytes;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
600
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
601 for( i_index = i_blocks;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
602 i_index;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
603 i_index--, p_iovec++ )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
604 {
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
605 i_len = p_iovec->iov_len;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
606 p_base = p_iovec->iov_base;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
607
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
608 if( i_len <= 0 )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
609 {
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
610 continue;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
611 }
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
612
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
613 i_bytes = read( dvdcss->i_fd, p_base, i_len );
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
614
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
615 if( i_bytes < 0 )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
616 {
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
617 /* One of the reads failed, too bad.
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
618 * We won't even bother returning the reads that went ok,
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
619 * and as in the posix spec the file postition is left
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
620 * unspecified after a failure */
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
621 dvdcss->i_pos = -1;
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
622 return -1;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
623 }
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
624
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
625 i_total += i_bytes;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
626
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
627 if( i_bytes != i_len )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
628 {
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
629 /* We reached the end of the file or a signal interrupted
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
630 * the read. Return a partial read. */
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
631 int i_seek;
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
632
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
633 dvdcss->i_pos = -1;
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
634 i_seek = libc_seek( dvdcss, i_total / DVDCSS_BLOCK_SIZE );
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
635 if( i_seek < 0 )
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
636 {
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
637 return i_seek;
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
638 }
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
639
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
640 /* We have to return now so that i_pos isn't clobbered */
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
641 return i_total / DVDCSS_BLOCK_SIZE;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
642 }
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
643 }
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
644
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
645 dvdcss->i_pos += i_total / DVDCSS_BLOCK_SIZE;
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
646 return i_total / DVDCSS_BLOCK_SIZE;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
647 #else
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
648 int i_read = readv( dvdcss->i_read_fd, p_iovec, i_blocks );
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
649
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
650 if( i_read < 0 )
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
651 {
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
652 dvdcss->i_pos = -1;
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
653 return i_read;
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
654 }
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
655
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
656 dvdcss->i_pos += i_read / DVDCSS_BLOCK_SIZE;
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
657 return i_read / DVDCSS_BLOCK_SIZE;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
658 #endif
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
659 }
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
660
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
661 #if defined( WIN32 )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
662 /*****************************************************************************
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
663 * win_readv: vectored read using ReadFile for Win2K and ASPI for win9x
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
664 *****************************************************************************/
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
665 static int win_readv ( dvdcss_t dvdcss, struct iovec *p_iovec, int i_blocks )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
666 {
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
667 int i_index;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
668 int i_blocks_read, i_blocks_total = 0;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
669
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
670 /* Check the size of the readv temp buffer, just in case we need to
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
671 * realloc something bigger */
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
672 if( dvdcss->i_readv_buf_size < i_blocks * DVDCSS_BLOCK_SIZE )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
673 {
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
674 dvdcss->i_readv_buf_size = i_blocks * DVDCSS_BLOCK_SIZE;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
675
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
676 if( dvdcss->p_readv_buffer ) free( dvdcss->p_readv_buffer );
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
677
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
678 /* Allocate a buffer which will be used as a temporary storage
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
679 * for readv */
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
680 dvdcss->p_readv_buffer = malloc( dvdcss->i_readv_buf_size );
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
681 if( !dvdcss->p_readv_buffer )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
682 {
16630
954cdf2171f6 upgrade to libdvdcss 1.2.9
diego
parents: 15689
diff changeset
683 print_error( dvdcss, " failed (readv)" );
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
684 dvdcss->i_pos = -1;
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
685 return -1;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
686 }
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
687 }
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
688
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
689 for( i_index = i_blocks; i_index; i_index-- )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
690 {
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
691 i_blocks_total += p_iovec[i_index-1].iov_len;
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
692 }
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
693
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
694 if( i_blocks_total <= 0 ) return 0;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
695
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
696 i_blocks_total /= DVDCSS_BLOCK_SIZE;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
697
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
698 if( WIN2K )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
699 {
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
700 unsigned long int i_bytes;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
701 if( !ReadFile( (HANDLE)dvdcss->i_fd, dvdcss->p_readv_buffer,
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
702 i_blocks_total * DVDCSS_BLOCK_SIZE, &i_bytes, NULL ) )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
703 {
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
704 /* The read failed... too bad.
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
705 * As in the posix spec the file postition is left
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
706 * unspecified after a failure */
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
707 dvdcss->i_pos = -1;
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
708 return -1;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
709 }
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
710 i_blocks_read = i_bytes / DVDCSS_BLOCK_SIZE;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
711 }
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
712 else /* Win9x */
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
713 {
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
714 i_blocks_read = aspi_read_internal( dvdcss->i_fd,
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
715 dvdcss->p_readv_buffer,
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
716 i_blocks_total );
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
717 if( i_blocks_read < 0 )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
718 {
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
719 /* See above */
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
720 dvdcss->i_pos = -1;
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
721 return -1;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
722 }
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
723 }
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
724
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
725 /* We just have to copy the content of the temp buffer into the iovecs */
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
726 for( i_index = 0, i_blocks_total = i_blocks_read;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
727 i_blocks_total > 0;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
728 i_index++ )
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
729 {
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
730 memcpy( p_iovec[i_index].iov_base,
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
731 dvdcss->p_readv_buffer + (i_blocks_read - i_blocks_total)
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
732 * DVDCSS_BLOCK_SIZE,
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
733 p_iovec[i_index].iov_len );
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
734 /* if we read less blocks than asked, we'll just end up copying
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
735 * garbage, this isn't an issue as we return the number of
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
736 * blocks actually read */
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
737 i_blocks_total -= ( p_iovec[i_index].iov_len / DVDCSS_BLOCK_SIZE );
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
738 }
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
739
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
740 dvdcss->i_pos += i_blocks_read;
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
741 return i_blocks_read;
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
742 }
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
743
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
744 static int aspi_read_internal( int i_fd, void *p_data, int i_blocks )
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
745 {
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
746 HANDLE hEvent;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
747 struct SRB_ExecSCSICmd ssc;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
748 struct w32_aspidev *fd = (struct w32_aspidev *) i_fd;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
749
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
750 /* Create the transfer completion event */
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
751 hEvent = CreateEvent( NULL, TRUE, FALSE, NULL );
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
752 if( hEvent == NULL )
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
753 {
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
754 return -1;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
755 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
756
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
757 memset( &ssc, 0, sizeof( ssc ) );
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
758
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
759 ssc.SRB_Cmd = SC_EXEC_SCSI_CMD;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
760 ssc.SRB_Flags = SRB_DIR_IN | SRB_EVENT_NOTIFY;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
761 ssc.SRB_HaId = LOBYTE( fd->i_sid );
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
762 ssc.SRB_Target = HIBYTE( fd->i_sid );
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
763 ssc.SRB_SenseLen = SENSE_LEN;
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
764
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
765 ssc.SRB_PostProc = (LPVOID) hEvent;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
766 ssc.SRB_BufPointer = p_data;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
767 ssc.SRB_CDBLen = 12;
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
768
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
769 ssc.CDBByte[0] = 0xA8; /* RAW */
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
770 ssc.CDBByte[2] = (UCHAR) (fd->i_blocks >> 24);
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
771 ssc.CDBByte[3] = (UCHAR) (fd->i_blocks >> 16) & 0xff;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
772 ssc.CDBByte[4] = (UCHAR) (fd->i_blocks >> 8) & 0xff;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
773 ssc.CDBByte[5] = (UCHAR) (fd->i_blocks) & 0xff;
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
774
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
775 /* We have to break down the reads into 64kb pieces (ASPI restriction) */
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
776 if( i_blocks > 32 )
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
777 {
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
778 ssc.SRB_BufLen = 32 * DVDCSS_BLOCK_SIZE;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
779 ssc.CDBByte[9] = 32;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
780 fd->i_blocks += 32;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
781
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
782 /* Initiate transfer */
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
783 ResetEvent( hEvent );
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
784 fd->lpSendCommand( (void*) &ssc );
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
785
8637
0211de3039eb update libdvdcss in libmpdvdkit to latest version (1.2.4)
arpi
parents: 7033
diff changeset
786 /* transfer the next 64kb (aspi_read_internal is called recursively)
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
787 * We need to check the status of the read on return */
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
788 if( aspi_read_internal( i_fd,
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
789 (uint8_t*) p_data + 32 * DVDCSS_BLOCK_SIZE,
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
790 i_blocks - 32) < 0 )
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
791 {
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
792 return -1;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
793 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
794 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
795 else
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
796 {
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
797 /* This is the last transfer */
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
798 ssc.SRB_BufLen = i_blocks * DVDCSS_BLOCK_SIZE;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
799 ssc.CDBByte[9] = (UCHAR) i_blocks;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
800 fd->i_blocks += i_blocks;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
801
9333
f0f0f176d298 sync with libdvdcss 1.2.5 (including u8->uint8_t and whitespace cosmetics...)
arpi
parents: 8637
diff changeset
802 /* Initiate transfer */
7027
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
803 ResetEvent( hEvent );
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
804 fd->lpSendCommand( (void*) &ssc );
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
805
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
806 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
807
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
808 /* If the command has still not been processed, wait until it's finished */
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
809 if( ssc.SRB_Status == SS_PENDING )
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
810 {
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
811 WaitForSingleObject( hEvent, INFINITE );
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
812 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
813 CloseHandle( hEvent );
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
814
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
815 /* check that the transfer went as planned */
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
816 if( ssc.SRB_Status != SS_COMP )
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
817 {
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
818 return -1;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
819 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
820
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
821 return i_blocks;
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
822 }
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
823 #endif
c9a4dfaa9868 importing libdvdcss 1.2.2 files
arpi
parents:
diff changeset
824