shithub: libdvdcss

Download patch

ref: ddfe2c316e0fd6819721f5e5ddb861f5df5e6ecf
parent: 0104be9ede298780483f95736a7be2c619b766bb
author: Sam Hocevar <[email protected]>
date: Tue Sep 9 06:03:48 EDT 2003

* Changed _dvdcss_error and _dvdcss_debug to print_error and print_debug
    because they aren't libdvdcss functions.


--- a/src/css.c
+++ b/src/css.c
@@ -2,7 +2,7 @@
  * css.c: Functions for DVD authentication and descrambling
  *****************************************************************************
  * Copyright (C) 1999-2001 VideoLAN
- * $Id: css.c,v 1.26 2003/07/16 21:40:01 sam Exp $
+ * $Id: css.c,v 1.27 2003/09/09 10:03:48 sam Exp $
  *
  * Author: St�phane Borel <[email protected]>
  *         H�kan Hjort <[email protected]>
@@ -111,9 +111,9 @@
     if( i_ret < 0 )
     {
         /* Since it's the first ioctl we try to issue, we add a notice */
-        _dvdcss_error( dvdcss, "css error: ioctl_ReadCopyright failed, "
-                       "make sure there is a DVD in the drive, and that "
-                       "you have used the correct device node." );
+        print_error( dvdcss, "css error: ioctl_ReadCopyright failed, "
+                     "make sure there is a DVD in the drive, and that "
+                     "you have used the correct device node." );
 
         return i_ret;
     }
@@ -143,7 +143,7 @@
     int       i_ret = -1;
     int       i;
 
-    _dvdcss_debug( dvdcss, "requesting AGID" );
+    print_debug( dvdcss, "requesting AGID" );
     i_ret = ioctl_ReportAgid( dvdcss->i_fd, &dvdcss->css.i_agid );
 
     /* We might have to reset hung authentication processes in the drive
@@ -153,7 +153,7 @@
     {
         sprintf( psz_warning,
                  "ioctl ReportAgid failed, invalidating AGID %d", i );
-        _dvdcss_debug( dvdcss, psz_warning );
+        print_debug( dvdcss, psz_warning );
 
         /* This is really _not good_, should be handled by the OS.
            Invalidating an AGID could make another process fail some
@@ -161,7 +161,7 @@
         dvdcss->css.i_agid = i;
         ioctl_InvalidateAgid( dvdcss->i_fd, &dvdcss->css.i_agid );
 
-        _dvdcss_debug( dvdcss, "requesting AGID" );
+        print_debug( dvdcss, "requesting AGID" );
         i_ret = ioctl_ReportAgid( dvdcss->i_fd, &dvdcss->css.i_agid );
     }
 
@@ -168,7 +168,7 @@
     /* Unable to authenticate without AGID */
     if( i_ret == -1 )
     {
-        _dvdcss_error( dvdcss, "ioctl ReportAgid failed, fatal" );
+        print_error( dvdcss, "ioctl ReportAgid failed, fatal" );
         return -1;
     }
 
@@ -188,7 +188,7 @@
     if( ioctl_SendChallenge( dvdcss->i_fd,
                              &dvdcss->css.i_agid, p_buffer ) < 0 )
     {
-        _dvdcss_error( dvdcss, "ioctl SendChallenge failed" );
+        print_error( dvdcss, "ioctl SendChallenge failed" );
         ioctl_InvalidateAgid( dvdcss->i_fd, &dvdcss->css.i_agid );
         return -1;
     }
@@ -196,7 +196,7 @@
     /* Get key1 from LU */
     if( ioctl_ReportKey1( dvdcss->i_fd, &dvdcss->css.i_agid, p_buffer ) < 0)
     {
-        _dvdcss_error( dvdcss, "ioctl ReportKey1 failed" );
+        print_error( dvdcss, "ioctl ReportKey1 failed" );
         ioctl_InvalidateAgid( dvdcss->i_fd, &dvdcss->css.i_agid );
         return -1;
     }
@@ -215,7 +215,7 @@
         {
             snprintf( psz_warning, sizeof(psz_warning),
                       "drive authenticated, using variant %d", i );
-            _dvdcss_debug( dvdcss, psz_warning );
+            print_debug( dvdcss, psz_warning );
             i_variant = i;
             break;
         }
