[libdvdcss-devel] Revert "win32: Use proper handle instead of file descriptor to access devices"
[email protected] (Jean-Baptiste Kempf) Tue, 27 Jan 2015 15:11:36 +0100 (CET)
| Newsgroups | gmane.comp.video.videolan.libdvdcss,gmane.comp.video.videolan.libdvdcss.devel |
|---|---|
| Message-ID | <[email protected]> |
libdvdcss | branch: master | Jean-Baptiste Kempf <[email protected]> | Tue Jan 27 15:08:37 2015 +0100| [5002be6b4d4390be21aa67e82ee9e20298692712] | committer: Jean-Baptiste Kempf Revert "win32: Use proper handle instead of file descriptor to access devices" This reverts commit 1b4e3f9e1c4e7b53cce59b802f95f6400ba641dd. > http://git.videolan.org/gitweb.cgi/libdvdcss.git/?a=commit;h=5002be6b4d4390be21aa67e82ee9e20298692712 --- src/device.c | 60 ++++++++++++++++++++++++++++++++----------------------- src/libdvdcss.h | 7 +------ 2 files changed, 36 insertions(+), 31 deletions(-) diff --git a/src/device.c b/src/device.c index 00d005e..8254028 100644 --- a/src/device.c +++ b/src/device.c @@ -92,7 +92,7 @@ static int os2_open ( dvdcss_t, const char * ); int dvdcss_use_ioctls( dvdcss_t dvdcss ) { #if defined( _WIN32 ) - if( dvdcss->p_handle ) + if( dvdcss->b_file ) { return 0; } @@ -344,32 +344,38 @@ int dvdcss_open_device ( dvdcss_t dvdcss ) print_debug( dvdcss, "opening target `%s'", psz_device ); #if defined( _WIN32 ) - dvdcss->p_handle = NULL; + dvdcss->b_file = 1; + /* If device is "X:" or "X:\", we are not actually opening a file. */ + if (psz_device[0] && psz_device[1] == ':' && + (!psz_device[2] || (psz_device[2] == '\\' && !psz_device[3]))) + dvdcss->b_file = 0; + + /* Initialize readv temporary buffer */ dvdcss->p_readv_buffer = NULL; dvdcss->i_readv_buf_size = 0; -#endif /* defined( _WIN32 ) */ -#if defined( _WIN32 ) || defined( __OS2__ ) - /* If device is "X:" or "X:\", we are not actually opening a file. */ - if( psz_device[0] && psz_device[1] == ':' && - ( !psz_device[2] || ( psz_device[2] == '\\' && !psz_device[3] ) ) ) + if( !dvdcss->b_file ) { -#if defined( _WIN32 ) print_debug( dvdcss, "using Win2K API for access" ); dvdcss->pf_seek = win2k_seek; dvdcss->pf_read = win2k_read; dvdcss->pf_readv = win2k_readv; return win2k_open( dvdcss, psz_device ); + } + else #elif defined( __OS2__ ) + /* If device is "X:" or "X:\", we are not actually opening a file. */ + if( psz_device[0] && psz_device[1] == ':' && + ( !psz_device[2] || ( psz_device[2] == '\\' && !psz_device[3] ) ) ) + { print_debug( dvdcss, "using OS/2 API for access" ); dvdcss->pf_seek = libc_seek; dvdcss->pf_read = libc_read; dvdcss->pf_readv = libc_readv; return os2_open( dvdcss, psz_device ); -#endif /* ! ( defined( _WIN32 ) || defined( __OS2__ ) ) */ } else -#endif /* defined( _WIN32 ) || defined( __OS2__ ) */ +#endif { print_debug( dvdcss, "using libc API for access" ); dvdcss->pf_seek = libc_seek; @@ -387,9 +393,9 @@ int dvdcss_close_device ( dvdcss_t dvdcss ) dvdcss->p_readv_buffer = NULL; dvdcss->i_readv_buf_size = 0; - if( dvdcss->p_handle ) + if( !dvdcss->b_file ) { - CloseHandle( dvdcss->p_handle ); + CloseHandle( (HANDLE) dvdcss->i_fd ); } else #endif @@ -438,17 +444,19 @@ static int win2k_open ( dvdcss_t dvdcss, const char *psz_device ) * won't send back the right result). * (See Microsoft Q241374: Read and Write Access Required for SCSI * Pass Through Requests) */ - dvdcss->p_handle = CreateFile( psz_dvd, GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, OPEN_EXISTING, - FILE_FLAG_RANDOM_ACCESS, NULL ); + dvdcss->i_fd = (int) + CreateFile( psz_dvd, GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE, + NULL, OPEN_EXISTING, + FILE_FLAG_RANDOM_ACCESS, NULL ); - if( dvdcss->p_handle == INVALID_HANDLE_VALUE ) - dvdcss->p_handle = CreateFile( psz_dvd, GENERIC_READ, FILE_SHARE_READ, - NULL, OPEN_EXISTING, - FILE_FLAG_RANDOM_ACCESS, NULL ); + if( (HANDLE) dvdcss->i_fd == INVALID_HANDLE_VALUE ) + dvdcss->i_fd = (int) + CreateFile( psz_dvd, GENERIC_READ, FILE_SHARE_READ, + NULL, OPEN_EXISTING, + FILE_FLAG_RANDOM_ACCESS, NULL ); - if( dvdcss->p_handle == INVALID_HANDLE_VALUE ) + if( (HANDLE) dvdcss->i_fd == INVALID_HANDLE_VALUE ) { print_error( dvdcss, "failed to open device %s", psz_device ); return -1; @@ -532,7 +540,8 @@ static int win2k_seek( dvdcss_t dvdcss, int i_blocks ) li_seek.QuadPart = (LONGLONG)i_blocks * DVDCSS_BLOCK_SIZE; - li_seek.LowPart = SetFilePointer( dvdcss->p_handle, li_seek.LowPart, + li_seek.LowPart = SetFilePointer( (HANDLE) dvdcss->i_fd, + li_seek.LowPart, &li_seek.HighPart, FILE_BEGIN ); if( (li_seek.LowPart == INVALID_SET_FILE_POINTER) && GetLastError() != NO_ERROR) @@ -591,8 +600,9 @@ static int win2k_read ( dvdcss_t dvdcss, void *p_buffer, int i_blocks ) { DWORD i_bytes; - if( !ReadFile( dvdcss->p_handle, p_buffer,i_blocks * DVDCSS_BLOCK_SIZE, - &i_bytes, NULL ) ) + if( !ReadFile( (HANDLE) dvdcss->i_fd, p_buffer, + i_blocks * DVDCSS_BLOCK_SIZE, + &i_bytes, NULL ) ) { dvdcss->i_pos = -1; return -1; @@ -714,7 +724,7 @@ static int win2k_readv ( dvdcss_t dvdcss, const struct iovec *p_iovec, if( i_blocks_total <= 0 ) return 0; - if( !ReadFile( dvdcss->p_handle, dvdcss->p_readv_buffer, + if( !ReadFile( (HANDLE)dvdcss->i_fd, dvdcss->p_readv_buffer, i_blocks_total, &i_bytes, NULL ) ) { /* The read failed... too bad. diff --git a/src/libdvdcss.h b/src/libdvdcss.h index 9a9ac4c..881bb45 100644 --- a/src/libdvdcss.h +++ b/src/libdvdcss.h @@ -26,11 +26,6 @@ #include <limits.h> -#ifdef _WIN32 -# include "config.h" -# include <windows.h> -#endif - #include "dvdcss/dvdcss.h" #include "css.h" #include "device.h" @@ -75,7 +70,7 @@ struct dvdcss_s int b_debug; #ifdef _WIN32 - HANDLE p_handle; + int b_file; char * p_readv_buffer; int i_readv_buf_size; #endif /* _WIN32 */ _______________________________________________ libdvdcss-devel mailing list [email protected] https://mailman.videolan.org/listinfo/libdvdcss-devel