mirror of
				https://github.com/pbatard/rufus.git
				synced 2024-08-14 23:57:05 +00:00 
			
		
		
		
	[iso] update libcdio to latest
* Also update .gitignore for VS2017 files
This commit is contained in:
		
							parent
							
								
									8a491e9877
								
							
						
					
					
						commit
						97b4e623cd
					
				
					 23 changed files with 372 additions and 280 deletions
				
			
		
							
								
								
									
										5
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							|  | @ -1,9 +1,13 @@ | |||
| *.a | ||||
| *.aps | ||||
| *.db | ||||
| *.db-shm | ||||
| *.db-wal | ||||
| *.dep | ||||
| *.exe | ||||
| *.htm | ||||
| *.idb | ||||
| *.ipch | ||||
| *.la | ||||
| *.lib | ||||
| *.lo | ||||
|  | @ -12,6 +16,7 @@ | |||
| *.ncb | ||||
| *.o | ||||
| *.obj | ||||
| *.opendb | ||||
| *.opt | ||||
| *.pc | ||||
| *.pdb | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| /*
 | ||||
|     Copyright (C) 2000, 2004 Herbert Valerio Riedel <hvr@gnu.org> | ||||
|     Copyright (C) 2005, 2008, 2012 Rocky Bernstein <rocky@gnu.org> | ||||
|     Copyright (C) 2005, 2008, 2012, 2015 Rocky Bernstein <rocky@gnu.org> | ||||
| 
 | ||||
|     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 | ||||
|  | @ -16,7 +16,7 @@ | |||
|     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | ||||
| */ | ||||
|  | ||||
| /** \file bytesex.h 
 | ||||
| /** \file bytesex.h
 | ||||
|  *  \brief  Generic Byte-swapping routines. | ||||
|  * | ||||
|  *   Note: this header will is slated to get removed and libcdio will | ||||
|  | @ -168,7 +168,7 @@ to_723(uint16_t i) | |||
| } | ||||
| 
 | ||||
| /** Convert from ISO 9660 7.2.3 format to uint16_t */ | ||||
| static CDIO_INLINE uint16_t  | ||||
| static CDIO_INLINE uint16_t | ||||
| from_723 (uint32_t p) | ||||
| { | ||||
|   if (uint32_swap_le_be (p) != p) | ||||
|  | @ -197,19 +197,31 @@ to_733(uint32_t i) | |||
| } | ||||
| 
 | ||||
| /** Convert from ISO 9660 7.3.3 format to uint32_t */ | ||||
| static CDIO_INLINE uint32_t  | ||||
| static CDIO_INLINE uint32_t | ||||
| from_733 (uint64_t p) | ||||
| { | ||||
|   if (uint64_swap_le_be (p) != p) | ||||
|     cdio_warn ("from_733: broken byte order"); | ||||
|      | ||||
| 
 | ||||
|   return (UINT32_C(0xFFFFFFFF) & p); | ||||
| } | ||||
| 
 | ||||
| static CDIO_INLINE uint32_t | ||||
| from_733_with_err (uint64_t p, bool *err) | ||||
| { | ||||
|   if (uint64_swap_le_be (p) != p) { | ||||
|     cdio_warn ("from_733: broken byte order"); | ||||
|     *err = true; | ||||
|   } else { | ||||
|     *err = false; | ||||
|   } | ||||
|   return (UINT32_C(0xFFFFFFFF) & p); | ||||
| } | ||||
| 
 | ||||
| #endif /* CDIO_BYTESEX_H_ */ | ||||
| 
 | ||||
|  | ||||
| /* 
 | ||||
| /*
 | ||||
|  * Local variables: | ||||
|  *  c-file-style: "gnu" | ||||
|  *  tab-width: 8 | ||||
|  |  | |||
|  | @ -17,7 +17,7 @@ | |||
|     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | ||||
| */ | ||||
| 
 | ||||
| /** \file types.h 
 | ||||
| /** \file types.h
 | ||||
|  *  \brief  Common type definitions used pervasively in libcdio. | ||||
|  */ | ||||
| 
 | ||||
|  | @ -31,9 +31,9 @@ extern "C" { | |||
| 
 | ||||
| /* If <sys/types.h> is not available on your platform please
 | ||||
|    contact the libcdio mailing list so that we can fix it! */ | ||||
| #if !defined(ARE_THERE_STILL_ENVS_WITHOUT_SYS_TYPES)  | ||||
| #if !defined(ARE_THERE_STILL_ENVS_WITHOUT_SYS_TYPES) | ||||
| #include <sys/types.h> | ||||
| #endif  | ||||
| #endif | ||||
| 
 | ||||
| #if defined(AMIGA) | ||||
| typedef u_int8_t uint8_t; | ||||
|  | @ -68,11 +68,11 @@ typedef uint8_t ubyte; | |||
| 
 | ||||
|   /* if it's still not defined, take a good guess... should work for
 | ||||
|      most 32bit and 64bit archs */ | ||||
|    | ||||
| 
 | ||||
| #ifndef UINT16_C | ||||
| # define UINT16_C(c) c ## U | ||||
| #endif | ||||
|    | ||||
| 
 | ||||
| #ifndef UINT32_C | ||||
| # if defined (SIZEOF_INT) && SIZEOF_INT == 4 | ||||
| #  define UINT32_C(c) c ## U | ||||
|  | @ -82,7 +82,7 @@ typedef uint8_t ubyte; | |||
| #  define UINT32_C(c) c ## U | ||||
| # endif | ||||
| #endif | ||||
|    | ||||
| 
 | ||||
| #ifndef UINT64_C | ||||
| # if defined (SIZEOF_LONG) && SIZEOF_LONG == 8 | ||||
| #  define UINT64_C(c) c ## UL | ||||
|  | @ -92,17 +92,17 @@ typedef uint8_t ubyte; | |||
| #  define UINT64_C(c) c ## ULL | ||||
| # endif | ||||
| #endif | ||||
|    | ||||
| 
 | ||||
| #ifndef INT64_C | ||||
| # if defined (SIZEOF_LONG) && SIZEOF_LONG == 8 | ||||
| #  define INT64_C(c) c ## L | ||||
| # elif defined (SIZEOF_INT) && SIZEOF_INT == 8 | ||||
| #  define INT64_C(c) c  | ||||
| #  define INT64_C(c) c | ||||
| # else | ||||
| #  define INT64_C(c) c ## LL | ||||
| # endif | ||||
| #endif | ||||
|    | ||||
| 
 | ||||
| #ifndef __cplusplus | ||||
| 
 | ||||
| /* All the stdbool.h seem to define those */ | ||||
|  | @ -123,10 +123,10 @@ typedef uint8_t ubyte; | |||
| 
 | ||||
| #endif /* __bool_true_false_are_defined */ | ||||
| #endif /*C++*/ | ||||
|    | ||||
| 
 | ||||
|   /* some GCC optimizations -- gcc 2.5+ */ | ||||
|    | ||||
| #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4) || __clang__ | ||||
| 
 | ||||
| #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4) | ||||
| #define GNUC_PRINTF( format_idx, arg_idx )              \ | ||||
|   __attribute__((format (printf, format_idx, arg_idx))) | ||||
| #define GNUC_SCANF( format_idx, arg_idx )               \ | ||||
|  | @ -150,13 +150,14 @@ typedef uint8_t ubyte; | |||
| #define GNUC_UNUSED | ||||
| #define GNUC_PACKED | ||||
| #endif  /* !__GNUC__ */ | ||||
|    | ||||
| 
 | ||||
| #if defined(__MINGW32__) | ||||
| #  define PRAGMA_BEGIN_PACKED _Pragma("pack(push)") \ | ||||
|                               _Pragma("pack(1)") | ||||
| #  define PRAGMA_END_PACKED   _Pragma("pack(pop)") | ||||
| #elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901) | ||||
|      /* should work with most EDG-frontend based compilers */ | ||||
| #elif __GNUC__ > 4  || (__STDC_VERSION__ >= 199901) | ||||
|      /* should work with GCC > 4.0 clang and most EDG-frontend based C
 | ||||
|         and C++ compilers */ | ||||
| #    define PRAGMA_BEGIN_PACKED _Pragma("pack(1)") | ||||
| #    define PRAGMA_END_PACKED   _Pragma("pack()") | ||||
| #elif defined(_MSC_VER) | ||||
|  | @ -167,18 +168,18 @@ typedef uint8_t ubyte; | |||
| #  define PRAGMA_BEGIN_PACKED | ||||
| #  define PRAGMA_END_PACKED | ||||
| #endif | ||||
|    | ||||
| 
 | ||||
|   /*
 | ||||
|    * user directed static branch prediction gcc 2.96+ | ||||
|    */ | ||||
| #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 95) | ||||
| # define GNUC_LIKELY(x)   __builtin_expect((x),true) | ||||
| # define GNUC_UNLIKELY(x) __builtin_expect((x),false) | ||||
| #else  | ||||
| # define GNUC_LIKELY(x)   (x)  | ||||
| #else | ||||
| # define GNUC_LIKELY(x)   (x) | ||||
| # define GNUC_UNLIKELY(x) (x) | ||||
| #endif | ||||
|    | ||||
| 
 | ||||
| #ifndef NULL | ||||
| # define NULL ((void*) 0) | ||||
| #endif | ||||
|  | @ -199,9 +200,9 @@ typedef uint8_t ubyte; | |||
| 
 | ||||
|   /** our own offsetof()-like macro */ | ||||
| #define __cd_offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) | ||||
|    | ||||
| 
 | ||||
|   /*!
 | ||||
|     \brief MSF (minute/second/frame) structure  | ||||
|     \brief MSF (minute/second/frame) structure | ||||
| 
 | ||||
|     One CD-ROMs addressing scheme especially used in audio formats | ||||
|     (Red Book) is an address by minute, sector and frame which | ||||
|  | @ -211,7 +212,7 @@ typedef uint8_t ubyte; | |||
|     cdio_to_bcd8() or cdio_from_bcd8() to convert an integer into or | ||||
|     out of this format. The format specifier %x (not %d) can be used | ||||
|     if you need to format or print values in this structure. | ||||
|      | ||||
| 
 | ||||
|     @see lba_t | ||||
|   */ | ||||
|   PRAGMA_BEGIN_PACKED | ||||
|  | @ -219,13 +220,13 @@ typedef uint8_t ubyte; | |||
|     uint8_t m, s, f; /* BCD encoded! */ | ||||
|   } GNUC_PACKED; | ||||
|   PRAGMA_END_PACKED | ||||
|    | ||||
| 
 | ||||