@@ -223,7 +223,7 @@
 
     if( i == 32 )
     {
-        _dvdcss_error( dvdcss, "drive would not authenticate" );
+        print_error( dvdcss, "drive would not authenticate" );
         ioctl_InvalidateAgid( dvdcss->i_fd, &dvdcss->css.i_agid );
         return -1;
     }
@@ -232,7 +232,7 @@
     if( ioctl_ReportChallenge( dvdcss->i_fd,
                                &dvdcss->css.i_agid, p_buffer ) < 0 )
     {
-        _dvdcss_error( dvdcss, "ioctl ReportKeyChallenge failed" );
+        print_error( dvdcss, "ioctl ReportKeyChallenge failed" );
         ioctl_InvalidateAgid( dvdcss->i_fd, &dvdcss->css.i_agid );
         return -1;
     }
@@ -254,13 +254,13 @@
     /* Send key2 to LU */
     if( ioctl_SendKey2( dvdcss->i_fd, &dvdcss->css.i_agid, p_buffer ) < 0 )
     {
-        _dvdcss_error( dvdcss, "ioctl SendKey2 failed" );
+        print_error( dvdcss, "ioctl SendKey2 failed" );
         ioctl_InvalidateAgid( dvdcss->i_fd, &dvdcss->css.i_agid );
         return -1;
     }
 
     /* The drive has accepted us as authentic. */
-    _dvdcss_debug( dvdcss, "authentication established" );
+    print_debug( dvdcss, "authentication established" );
 
     memcpy( p_challenge, p_key1, KEY_SIZE );
     memcpy( p_challenge + KEY_SIZE, p_key2, KEY_SIZE );
@@ -279,7 +279,7 @@
 
     sprintf( psz_output, "%s%02x:%02x:%02x:%02x:%02x", prefix,
              data[0], data[1], data[2], data[3], data[4] );
-    _dvdcss_debug( dvdcss, psz_output );
+    print_debug( dvdcss, psz_output );
 }
 
 /*****************************************************************************
@@ -329,7 +329,7 @@
         {
             if( read( i_fd, p_title_key, 5 ) == 5 )
             {
-                _dvdcss_debug( dvdcss, "key found in cache" );
+                print_debug( dvdcss, "key found in cache" );
                 /* Don't try to save it again */
                 b_cache = 0;
                 i_ret = 1;
@@ -345,13 +345,13 @@
 
         if( i_ret < 0 )
         {
-            _dvdcss_error( dvdcss, "fatal error in vts css key" );
+            print_error( dvdcss, "fatal error in vts css key" );
             return i_ret;
         }
 
         if( i_ret == 0 )
         {
-            _dvdcss_debug( dvdcss, "unencrypted title" );
+            print_debug( dvdcss, "unencrypted title" );
             /* We cache this anyway, so we don't need to check again. */
         }
     }
@@ -425,7 +425,7 @@
     /* Get encrypted disc key */
     if( ioctl_ReadDiscKey( dvdcss->i_fd, &dvdcss->css.i_agid, p_buffer ) < 0 )
     {
-        _dvdcss_error( dvdcss, "ioctl ReadDiscKey failed" );
+        print_error( dvdcss, "ioctl ReadDiscKey failed" );
         return -1;
     }
 
@@ -433,8 +433,8 @@
     if( GetASF( dvdcss ) != 1 )
     {
         /* Region mismatch (or region not set) is the most likely source. */
-        _dvdcss_error( dvdcss,
-                       "ASF not 1 after reading disc key (region mismatch?)" );
+        print_error( dvdcss,
+                     "ASF not 1 after reading disc key (region mismatch?)" );
         ioctl_InvalidateAgid( dvdcss->i_fd, &dvdcss->css.i_agid );
         return -1;
     }
@@ -450,15 +450,15 @@
         case DVDCSS_METHOD_KEY:
 
             /* Decrypt disc key with player key. */
-            _dvdcss_debug( dvdcss, "decrypting disc key with player keys" );
+            print_debug( dvdcss, "decrypting disc key with player keys" );
             if( ! DecryptDiscKey( p_buffer, p_disc_key ) )
             {
                 PrintKey( dvdcss, "decrypted disc key is ", p_disc_key );
                 break;
             }
-            _dvdcss_debug( dvdcss, "failed to decrypt the disc key, "
-                                   "faulty drive/kernel? "
-                                   "cracking title keys instead" );
+            print_debug( dvdcss, "failed to decrypt the disc key, "
+                                 "faulty drive/kernel? "
+                                 "cracking title keys instead" );
 
             /* Fallback, but not to DISC as the disc key might be faulty */
             dvdcss->i_method = DVDCSS_METHOD_TITLE;
@@ -467,8 +467,8 @@
         case DVDCSS_METHOD_DISC:
 
             /* Crack Disc key to be able to use it */
-            _dvdcss_debug( dvdcss, "cracking disc key from key hash ..."
-                                   " this will take some time" );
+            print_debug( dvdcss, "cracking disc key from key hash ..."
+                                 " this will take some time" );
             memcpy( p_disc_key, p_buffer, KEY_SIZE );
             if( ! CrackDiscKey( dvdcss, p_disc_key ) )
             {
@@ -475,7 +475,7 @@
                 PrintKey( dvdcss, "cracked disc key is ", p_disc_key );
                 break;
             }
-            _dvdcss_debug( dvdcss, "failed to crack the disc key" );
+            print_debug( dvdcss, "failed to crack the disc key" );
             memset( p_disc_key, 0, KEY_SIZE );
             dvdcss->i_method = DVDCSS_METHOD_TITLE;
             break;
@@ -482,7 +482,7 @@
 
         default:
 
-            _dvdcss_debug( dvdcss, "disc key needs not be decrypted" );
+            print_debug( dvdcss, "disc key needs not be decrypted" );
             memset( p_disc_key, 0, KEY_SIZE );
             break;
     }
@@ -509,7 +509,7 @@
          * read the title key and decrypt it.
          */
 
-        _dvdcss_debug( dvdcss, "getting title key the classic way" );
+        print_debug( dvdcss, "getting title key the classic way" );
 
         /* We need to authenticate again every time to get a new session key */
         if( GetBusKey( dvdcss ) < 0 )
@@ -521,8 +521,8 @@
         if( ioctl_ReadTitleKey( dvdcss->i_fd, &dvdcss->css.i_agid,
                                 i_pos, p_key ) < 0 )
         {
-            _dvdcss_debug( dvdcss,
-                           "ioctl ReadTitleKey failed (region mismatch?)" );
+            print_debug( dvdcss,
+                         "ioctl ReadTitleKey failed (region mismatch?)" );
             i_ret = -1;
         }
 
@@ -531,7 +531,7 @@
         {
             case -1:
                 /* An error getting the ASF status, something must be wrong. */
-                _dvdcss_debug( dvdcss, "lost ASF requesting title key" );
+                print_debug( dvdcss, "lost ASF requesting title key" );
                 ioctl_InvalidateAgid( dvdcss->i_fd, &dvdcss->css.i_agid );
                 i_ret = -1;
                 break;
@@ -539,7 +539,7 @@
             case 0:
                 /* This might either be a title that has no key,
                  * or we encountered a region error. */
-                _dvdcss_debug( dvdcss, "lost ASF requesting title key" );
+                print_debug( dvdcss, "lost ASF requesting title key" );
                 break;
 
             case 1:
@@ -582,7 +582,7 @@
         }
 
         /* The title key request failed */
-        _dvdcss_debug( dvdcss, "resetting drive and cracking title key" );
+        print_debug( dvdcss, "resetting drive and cracking title key" );
 
         /* Read an unscrambled sector and reset the drive */
         dvdcss->pf_seek( dvdcss, 0 );
@@ -666,17 +666,17 @@
     if( ioctl_ReportASF( dvdcss->i_fd, NULL, &i_asf ) != 0 )
     {
         /* The ioctl process has failed */
-        _dvdcss_error( dvdcss, "GetASF fatal error" );
+        print_error( dvdcss, "GetASF fatal error" );
         return -1;
     }
 
     if( i_asf )
     {
-        _dvdcss_debug( dvdcss, "GetASF authenticated, ASF=1" );
+        print_debug( dvdcss, "GetASF authenticated, ASF=1" );
     }
     else
     {
-        _dvdcss_debug( dvdcss, "GetASF not authenticated, ASF=0" );
+        print_debug( dvdcss, "GetASF not authenticated, ASF=0" );
     }
 
     return i_asf;