|   typedef struct msf_s msf_t; | ||||
| 
 | ||||
| #define msf_t_SIZEOF 3 | ||||
| 
 | ||||
|   /*!
 | ||||
|     \brief UTF-8 char definition  | ||||
|     \brief UTF-8 char definition | ||||
| 
 | ||||
|     Type to denote UTF-8 strings. | ||||
|   */ | ||||
|  | @ -237,7 +238,7 @@ typedef uint8_t ubyte; | |||
|     yep   = 1, | ||||
|     dunno = 2 | ||||
|   } bool_3way_t; | ||||
|    | ||||
| 
 | ||||
|   /* type used for bit-fields in structs (1 <= bits <= 8) */ | ||||
| #if defined(__GNUC__) | ||||
|   /* this is strict ISO C99 which allows only 'unsigned int', 'signed
 | ||||
|  | @ -249,23 +250,23 @@ typedef uint8_t ubyte; | |||
|      be pragma'ed on non-gcc compilers */ | ||||
|   typedef uint8_t bitfield_t; | ||||
| #endif | ||||
|    | ||||
|   /*! The type of a Logical Block Address. We allow for an lba to be 
 | ||||
| 
 | ||||
|   /*! The type of a Logical Block Address. We allow for an lba to be
 | ||||
|     negative to be consistent with an lba, although I'm not sure this | ||||
|     this is possible. | ||||
|        | ||||
| 
 | ||||
|    */ | ||||
|   typedef int32_t lba_t; | ||||
|    | ||||
| 
 | ||||
|   /*! The type of a Logical Sector Number. Note that an lba can be negative
 | ||||
|     and the MMC3 specs allow for a conversion of a negative lba. | ||||
| 
 | ||||
|     @see msf_t | ||||
|   */ | ||||
|   typedef int32_t lsn_t; | ||||
|    | ||||
| 
 | ||||