@@ -1081,7 +1081,7 @@
     unsigned int*  BigTable;    /* LFSR2 startstate indexed by
                                  * 1,2,5 output byte */
 
-    _dvdcss_debug( dvdcss, "cracking disc key" );
+    print_debug( dvdcss, "cracking disc key" );
 
     /*
      * Prepare tables for hash reversal
@@ -1109,7 +1109,7 @@
 /*
             if( tmp4 == K1TABLEWIDTH )
             {
-                _dvdcss_debug( dvdcss, "Table disaster %d", tmp4 );
+                print_debug( dvdcss, "Table disaster %d", tmp4 );
             }
 */
             if( tmp4 < K1TABLEWIDTH )
@@ -1130,7 +1130,7 @@
 
     tmp3 = 0;
 
-    _dvdcss_debug( dvdcss, "initializing the big table" );
+    print_debug( dvdcss, "initializing the big table" );
 
     for( i = 0 ; i < 16777216 ; i++ )
     {
@@ -1413,7 +1413,7 @@
     int b_read_error = 0;
     int i_ret;
 
-    _dvdcss_debug( dvdcss, "cracking title key" );
+    print_debug( dvdcss, "cracking title key" );
 
     i_tries = 0;
     i_success = 0;
@@ -1424,7 +1424,7 @@
 
         if( i_ret != i_pos )
         {
-            _dvdcss_error( dvdcss, "seek failed" );
+            print_error( dvdcss, "seek failed" );
         }
 
         i_ret = dvdcss_read( dvdcss, p_buf, 1, DVDCSS_NOFLAGS );
@@ -1435,12 +1435,12 @@
         {
             if( i_ret == 0 )
             {
-                _dvdcss_debug( dvdcss, "read returned 0 (end of device?)" );
+                print_debug( dvdcss, "read returned 0 (end of device?)" );
             }
             else if( !b_read_error )
             {
-                _dvdcss_debug( dvdcss, "read error, resorting to secret "
-                                       "arcanes to recover" );
+                print_debug( dvdcss, "read error, resorting to secret "
+                                     "arcanes to recover" );
 
                 /* Reset the drive before trying to continue */
                 _dvdcss_close( dvdcss );
@@ -1457,12 +1457,12 @@
          * For now, allow all blocks that begin with a start code. */
         if( memcmp( p_buf, p_packstart, 3 ) )
         {
-            _dvdcss_debug( dvdcss, "non MPEG block found (end of title)" );
+            print_debug( dvdcss, "non MPEG block found (end of title)" );
             break;
         }
 
         if( p_buf[0x0d] & 0x07 )
-            _dvdcss_debug( dvdcss, "stuffing in pack header" );
+            print_debug( dvdcss, "stuffing in pack header" );
 
         /* PES_scrambling_control does not exist in a system_header,
          * a padding_stream or a private_stream2 (and others?). */
@@ -1491,7 +1491,7 @@
         /* Emit a progress indication now and then. */
         if( !( i_reads & 0xfff ) )
         {
-            _dvdcss_debug( dvdcss, "still cracking..." );
+            print_debug( dvdcss, "still cracking..." );
         }
 
         /* Stop after 2000 blocks if we haven't seen any encrypted blocks. */
@@ -1501,7 +1501,7 @@
 
     if( !b_stop_scanning )
     {
-        _dvdcss_debug( dvdcss, "end of title reached" );
+        print_debug( dvdcss, "end of title reached" );
     }
 
     { /* Print some statistics. */
@@ -1509,12 +1509,12 @@
         snprintf( psz_info, sizeof(psz_info),
                   "%d of %d attempts successful, %d of %d blocks scrambled",
                   i_success, i_tries, i_encrypted, i_reads );
-        _dvdcss_debug( dvdcss, psz_info );
+        print_debug( dvdcss, psz_info );
     }
 
     if( i_success > 0 /* b_stop_scanning */ )
     {
-        _dvdcss_debug( dvdcss, "vts key initialized" );
+        print_debug( dvdcss, "vts key initialized" );
         return 1;
     }
 
@@ -1521,7 +1521,7 @@
     if( i_encrypted == 0 && i_reads > 0 )
     {
         memset( p_titlekey, 0, KEY_SIZE );
-        _dvdcss_debug( dvdcss, "file was unscrambled" );
+        print_debug( dvdcss, "file was unscrambled" );
         return 0;
     }
 
--- a/src/device.c
+++ b/src/device.c
@@ -2,7 +2,7 @@
  * device.h: DVD device access
  *****************************************************************************
  * Copyright (C) 1998-2002 VideoLAN
- * $Id: device.c,v 1.16 2003/07/08 18:00:54 gbazin Exp $
+ * $Id: device.c,v 1.17 2003/09/09 10:03:48 sam Exp $
  *
  * Authors: St�phane Borel <[email protected]>
  *          Samuel Hocevar <[email protected]>
@@ -140,7 +140,7 @@
 
     snprintf( psz_debug, 199, "opening target `%s'", psz_device );
     psz_debug[199] = '\0';
-    _dvdcss_debug( dvdcss, psz_debug );
+    print_debug( dvdcss, psz_debug );
 
 #if defined( WIN32 )
     /* If device is not "X:", we are actually opening a file. */
@@ -152,7 +152,7 @@
 
     if( !dvdcss->b_file && WIN2K )
     {
-        _dvdcss_debug( dvdcss, "using Win2K API for access" );
+        print_debug( dvdcss, "using Win2K API for access" );
         dvdcss->pf_seek  = win2k_seek;
         dvdcss->pf_read  = win2k_read;
         dvdcss->pf_readv = win_readv;
@@ -160,7 +160,7 @@
     }
     else if( !dvdcss->b_file )
     {
-        _dvdcss_debug( dvdcss, "using ASPI for access" );
+        print_debug( dvdcss, "using ASPI for access" );
         dvdcss->pf_seek  = aspi_seek;
         dvdcss->pf_read  = aspi_read;
         dvdcss->pf_readv = win_readv;
@@ -169,7 +169,7 @@
     else
 #endif
     {
-        _dvdcss_debug( dvdcss, "using libc for access" );
+        print_debug( dvdcss, "using libc for access" );
         dvdcss->pf_seek  = libc_seek;
         dvdcss->pf_read  = libc_read;
         dvdcss->pf_readv = libc_readv;
@@ -184,7 +184,7 @@
 
     if( dvdcss->i_raw_fd == -1 )
     {
-        _dvdcss_error( dvdcss, "failed opening raw device, continuing" );
+        print_error( dvdcss, "failed opening raw device, continuing" );
         return -1;
     }
     else
@@ -253,7 +253,7 @@
 
     if( dvdcss->i_fd == -1 )
     {
-        _dvdcss_error( dvdcss, "failed opening device" );
+        print_error( dvdcss, "failed opening device" );
         return -1;
     }
 
@@ -290,7 +290,7 @@
 
     if( (HANDLE) dvdcss->i_fd == INVALID_HANDLE_VALUE )
     {
-        _dvdcss_error( dvdcss, "failed opening device" );
+        print_error( dvdcss, "failed opening device" );
         return -1;
     }
 
@@ -313,7 +313,7 @@
     hASPI = LoadLibrary( "wnaspi32.dll" );
     if( hASPI == NULL )
     {
-        _dvdcss_error( dvdcss, "unable to load wnaspi32.dll" );
+        print_error( dvdcss, "unable to load wnaspi32.dll" );
         return -1;
     }
 
@@ -322,7 +322,7 @@
 
     if(lpGetSupport == NULL || lpSendCommand == NULL )
     {
-        _dvdcss_error( dvdcss, "unable to get aspi function pointers" );
+        print_error( dvdcss, "unable to get aspi function pointers" );
         FreeLibrary( hASPI );
         return -1;
     }
@@ -331,7 +331,7 @@
 
     if( HIBYTE( LOWORD ( dwSupportInfo ) ) == SS_NO_ADAPTERS )
     {
-        _dvdcss_error( dvdcss, "no ASPI adapters found" );
+        print_error( dvdcss, "no ASPI adapters found" );
         FreeLibrary( hASPI );
         return -1;
     }
@@ -338,7 +338,7 @@
 
     if( HIBYTE( LOWORD ( dwSupportInfo ) ) != SS_COMP )
     {
-        _dvdcss_error( dvdcss, "unable to initalize aspi layer" );
+        print_error( dvdcss, "unable to initalize aspi layer" );
         FreeLibrary( hASPI );
         return -1;
     }
@@ -346,7 +346,7 @@
     i_hostadapters = LOBYTE( LOWORD( dwSupportInfo ) );
     if( i_hostadapters == 0 )
     {
-        _dvdcss_error( dvdcss, "no ASPI adapters ready" );
+        print_error( dvdcss, "no ASPI adapters ready" );
         FreeLibrary( hASPI );
         return -1;
     }
@@ -354,7 +354,7 @@
     fd = malloc( sizeof( struct w32_aspidev ) );
     if( fd == NULL )
     {
-        _dvdcss_error( dvdcss, "not enough memory" );
+        print_error( dvdcss, "not enough memory" );
         FreeLibrary( hASPI );
         return -1;
     }
@@ -405,7 +405,7 @@
                 {
                     free( (void*) fd );
                     FreeLibrary( hASPI );
-                    _dvdcss_error( dvdcss,"this is not a cdrom drive" );
+                    print_error( dvdcss,"this is not a cdrom drive" );
                     return -1;
                 }
             }
@@ -414,7 +414,7 @@
 
     free( (void*) fd );
     FreeLibrary( hASPI );
-    _dvdcss_error( dvdcss, "unable to get haid and target (aspi)" );
+    print_error( dvdcss, "unable to get haid and target (aspi)" );
     return -1;
 }
 #endif
@@ -437,7 +437,7 @@
 
     if( i_seek < 0 )
     {
-        _dvdcss_error( dvdcss, "seek error" );
+        print_error( dvdcss, "seek error" );
         dvdcss->i_pos = -1;
         return i_seek;
     }
@@ -521,7 +521,7 @@
 
     if( i_ret < 0 )
     {
-        _dvdcss_error( dvdcss, "read error" );
+        print_error( dvdcss, "read error" );
         dvdcss->i_pos = -1;
         return i_ret;
     }
@@ -670,7 +670,7 @@
         dvdcss->p_readv_buffer = malloc( dvdcss->i_readv_buf_size );
         if( !dvdcss->p_readv_buffer )
         {
-            _dvdcss_error( dvdcss, " failed (readv)" );
+            print_error( dvdcss, " failed (readv)" );
             dvdcss->i_pos = -1;
             return -1;
         }
--- a/src/error.c
+++ b/src/error.c
@@ -2,7 +2,7 @@
  * error.c: error management functions
  *****************************************************************************
  * Copyright (C) 1998-2002 VideoLAN
- * $Id: error.c,v 1.7 2003/03/09 23:34:18 gbazin Exp $
+ * $Id: error.c,v 1.8 2003/09/09 10:03:48 sam Exp $
  *
  * Author: Samuel Hocevar <[email protected]>
  *
@@ -43,7 +43,7 @@
 /*****************************************************************************
  * Error messages
  *****************************************************************************/
-void _dvdcss_error( dvdcss_t dvdcss, char *psz_string )
+void _print_error( dvdcss_t dvdcss, char *psz_string )
 {
     if( dvdcss->b_errors )
     {
@@ -56,7 +56,8 @@
 /*****************************************************************************
  * Debug messages
  *****************************************************************************/
-void _dvdcss_debug( dvdcss_t dvdcss, char *psz_string )
+#if 0
+void _print_debug( dvdcss_t dvdcss, char *psz_string )
 {
     if( dvdcss->b_debug )
     {
@@ -63,4 +64,5 @@
         fprintf( stderr, "libdvdcss debug: %s\n", psz_string );
     }
 }
+#endif
 
--- a/src/libdvdcss.c
+++ b/src/libdvdcss.c
@@ -5,7 +5,7 @@
  *          H�kan Hjort <[email protected]>
  *
  * Copyright (C) 1998-2002 VideoLAN
- * $Id: libdvdcss.c,v 1.33 2003/06/18 17:23:55 sam Exp $
+ * $Id: libdvdcss.c,v 1.34 2003/09/09 10:03:48 sam Exp $
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -225,8 +225,8 @@
         }
         else
         {
-            _dvdcss_error( dvdcss, "unknown decrypt method, please choose "
-                                   "from 'title', 'key' or 'disc'" );
+            print_error( dvdcss, "unknown decrypt method, please choose "
+                                 "from 'title', 'key' or 'disc'" );
             free( dvdcss->psz_device );
             free( dvdcss );
             return NULL;
@@ -321,7 +321,7 @@
         /* Check that we can add the ID directory and the block filename */
         else if( strlen( psz_cache ) + 1 + 32 + 1 + 10 + 1 > PATH_MAX )
         {
-            _dvdcss_error( dvdcss, "cache directory name is too long" );
+            print_error( dvdcss, "cache directory name is too long" );
             psz_cache = NULL;
         }
     }
@@ -346,14 +346,14 @@
         if( i_ret < 0 )
         {
             /* Disable the CSS ioctls and hope that it works? */
-            _dvdcss_debug( dvdcss,
-                           "could not check whether the disc was scrambled" );
+            print_debug( dvdcss,
+                         "could not check whether the disc was scrambled" );
             dvdcss->b_ioctls = 0;
         }
         else
         {
-            _dvdcss_debug( dvdcss, i_ret ? "disc is scrambled"
-                                         : "disc is unscrambled" );
+            print_debug( dvdcss, i_ret ? "disc is scrambled"
+                                       : "disc is unscrambled" );
             dvdcss->b_scrambled = i_ret;
         }
     }
@@ -461,7 +461,7 @@
 #endif
         if( i_ret < 0 && errno != EEXIST )
         {
-            _dvdcss_error( dvdcss, "failed creating cache directory" );
+            print_error( dvdcss, "failed creating cache directory" );
             dvdcss->psz_cachefile[0] = '\0';
             goto nocache;
         }
@@ -475,7 +475,7 @@
 #endif
         if( i_ret < 0 && errno != EEXIST )
         {
-            _dvdcss_error( dvdcss, "failed creating cache subdirectory" );
+            print_error( dvdcss, "failed creating cache subdirectory" );
             dvdcss->psz_cachefile[0] = '\0';
             goto nocache;
         }
@@ -486,7 +486,7 @@
 
         sprintf( psz_debug, "using CSS key cache dir: %s",
                             dvdcss->psz_cachefile );
-        _dvdcss_debug( dvdcss, psz_debug );
+        print_debug( dvdcss, psz_debug );
     }
     nocache:
 
@@ -606,7 +606,7 @@
         {
             if( ((uint8_t*)p_buffer)[0x14] & 0x30 )
             {
-                _dvdcss_error( dvdcss, "no key but found encrypted block" );
+                print_error( dvdcss, "no key but found encrypted block" );
                 /* Only return the initial range of unscrambled blocks? */
                 /* or fail completely? return 0; */
                 break;
--- a/src/libdvdcss.h
+++ b/src/libdvdcss.h
@@ -2,7 +2,7 @@
  * libdvdcss.h: private DVD reading library data
  *****************************************************************************
  * Copyright (C) 1998-2001 VideoLAN
- * $Id: libdvdcss.h,v 1.9 2002/12/19 15:36:04 sam Exp $
+ * $Id: libdvdcss.h,v 1.10 2003/09/09 10:03:48 sam Exp $
  *
  * Authors: St�phane Borel <[email protected]>
  *          Samuel Hocevar <[email protected]>
@@ -77,6 +77,14 @@
 /*****************************************************************************
  * Functions used across the library
  *****************************************************************************/
-void _dvdcss_error ( dvdcss_t, char * );
-void _dvdcss_debug ( dvdcss_t, char * );
+#define print_error(dvdcss,msg) _print_error(dvdcss,msg)
+#define print_debug(dvdcss,msg,args...) \
+    if( dvdcss->b_debug ) \
+    { \
+        fprintf( stderr, "libdvdcss debug: " ); \
+        fprintf( stderr, msg, ##args ); \
+        fprintf( stderr, "\n" ); \
+    }
+
+void _print_error ( dvdcss_t, char * );