|   /* Address in either MSF or logical format */ | ||||
|   union cdio_cdrom_addr          | ||||
|   union cdio_cdrom_addr | ||||
|   { | ||||
|     msf_t       msf; | ||||
|     lba_t       lba; | ||||
|  | @ -273,46 +274,46 @@ typedef uint8_t ubyte; | |||
| 
 | ||||
|   /*! The type of a track number 0..99. */ | ||||
|   typedef uint8_t track_t; | ||||
|    | ||||
| 
 | ||||
|   /*! The type of a session number 0..99. */ | ||||
|   typedef uint8_t session_t; | ||||
|    | ||||
|   /*! 
 | ||||
| 
 | ||||
|   /*!
 | ||||
|     Constant for invalid session number | ||||
|   */ | ||||
| #define CDIO_INVALID_SESSION   0xFF | ||||
|    | ||||
|   /*! 
 | ||||
| 
 | ||||
|   /*!
 | ||||
|     Constant for invalid LBA. It is 151 less than the most negative | ||||
|     LBA -45150. This provide slack for the 150-frame offset in | ||||
|     LBA to LSN 150 conversions | ||||
|   */ | ||||
| #define CDIO_INVALID_LBA    -45301 | ||||
|    | ||||
|   /*! 
 | ||||
| 
 | ||||
|   /*!
 | ||||
|     Constant for invalid LSN | ||||
|   */ | ||||
| #define CDIO_INVALID_LSN    CDIO_INVALID_LBA | ||||
| 
 | ||||
|   /*! 
 | ||||
|   /*!
 | ||||
|     Number of ASCII bytes in a media catalog number (MCN). | ||||
|     We include an extra 0 byte so these can be used as C strings. | ||||
|   */ | ||||
| #define CDIO_MCN_SIZE       13 | ||||
| 
 | ||||
|   /*! 
 | ||||
|   /*!
 | ||||
|     Type to hold ASCII bytes in a media catalog number (MCN). | ||||
|     We include an extra 0 byte so these can be used as C strings. | ||||
|   */ | ||||
|   typedef char cdio_mcn_t[CDIO_MCN_SIZE+1]; | ||||
|    | ||||
| 
 | ||||
|   /*! 
 | ||||
| 
 | ||||
|   /*!
 | ||||
|     Number of ASCII bytes in International Standard Recording Codes (ISRC) | ||||
|   */ | ||||
| #define CDIO_ISRC_SIZE       12 | ||||
| 
 | ||||
|   /*! 
 | ||||
|   /*!
 | ||||
|     Type to hold ASCII bytes in a ISRC. | ||||
|     We include an extra 0 byte so these can be used as C strings. | ||||
|   */ | ||||
|  | @ -320,7 +321,7 @@ typedef uint8_t ubyte; | |||
| 
 | ||||
|   typedef int cdio_fs_anal_t; | ||||
| 
 | ||||
|   /*! 
 | ||||
|   /*!
 | ||||
|     track flags | ||||
|     Q Sub-channel Control Field (4.2.3.3) | ||||
|   */ | ||||
|  | @ -341,7 +342,7 @@ typedef uint8_t ubyte; | |||
| #endif /* CDIO_TYPES_H_ */ | ||||
| 
 | ||||
|  | ||||
| /* 
 | ||||
| /*
 | ||||
|  * Local variables: | ||||
|  *  c-file-style: "gnu" | ||||
|  *  tab-width: 8 | ||||
|  |  | |||
|  | @ -1,20 +1,19 @@ | |||
| /* $Id: version.h.in,v 1.6 2005/01/29 20:54:20 rocky Exp $ */ | ||||
| /** \file version.h 
 | ||||
| /** \file version.h
 | ||||
|  * | ||||
|  *  \brief A file containing the libcdio package version | ||||
|  *  number (90) and OS build name.  | ||||
|  *  number (94) and OS build name. | ||||
|  */ | ||||
| 
 | ||||
| /*! CDIO_VERSION is a C-Preprocessor macro of a string that shows what
 | ||||
|     version is used.  cdio_version_string has the same value, but it is a | ||||
|     constant variable that can be accessed at run time. */ | ||||
| #define CDIO_VERSION "0.93 i686-pc-mingw32" | ||||
| #define CDIO_VERSION "0.94 i686-w64-mingw32" | ||||
| extern const char *cdio_version_string; /**< = CDIO_VERSION */ | ||||
| 
 | ||||
| /*! LIBCDIO_VERSION_NUM is a C-Preprocessor macro that can be used for
 | ||||
|     testing in the C preprocessor. libcdio_version_num has the same | ||||
|     value, but it is a constant variable that can be accessed at run | ||||
|     time.  */ | ||||
| #define LIBCDIO_VERSION_NUM 93 | ||||
| #define LIBCDIO_VERSION_NUM 94 | ||||
| 
 | ||||
| extern const unsigned int libcdio_version_num; /**< = LIBCDIO_VERSION_NUM */ | ||||
|  |  | |||
|  | @ -134,7 +134,9 @@ | |||
| #define HAVE_STRING_H 1 | ||||
| 
 | ||||
| /* Define to 1 if you have the `strndup' function. */ | ||||
| /* #undef HAVE_STRNDUP */ | ||||
| #if defined(__MINGW32__) | ||||
| #define HAVE_STRNDUP 1 | ||||
| #endif | ||||
| 
 | ||||
| /* Define this if you have struct timespec */ | ||||
| /* #undef HAVE_STRUCT_TIMESPEC */ | ||||
|  |  | |||
|  | @ -36,7 +36,6 @@ | |||
|     <ClInclude Include="..\..\cdio\ds.h" /> | ||||
|     <ClInclude Include="..\..\cdio\logging.h" /> | ||||
|     <ClInclude Include="..\..\cdio\memory.h" /> | ||||
|     <ClInclude Include="..\..\cdio\portable.h" /> | ||||
|     <ClInclude Include="..\..\cdio\sector.h" /> | ||||
|     <ClInclude Include="..\..\cdio\types.h" /> | ||||
|     <ClInclude Include="..\..\cdio\util.h" /> | ||||
|  | @ -45,6 +44,7 @@ | |||
|     <ClInclude Include="..\cdio_assert.h" /> | ||||
|     <ClInclude Include="..\cdio_private.h" /> | ||||
|     <ClInclude Include="..\filemode.h" /> | ||||
|     <ClInclude Include="..\portable.h" /> | ||||
|     <ClInclude Include="..\_cdio_stdio.h" /> | ||||
|     <ClInclude Include="..\_cdio_stream.h" /> | ||||
|   </ItemGroup> | ||||
|  |  | |||
|  | @ -88,7 +88,7 @@ | |||
|     <ClInclude Include="..\..\cdio\memory.h"> | ||||
|       <Filter>Header Files</Filter> | ||||
|     </ClInclude> | ||||
|     <ClInclude Include="..\..\cdio\portable.h"> | ||||
|     <ClInclude Include="..\portable.h"> | ||||
|       <Filter>Header Files</Filter> | ||||
|     </ClInclude> | ||||
|   </ItemGroup> | ||||
|  |  | |||
|  | @ -36,7 +36,6 @@ | |||
|     <ClInclude Include="..\..\cdio\ds.h" /> | ||||
|     <ClInclude Include="..\..\cdio\logging.h" /> | ||||
|     <ClInclude Include="..\..\cdio\memory.h" /> | ||||
|     <ClInclude Include="..\..\cdio\portable.h" /> | ||||
|     <ClInclude Include="..\..\cdio\sector.h" /> | ||||
|     <ClInclude Include="..\..\cdio\types.h" /> | ||||
|     <ClInclude Include="..\..\cdio\util.h" /> | ||||
|  | @ -45,6 +44,7 @@ | |||
|     <ClInclude Include="..\cdio_assert.h" /> | ||||
|     <ClInclude Include="..\cdio_private.h" /> | ||||
|     <ClInclude Include="..\filemode.h" /> | ||||
|     <ClInclude Include="..\portable.h" /> | ||||
|     <ClInclude Include="..\_cdio_stdio.h" /> | ||||
|     <ClInclude Include="..\_cdio_stream.h" /> | ||||
|   </ItemGroup> | ||||
|  |  | |||
|  | @ -88,7 +88,7 @@ | |||
|     <ClInclude Include="..\..\cdio\memory.h"> | ||||
|       <Filter>Header Files</Filter> | ||||
|     </ClInclude> | ||||
|     <ClInclude Include="..\..\cdio\portable.h"> | ||||
|     <ClInclude Include="..\portable.h"> | ||||
|       <Filter>Header Files</Filter> | ||||
|     </ClInclude> | ||||
|   </ItemGroup> | ||||
|  |  | |||
|  | @ -31,7 +31,7 @@ | |||
| #include <string.h> | ||||
| #endif | ||||
| #ifdef HAVE_UNISTD_H | ||||
| #include <unistd.h>  | ||||
| #include <unistd.h> | ||||
| #endif | ||||
| #ifdef HAVE_SYS_STAT_H | ||||
| #include <sys/stat.h> | ||||
|  | @ -88,8 +88,6 @@ static inline int _stati64_utf8(const char *path, struct _stati64 *buffer) { | |||
| #define _STRINGIFY(a) #a | ||||
| #define STRINGIFY(a) _STRINGIFY(a) | ||||
| 
 | ||||
| // static const char _rcsid[] = "$Id: _cdio_stdio.c,v 1.6 2008/04/22 15:29:11 karl Exp $";
 | ||||
| 
 | ||||
| #define CDIO_STDIO_BUFSIZE (128*1024) | ||||
| 
 | ||||
| typedef struct { | ||||
|  | @ -100,7 +98,7 @@ typedef struct { | |||
| } _UserData; | ||||
| 
 | ||||
| static int | ||||
| _stdio_open (void *user_data)  | ||||
| _stdio_open (void *user_data) | ||||
| { | ||||
|   _UserData *const ud = user_data; | ||||
| 
 | ||||
|  | @ -120,7 +118,7 @@ _stdio_close(void *user_data) | |||
| 
 | ||||
|   if (fclose (ud->fd)) | ||||
|     cdio_error ("fclose (): %s", strerror (errno)); | ||||
|   | ||||
| 
 | ||||
|   ud->fd = NULL; | ||||
| 
 | ||||
|   free (ud->fd_buf); | ||||
|  | @ -138,14 +136,14 @@ _stdio_free(void *user_data) | |||
|     free(ud->pathname); | ||||
| 
 | ||||
|   if (ud->fd) /* should be NULL anyway... */ | ||||
|     _stdio_close(user_data);  | ||||
|     _stdio_close(user_data); | ||||
| 
 | ||||
|   free(ud); | ||||
| } | ||||
| 
 | ||||
| /*! 
 | ||||
| /*!
 | ||||
|   Like fseek/fseeko(3) and in fact may be the same. | ||||
|    | ||||
| 
 | ||||
|   This  function sets the file position indicator for the stream | ||||
|   pointed to by stream.  The new position, measured in bytes, is obtained | ||||
|   by  adding offset bytes to the position specified by whence.  If whence | ||||
|  | @ -154,12 +152,12 @@ _stdio_free(void *user_data) | |||
|   respectively.  A successful call to the fseek function clears the end- | ||||
|   of-file indicator for the stream and undoes any effects of the | ||||
|   ungetc(3) function on the same stream. | ||||
|    | ||||
| 
 | ||||
|   @return upon successful completion, DRIVER_OP_SUCCESS, else, | ||||
|   DRIVER_OP_ERROR is returned and the global variable errno is set to | ||||
|   indicate the error. | ||||
| */ | ||||
| static int  | ||||
| static int | ||||
| _stdio_seek(void *p_user_data, off_t i_offset, int whence) | ||||
| { | ||||
|   _UserData *const ud = p_user_data; | ||||
|  | @ -190,18 +188,18 @@ _stdio_stat(void *p_user_data) | |||
| 
 | ||||
| /*!
 | ||||
|   Like fread(3) and in fact is about the same. | ||||
|    | ||||
| 
 | ||||
|   DESCRIPTION: | ||||
|   The function fread reads nmemb elements of data, each size bytes long, | ||||
|   from the stream pointed to by stream, storing them at the location | ||||
|   given by ptr. | ||||
|    | ||||
| 
 | ||||
|   RETURN VALUE: | ||||
|   return the number of items successfully read or written (i.e., | ||||
|   not the number of characters).  If an error occurs, or the | ||||
|   end-of-file is reached, the return value is a short item count | ||||
|   (or zero). | ||||
|    | ||||
| 
 | ||||
|   We do not distinguish between end-of-file and error, and callers | ||||
|   must use feof(3) and ferror(3) to determine which occurred. | ||||
|   */ | ||||
|  | @ -258,9 +256,9 @@ cdio_stdio_new(const char pathname[]) | |||
|   if (pathdup == NULL) | ||||
|     return NULL; | ||||
| 
 | ||||
|   if (CDIO_STAT_CALL (pathdup, &statbuf) == -1)  | ||||
|   if (CDIO_STAT_CALL (pathdup, &statbuf) == -1) | ||||
|     { | ||||
|       cdio_warn ("could not retrieve file info for `%s': %s",  | ||||
|       cdio_warn ("could not retrieve file info for `%s': %s", | ||||
|                  pathdup, strerror (errno)); | ||||
|       cdio_free(pathdup); | ||||
|       return NULL; | ||||
|  | @ -283,9 +281,8 @@ cdio_stdio_new(const char pathname[]) | |||
|   return new_obj; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| /* 
 | ||||
|  | ||||
| /*
 | ||||
|  * Local variables: | ||||
|  *  c-file-style: "gnu" | ||||
|  *  tab-width: 8 | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| /*
 | ||||
|   Copyright (C) 2005, 2006, 2008, 2011 Rocky Bernstein <rocky@gnu.org> | ||||
|   Copyright (C) 2005, 2006, 2008, 2011, 2016 Rocky Bernstein <rocky@gnu.org> | ||||
|   Copyright (C) 2000, 2004, 2005 Herbert Valerio Riedel <hvr@gnu.org> | ||||
| 
 | ||||
|   This program is free software: you can redistribute it and/or modify | ||||
|  | @ -41,9 +41,7 @@ | |||
| #include <cdio/util.h> | ||||
| #include "_cdio_stream.h" | ||||
| 
 | ||||
| // static const char _rcsid[] = "$Id: _cdio_stream.c,v 1.9 2008/04/22 15:29:11 karl Exp $";
 | ||||
| 
 | ||||
| /* 
 | ||||
| /*
 | ||||
|  * DataSource implementations | ||||
|  */ | ||||
| 
 | ||||
|  | @ -81,10 +79,10 @@ cdio_stream_destroy(CdioDataSource_t *p_obj) | |||
| 
 | ||||
| /**
 | ||||
|   Like 3 fgetpos. | ||||
|    | ||||
| 
 | ||||
|   This function gets the current file position indicator for the stream | ||||
|   pointed to by stream.   | ||||
|    | ||||
|   pointed to by stream. | ||||
| 
 | ||||
|   @return unpon successful completion, return value is positive, else, | ||||
|   the global variable errno is set to indicate the error. | ||||
| */ | ||||
|  | @ -108,8 +106,8 @@ cdio_stream_new(void *user_data, const cdio_stream_io_functions *funcs) | |||
|   return new_obj; | ||||
| } | ||||
| 
 | ||||
| /* 
 | ||||
|    Open if not already open.  | ||||
| /*
 | ||||
|    Open if not already open. | ||||
|    Return false if we hit an error. Errno should be set for that error. | ||||
| */ | ||||
| static bool | ||||
|  | @ -132,18 +130,18 @@ _cdio_stream_open_if_necessary(CdioDataSource_t *p_obj) | |||
| 
 | ||||
| /**
 | ||||
|   Like fread(3) and in fact may be the same. | ||||
|    | ||||
| 
 | ||||
|   DESCRIPTION: | ||||
|   The function fread reads nmemb elements of data, each size bytes long, | ||||
|   from the stream pointed to by stream, storing them at the location | ||||
|   given by ptr. | ||||
|    | ||||
| 
 | ||||
|   RETURN VALUE: | ||||
|   return the number of items successfully read or written (i.e., | ||||
|   not the number of characters).  If an error occurs, or the | ||||
|   end-of-file is reached, the return value is a short item count | ||||
|   (or zero). | ||||
|    | ||||
| 
 | ||||
|   We do not distinguish between end-of-file and error, and callers | ||||
|   must use feof(3) and ferror(3) to determine which occurred. | ||||
| */ | ||||
|  | @ -163,7 +161,7 @@ cdio_stream_read(CdioDataSource_t* p_obj, void *ptr, size_t size, size_t nmemb) | |||
| 
 | ||||
| /**
 | ||||
|   Like 3 fseek and in fact may be the same. | ||||
|    | ||||
| 
 | ||||
|   This  function sets the file position indicator for the stream | ||||
|   pointed to by stream.  The new position, measured in bytes, is obtained | ||||
|   by  adding offset bytes to the position specified by whence.  If whence | ||||
|  | @ -172,7 +170,7 @@ cdio_stream_read(CdioDataSource_t* p_obj, void *ptr, size_t size, size_t nmemb) | |||
|   respectively.  A successful call to the fseek function clears the end- | ||||
|   of-file indicator for the stream and undoes any effects of the | ||||
|   ungetc(3) function on the same stream. | ||||
|    | ||||
| 
 | ||||
|   @return unpon successful completion, return value is positive, else, | ||||
|   the global variable errno is set to indicate the error. | ||||
| */ | ||||
|  | @ -181,7 +179,7 @@ cdio_stream_seek(CdioDataSource_t* p_obj, off_t offset, int whence) | |||
| { | ||||
|   if (!p_obj) return DRIVER_OP_UNINIT; | ||||
| 
 | ||||
|   if (!_cdio_stream_open_if_necessary(p_obj))  | ||||
|   if (!_cdio_stream_open_if_necessary(p_obj)) | ||||
|     /* errno is set by _cdio_stream_open_if necessary. */ | ||||
|     return DRIVER_OP_ERROR; | ||||
| 
 | ||||
|  | @ -200,7 +198,7 @@ cdio_stream_seek(CdioDataSource_t* p_obj, off_t offset, int whence) | |||
| } | ||||
| 
 | ||||
| /**
 | ||||
|   Return whatever size of stream reports, I guess unit size is bytes.  | ||||
|   Return whatever size of stream reports, I guess unit size is bytes. | ||||
|   On error return -1; | ||||
|  */ | ||||
| off_t | ||||
|  | @ -212,9 +210,8 @@ cdio_stream_stat(CdioDataSource_t *p_obj) | |||
|   return p_obj->op.stat(p_obj->user_data); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| /* 
 | ||||
|  | ||||
| /*
 | ||||
|  * Local variables: | ||||
|  *  c-file-style: "gnu" | ||||
|  *  tab-width: 8 | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| /*
 | ||||
|   Copyright (C) 2003, 2004, 2005, 2008, 2009, 2011, 2012 | ||||
|   Copyright (C) 2003-2005, 2008-2009, 2011-2012, 2016 | ||||
|   Rocky Bernstein <rocky@gnu.org> | ||||
| 
 | ||||
|   This program is free software: you can redistribute it and/or modify | ||||
|  | @ -26,15 +26,37 @@ | |||
| # include "config.h" | ||||
| #endif | ||||
| 
 | ||||
| #ifdef HAVE_STDLIB_H | ||||
| #include <stdlib.h> | ||||
| #endif | ||||
| #ifdef HAVE_STRING_H | ||||
| #include <string.h> | ||||
| #endif | ||||
| 
 | ||||
| #include <cdio/cdio.h> | ||||
| #include <cdio/audio.h> | ||||
| #include <cdio/cdtext.h> | ||||
| //#include "mmc/mmc_private.h"
 | ||||
| #include "mmc/mmc_private.h" | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif /* __cplusplus */ | ||||
| 
 | ||||
| #ifndef HAVE_STRNDUP | ||||
| static inline char *strndup(const char *s, size_t n) | ||||
| { | ||||
|     char *result; | ||||
|     size_t len = strlen (s); | ||||
|     if (n < len) | ||||
|         len = n; | ||||
|     result = (char *) malloc (len + 1); | ||||
|     if (!result) | ||||
|         return 0; | ||||
|     result[len] = '\0'; | ||||
|     return (char *) strncpy (result, s, len); | ||||
| } | ||||
| #endif /*HAVE_STRNDUP*/ | ||||
| 
 | ||||
|   /*!
 | ||||
|     Get directory name from file name. | ||||
| 
 | ||||
|  | @ -65,101 +87,101 @@ extern "C" { | |||
| 
 | ||||
| 
 | ||||
|   typedef struct { | ||||
|      | ||||
| 
 | ||||
|     /*!
 | ||||
|       Get volume of an audio CD. | ||||
|        | ||||
| 
 | ||||
|       @param p_env the CD object to be acted upon. | ||||
|        | ||||
| 
 | ||||
|     */ | ||||
|     driver_return_code_t (*audio_get_volume)  | ||||
|     driver_return_code_t (*audio_get_volume) | ||||
|          (void *p_env,  /*out*/ cdio_audio_volume_t *p_volume); | ||||
| 
 | ||||
|     /*!
 | ||||
|       Pause playing CD through analog output | ||||
|        | ||||
| 
 | ||||
|       @param p_env the CD object to be acted upon. | ||||
|     */ | ||||
|     driver_return_code_t (*audio_pause) (void *p_env); | ||||
|      | ||||
| 
 | ||||
|     /*!
 | ||||
|       Playing CD through analog output | ||||
|        | ||||
| 
 | ||||
|       @param p_env the CD object to be acted upon. | ||||
|     */ | ||||
|     driver_return_code_t (*audio_play_msf) ( void *p_env,  | ||||
|     driver_return_code_t (*audio_play_msf) ( void *p_env, | ||||
|                                              msf_t *p_start_msf, | ||||
|                                              msf_t *p_end_msf ); | ||||
| 
 | ||||
|     /*!
 | ||||
|       Playing CD through analog output | ||||
|        | ||||
| 
 | ||||
|       @param p_env the CD object to be acted upon. | ||||
|     */ | ||||
|     driver_return_code_t (*audio_play_track_index)  | ||||
|     driver_return_code_t (*audio_play_track_index) | ||||
|          ( void *p_env, cdio_track_index_t *p_track_index ); | ||||
| 
 | ||||
|     /*!
 | ||||
|       Get subchannel information. | ||||
|        | ||||
| 
 | ||||
|       @param p_env the CD object to be acted upon. | ||||
|     */ | ||||
|     driver_return_code_t (*audio_read_subchannel)  | ||||
|     driver_return_code_t (*audio_read_subchannel) | ||||
|          ( void *p_env, cdio_subchannel_t *subchannel ); | ||||
| 
 | ||||
|     /*!
 | ||||
|       Resume playing an audio CD. | ||||
|        | ||||
| 
 | ||||
|       @param p_env the CD object to be acted upon. | ||||
|        | ||||
| 
 | ||||
|     */ | ||||
|     driver_return_code_t (*audio_resume) ( void *p_env ); | ||||
|      | ||||
| 
 | ||||
|     /*!
 | ||||
|       Set volume of an audio CD. | ||||
|        | ||||
| 
 | ||||
|       @param p_env the CD object to be acted upon. | ||||
|        | ||||
| 
 | ||||
|     */ | ||||
|     driver_return_code_t (*audio_set_volume)  | ||||
|     driver_return_code_t (*audio_set_volume) | ||||
|          ( void *p_env,  cdio_audio_volume_t *p_volume ); | ||||
| 
 | ||||
|     /*!
 | ||||
|       Stop playing an audio CD. | ||||
|        | ||||
| 
 | ||||
|       @param p_env the CD object to be acted upon. | ||||
|        | ||||
| 
 | ||||
|     */ | ||||
|     driver_return_code_t (*audio_stop) ( void *p_env ); | ||||
|      | ||||
| 
 | ||||
|     /*!
 | ||||
|       Eject media in CD drive. If successful, as a side effect we  | ||||
|       also free p_env.  | ||||
|       Eject media in CD drive. If successful, as a side effect we | ||||
|       also free p_env. | ||||
| 
 | ||||
|       @param p_env the CD object to be acted upon. | ||||
|       If the CD is ejected *p_env is freed and p_env set to NULL. | ||||
|     */ | ||||
|     driver_return_code_t (*eject_media) ( void *p_env ); | ||||
|      | ||||
| 
 | ||||
|     /*!
 | ||||
|       Release and free resources associated with cd.  | ||||
|       Release and free resources associated with cd. | ||||
|     */ | ||||
|     void (*free) (void *p_env); | ||||
|      | ||||
| 
 | ||||
|     /*!
 | ||||
|       Return the value associated with the key "arg". | ||||
|     */ | ||||
|     const char * (*get_arg) (void *p_env, const char key[]); | ||||
|      | ||||
| 
 | ||||
|     /*!
 | ||||
|       Get the block size for subsequest read requests, via a SCSI MMC  | ||||
|       Get the block size for subsequest read requests, via a SCSI MMC | ||||
|       MODE_SENSE 6 command. | ||||
|     */ | ||||
|     int (*get_blocksize) ( void *p_env ); | ||||
|      | ||||
|     /*! 
 | ||||
| 
 | ||||
|     /*!
 | ||||
|       Get cdtext information for a CdIo object. | ||||
|      | ||||
| 
 | ||||
|       @param obj the CD object that may contain CD-TEXT information. | ||||
|       @return the CD-TEXT object or NULL if obj is NULL | ||||
|       or CD-TEXT information does not exist. | ||||
|  | @ -176,16 +198,16 @@ extern "C" { | |||
|       free when done and not NULL. | ||||
|     */ | ||||
|     uint8_t * (*get_cdtext_raw) ( void *p_env ); | ||||
|      | ||||
| 
 | ||||
|     /*!
 | ||||
|       Return an array of device names. if CdIo is NULL (we haven't | ||||
|       initialized a specific device driver), then find a suitable device  | ||||
|       initialized a specific device driver), then find a suitable device | ||||
|       driver. | ||||
|        | ||||
| 
 | ||||
|       NULL is returned if we couldn't return a list of devices. | ||||
|     */ | ||||
|     char ** (*get_devices) ( void ); | ||||
|      | ||||
| 
 | ||||
|     /*!
 | ||||
|       Get the default CD device. | ||||
| 
 | ||||
|  | @ -197,21 +219,21 @@ extern "C" { | |||
|       NULL even though there may be a hardware CD-ROM. | ||||
|     */ | ||||
|     char * (*get_default_device) ( void ); | ||||
|      | ||||
| 
 | ||||
|     /*!
 | ||||
|       Return the size of the CD in logical block address (LBA) units. | ||||
|       @return the lsn. On error 0 or CDIO_INVALD_LSN. | ||||
|     */ | ||||
|     lsn_t (*get_disc_last_lsn) ( void *p_env ); | ||||
| 
 | ||||
|     /*! 
 | ||||
|     /*!
 | ||||
|       Get disc mode associated with cd_obj. | ||||
|     */ | ||||
|     discmode_t (*get_discmode) ( void *p_env ); | ||||
| 
 | ||||
|     /*!
 | ||||
|       Return the what kind of device we've got. | ||||
|        | ||||
| 
 | ||||
|       See cd_types.h for a list of bitmasks for the drive type; | ||||
|     */ | ||||
|     void (*get_drive_cap) (const void *p_env, | ||||
|  | @ -219,28 +241,28 @@ extern "C" { | |||
|                            cdio_drive_write_cap_t *p_write_cap, | ||||
|                            cdio_drive_misc_cap_t  *p_misc_cap); | ||||
|     /*!
 | ||||
|       Return the number of of the first track.  | ||||
|       Return the number of of the first track. | ||||
|       CDIO_INVALID_TRACK is returned on error. | ||||
|     */ | ||||
|     track_t (*get_first_track_num) ( void *p_env ); | ||||
|      | ||||
|     /*! 
 | ||||
| 
 | ||||
|     /*!
 | ||||
|       Get the CD-ROM hardware info via a SCSI MMC INQUIRY command. | ||||
|       False is returned if we had an error getting the information. | ||||
|     */ | ||||
|     bool (*get_hwinfo)  | ||||
|     bool (*get_hwinfo) | ||||
|          ( const CdIo_t *p_cdio, /* out*/ cdio_hwinfo_t *p_hw_info ); | ||||
| 
 | ||||
|     /*! Get the LSN of the first track of the last session of
 | ||||
|       on the CD. | ||||
|             | ||||
| 
 | ||||
|        @param p_cdio the CD object to be acted upon. | ||||
|        @param i_last_session pointer to the session number to be returned. | ||||
|     */ | ||||
|     driver_return_code_t (*get_last_session) | ||||
|          ( void *p_env, /*out*/ lsn_t *i_last_session ); | ||||
| 
 | ||||
|     /*! 
 | ||||
|     /*!
 | ||||
|       Find out if media has changed since the last call. | ||||
|       @param p_env the CD object to be acted upon. | ||||
|       @return 1 if media has changed since last call, 0 if not. Error | ||||
|  | @ -248,31 +270,31 @@ extern "C" { | |||
|     */ | ||||
|     int (*get_media_changed) ( const void *p_env ); | ||||
| 
 | ||||
|     /*!  
 | ||||
|     /*!
 | ||||
|       Return the media catalog number MCN from the CD or NULL if | ||||
|       there is none or we don't have the ability to get it. | ||||
|     */ | ||||
|     char * (*get_mcn) ( const void *p_env ); | ||||
| 
 | ||||
|     /*! 
 | ||||
|     /*!
 | ||||
|       Return the number of tracks in the current medium. | ||||
|       CDIO_INVALID_TRACK is returned on error. | ||||
|     */ | ||||
|     track_t (*get_num_tracks) ( void *p_env ); | ||||
|      | ||||
| 
 | ||||
|     /*! Return number of channels in track: 2 or 4; -2 if not
 | ||||
|       implemented or -1 for error. | ||||
|       Not meaningful if track is not an audio track. | ||||
|     */ | ||||
|     int (*get_track_channels) ( const void *p_env, track_t i_track ); | ||||
|    | ||||
| 
 | ||||
|     /*! Return 0 if track is copy protected, 1 if not, or -1 for error
 | ||||
|       or -2 if not implimented (yet). Is this meaningful if not an | ||||
|       audio track? | ||||
|     */ | ||||
|     track_flag_t (*get_track_copy_permit) ( void *p_env, track_t i_track ); | ||||
|    | ||||
|     /*!  
 | ||||
| 
 | ||||
|     /*!
 | ||||
|       Return the starting LBA for track number | ||||
|       i_track in p_env.  Tracks numbers start at 1. | ||||
|       The "leadout" track is specified either by | ||||
|  | @ -281,7 +303,7 @@ extern "C" { | |||
|     */ | ||||
|     lba_t (*get_track_lba) ( void *p_env, track_t i_track ); | ||||
| 
 | ||||
|     /*!  
 | ||||
|     /*!
 | ||||
|       Return the starting LBA for the pregap for track number | ||||
|       i_track in p_env.  Tracks numbers start at 1. | ||||
|       CDIO_INVALID_LBA is returned on error. | ||||
|  | @ -296,23 +318,23 @@ extern "C" { | |||
|       string when done with it. | ||||
|     */ | ||||
|     char * (*get_track_isrc) ( const void *p_env, track_t i_track ); | ||||
|      | ||||
|     /*!  
 | ||||
|       Get format of track.  | ||||
| 
 | ||||
|     /*!
 | ||||
|       Get format of track. | ||||
|     */ | ||||
|     track_format_t (*get_track_format) ( void *p_env, track_t i_track ); | ||||
|      | ||||
| 
 | ||||
|     /*!
 | ||||
|       Return true if we have XA data (green, mode2 form1) or | ||||
|       XA data (green, mode2 form2). That is track begins: | ||||
|       sync - header - subheader | ||||
|       12     4      -  8 | ||||
|        | ||||
| 
 | ||||
|       FIXME: there's gotta be a better design for this and get_track_format? | ||||
|     */ | ||||
|     bool (*get_track_green) ( void *p_env, track_t i_track ); | ||||
|      | ||||
|     /*!  
 | ||||
| 
 | ||||
|     /*!
 | ||||
|       Return the starting MSF (minutes/secs/frames) for track number | ||||
|       i_track in p_env.  Tracks numbers start at 1. | ||||
|       The "leadout" track is specified either by | ||||
|  | @ -320,122 +342,122 @@ extern "C" { | |||
|       False is returned on error. | ||||
|     */ | ||||
|     bool (*get_track_msf) ( void *p_env, track_t i_track, msf_t *p_msf ); | ||||
|      | ||||
| 
 | ||||
|     /*! Return 1 if track has pre-emphasis, 0 if not, or -1 for error
 | ||||
|       or -2 if not implimented (yet). Is this meaningful if not an | ||||
|       audio track? | ||||
|     */ | ||||
|     track_flag_t (*get_track_preemphasis)  | ||||
|     track_flag_t (*get_track_preemphasis) | ||||
|          ( const void  *p_env, track_t i_track ); | ||||
|    | ||||
| 
 | ||||
|     /*!
 | ||||
|       lseek - reposition read/write file offset | ||||
|       Returns (off_t) -1 on error.  | ||||
|       Returns (off_t) -1 on error. | ||||
|       Similar to libc's lseek() | ||||
|     */ | ||||
|     off_t (*lseek) ( void *p_env, off_t offset, int whence ); | ||||
|      | ||||
| 
 | ||||
|     /*!
 | ||||
|       Reads into buf the next size bytes. | ||||
|       Returns -1 on error.  | ||||
|       Returns -1 on error. | ||||
|       Similar to libc's read() | ||||
|     */ | ||||
|     ssize_t (*read) ( void *p_env, void *p_buf, size_t i_size ); | ||||
|      | ||||
| 
 | ||||
|     /*!
 | ||||
|       Reads a single mode2 sector from cd device into buf starting | ||||
|       from lsn. Returns 0 if no error.  | ||||
|       from lsn. Returns 0 if no error. | ||||
|     */ | ||||
|     int (*read_audio_sectors) ( void *p_env, void *p_buf, lsn_t i_lsn, | ||||
|                                 unsigned int i_blocks ); | ||||
|      | ||||
| 
 | ||||
|     /*!
 | ||||
|       Read a data sector | ||||
|        | ||||
| 
 | ||||
|       @param p_env environment to read from | ||||
| 
 | ||||
|       @param p_buf place to read data into.  The caller should make sure | ||||
|       this location can store at least CDIO_CD_FRAMESIZE,  | ||||
|       this location can store at least CDIO_CD_FRAMESIZE, | ||||
|       M2RAW_SECTOR_SIZE, or M2F2_SECTOR_SIZE depending | ||||
|       on the kind of sector getting read. If you don't  | ||||
|       on the kind of sector getting read. If you don't | ||||
|       know whether you have a Mode 1/2, Form 1/ Form 2/Formless | ||||
|       sector best to reserve space for the maximum,  | ||||
|       sector best to reserve space for the maximum, | ||||
|       M2RAW_SECTOR_SIZE. | ||||
| 
 | ||||
|       @param i_lsn sector to read | ||||
|       @param i_blocksize size of block. Should be either CDIO_CD_FRAMESIZE,  | ||||
|       @param i_blocksize size of block. Should be either CDIO_CD_FRAMESIZE, | ||||
|       M2RAW_SECTOR_SIZE, or M2F2_SECTOR_SIZE. See comment above under p_buf. | ||||
|     */ | ||||
|     driver_return_code_t (*read_data_sectors)  | ||||
|     driver_return_code_t (*read_data_sectors) | ||||
|          ( void *p_env, void *p_buf, lsn_t i_lsn, uint16_t i_blocksize, | ||||
|            uint32_t i_blocks ); | ||||
|      | ||||
| 
 | ||||
|     /*!
 | ||||
|       Reads a single mode2 sector from cd device into buf starting | ||||
|       from lsn. Returns 0 if no error.  | ||||
|       from lsn. Returns 0 if no error. | ||||
|     */ | ||||
|     int (*read_mode2_sector)  | ||||
|     int (*read_mode2_sector) | ||||
|          ( void *p_env, void *p_buf, lsn_t i_lsn, bool b_mode2_form2 ); | ||||
|      | ||||
| 
 | ||||
|     /*!
 | ||||
|       Reads i_blocks of mode2 sectors from cd device into data starting | ||||
|       from lsn. | ||||
|       Returns 0 if no error.  | ||||
|       Returns 0 if no error. | ||||
|     */ | ||||
|     int (*read_mode2_sectors)  | ||||
|          ( void *p_env, void *p_buf, lsn_t i_lsn, bool b_mode2_form2,  | ||||
|     int (*read_mode2_sectors) | ||||
|          ( void *p_env, void *p_buf, lsn_t i_lsn, bool b_mode2_form2, | ||||
|            unsigned int i_blocks ); | ||||
|      | ||||
| 
 | ||||
|     /*!
 | ||||
|       Reads a single mode1 sector from cd device into buf starting | ||||
|       from lsn. Returns 0 if no error.  | ||||
|       from lsn. Returns 0 if no error. | ||||
|     */ | ||||
|     int (*read_mode1_sector)  | ||||
|     int (*read_mode1_sector) | ||||
|          ( void *p_env, void *p_buf, lsn_t i_lsn, bool mode1_form2 ); | ||||
|      | ||||
| 
 | ||||
|     /*!
 | ||||
|       Reads i_blocks of mode1 sectors from cd device into data starting | ||||
|       from lsn. | ||||
|       Returns 0 if no error.  | ||||
|       Returns 0 if no error. | ||||
|     */ | ||||
|     int (*read_mode1_sectors)  | ||||
|          ( void *p_env, void *p_buf, lsn_t i_lsn, bool mode1_form2,  | ||||
|     int (*read_mode1_sectors) | ||||
|          ( void *p_env, void *p_buf, lsn_t i_lsn, bool mode1_form2, | ||||
|            unsigned int i_blocks ); | ||||
|      | ||||
| 
 | ||||
|     bool (*read_toc) ( void *p_env ) ; | ||||
| 
 | ||||
|     /*!
 | ||||
|       Run a SCSI MMC command.  | ||||
|        | ||||
|       Run a SCSI MMC command. | ||||
| 
 | ||||
|       cdio              CD structure set by cdio_open(). | ||||
|       i_timeout_ms      time in milliseconds we will wait for the command | ||||
|                         to complete.  | ||||
|                         to complete. | ||||
|       cdb_len           number of bytes in cdb (6, 10, or 12). | ||||
|       cdb               CDB bytes. All values that are needed should be set on  | ||||
|                         input.  | ||||
|       b_return_data     TRUE if the command expects data to be returned in  | ||||
|       cdb               CDB bytes. All values that are needed should be set on | ||||
|                         input. | ||||
|       b_return_data     TRUE if the command expects data to be returned in | ||||
|                         the buffer | ||||
|       len               Size of buffer | ||||
|       buf               Buffer for data, both sending and receiving | ||||
|        | ||||
| 
 | ||||
|       Returns 0 if command completed successfully. | ||||
|     */ | ||||
| //    mmc_run_cmd_fn_t run_mmc_cmd;
 | ||||
|     mmc_run_cmd_fn_t run_mmc_cmd; | ||||
| 
 | ||||
|     /*!
 | ||||
|       Set the arg "key" with "value" in the source device. | ||||
|     */ | ||||
|     int (*set_arg) ( void *p_env, const char key[], const char value[] ); | ||||
|      | ||||
| 
 | ||||
|     /*!
 | ||||
|       Set the blocksize for subsequent reads.  | ||||
|       Set the blocksize for subsequent reads. | ||||
|     */ | ||||
|     driver_return_code_t (*set_blocksize) ( void *p_env,  | ||||
|     driver_return_code_t (*set_blocksize) ( void *p_env, | ||||
|                                             uint16_t i_blocksize ); | ||||
| 
 | ||||
|     /*!
 | ||||
|       Set the drive speed.  | ||||
|        | ||||
|       Set the drive speed. | ||||
| 
 | ||||
|       @return 0 if everything went okay, -1 if we had an error. is -2 | ||||
|       returned if this is not implemented for the current driver. | ||||
|     */ | ||||
|  | @ -452,51 +474,51 @@ extern "C" { | |||
|     void *env;             /**< environment. Passed to routine above. */ | ||||
|   }; | ||||
| 
 | ||||
|   /* This is used in drivers that must keep their own internal 
 | ||||
|   /* This is used in drivers that must keep their own internal
 | ||||
|      position pointer for doing seeks. Stream-based drivers (like bincue, | ||||
|      nrg, toc, network) would use this.  | ||||
|      nrg, toc, network) would use this. | ||||
|    */ | ||||
|   typedef struct  | ||||
|   typedef struct | ||||
|   { | ||||
|     off_t   buff_offset;      /* buffer offset in disk-image seeks. */ | ||||
|     track_t index;            /* Current track index in tocent. */ | ||||
|     lba_t   lba;              /* Current LBA */ | ||||
|   } internal_position_t; | ||||
|    | ||||
| 
 | ||||
|   CdIo_t * cdio_new (generic_img_private_t *p_env, cdio_funcs_t *p_funcs); | ||||
| 
 | ||||
|   /* The below structure describes a specific CD Input driver  */ | ||||
|   typedef struct  | ||||
|   typedef struct | ||||
|   { | ||||
|     driver_id_t  id; | ||||
|     unsigned int flags; | ||||
|     const char  *name; | ||||
|     const char  *describe; | ||||
|     bool (*have_driver) (void);  | ||||
|     CdIo_t *(*driver_open) (const char *psz_source_name);  | ||||
|     CdIo_t *(*driver_open_am) (const char *psz_source_name,  | ||||
|                              const char *psz_access_mode);  | ||||
|     char *(*get_default_device) (void);  | ||||
|     bool (*have_driver) (void); | ||||
|     CdIo_t *(*driver_open) (const char *psz_source_name); | ||||
|     CdIo_t *(*driver_open_am) (const char *psz_source_name, | ||||
|                              const char *psz_access_mode); | ||||
|     char *(*get_default_device) (void); | ||||
|     bool (*is_device) (const char *psz_source_name); | ||||
|     char **(*get_devices) (void); | ||||
|     driver_return_code_t (*close_tray) (const char *psz_device); | ||||
|   } CdIo_driver_t; | ||||
| 
 | ||||
|   /* The below array gives of the drivers that are currently available for 
 | ||||
|   /* The below array gives of the drivers that are currently available for
 | ||||
|      on a particular host. */ | ||||
|   extern CdIo_driver_t CdIo_driver[]; | ||||
| 
 | ||||
|   /* The last valid entry of Cdio_driver. -1 means uninitialzed. -2 
 | ||||
|   /* The last valid entry of Cdio_driver. -1 means uninitialzed. -2
 | ||||
|      means some sort of error. | ||||
|    */ | ||||
|   extern int CdIo_last_driver;  | ||||
|   extern int CdIo_last_driver; | ||||
| 
 | ||||
|   /* The below array gives all drivers that can possibly appear.
 | ||||
|      on a particular host. */ | ||||
|   extern CdIo_driver_t CdIo_all_drivers[]; | ||||
| 
 | ||||
|   /*! 
 | ||||
|     Add/allocate a drive to the end of drives.  | ||||
|   /*!
 | ||||
|     Add/allocate a drive to the end of drives. | ||||
|     Use cdio_free_device_list() to free this device_list. | ||||
|   */ | ||||
|   void cdio_add_device_list(char **device_list[], const char *psz_drive, | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| /*
 | ||||
|   Copyright (C) 2005, 2008, 2011 Rocky Bernstein <rocky@gnu.org> | ||||
|   Copyright (C) 2005, 2008, 2011, 2016 Rocky Bernstein <rocky@gnu.org> | ||||
|   Copyright (C) 2000 Herbert Valerio Riedel <hvr@gnu.org> | ||||
| 
 | ||||
|   This program is free software: you can redistribute it and/or modify | ||||
|  | @ -33,8 +33,6 @@ | |||
| #include <cdio/types.h> | ||||
| #include "cdio_assert.h" | ||||
| 
 | ||||
| // static const char _rcsid[] = "$Id: ds.c,v 1.4 2008/04/22 15:29:12 karl Exp $";
 | ||||
| 
 | ||||
| struct _CdioList | ||||
| { | ||||
|   unsigned length; | ||||
|  | @ -87,7 +85,7 @@ _cdio_list_prepend (CdioList_t *p_list, void *p_data) | |||
|   cdio_assert (p_list != NULL); | ||||
| 
 | ||||
|   p_new_node = calloc (1, sizeof (CdioListNode_t)); | ||||
|    | ||||
| 
 | ||||
|   p_new_node->list = p_list; | ||||
|   p_new_node->next = p_list->begin; | ||||
|   p_new_node->data = p_data; | ||||
|  | @ -111,7 +109,7 @@ _cdio_list_append (CdioList_t *p_list, void *p_data) | |||
|   else | ||||
|     { | ||||
|       CdioListNode_t *p_new_node = calloc (1, sizeof (CdioListNode_t)); | ||||
|        | ||||
| 
 | ||||
|       p_new_node->list = p_list; | ||||
|       p_new_node->next = NULL; | ||||
|       p_new_node->data = p_data; | ||||
|  | @ -123,15 +121,15 @@ _cdio_list_append (CdioList_t *p_list, void *p_data) | |||
|     } | ||||
| } | ||||
| 
 | ||||
| void  | ||||
| _cdio_list_foreach (CdioList_t *p_list, _cdio_list_iterfunc_t func,  | ||||
| void | ||||
| _cdio_list_foreach (CdioList_t *p_list, _cdio_list_iterfunc_t func, | ||||
|                     void *p_user_data) | ||||
| { | ||||
|   CdioListNode_t *node; | ||||
| 
 | ||||
|   cdio_assert (p_list != NULL); | ||||
|   cdio_assert (func != 0); | ||||
|    | ||||
| 
 | ||||
|   for (node = _cdio_list_begin (p_list); | ||||
|        node != NULL; | ||||
|        node = _cdio_list_node_next (node)) | ||||
|  | @ -139,14 +137,14 @@ _cdio_list_foreach (CdioList_t *p_list, _cdio_list_iterfunc_t func, | |||
| } | ||||
| 
 | ||||
| CdioListNode_t * | ||||
| _cdio_list_find (CdioList_t *p_list, _cdio_list_iterfunc_t cmp_func,  | ||||
| _cdio_list_find (CdioList_t *p_list, _cdio_list_iterfunc_t cmp_func, | ||||
|                  void *p_user_data) | ||||
| { | ||||
|   CdioListNode_t *p_node; | ||||
| 
 | ||||
|   cdio_assert (p_list != NULL); | ||||
|   cdio_assert (cmp_func != 0); | ||||
|    | ||||
| 
 | ||||
|   for (p_node = _cdio_list_begin (p_list); | ||||
|        p_node != NULL; | ||||
|        p_node = _cdio_list_node_next (p_node)) | ||||
|  | @ -181,14 +179,14 @@ _cdio_list_node_next (CdioListNode_t *p_node) | |||
|   return NULL; | ||||
| } | ||||
| 
 | ||||
| void  | ||||
| void | ||||
| _cdio_list_node_free (CdioListNode_t *p_node, int free_data) | ||||
| { | ||||
|   CdioList_t *p_list; | ||||
|   CdioListNode_t *prev_node; | ||||
| 
 | ||||
|   cdio_assert (p_node != NULL); | ||||
|    | ||||
| 
 | ||||
|   p_list = p_node->list; | ||||
| 
 | ||||
|   cdio_assert (_cdio_list_length (p_list) > 0); | ||||
|  | @ -243,13 +241,11 @@ _cdio_list_node_data (CdioListNode_t *p_node) | |||
| 
 | ||||
| /* eof */ | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| /* 
 | ||||
|  | ||||
| /*
 | ||||
|  * Local variables: | ||||
|  *  c-file-style: "gnu" | ||||
|  *  tab-width: 8 | ||||
|  *  indent-tabs-mode: nil | ||||
|  * End: | ||||
|  */ | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| /*
 | ||||
|   Copyright (C) 2003, 2004, 2008, 2011, 2012 | ||||
|   Copyright (C) 2003, 2004, 2008, 2011, 2012, 2015 | ||||
|   Rocky Bernstein <rocky@gnu.org> | ||||
|   Copyright (C) 2000 Herbert Valerio Riedel <hvr@gnu.org> | ||||
| 
 | ||||
|  | @ -33,8 +33,9 @@ | |||
| #endif | ||||
| 
 | ||||
| #include <cdio/logging.h> | ||||
| #include <cdio/portable.h> | ||||
| #include "cdio_assert.h" | ||||
| #include "portable.h" | ||||
| #include <assert.h> | ||||
| 
 | ||||
| cdio_log_level_t cdio_loglevel_default = CDIO_LOG_WARN; | ||||
| 
 | ||||
|  | @ -96,10 +97,24 @@ static void | |||
| cdio_logv(cdio_log_level_t level, const char format[], va_list args) | ||||
| { | ||||
|   char buf[1024] = { 0, }; | ||||
|   static int in_recursion = 0; | ||||
| 
 | ||||
|   if (in_recursion) | ||||
|     cdio_assert_not_reached (); | ||||
|   /* _handler() is user defined and we want to make sure _handler()
 | ||||
|   doesn't call us, cdio_logv. in_recursion is used for that, however | ||||
|   it has a problem in multi-threaded programs. I'm not sure how to | ||||
|   handle multi-threading and recursion checking both. For now, we'll | ||||
|   leave in the recursion checking, at the expense of handling | ||||
|   multi-threaded log calls. To ameliorate this, we'll check the log | ||||
|   level and handle calls where there is no output, before the | ||||
|   recursion check. | ||||
|   */ | ||||
|  static int in_recursion = 0; | ||||
| 
 | ||||
|   if (level < cdio_loglevel_default) return; | ||||
| 
 | ||||
|   if (in_recursion) { | ||||
|     /* Can't use cdio_assert_not_reached() as that may call cdio_logv */ | ||||
|     assert(0); | ||||
|   } | ||||
| 
 | ||||
|   in_recursion = 1; | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| /*
 | ||||
|   Copyright (C) 2014 Robert Kausch <robert.kausch@freac.org> | ||||
|   Copyright (C) 2014-2015 Robert Kausch <robert.kausch@freac.org> | ||||
| 
 | ||||
|   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 | ||||
|  | @ -36,7 +36,6 @@ | |||
| void | ||||
| cdio_free (void *p_memory) | ||||
| { | ||||
|   if (p_memory == NULL) return; | ||||
| 
 | ||||
|   free(p_memory); | ||||
|   if (p_memory != NULL) | ||||
|     free(p_memory); | ||||
| } | ||||
|  |  | |||
|  | @ -1,5 +1,6 @@ | |||
| /*
 | ||||
|   Copyright (C) 2004, 2005, 2011, 2012, 2014 Rocky Bernstein <rocky@gnu.org> | ||||
|   Copyright (C) 2004, 2005, 2011, 2012, 2014, 2016 | ||||
|   Rocky Bernstein <rocky@gnu.org> | ||||
|   Copyright (C) 2000 Herbert Valerio Riedel <hvr@gnu.org> | ||||
| 
 | ||||
|   This program is free software: you can redistribute it and/or modify | ||||
|  | @ -24,8 +25,8 @@ | |||
| #include <cdio/sector.h> | ||||
| #include <cdio/util.h> | ||||
| #include <cdio/logging.h> | ||||
| #include <cdio/portable.h> | ||||
| #include "cdio_assert.h" | ||||
| #include "portable.h" | ||||
| 
 | ||||
| #ifdef HAVE_STDIO_H | ||||
| #include <stdio.h> | ||||
|  | @ -36,8 +37,6 @@ | |||
| 
 | ||||
| #include <ctype.h> | ||||
| 
 | ||||
| // static const char _rcsid[] = "$Id: sector.c,v 1.5 2005/02/06 04:20:25 rocky Exp $";
 | ||||
| 
 | ||||
| /*! String of bytes used to identify the beginning of a Mode 1 or
 | ||||
|   Mode 2 sector. */ | ||||
| const uint8_t CDIO_SECTOR_SYNC_HEADER[CDIO_CD_SYNC_SIZE] = | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| /*
 | ||||
|   Copyright (C) 2003-2009, 2013-2014 Rocky Bernstein <rocky@gnu.org> | ||||
|   Copyright (C) 2003-2009, 2013-2014, 2016 Rocky Bernstein <rocky@gnu.org> | ||||
|   Copyright (C) 2000 Herbert Valerio Riedel <hvr@gnu.org> | ||||
| 
 | ||||
|   This program is free software: you can redistribute it and/or modify | ||||
|  | @ -31,7 +31,6 @@ const char ISO_STANDARD_ID[] = {'C', 'D', '0', '0', '1'}; | |||
| #include <cdio/bytesex.h> | ||||
| #include <cdio/iso9660.h> | ||||
| #include <cdio/util.h> | ||||
| #include <cdio/portable.h> | ||||
| 
 | ||||
| #include <time.h> | ||||
| #include <ctype.h> | ||||
|  | @ -92,7 +91,7 @@ timegm(struct tm *tm) | |||
| #endif | ||||
| 
 | ||||
| #ifndef HAVE_GMTIME_R | ||||
| struct tm * | ||||
| static struct tm * | ||||
| gmtime_r(const time_t *timer, struct tm *result) | ||||
| { | ||||
|     struct tm *tmp = gmtime(timer); | ||||
|  | @ -106,7 +105,7 @@ gmtime_r(const time_t *timer, struct tm *result) | |||
| #endif | ||||
| 
 | ||||
| #ifndef HAVE_LOCALTIME_R | ||||
| struct tm * | ||||
| static struct tm * | ||||
| localtime_r(const time_t *timer, struct tm *result) | ||||
| { | ||||
|     struct tm *tmp = localtime(timer); | ||||
|  | @ -119,8 +118,6 @@ localtime_r(const time_t *timer, struct tm *result) | |||
| } | ||||
| #endif | ||||
| 
 | ||||
| // static const char _rcsid[] = "$Id: iso9660.c,v 1.41 2008/06/25 08:01:54 rocky Exp $";
 | ||||
| 
 | ||||
| /* Variables to hold debugger-helping enumerations */ | ||||
| enum iso_enum1_s     iso_enums1; | ||||
| enum iso_flag_enum_s iso_flag_enums; | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| /*
 | ||||
|   Copyright (C) 2003-2008, 2011-2014 Rocky Bernstein <rocky@gnu.org> | ||||
|   Copyright (C) 2003-2008, 2011-2015 Rocky Bernstein <rocky@gnu.org> | ||||
|   Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org> | ||||
| 
 | ||||
|   This program is free software: you can redistribute it and/or modify | ||||
|  | @ -16,7 +16,7 @@ | |||
|   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | ||||
| */ | ||||
| /* iso9660 filesystem-based routines */ | ||||
| 
 | ||||
|  | ||||
| #if defined(HAVE_CONFIG_H) && !defined(__CDIO_CONFIG_H__) | ||||
| #include "config.h" | ||||
| #define __CDIO_CONFIG_H__ 1 | ||||
|  | @ -47,7 +47,6 @@ | |||
| #include <cdio/iso9660.h> | ||||
| #include <cdio/util.h> | ||||
| #include <cdio/utf8.h> | ||||
| #include <cdio/portable.h> | ||||
| 
 | ||||
| /* Private headers */ | ||||
| #include "cdio_assert.h" | ||||
|  | @ -264,6 +263,7 @@ static bool | |||
| check_pvd (const iso9660_pvd_t *p_pvd, cdio_log_level_t log_level) | ||||
| { | ||||
|   if ( ISO_VD_PRIMARY != from_711(p_pvd->type) ) { | ||||
| // Commented out for Rufus usage
 | ||||
| //    cdio_log (log_level, "unexpected PVD type %d", p_pvd->type);
 | ||||
|     return false; | ||||
|   } | ||||
|  | @ -443,6 +443,7 @@ iso9660_ifs_read_pvd_loglevel (const iso9660_t *p_iso, | |||
| 			       cdio_log_level_t log_level) | ||||
| { | ||||
|   if (0 == iso9660_iso_seek_read (p_iso, p_pvd, ISO_PVD_SECTOR, 1)) { | ||||
| // Commented out for Rufus usage
 | ||||
| //    cdio_log ( log_level, "error reading PVD sector (%d)", ISO_PVD_SECTOR );
 | ||||
|     return false; | ||||
|   } | ||||
|  | @ -715,6 +716,7 @@ _iso9660_dir_to_statbuf (iso9660_dir_t *p_iso9660_dir, bool_3way_t b_xa, | |||
|   iso711_t i_fname; | ||||
|   unsigned int stat_len; | ||||
|   iso9660_stat_t *p_stat; | ||||
|   bool err; | ||||
| 
 | ||||
|   if (!dir_len) return NULL; | ||||
| 
 | ||||
|  | @ -731,8 +733,16 @@ _iso9660_dir_to_statbuf (iso9660_dir_t *p_iso9660_dir, bool_3way_t b_xa, | |||
|     } | ||||
|   p_stat->type    = (p_iso9660_dir->file_flags & ISO_DIRECTORY) | ||||
|     ? _STAT_DIR : _STAT_FILE; | ||||
|   p_stat->lsn     = from_733 (p_iso9660_dir->extent); | ||||
|   p_stat->size    = from_733 (p_iso9660_dir->size); | ||||
|   p_stat->lsn     = from_733_with_err (p_iso9660_dir->extent, &err); | ||||
|   if (err) { | ||||
|     free(p_stat); | ||||
|     return NULL; | ||||
|   } | ||||
|   p_stat->size    = from_733_with_err (p_iso9660_dir->size, &err); | ||||
|   if (err) { | ||||
|     free(p_stat); | ||||
|     return NULL; | ||||
|   } | ||||
|   p_stat->secsize = _cdio_len2blocks (p_stat->size, ISO_BLOCKSIZE); | ||||
|   p_stat->rr.b3_rock = dunno; /*FIXME should do based on mask */ | ||||
|   p_stat->b_xa    = false; | ||||
|  | @ -1087,6 +1097,12 @@ _fs_iso_stat_traverse (iso9660_t *p_iso, const iso9660_stat_t *_root, | |||
|       p_stat = _iso9660_dir_to_statbuf (p_iso9660_dir, p_iso->b_xa, | ||||
| 					p_iso->u_joliet_level); | ||||
| 
 | ||||
|       if (!p_stat) { | ||||
| 	cdio_warn("Bad directory information for %s", splitpath[0]); | ||||
| 	free(_dirbuf); | ||||
| 	return NULL; | ||||
|       } | ||||
| 
 | ||||
|       cmp = strcmp(splitpath[0], p_stat->filename); | ||||
| 
 | ||||
|       if ( 0 != cmp && 0 == p_iso->u_joliet_level | ||||
|  | @ -1334,24 +1350,38 @@ iso9660_ifs_readdir (iso9660_t *p_iso, const char psz_path[]) | |||
|     unsigned offset = 0; | ||||
|     uint8_t *_dirbuf = NULL; | ||||
|     CdioList_t *retval = _cdio_list_new (); | ||||
|     const size_t dirbuf_len = p_stat->secsize * ISO_BLOCKSIZE; | ||||
| 
 | ||||
|     _dirbuf = calloc(1, p_stat->secsize * ISO_BLOCKSIZE); | ||||
| 
 | ||||
|     if (!dirbuf_len) | ||||
|       { | ||||
|         cdio_warn("Invalid directory buffer sector size %u", p_stat->secsize); | ||||
| 	free(p_stat->rr.psz_symlink); | ||||
| 	free(p_stat); | ||||
| 	_cdio_list_free (retval, true); | ||||
|         return NULL; | ||||
|       } | ||||
| 
 | ||||
|     _dirbuf = calloc(1, dirbuf_len); | ||||
|     if (!_dirbuf) | ||||
|       { | ||||
|         cdio_warn("Couldn't calloc(1, %d)", p_stat->secsize * ISO_BLOCKSIZE); | ||||
|       _cdio_list_free (retval, true); | ||||
|         cdio_warn("Couldn't calloc(1, %lu)", (unsigned long)dirbuf_len); | ||||
| 	free(p_stat->rr.psz_symlink); | ||||
| 	free(p_stat); | ||||
| 	_cdio_list_free (retval, true); | ||||
|         return NULL; | ||||
|       } | ||||
| 
 | ||||
|     ret = iso9660_iso_seek_read (p_iso, _dirbuf, p_stat->lsn, p_stat->secsize); | ||||
|     if (ret != ISO_BLOCKSIZE*p_stat->secsize) | ||||
| 	  { | ||||
| 	    _cdio_list_free (retval, true); | ||||
| 	    free (_dirbuf); | ||||
| 	    return NULL; | ||||
| 	  } | ||||
|     if (ret != dirbuf_len) 	  { | ||||
|       _cdio_list_free (retval, true); | ||||
|       free(p_stat->rr.psz_symlink); | ||||
|       free(p_stat); | ||||
|       free (_dirbuf); | ||||
|       return NULL; | ||||
|     } | ||||
| 
 | ||||
|     while (offset < (p_stat->secsize * ISO_BLOCKSIZE)) | ||||
|     while (offset < (dirbuf_len)) | ||||
|       { | ||||
| 	iso9660_dir_t *p_iso9660_dir = (void *) &_dirbuf[offset]; | ||||
| 	iso9660_stat_t *p_iso9660_stat; | ||||
|  | @ -1372,15 +1402,14 @@ iso9660_ifs_readdir (iso9660_t *p_iso, const char psz_path[]) | |||
|       } | ||||
| 
 | ||||
|     free (_dirbuf); | ||||
|     free(p_stat->rr.psz_symlink); | ||||
|     free (p_stat); | ||||
| 
 | ||||
|     if (offset != (p_stat->secsize * ISO_BLOCKSIZE)) { | ||||
|       free (p_stat); | ||||
|     if (offset != dirbuf_len) { | ||||
|       _cdio_list_free (retval, true); | ||||
|       return NULL; | ||||
|     } | ||||
| 
 | ||||
|     free (p_stat->rr.psz_symlink); | ||||
|     free (p_stat); | ||||
|     return retval; | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -168,8 +168,27 @@ get_rock_ridge_filename(iso9660_dir_t * p_iso9660_dir, | |||
| 
 | ||||
|     while (len > 1){ /* There may be one byte for padding somewhere */ | ||||
|       rr = (iso_extension_record_t *) chr; | ||||
|       if (rr->len == 0) goto out; /* Something got screwed up here */ | ||||
|       sig = *chr+(*(chr+1) << 8); | ||||
|       switch(sig){ | ||||
|       case SIG('S','P'): | ||||
|       case SIG('C','E'): | ||||
|       case SIG('E','R'): | ||||
|       case SIG('R','R'): | ||||
|       case SIG('P','X'): | ||||
|       case SIG('P','N'): | ||||
|       case SIG('S','L'): | ||||
|       case SIG('N','M'): | ||||
|       case SIG('C','L'): | ||||
|       case SIG('P','L'): | ||||
|       case SIG('T','F'): | ||||
|       case SIG('Z','F'): | ||||
| 	break; | ||||
|       default: | ||||
| 	 /* Something got screwed up here */ | ||||
| 	goto out; | ||||
|       } | ||||
| 
 | ||||
|       if (rr->len == 0) goto out; /* Something got screwed up here */ | ||||
|       chr += rr->len; | ||||
|       len -= rr->len; | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										3
									
								
								src/libcdio/mmc/mmc_private.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								src/libcdio/mmc/mmc_private.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,3 @@ | |||
| /* placeholder for unused MMC helper routines. */ | ||||
| 
 | ||||
| typedef driver_return_code_t (*mmc_run_cmd_fn_t) ( void ); | ||||
|  | @ -167,7 +167,7 @@ udf_get_lba(const udf_file_entry_t *p_udf_fe, | |||
|     { | ||||
|       /* The allocation descriptor field is filled with short_ad's. */ | ||||
|       udf_short_ad_t *p_ad = (udf_short_ad_t *) | ||||
| 	(p_udf_fe->u.ext_attr + p_udf_fe->i_extended_attr); | ||||
| 	(p_udf_fe->u.ext_attr + uint32_from_le(p_udf_fe->i_extended_attr)); | ||||
| 
 | ||||
|       *start = uint32_from_le(p_ad->pos); | ||||
|       *end = *start + | ||||
|  | @ -179,7 +179,7 @@ udf_get_lba(const udf_file_entry_t *p_udf_fe, | |||
|     { | ||||
|       /* The allocation descriptor field is filled with long_ad's */ | ||||
|       udf_long_ad_t *p_ad = (udf_long_ad_t *) | ||||
| 	(p_udf_fe->u.ext_attr + p_udf_fe->i_extended_attr); | ||||
| 	(p_udf_fe->u.ext_attr + uint32_from_le(p_udf_fe->i_extended_attr)); | ||||
| 
 | ||||
|       *start = uint32_from_le(p_ad->loc.lba); /* ignore partition number */ | ||||
|       *end = *start + | ||||
|  | @ -190,7 +190,7 @@ udf_get_lba(const udf_file_entry_t *p_udf_fe, | |||
|   case ICBTAG_FLAG_AD_EXTENDED: | ||||
|     { | ||||
|       udf_ext_ad_t *p_ad = (udf_ext_ad_t *) | ||||
| 	(p_udf_fe->u.ext_attr + p_udf_fe->i_extended_attr); | ||||
| 	(p_udf_fe->u.ext_attr + uint32_from_le(p_udf_fe->i_extended_attr)); | ||||
| 
 | ||||
|       *start = uint32_from_le(p_ad->ext_loc.lba); /* ignore partition number */ | ||||
|       *end = *start + | ||||
|  | @ -739,7 +739,7 @@ udf_readdir(udf_dirent_t *p_udf_dirent) | |||
| 	const unsigned int i_len = p_udf_dirent->fid->i_file_id; | ||||
| 
 | ||||
| 	if (DRIVER_OP_SUCCESS != udf_read_sectors(p_udf, &p_udf_dirent->fe, p_udf->i_part_start | ||||
| 			 + p_udf_dirent->fid->icb.loc.lba, 1)) { | ||||
| 			 + uint32_from_le(p_udf_dirent->fid->icb.loc.lba), 1)) { | ||||
| 		udf_dirent_free(p_udf_dirent); | ||||
| 		return NULL; | ||||
| 	} | ||||
|  |  | |||
							
								
								
									
										10
									
								
								src/rufus.rc
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								src/rufus.rc
									
										
									
									
									
								
							|  | @ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL | |||
| IDD_DIALOG DIALOGEX 12, 12, 242, 376 | ||||
| STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | ||||
| EXSTYLE WS_EX_ACCEPTFILES | ||||
| CAPTION "Rufus 2.13.1069" | ||||
| CAPTION "Rufus 2.13.1070" | ||||
| FONT 8, "Segoe UI Symbol", 400, 0, 0x0 | ||||
| BEGIN | ||||
|     LTEXT           "Device",IDS_DEVICE_TXT,9,6,200,8 | ||||
|  | @ -334,8 +334,8 @@ END | |||
| // | ||||
| 
 | ||||
| VS_VERSION_INFO VERSIONINFO | ||||
|  FILEVERSION 2,13,1069,0 | ||||
|  PRODUCTVERSION 2,13,1069,0 | ||||
|  FILEVERSION 2,13,1070,0 | ||||
|  PRODUCTVERSION 2,13,1070,0 | ||||
|  FILEFLAGSMASK 0x3fL | ||||
| #ifdef _DEBUG | ||||
|  FILEFLAGS 0x1L | ||||
|  | @ -352,13 +352,13 @@ BEGIN | |||
|         BEGIN | ||||
|             VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)" | ||||
|             VALUE "FileDescription", "Rufus" | ||||
|             VALUE "FileVersion", "2.13.1069" | ||||
|             VALUE "FileVersion", "2.13.1070" | ||||
|             VALUE "InternalName", "Rufus" | ||||
|             VALUE "LegalCopyright", "© 2011-2017 Pete Batard (GPL v3)" | ||||
|             VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html" | ||||
|             VALUE "OriginalFilename", "rufus.exe" | ||||
|             VALUE "ProductName", "Rufus" | ||||
|             VALUE "ProductVersion", "2.13.1069" | ||||
|             VALUE "ProductVersion", "2.13.1070" | ||||
|         END | ||||
|     END | ||||
|     BLOCK "VarFileInfo" | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue