mirror of
https://github.com/pbatard/rufus.git
synced 2025-05-20 09:55:11 -04:00
[iso] add ISO support part 6 (driver + test + more cleanup)
This commit is contained in:
parent
e4d621d088
commit
6bf24cbf5d
47 changed files with 4386 additions and 705 deletions
3
configure
vendored
3
configure
vendored
|
@ -3554,6 +3554,8 @@ ac_config_files="$ac_config_files src/libcdio/iso9660/Makefile"
|
||||||
|
|
||||||
ac_config_files="$ac_config_files src/libcdio/udf/Makefile"
|
ac_config_files="$ac_config_files src/libcdio/udf/Makefile"
|
||||||
|
|
||||||
|
ac_config_files="$ac_config_files src/libcdio/driver/Makefile"
|
||||||
|
|
||||||
cat >confcache <<\_ACEOF
|
cat >confcache <<\_ACEOF
|
||||||
# This file is a shell script that caches the results of configure
|
# This file is a shell script that caches the results of configure
|
||||||
# tests run on this system so they can be shared between configure
|
# tests run on this system so they can be shared between configure
|
||||||
|
@ -4290,6 +4292,7 @@ do
|
||||||
"src/syslinux/libinstaller/Makefile") CONFIG_FILES="$CONFIG_FILES src/syslinux/libinstaller/Makefile" ;;
|
"src/syslinux/libinstaller/Makefile") CONFIG_FILES="$CONFIG_FILES src/syslinux/libinstaller/Makefile" ;;
|
||||||
"src/libcdio/iso9660/Makefile") CONFIG_FILES="$CONFIG_FILES src/libcdio/iso9660/Makefile" ;;
|
"src/libcdio/iso9660/Makefile") CONFIG_FILES="$CONFIG_FILES src/libcdio/iso9660/Makefile" ;;
|
||||||
"src/libcdio/udf/Makefile") CONFIG_FILES="$CONFIG_FILES src/libcdio/udf/Makefile" ;;
|
"src/libcdio/udf/Makefile") CONFIG_FILES="$CONFIG_FILES src/libcdio/udf/Makefile" ;;
|
||||||
|
"src/libcdio/driver/Makefile") CONFIG_FILES="$CONFIG_FILES src/libcdio/driver/Makefile" ;;
|
||||||
|
|
||||||
*) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;;
|
*) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;;
|
||||||
esac
|
esac
|
||||||
|
|
|
@ -91,4 +91,5 @@ AC_CONFIG_FILES([src/syslinux/libfat/Makefile])
|
||||||
AC_CONFIG_FILES([src/syslinux/libinstaller/Makefile])
|
AC_CONFIG_FILES([src/syslinux/libinstaller/Makefile])
|
||||||
AC_CONFIG_FILES([src/libcdio/iso9660/Makefile])
|
AC_CONFIG_FILES([src/libcdio/iso9660/Makefile])
|
||||||
AC_CONFIG_FILES([src/libcdio/udf/Makefile])
|
AC_CONFIG_FILES([src/libcdio/udf/Makefile])
|
||||||
|
AC_CONFIG_FILES([src/libcdio/driver/Makefile])
|
||||||
AC_OUTPUT
|
AC_OUTPUT
|
||||||
|
|
|
@ -16,6 +16,8 @@ Project("{11411DA5-63FE-49DC-8D5C-CA379B95FF3C}") = "libcdio-iso9660", "src\libc
|
||||||
EndProject
|
EndProject
|
||||||
Project("{11411DA5-63FE-49DC-8D5C-CA379B95FF3C}") = "libcdio-udf", "src\libcdio\udf\.msvc\udf.vcxproj", "{0CEC40A6-A195-4BE5-A88B-0AB00EB142EC}"
|
Project("{11411DA5-63FE-49DC-8D5C-CA379B95FF3C}") = "libcdio-udf", "src\libcdio\udf\.msvc\udf.vcxproj", "{0CEC40A6-A195-4BE5-A88B-0AB00EB142EC}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{11411DA5-63FE-49DC-8D5C-CA379B95FF3C}") = "libcdio-driver", "src\libcdio\driver\.msvc\driver.vcxproj", "{FA1B1093-BA86-410A-B7A0-7A54C605F812}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Win32 = Debug|Win32
|
Debug|Win32 = Debug|Win32
|
||||||
|
@ -72,6 +74,14 @@ Global
|
||||||
{0CEC40A6-A195-4BE5-A88B-0AB00EB142EC}.Release|Win32.Build.0 = Release|Win32
|
{0CEC40A6-A195-4BE5-A88B-0AB00EB142EC}.Release|Win32.Build.0 = Release|Win32
|
||||||
{0CEC40A6-A195-4BE5-A88B-0AB00EB142EC}.Release|x64.ActiveCfg = Release|x64
|
{0CEC40A6-A195-4BE5-A88B-0AB00EB142EC}.Release|x64.ActiveCfg = Release|x64
|
||||||
{0CEC40A6-A195-4BE5-A88B-0AB00EB142EC}.Release|x64.Build.0 = Release|x64
|
{0CEC40A6-A195-4BE5-A88B-0AB00EB142EC}.Release|x64.Build.0 = Release|x64
|
||||||
|
{FA1B1093-BA86-410A-B7A0-7A54C605F812}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{FA1B1093-BA86-410A-B7A0-7A54C605F812}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{FA1B1093-BA86-410A-B7A0-7A54C605F812}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{FA1B1093-BA86-410A-B7A0-7A54C605F812}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{FA1B1093-BA86-410A-B7A0-7A54C605F812}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{FA1B1093-BA86-410A-B7A0-7A54C605F812}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{FA1B1093-BA86-410A-B7A0-7A54C605F812}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{FA1B1093-BA86-410A-B7A0-7A54C605F812}.Release|x64.Build.0 = Release|x64
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|
|
@ -80,7 +80,7 @@
|
||||||
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<AdditionalIncludeDirectories>..\ms-sys\inc;..\syslinux;..\syslinux\libinstaller;..\syslinux\libfat;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..\msvc-missing;..\ms-sys\inc;..\syslinux\libinstaller;..\syslinux\libfat;..\libcdio;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<AdditionalDependencies>setupapi.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>setupapi.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
@ -99,7 +99,7 @@
|
||||||
<TargetEnvironment>X64</TargetEnvironment>
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
</Midl>
|
</Midl>
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<AdditionalIncludeDirectories>..\ms-sys\inc;..\syslinux;..\syslinux\libinstaller;..\syslinux\libfat;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..\msvc-missing;..\ms-sys\inc;..\syslinux\libinstaller;..\syslinux\libfat;..\libcdio;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
@ -122,7 +122,7 @@
|
||||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<AdditionalIncludeDirectories>..\ms-sys\inc;..\syslinux;..\syslinux\libinstaller;..\syslinux\libfat;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..\msvc-missing;..\ms-sys\inc;..\syslinux\libinstaller;..\syslinux\libfat;..\libcdio;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<AdditionalDependencies>setupapi.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>setupapi.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
@ -144,7 +144,7 @@
|
||||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<AdditionalIncludeDirectories>..\ms-sys\inc;..\syslinux;..\syslinux\libinstaller;..\syslinux\libfat;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..\msvc-missing;..\ms-sys\inc;..\syslinux\libinstaller;..\syslinux\libfat;..\libcdio;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<AdditionalDependencies>setupapi.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>setupapi.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
@ -163,6 +163,7 @@
|
||||||
<ClCompile Include="..\drive.c" />
|
<ClCompile Include="..\drive.c" />
|
||||||
<ClCompile Include="..\format.c" />
|
<ClCompile Include="..\format.c" />
|
||||||
<ClCompile Include="..\dos.c" />
|
<ClCompile Include="..\dos.c" />
|
||||||
|
<ClCompile Include="..\iso.c" />
|
||||||
<ClCompile Include="..\rufus.c" />
|
<ClCompile Include="..\rufus.c" />
|
||||||
<ClCompile Include="..\stdio.c" />
|
<ClCompile Include="..\stdio.c" />
|
||||||
<ClCompile Include="..\stdlg.c" />
|
<ClCompile Include="..\stdlg.c" />
|
||||||
|
@ -189,6 +190,15 @@
|
||||||
<ResourceCompile Include="..\rufus.rc" />
|
<ResourceCompile Include="..\rufus.rc" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\libcdio\driver\.msvc\driver.vcxproj">
|
||||||
|
<Project>{fa1b1093-ba86-410a-b7a0-7a54c605f812}</Project>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\libcdio\iso9660\.msvc\iso9660.vcxproj">
|
||||||
|
<Project>{d4e80f35-2604-40ac-b436-97b052ecb572}</Project>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\libcdio\udf\.msvc\udf.vcxproj">
|
||||||
|
<Project>{0cec40a6-a195-4be5-a88b-0ab00eb142ec}</Project>
|
||||||
|
</ProjectReference>
|
||||||
<ProjectReference Include="..\ms-sys\.msvc\ms-sys.vcxproj">
|
<ProjectReference Include="..\ms-sys\.msvc\ms-sys.vcxproj">
|
||||||
<Project>{2b1d078d-8eb4-4398-9ca4-23457265a7f6}</Project>
|
<Project>{2b1d078d-8eb4-4398-9ca4-23457265a7f6}</Project>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
|
|
|
@ -42,6 +42,9 @@
|
||||||
<ClCompile Include="..\syslinux.c">
|
<ClCompile Include="..\syslinux.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\iso.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\rufus.h">
|
<ClInclude Include="..\rufus.h">
|
||||||
|
|
|
@ -3,7 +3,7 @@ TARGETTYPE=PROGRAM
|
||||||
UMTYPE=windows
|
UMTYPE=windows
|
||||||
UMENTRY=winmain
|
UMENTRY=winmain
|
||||||
|
|
||||||
INCLUDES=$(DDK_INC_PATH);.\ms-sys\inc;.\syslinux;.\syslinux\libfat;.\syslinux\libinstaller
|
INCLUDES=$(DDK_INC_PATH);.\ms-sys\inc;.\syslinux\libfat;.\syslinux\libinstaller;.\msvc-missing;.\libcdio
|
||||||
C_DEFINES = $(C_DEFINES) /DDDKBUILD /DUNICODE /D_UNICODE /DISOLATION_AWARE_ENABLED
|
C_DEFINES = $(C_DEFINES) /DDDKBUILD /DUNICODE /D_UNICODE /DISOLATION_AWARE_ENABLED
|
||||||
|
|
||||||
!IFNDEF MSC_WARNING_LEVEL
|
!IFNDEF MSC_WARNING_LEVEL
|
||||||
|
@ -20,7 +20,10 @@ TARGETLIBS=$(SDK_LIB_PATH)\kernel32.lib \
|
||||||
$(SDK_LIB_PATH)\shell32.lib \
|
$(SDK_LIB_PATH)\shell32.lib \
|
||||||
.\ms-sys\ms-sys.lib \
|
.\ms-sys\ms-sys.lib \
|
||||||
.\syslinux\libfat\libfat.lib \
|
.\syslinux\libfat\libfat.lib \
|
||||||
.\syslinux\libinstaller\libinstaller.lib
|
.\syslinux\libinstaller\libinstaller.lib \
|
||||||
|
.\libcdio\iso9660\iso9660.lib \
|
||||||
|
.\libcdio\udf\udf.lib \
|
||||||
|
.\libcdio\driver\driver.lib
|
||||||
|
|
||||||
# http://jpassing.com/2008/02/01/how-to-use-manifests-with-buildexe/
|
# http://jpassing.com/2008/02/01/how-to-use-manifests-with-buildexe/
|
||||||
SXS_APPLICATION_MANIFEST=..\common_controls_and_elevation.manifest
|
SXS_APPLICATION_MANIFEST=..\common_controls_and_elevation.manifest
|
||||||
|
@ -29,6 +32,7 @@ SOURCES=rufus.c \
|
||||||
format.c \
|
format.c \
|
||||||
stdio.c \
|
stdio.c \
|
||||||
stdlg.c \
|
stdlg.c \
|
||||||
|
iso.c \
|
||||||
dos.c \
|
dos.c \
|
||||||
dos_locale.c \
|
dos_locale.c \
|
||||||
badblocks.c \
|
badblocks.c \
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
SUBDIRS = ms-sys syslinux/libfat syslinux/libinstaller libcdio/iso9660 libcdio/udf
|
SUBDIRS = ms-sys syslinux/libfat syslinux/libinstaller libcdio/iso9660 libcdio/udf libcdio/driver
|
||||||
|
|
||||||
noinst_PROGRAMS = rufus
|
noinst_PROGRAMS = rufus
|
||||||
|
|
||||||
|
@ -9,8 +9,8 @@ pkg_v_rc_0 = @echo " RC $@";
|
||||||
%_rc.o: %.rc
|
%_rc.o: %.rc
|
||||||
$(pkg_v_rc)$(WINDRES) $(AM_RCFLAGS) -i $< -o $@
|
$(pkg_v_rc)$(WINDRES) $(AM_RCFLAGS) -i $< -o $@
|
||||||
|
|
||||||
rufus_SOURCES = drive.c dos.c dos_locale.c badblocks.c syslinux.c format.c stdio.c stdlg.c rufus.c
|
rufus_SOURCES = drive.c iso.c dos.c dos_locale.c badblocks.c syslinux.c format.c stdio.c stdlg.c rufus.c
|
||||||
rufus_CFLAGS = -I./ms-sys/inc -I./syslinux/libfat -I./syslinux/libinstaller $(AM_CFLAGS)
|
rufus_CFLAGS = -I./ms-sys/inc -I./syslinux/libfat -I./syslinux/libinstaller -I./libcdio $(AM_CFLAGS)
|
||||||
rufus_LDFLAGS = $(AM_LDFLAGS) -mwindows
|
rufus_LDFLAGS = $(AM_LDFLAGS) -mwindows
|
||||||
rufus_LDADD = rufus_rc.o ms-sys/libmssys.a syslinux/libfat/libfat.a syslinux/libinstaller/libinstaller.a \
|
rufus_LDADD = rufus_rc.o ms-sys/libmssys.a syslinux/libfat/libfat.a syslinux/libinstaller/libinstaller.a \
|
||||||
libcdio/iso9660/libiso9660.a libcdio/udf/libudf.a -lsetupapi -lole32 -lgdi32
|
libcdio/iso9660/libiso9660.a libcdio/udf/libudf.a libcdio/driver/libdriver.a -lsetupapi -lole32 -lgdi32
|
||||||
|
|
|
@ -43,15 +43,16 @@ mkinstalldirs = $(install_sh) -d
|
||||||
CONFIG_CLEAN_FILES =
|
CONFIG_CLEAN_FILES =
|
||||||
CONFIG_CLEAN_VPATH_FILES =
|
CONFIG_CLEAN_VPATH_FILES =
|
||||||
PROGRAMS = $(noinst_PROGRAMS)
|
PROGRAMS = $(noinst_PROGRAMS)
|
||||||
am_rufus_OBJECTS = rufus-drive.$(OBJEXT) rufus-dos.$(OBJEXT) \
|
am_rufus_OBJECTS = rufus-drive.$(OBJEXT) rufus-iso.$(OBJEXT) \
|
||||||
rufus-dos_locale.$(OBJEXT) rufus-badblocks.$(OBJEXT) \
|
rufus-dos.$(OBJEXT) rufus-dos_locale.$(OBJEXT) \
|
||||||
rufus-syslinux.$(OBJEXT) rufus-format.$(OBJEXT) \
|
rufus-badblocks.$(OBJEXT) rufus-syslinux.$(OBJEXT) \
|
||||||
rufus-stdio.$(OBJEXT) rufus-stdlg.$(OBJEXT) \
|
rufus-format.$(OBJEXT) rufus-stdio.$(OBJEXT) \
|
||||||
rufus-rufus.$(OBJEXT)
|
rufus-stdlg.$(OBJEXT) rufus-rufus.$(OBJEXT)
|
||||||
rufus_OBJECTS = $(am_rufus_OBJECTS)
|
rufus_OBJECTS = $(am_rufus_OBJECTS)
|
||||||
rufus_DEPENDENCIES = rufus_rc.o ms-sys/libmssys.a \
|
rufus_DEPENDENCIES = rufus_rc.o ms-sys/libmssys.a \
|
||||||
syslinux/libfat/libfat.a syslinux/libinstaller/libinstaller.a \
|
syslinux/libfat/libfat.a syslinux/libinstaller/libinstaller.a \
|
||||||
libcdio/iso9660/libiso9660.a libcdio/udf/libudf.a
|
libcdio/iso9660/libiso9660.a libcdio/udf/libudf.a \
|
||||||
|
libcdio/driver/libdriver.a
|
||||||
rufus_LINK = $(CCLD) $(rufus_CFLAGS) $(CFLAGS) $(rufus_LDFLAGS) \
|
rufus_LINK = $(CCLD) $(rufus_CFLAGS) $(CFLAGS) $(rufus_LDFLAGS) \
|
||||||
$(LDFLAGS) -o $@
|
$(LDFLAGS) -o $@
|
||||||
DEFAULT_INCLUDES = -I.@am__isrc@
|
DEFAULT_INCLUDES = -I.@am__isrc@
|
||||||
|
@ -179,15 +180,15 @@ target_alias = @target_alias@
|
||||||
top_build_prefix = @top_build_prefix@
|
top_build_prefix = @top_build_prefix@
|
||||||
top_builddir = @top_builddir@
|
top_builddir = @top_builddir@
|
||||||
top_srcdir = @top_srcdir@
|
top_srcdir = @top_srcdir@
|
||||||
SUBDIRS = ms-sys syslinux/libfat syslinux/libinstaller libcdio/iso9660 libcdio/udf
|
SUBDIRS = ms-sys syslinux/libfat syslinux/libinstaller libcdio/iso9660 libcdio/udf libcdio/driver
|
||||||
pkg_v_rc = $(pkg_v_rc_$(V))
|
pkg_v_rc = $(pkg_v_rc_$(V))
|
||||||
pkg_v_rc_ = $(pkg_v_rc_$(AM_DEFAULT_VERBOSITY))
|
pkg_v_rc_ = $(pkg_v_rc_$(AM_DEFAULT_VERBOSITY))
|
||||||
pkg_v_rc_0 = @echo " RC $@";
|
pkg_v_rc_0 = @echo " RC $@";
|
||||||
rufus_SOURCES = drive.c dos.c dos_locale.c badblocks.c syslinux.c format.c stdio.c stdlg.c rufus.c
|
rufus_SOURCES = drive.c iso.c dos.c dos_locale.c badblocks.c syslinux.c format.c stdio.c stdlg.c rufus.c
|
||||||
rufus_CFLAGS = -I./ms-sys/inc -I./syslinux/libfat -I./syslinux/libinstaller $(AM_CFLAGS)
|
rufus_CFLAGS = -I./ms-sys/inc -I./syslinux/libfat -I./syslinux/libinstaller -I./libcdio $(AM_CFLAGS)
|
||||||
rufus_LDFLAGS = $(AM_LDFLAGS) -mwindows
|
rufus_LDFLAGS = $(AM_LDFLAGS) -mwindows
|
||||||
rufus_LDADD = rufus_rc.o ms-sys/libmssys.a syslinux/libfat/libfat.a syslinux/libinstaller/libinstaller.a \
|
rufus_LDADD = rufus_rc.o ms-sys/libmssys.a syslinux/libfat/libfat.a syslinux/libinstaller/libinstaller.a \
|
||||||
libcdio/iso9660/libiso9660.a libcdio/udf/libudf.a -lsetupapi -lole32 -lgdi32
|
libcdio/iso9660/libiso9660.a libcdio/udf/libudf.a libcdio/driver/libdriver.a -lsetupapi -lole32 -lgdi32
|
||||||
|
|
||||||
all: all-recursive
|
all: all-recursive
|
||||||
|
|
||||||
|
@ -252,6 +253,14 @@ rufus-drive.obj: drive.c
|
||||||
$(AM_V_CC) @AM_BACKSLASH@
|
$(AM_V_CC) @AM_BACKSLASH@
|
||||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rufus_CFLAGS) $(CFLAGS) -c -o rufus-drive.obj `if test -f 'drive.c'; then $(CYGPATH_W) 'drive.c'; else $(CYGPATH_W) '$(srcdir)/drive.c'; fi`
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rufus_CFLAGS) $(CFLAGS) -c -o rufus-drive.obj `if test -f 'drive.c'; then $(CYGPATH_W) 'drive.c'; else $(CYGPATH_W) '$(srcdir)/drive.c'; fi`
|
||||||
|
|
||||||
|
rufus-iso.o: iso.c
|
||||||
|
$(AM_V_CC) @AM_BACKSLASH@
|
||||||
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rufus_CFLAGS) $(CFLAGS) -c -o rufus-iso.o `test -f 'iso.c' || echo '$(srcdir)/'`iso.c
|
||||||
|
|
||||||
|
rufus-iso.obj: iso.c
|
||||||
|
$(AM_V_CC) @AM_BACKSLASH@
|
||||||
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rufus_CFLAGS) $(CFLAGS) -c -o rufus-iso.obj `if test -f 'iso.c'; then $(CYGPATH_W) 'iso.c'; else $(CYGPATH_W) '$(srcdir)/iso.c'; fi`
|
||||||
|
|
||||||
rufus-dos.o: dos.c
|
rufus-dos.o: dos.c
|
||||||
$(AM_V_CC) @AM_BACKSLASH@
|
$(AM_V_CC) @AM_BACKSLASH@
|
||||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rufus_CFLAGS) $(CFLAGS) -c -o rufus-dos.o `test -f 'dos.c' || echo '$(srcdir)/'`dos.c
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rufus_CFLAGS) $(CFLAGS) -c -o rufus-dos.o `test -f 'dos.c' || echo '$(srcdir)/'`dos.c
|
||||||
|
|
128
src/iso.c
Normal file
128
src/iso.c
Normal file
|
@ -0,0 +1,128 @@
|
||||||
|
/*
|
||||||
|
* Rufus: The Reliable USB Formatting Utility
|
||||||
|
* ISO file extraction
|
||||||
|
* Copyright (c) 2011-2012 Pete Batard <pete@akeo.ie>
|
||||||
|
* Based on libcdio's iso-read.c & iso-info.c:
|
||||||
|
* Copyright (C) 2004, 2005, 2006, 2008 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
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
#include "rufus.h"
|
||||||
|
|
||||||
|
#include <cdio/cdio.h>
|
||||||
|
#include <cdio/iso9660.h>
|
||||||
|
|
||||||
|
#define print_vd_info(title, fn) \
|
||||||
|
if (fn(p_iso, &psz_str)) { \
|
||||||
|
uprintf(title ": %s\n", psz_str); \
|
||||||
|
} \
|
||||||
|
free(psz_str); \
|
||||||
|
psz_str = NULL;
|
||||||
|
|
||||||
|
BOOL ExtractISO(const char* src_iso, const char* dest_dir)
|
||||||
|
{
|
||||||
|
BOOL r = FALSE;
|
||||||
|
CdioList_t *p_entlist;
|
||||||
|
CdioListNode_t *p_entnode;
|
||||||
|
iso9660_t *p_iso;
|
||||||
|
const char *psz_path="/";
|
||||||
|
char *psz_str = NULL;
|
||||||
|
|
||||||
|
|
||||||
|
p_iso = iso9660_open(src_iso);
|
||||||
|
if (p_iso == NULL) {
|
||||||
|
uprintf("Unable to open ISO image '%s'.\n", src_iso);
|
||||||
|
goto out1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Show basic CD info from the Primary Volume Descriptor. */
|
||||||
|
print_vd_info("Application", iso9660_ifs_get_application_id);
|
||||||
|
print_vd_info("Preparer ", iso9660_ifs_get_preparer_id);
|
||||||
|
print_vd_info("Publisher ", iso9660_ifs_get_publisher_id);
|
||||||
|
print_vd_info("System ", iso9660_ifs_get_system_id);
|
||||||
|
print_vd_info("Volume ", iso9660_ifs_get_volume_id);
|
||||||
|
print_vd_info("Volume Set ", iso9660_ifs_get_volumeset_id);
|
||||||
|
|
||||||
|
p_entlist = iso9660_ifs_readdir(p_iso, psz_path);
|
||||||
|
|
||||||
|
/* Iterate over the list of nodes that iso9660_ifs_readdir gives */
|
||||||
|
if (p_entlist) {
|
||||||
|
_CDIO_LIST_FOREACH (p_entnode, p_entlist) {
|
||||||
|
char filename[4096];
|
||||||
|
iso9660_stat_t *p_statbuf = (iso9660_stat_t*) _cdio_list_node_data(p_entnode);
|
||||||
|
iso9660_name_translate(p_statbuf->filename, filename);
|
||||||
|
uprintf("%s [LSN %6d] %8u %s%s\n", _STAT_DIR == p_statbuf->type ? "d" : "-",
|
||||||
|
p_statbuf->lsn, p_statbuf->size, psz_path, filename);
|
||||||
|
}
|
||||||
|
_cdio_list_free (p_entlist, true);
|
||||||
|
}
|
||||||
|
r = TRUE;
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
iso9660_stat_t *statbuf;
|
||||||
|
FILE* outfd;
|
||||||
|
uint32_t i;
|
||||||
|
char file_name[] = "TEST.TST";
|
||||||
|
char buf[ISO_BLOCKSIZE];
|
||||||
|
|
||||||
|
statbuf = iso9660_ifs_stat_translate(p_iso, file_name);
|
||||||
|
if (statbuf == NULL) {
|
||||||
|
uprintf("Could not get ISO-9660 file information for file %s.\n", file_name);
|
||||||
|
goto out2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(outfd = fopen(file_name, "wb"))) {
|
||||||
|
uprintf("Could not open %s for writing\n", file_name);
|
||||||
|
goto out2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Copy the blocks from the ISO-9660 filesystem to the local filesystem. */
|
||||||
|
for (i=0; i<statbuf->size; i+=ISO_BLOCKSIZE) {
|
||||||
|
memset (buf, 0, ISO_BLOCKSIZE);
|
||||||
|
if (iso9660_iso_seek_read(p_iso, buf, statbuf->lsn + (i / ISO_BLOCKSIZE), 1) != ISO_BLOCKSIZE) {
|
||||||
|
uprintf("Error reading ISO 9660 file at lsn %lu\n", (long unsigned int) statbuf->lsn + (i / ISO_BLOCKSIZE));
|
||||||
|
goto out3;
|
||||||
|
}
|
||||||
|
|
||||||
|
fwrite(buf, ISO_BLOCKSIZE, 1, outfd);
|
||||||
|
if (ferror (outfd)) {
|
||||||
|
uprintf("Error writing file\n");
|
||||||
|
goto out3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fflush(outfd);
|
||||||
|
|
||||||
|
/* Make sure the file size has the exact same byte size. Without the
|
||||||
|
* truncate below, the file will a multiple of ISO_BLOCKSIZE. */
|
||||||
|
if (_chsize(_fileno(outfd), statbuf->size) != 0) {
|
||||||
|
uprintf("Error adjusting file size\n");
|
||||||
|
goto out3;
|
||||||
|
}
|
||||||
|
|
||||||
|
r = TRUE;
|
||||||
|
|
||||||
|
out3:
|
||||||
|
fclose(outfd);
|
||||||
|
out2:
|
||||||
|
#endif
|
||||||
|
iso9660_close(p_iso);
|
||||||
|
out1:
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
146
src/libcdio/cdio/audio.h
Normal file
146
src/libcdio/cdio/audio.h
Normal file
|
@ -0,0 +1,146 @@
|
||||||
|
/* -*- c -*-
|
||||||
|
Copyright (C) 2005, 2007, 2008 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
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** \file audio.h
|
||||||
|
*
|
||||||
|
* \brief The top-level header for CD audio-related libcdio
|
||||||
|
* calls. These control playing of the CD-ROM through its
|
||||||
|
* line-out jack.
|
||||||
|
*/
|
||||||
|
#ifndef __CDIO_AUDIO_H__
|
||||||
|
#define __CDIO_AUDIO_H__
|
||||||
|
|
||||||
|
#include <cdio/types.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
/*! This struct is used by the cdio_audio_read_subchannel */
|
||||||
|
typedef struct cdio_subchannel_s
|
||||||
|
{
|
||||||
|
uint8_t format;
|
||||||
|
uint8_t audio_status;
|
||||||
|
uint8_t address: 4;
|
||||||
|
uint8_t control: 4;
|
||||||
|
uint8_t track;
|
||||||
|
uint8_t index;
|
||||||
|
msf_t abs_addr;
|
||||||
|
msf_t rel_addr;
|
||||||
|
} cdio_subchannel_t;
|
||||||
|
|
||||||
|
/*! This struct is used by cdio_audio_get_volume and cdio_audio_set_volume */
|
||||||
|
typedef struct cdio_audio_volume_s
|
||||||
|
{
|
||||||
|
uint8_t level[4];
|
||||||
|
} cdio_audio_volume_t;
|
||||||
|
|
||||||
|
|
||||||
|
/*! This struct is used by the CDROMPLAYTRKIND ioctl */
|
||||||
|
typedef struct cdio_track_index_s
|
||||||
|
{
|
||||||
|
uint8_t i_start_track; /**< start track */
|
||||||
|
uint8_t i_start_index; /**< start index */
|
||||||
|
uint8_t i_end_track; /**< end track */
|
||||||
|
uint8_t i_end_index; /**< end index */
|
||||||
|
} cdio_track_index_t;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Get volume of an audio CD.
|
||||||
|
|
||||||
|
@param p_cdio the CD object to be acted upon.
|
||||||
|
@param p_volume place to put the list of volume outputs levels
|
||||||
|
|
||||||
|
p_volume can be NULL in which case we return only whether the driver
|
||||||
|
has the ability to get the volume or not.
|
||||||
|
|
||||||
|
*/
|
||||||
|
driver_return_code_t cdio_audio_get_volume (CdIo_t *p_cdio, /*out*/
|
||||||
|
cdio_audio_volume_t *p_volume);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Return the number of seconds (discarding frame portion) of an MSF
|
||||||
|
*/
|
||||||
|
uint32_t cdio_audio_get_msf_seconds(msf_t *p_msf);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Pause playing CD through analog output
|
||||||
|
|
||||||
|
@param p_cdio the CD object to be acted upon.
|
||||||
|
*/
|
||||||
|
driver_return_code_t cdio_audio_pause (CdIo_t *p_cdio);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Playing CD through analog output at the given MSF.
|
||||||
|
|
||||||
|
@param p_cdio the CD object to be acted upon.
|
||||||
|
@param p_start_msf pointer to staring MSF
|
||||||
|
@param p_end_msf pointer to ending MSF
|
||||||
|
*/
|
||||||
|
driver_return_code_t cdio_audio_play_msf (CdIo_t *p_cdio,
|
||||||
|
/*in*/msf_t *p_start_msf,
|
||||||
|
/*in*/ msf_t *p_end_msf);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Playing CD through analog output at the desired track and index
|
||||||
|
|
||||||
|
@param p_cdio the CD object to be acted upon.
|
||||||
|
@param p_track_index location to start/end.
|
||||||
|
*/
|
||||||
|
driver_return_code_t cdio_audio_play_track_index
|
||||||
|
( CdIo_t *p_cdio, cdio_track_index_t *p_track_index);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Get subchannel information.
|
||||||
|
|
||||||
|
@param p_cdio the CD object to be acted upon.
|
||||||
|
@param p_subchannel place for returned subchannel information
|
||||||
|
*/
|
||||||
|
driver_return_code_t cdio_audio_read_subchannel (CdIo_t *p_cdio,
|
||||||
|
/*out*/ cdio_subchannel_t *p_subchannel);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Resume playing an audio CD.
|
||||||
|
|
||||||
|
@param p_cdio the CD object to be acted upon.
|
||||||
|
|
||||||
|
*/
|
||||||
|
driver_return_code_t cdio_audio_resume (CdIo_t *p_cdio);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Set volume of an audio CD.
|
||||||
|
|
||||||
|
@param p_cdio the CD object to be acted upon.
|
||||||
|
@param p_volume place for returned volume-level information
|
||||||
|
|
||||||
|
*/
|
||||||
|
driver_return_code_t cdio_audio_set_volume (CdIo_t *p_cdio, /*out*/
|
||||||
|
cdio_audio_volume_t *p_volume);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Stop playing an audio CD.
|
||||||
|
|
||||||
|
@param p_cdio the CD object to be acted upon.
|
||||||
|
|
||||||
|
*/
|
||||||
|
driver_return_code_t cdio_audio_stop (CdIo_t *p_cdio);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#endif /* __CDIO_AUDIO_H__ */
|
|
@ -75,6 +75,6 @@ extern "C" {
|
||||||
//#include <cdio/cdtext.h>
|
//#include <cdio/cdtext.h>
|
||||||
|
|
||||||
/* Track-related functions. */
|
/* Track-related functions. */
|
||||||
//#include <cdio/track.h>
|
#include <cdio/track.h>
|
||||||
|
|
||||||
#endif /* __CDIO_H__ */
|
#endif /* __CDIO_H__ */
|
||||||
|
|
256
src/libcdio/cdio/track.h
Normal file
256
src/libcdio/cdio/track.h
Normal file
|
@ -0,0 +1,256 @@
|
||||||
|
/*
|
||||||
|
$Id: track.h,v 1.14 2008/03/25 15:59:09 karl Exp $
|
||||||
|
|
||||||
|
Copyright (C) 2005, 2006, 2008 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
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** \file track.h
|
||||||
|
* \brief The top-level header for track-related libcdio calls.
|
||||||
|
*/
|
||||||
|
#ifndef __CDIO_TRACK_H__
|
||||||
|
#define __CDIO_TRACK_H__
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
/*! Printable tags for track_format_t enumeration. */
|
||||||
|
extern const char *track_format2str[6];
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
TRACK_FORMAT_AUDIO, /**< Audio track, e.g. CD-DA */
|
||||||
|
TRACK_FORMAT_CDI, /**< CD-i. How this is different from DATA below? */
|
||||||
|
TRACK_FORMAT_XA, /**< Mode2 of some sort */
|
||||||
|
TRACK_FORMAT_DATA, /**< Mode1 of some sort */
|
||||||
|
TRACK_FORMAT_PSX, /**< Playstation CD. Like audio but only 2336 bytes
|
||||||
|
* of user data.
|
||||||
|
*/
|
||||||
|
TRACK_FORMAT_ERROR /**< Dunno what is, or some other error. */
|
||||||
|
} track_format_t;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
CDIO_TRACK_FLAG_FALSE,
|
||||||
|
CDIO_TRACK_FLAG_TRUE,
|
||||||
|
CDIO_TRACK_FLAG_ERROR,
|
||||||
|
CDIO_TRACK_FLAG_UNKNOWN
|
||||||
|
} track_flag_t;
|
||||||
|
|
||||||
|
/*! \brief Structure containing attributes associated with a track */
|
||||||
|
typedef struct {
|
||||||
|
track_flag_t preemphasis; /**< Linear preemphasis on an audio track */
|
||||||
|
track_flag_t copy_permit; /**< Whether copying is permitted */
|
||||||
|
int channels; /**< Number of audio channels, 2, 4. -2 if not
|
||||||
|
implemented or -1 for error.
|
||||||
|
*/
|
||||||
|
} track_flags_t;
|
||||||
|
|
||||||
|
/*! The leadout track is always 0xAA, regardless of # of tracks on
|
||||||
|
disc, or what value may be used internally. For example although
|
||||||
|
OS X uses a different value for the lead-out track internally than
|
||||||
|
given below, programmers should use CDIO_CDROM_LEADOUT_TRACK and
|
||||||
|
not worry about this.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*! An enumeration for some of the CDIO_CDROM_* \#defines below. This
|
||||||
|
isn't really an enumeration one would really use in a program; it
|
||||||
|
is to be helpful in debuggers where wants just to refer to the
|
||||||
|
CDIO_CDROM_* names and get something.
|
||||||
|
*/
|
||||||
|
extern enum cdio_track_enums {
|
||||||
|
CDIO_CDROM_LBA = 0x01, /**< "logical block": first frame is #0 */
|
||||||
|
CDIO_CDROM_MSF = 0x02, /**< "minute-second-frame": binary, not
|
||||||
|
BCD here! */
|
||||||
|
CDIO_CDROM_DATA_TRACK = 0x04,
|
||||||
|
CDIO_CDROM_CDI_TRACK = 0x10,
|
||||||
|
CDIO_CDROM_XA_TRACK = 0x20,
|
||||||
|
CDIO_CD_MAX_TRACKS = 99, /**< Largest CD track number */
|
||||||
|
CDIO_CDROM_LEADOUT_TRACK = 0xAA, /**< Lead-out track number */
|
||||||
|
CDIO_INVALID_TRACK = 0xFF, /**< Constant for invalid track number */
|
||||||
|
|
||||||
|
} cdio_track_enums;
|
||||||
|
|
||||||
|
#define CDIO_CD_MIN_TRACK_NO 1 /**< Smallest CD track number */
|
||||||
|
|
||||||
|
/*! track modes (Table 350)
|
||||||
|
reference: MMC-3 draft revsion - 10g
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
AUDIO, /**< 2352 byte block length */
|
||||||
|
MODE1, /**< 2048 byte block length */
|
||||||
|
MODE1_RAW, /**< 2352 byte block length */
|
||||||
|
MODE2, /**< 2336 byte block length */
|
||||||
|
MODE2_FORM1, /**< 2048 byte block length */
|
||||||
|
MODE2_FORM2, /**< 2324 byte block length */
|
||||||
|
MODE2_FORM_MIX, /**< 2336 byte block length */
|
||||||
|
MODE2_RAW /**< 2352 byte block length */
|
||||||
|
} trackmode_t;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Get the number of the first track.
|
||||||
|
|
||||||
|
@return the track number or CDIO_INVALID_TRACK
|
||||||
|
on error.
|
||||||
|
*/
|
||||||
|
track_t cdio_get_first_track_num(const CdIo_t *p_cdio);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Return the last track number.
|
||||||
|
CDIO_INVALID_TRACK is returned on error.
|
||||||
|
*/
|
||||||
|
track_t cdio_get_last_track_num (const CdIo_t *p_cdio);
|
||||||
|
|
||||||
|
|
||||||
|
/*! Find the track which contains lsn.
|
||||||
|
CDIO_INVALID_TRACK is returned if the lsn outside of the CD or
|
||||||
|
if there was some error.
|
||||||
|
|
||||||
|
If the lsn is before the pregap of the first track 0 is returned.
|
||||||
|
Otherwise we return the track that spans the lsn.
|
||||||
|
*/
|
||||||
|
track_t cdio_get_track(const CdIo_t *p_cdio, lsn_t lsn);
|
||||||
|
|
||||||
|
/*! 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 cdio_get_track_channels(const CdIo_t *p_cdio, track_t i_track);
|
||||||
|
|
||||||
|
/*! Return copy protection status on a track. Is this meaningful
|
||||||
|
if not an audio track?
|
||||||
|
*/
|
||||||
|
track_flag_t cdio_get_track_copy_permit(const CdIo_t *p_cdio,
|
||||||
|
track_t i_track);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Get the format (audio, mode2, mode1) of track.
|
||||||
|
*/
|
||||||
|
track_format_t cdio_get_track_format(const CdIo_t *p_cdio, 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 cdio_get_track_green(const CdIo_t *p_cdio, track_t i_track);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Return the ending LSN for track number
|
||||||
|
i_track in cdio. CDIO_INVALID_LSN is returned on error.
|
||||||
|
*/
|
||||||
|
lsn_t cdio_get_track_last_lsn(const CdIo_t *p_cdio, track_t i_track);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Get the starting LBA for track number
|
||||||
|
i_track in p_cdio. Track numbers usually start at something
|
||||||
|
greater than 0, usually 1.
|
||||||
|
|
||||||
|
The "leadout" track is specified either by
|
||||||
|
using i_track CDIO_CDROM_LEADOUT_TRACK or the total tracks+1.
|
||||||
|
|
||||||
|
@param p_cdio object to get information from
|
||||||
|
@param i_track the track number we want the LSN for
|
||||||
|
@return the starting LBA or CDIO_INVALID_LBA on error.
|
||||||
|
*/
|
||||||
|
lba_t cdio_get_track_lba(const CdIo_t *p_cdio, track_t i_track);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Return the starting LSN for track number
|
||||||
|
i_track in p_cdio. Track numbers usually start at something
|
||||||
|
greater than 0, usually 1.
|
||||||
|
|
||||||
|
The "leadout" track is specified either by
|
||||||
|
using i_track CDIO_CDROM_LEADOUT_TRACK or the total tracks+1.
|
||||||
|
|
||||||
|
@param p_cdio object to get information from
|
||||||
|
@param i_track the track number we want the LSN for
|
||||||
|
@return the starting LSN or CDIO_INVALID_LSN on error.
|
||||||
|
*/
|
||||||
|
lsn_t cdio_get_track_lsn(const CdIo_t *p_cdio, track_t i_track);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Return the starting LBA for the pregap for track number
|
||||||
|
i_track in p_cdio. Track numbers usually start at something
|
||||||
|
greater than 0, usually 1.
|
||||||
|
|
||||||
|
@param p_cdio object to get information from
|
||||||
|
@param i_track the track number we want the LBA for
|
||||||
|
@return the starting LBA or CDIO_INVALID_LBA on error.
|
||||||
|
*/
|
||||||
|
lba_t cdio_get_track_pregap_lba(const CdIo_t *p_cdio, track_t i_track);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Return the starting LSN for the pregap for track number
|
||||||
|
i_track in p_cdio. Track numbers usually start at something
|
||||||
|
greater than 0, usually 1.
|
||||||
|
|
||||||
|
@param p_cdio object to get information from
|
||||||
|
@param i_track the track number we want the LSN for
|
||||||
|
@return the starting LSN or CDIO_INVALID_LSN on error.
|
||||||
|
*/
|
||||||
|
lsn_t cdio_get_track_pregap_lsn(const CdIo_t *p_cdio, track_t i_track);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Get the International Standard Recording Code (ISRC) for track number
|
||||||
|
i_track in p_cdio. Track numbers usually start at something
|
||||||
|
greater than 0, usually 1.
|
||||||
|
|
||||||
|
@return the International Standard Recording Code (ISRC) or NULL
|
||||||
|
if there is none or we don't have the ability to get it.
|
||||||
|
|
||||||
|
Note: string is malloc'd so caller has to free() the returned
|
||||||
|
string when done with it.
|
||||||
|
|
||||||
|
*/
|
||||||
|
char * cdio_get_track_isrc (const CdIo_t *p_cdio, track_t i_track);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Return the starting MSF (minutes/secs/frames) for track number
|
||||||
|
i_track in p_cdio. Track numbers usually start at something
|
||||||
|
greater than 0, usually 1.
|
||||||
|
|
||||||
|
The "leadout" track is specified either by
|
||||||
|
using i_track CDIO_CDROM_LEADOUT_TRACK or the total tracks+1.
|
||||||
|
|
||||||
|
@return true if things worked or false if there is no track entry.
|
||||||
|
*/
|
||||||
|
bool cdio_get_track_msf(const CdIo_t *p_cdio, track_t i_track,
|
||||||
|
/*out*/ msf_t *msf);
|
||||||
|
|
||||||
|
/*! Get linear preemphasis status on an audio track
|
||||||
|
This is not meaningful if not an audio track?
|
||||||
|
*/
|
||||||
|
track_flag_t cdio_get_track_preemphasis(const CdIo_t *p_cdio,
|
||||||
|
track_t i_track);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Get the number of sectors between this track an the next. This
|
||||||
|
includes any pregap sectors before the start of the next track.
|
||||||
|
Track numbers usually start at something
|
||||||
|
greater than 0, usually 1.
|
||||||
|
|
||||||
|
@return the number of sectors or 0 if there is an error.
|
||||||
|
*/
|
||||||
|
unsigned int cdio_get_track_sec_count(const CdIo_t *p_cdio, track_t i_track);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#endif /* __CDIO_TRACK_H__ */
|
||||||
|
|
177
src/libcdio/driver/.msvc/driver.vcxproj
Normal file
177
src/libcdio/driver/.msvc/driver.vcxproj
Normal file
|
@ -0,0 +1,177 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\disc.c" />
|
||||||
|
<ClCompile Include="..\ds.c" />
|
||||||
|
<ClCompile Include="..\logging.c" />
|
||||||
|
<ClCompile Include="..\read.c" />
|
||||||
|
<ClCompile Include="..\sector.c" />
|
||||||
|
<ClCompile Include="..\track.c" />
|
||||||
|
<ClCompile Include="..\util.c" />
|
||||||
|
<ClCompile Include="..\_cdio_stdio.c" />
|
||||||
|
<ClCompile Include="..\_cdio_stream.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\cdio_assert.h" />
|
||||||
|
<ClInclude Include="..\cdio_private.h" />
|
||||||
|
<ClInclude Include="..\_cdio_stdio.h" />
|
||||||
|
<ClInclude Include="..\_cdio_stream.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{FA1B1093-BA86-410A-B7A0-7A54C605F812}</ProjectGuid>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
<RootNamespace>driver</RootNamespace>
|
||||||
|
<ProjectName>libcdio-driver</ProjectName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)x86_32\$(Configuration)\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)x86_32\$(Configuration)\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)x86_32\$(Configuration)\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)x86_32\$(Configuration)\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)x86_64\$(Configuration)\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)x86_64\$(Configuration)\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)x86_64\$(Configuration)\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)x86_64\$(Configuration)\$(ProjectName)\</IntDir>
|
||||||
|
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
|
||||||
|
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
|
||||||
|
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
|
||||||
|
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>..;..\..;..\..\..\msvc-missing;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
</Link>
|
||||||
|
<Lib>
|
||||||
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>..;..\..;..\..\..\msvc-missing;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Lib>
|
||||||
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>..;..\..;..\..\..\msvc-missing;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
</Link>
|
||||||
|
<Lib>
|
||||||
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>..;..\..;..\..\..\msvc-missing;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
</Link>
|
||||||
|
<Lib>
|
||||||
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
56
src/libcdio/driver/.msvc/driver.vcxproj.filters
Normal file
56
src/libcdio/driver/.msvc/driver.vcxproj.filters
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
|
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\_cdio_stdio.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\_cdio_stream.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\logging.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\ds.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\read.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\util.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\sector.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\disc.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\track.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\_cdio_stdio.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\_cdio_stream.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\cdio_assert.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\cdio_private.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
23
src/libcdio/driver/.msvc/driver_sources
Normal file
23
src/libcdio/driver/.msvc/driver_sources
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
TARGETNAME=driver
|
||||||
|
TARGETTYPE=LIBRARY
|
||||||
|
|
||||||
|
INCLUDES=$(DDK_INC_PATH);.;..;..\..\msvc-missing
|
||||||
|
C_DEFINES=$(C_DEFINES) /DDDKBUILD /DUNICODE /D_UNICODE /DISOLATION_AWARE_ENABLED
|
||||||
|
|
||||||
|
!IFNDEF MSC_WARNING_LEVEL
|
||||||
|
MSC_WARNING_LEVEL=/W3
|
||||||
|
!ENDIF
|
||||||
|
USE_MSVCRT=1
|
||||||
|
|
||||||
|
TARGETLIBS=$(SDK_LIB_PATH)\kernel32.lib \
|
||||||
|
$(SDK_LIB_PATH)\user32.lib
|
||||||
|
|
||||||
|
SOURCES=disc.c \
|
||||||
|
ds.c \
|
||||||
|
logging.c \
|
||||||
|
read.c \
|
||||||
|
sector.c \
|
||||||
|
track.c \
|
||||||
|
util.c \
|
||||||
|
_cdio_stdio.c \
|
||||||
|
_cdio_stream.c
|
3
src/libcdio/driver/Makefile.am
Normal file
3
src/libcdio/driver/Makefile.am
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
noinst_LIBRARIES = libdriver.a
|
||||||
|
libdriver_a_SOURCES = disc.c ds.c logging.c read.c sector.c track.c util.c _cdio_stdio.c _cdio_stream.c
|
||||||
|
libdriver_a_CFLAGS = -I. -I.. $(AM_CFLAGS)
|
467
src/libcdio/driver/Makefile.in
Normal file
467
src/libcdio/driver/Makefile.in
Normal file
|
@ -0,0 +1,467 @@
|
||||||
|
# Makefile.in generated by automake 1.11.1 from Makefile.am.
|
||||||
|
# @configure_input@
|
||||||
|
|
||||||
|
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||||
|
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
|
||||||
|
# Inc.
|
||||||
|
# This Makefile.in is free software; the Free Software Foundation
|
||||||
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||||
|
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||||
|
# PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
@SET_MAKE@
|
||||||
|
|
||||||
|
VPATH = @srcdir@
|
||||||
|
pkgdatadir = $(datadir)/@PACKAGE@
|
||||||
|
pkgincludedir = $(includedir)/@PACKAGE@
|
||||||
|
pkglibdir = $(libdir)/@PACKAGE@
|
||||||
|
pkglibexecdir = $(libexecdir)/@PACKAGE@
|
||||||
|
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||||
|
install_sh_DATA = $(install_sh) -c -m 644
|
||||||
|
install_sh_PROGRAM = $(install_sh) -c
|
||||||
|
install_sh_SCRIPT = $(install_sh) -c
|
||||||
|
INSTALL_HEADER = $(INSTALL_DATA)
|
||||||
|
transform = $(program_transform_name)
|
||||||
|
NORMAL_INSTALL = :
|
||||||
|
PRE_INSTALL = :
|
||||||
|
POST_INSTALL = :
|
||||||
|
NORMAL_UNINSTALL = :
|
||||||
|
PRE_UNINSTALL = :
|
||||||
|
POST_UNINSTALL = :
|
||||||
|
subdir = src/libcdio/driver
|
||||||
|
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
|
||||||
|
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||||
|
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
|
||||||
|
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||||
|
$(ACLOCAL_M4)
|
||||||
|
mkinstalldirs = $(install_sh) -d
|
||||||
|
CONFIG_CLEAN_FILES =
|
||||||
|
CONFIG_CLEAN_VPATH_FILES =
|
||||||
|
LIBRARIES = $(noinst_LIBRARIES)
|
||||||
|
AR = ar
|
||||||
|
ARFLAGS = cru
|
||||||
|
AM_V_AR = $(am__v_AR_$(V))
|
||||||
|
am__v_AR_ = $(am__v_AR_$(AM_DEFAULT_VERBOSITY))
|
||||||
|
am__v_AR_0 = @echo " AR " $@;
|
||||||
|
AM_V_at = $(am__v_at_$(V))
|
||||||
|
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
|
||||||
|
am__v_at_0 = @
|
||||||
|
libdriver_a_AR = $(AR) $(ARFLAGS)
|
||||||
|
libdriver_a_LIBADD =
|
||||||
|
am_libdriver_a_OBJECTS = libdriver_a-disc.$(OBJEXT) \
|
||||||
|
libdriver_a-ds.$(OBJEXT) libdriver_a-logging.$(OBJEXT) \
|
||||||
|
libdriver_a-read.$(OBJEXT) libdriver_a-sector.$(OBJEXT) \
|
||||||
|
libdriver_a-track.$(OBJEXT) libdriver_a-util.$(OBJEXT) \
|
||||||
|
libdriver_a-_cdio_stdio.$(OBJEXT) \
|
||||||
|
libdriver_a-_cdio_stream.$(OBJEXT)
|
||||||
|
libdriver_a_OBJECTS = $(am_libdriver_a_OBJECTS)
|
||||||
|
DEFAULT_INCLUDES = -I.@am__isrc@
|
||||||
|
depcomp =
|
||||||
|
am__depfiles_maybe =
|
||||||
|
AM_V_lt = $(am__v_lt_$(V))
|
||||||
|
am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
|
||||||
|
am__v_lt_0 = --silent
|
||||||
|
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||||
|
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||||
|
AM_V_CC = $(am__v_CC_$(V))
|
||||||
|
am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
|
||||||
|
am__v_CC_0 = @echo " CC " $@;
|
||||||
|
CCLD = $(CC)
|
||||||
|
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||||
|
AM_V_CCLD = $(am__v_CCLD_$(V))
|
||||||
|
am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
|
||||||
|
am__v_CCLD_0 = @echo " CCLD " $@;
|
||||||
|
AM_V_GEN = $(am__v_GEN_$(V))
|
||||||
|
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
|
||||||
|
am__v_GEN_0 = @echo " GEN " $@;
|
||||||
|
SOURCES = $(libdriver_a_SOURCES)
|
||||||
|
ETAGS = etags
|
||||||
|
CTAGS = ctags
|
||||||
|
ACLOCAL = @ACLOCAL@
|
||||||
|
AMTAR = @AMTAR@
|
||||||
|
AM_CFLAGS = @AM_CFLAGS@
|
||||||
|
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
||||||
|
AM_LDFLAGS = @AM_LDFLAGS@
|
||||||
|
AM_RCFLAGS = @AM_RCFLAGS@
|
||||||
|
AUTOCONF = @AUTOCONF@
|
||||||
|
AUTOHEADER = @AUTOHEADER@
|
||||||
|
AUTOMAKE = @AUTOMAKE@
|
||||||
|
AWK = @AWK@
|
||||||
|
CC = @CC@
|
||||||
|
CFLAGS = @CFLAGS@
|
||||||
|
CPPFLAGS = @CPPFLAGS@
|
||||||
|
CYGPATH_W = @CYGPATH_W@
|
||||||
|
DEFS = @DEFS@
|
||||||
|
ECHO_C = @ECHO_C@
|
||||||
|
ECHO_N = @ECHO_N@
|
||||||
|
ECHO_T = @ECHO_T@
|
||||||
|
EXEEXT = @EXEEXT@
|
||||||
|
EXESUFFIX = @EXESUFFIX@
|
||||||
|
INSTALL = @INSTALL@
|
||||||
|
INSTALL_DATA = @INSTALL_DATA@
|
||||||
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||||
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||||
|
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||||
|
LDFLAGS = @LDFLAGS@
|
||||||
|
LIBOBJS = @LIBOBJS@
|
||||||
|
LIBS = @LIBS@
|
||||||
|
LTLIBOBJS = @LTLIBOBJS@
|
||||||
|
MAKEINFO = @MAKEINFO@
|
||||||
|
MKDIR_P = @MKDIR_P@
|
||||||
|
OBJEXT = @OBJEXT@
|
||||||
|
PACKAGE = @PACKAGE@
|
||||||
|
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||||
|
PACKAGE_NAME = @PACKAGE_NAME@
|
||||||
|
PACKAGE_STRING = @PACKAGE_STRING@
|
||||||
|
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||||
|
PACKAGE_URL = @PACKAGE_URL@
|
||||||
|
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||||
|
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||||
|
RANLIB = @RANLIB@
|
||||||
|
RM = @RM@
|
||||||
|
SET_MAKE = @SET_MAKE@
|
||||||
|
SHELL = @SHELL@
|
||||||
|
STRIP = @STRIP@
|
||||||
|
VERSION = @VERSION@
|
||||||
|
VISIBILITY_CFLAGS = @VISIBILITY_CFLAGS@
|
||||||
|
WINDRES = @WINDRES@
|
||||||
|
abs_builddir = @abs_builddir@
|
||||||
|
abs_srcdir = @abs_srcdir@
|
||||||
|
abs_top_builddir = @abs_top_builddir@
|
||||||
|
abs_top_srcdir = @abs_top_srcdir@
|
||||||
|
ac_ct_CC = @ac_ct_CC@
|
||||||
|
am__leading_dot = @am__leading_dot@
|
||||||
|
am__tar = @am__tar@
|
||||||
|
am__untar = @am__untar@
|
||||||
|
bindir = @bindir@
|
||||||
|
build_alias = @build_alias@
|
||||||
|
builddir = @builddir@
|
||||||
|
datadir = @datadir@
|
||||||
|
datarootdir = @datarootdir@
|
||||||
|
docdir = @docdir@
|
||||||
|
dvidir = @dvidir@
|
||||||
|
exec_prefix = @exec_prefix@
|
||||||
|
host_alias = @host_alias@
|
||||||
|
htmldir = @htmldir@
|
||||||
|
includedir = @includedir@
|
||||||
|
infodir = @infodir@
|
||||||
|
install_sh = @install_sh@
|
||||||
|
libdir = @libdir@
|
||||||
|
libexecdir = @libexecdir@
|
||||||
|
localedir = @localedir@
|
||||||
|
localstatedir = @localstatedir@
|
||||||
|
mandir = @mandir@
|
||||||
|
mkdir_p = @mkdir_p@
|
||||||
|
oldincludedir = @oldincludedir@
|
||||||
|
pdfdir = @pdfdir@
|
||||||
|
prefix = @prefix@
|
||||||
|
program_transform_name = @program_transform_name@
|
||||||
|
psdir = @psdir@
|
||||||
|
sbindir = @sbindir@
|
||||||
|
sharedstatedir = @sharedstatedir@
|
||||||
|
srcdir = @srcdir@
|
||||||
|
sysconfdir = @sysconfdir@
|
||||||
|
target_alias = @target_alias@
|
||||||
|
top_build_prefix = @top_build_prefix@
|
||||||
|
top_builddir = @top_builddir@
|
||||||
|
top_srcdir = @top_srcdir@
|
||||||
|
noinst_LIBRARIES = libdriver.a
|
||||||
|
libdriver_a_SOURCES = disc.c ds.c logging.c read.c sector.c track.c util.c _cdio_stdio.c _cdio_stream.c
|
||||||
|
libdriver_a_CFLAGS = -I. -I.. $(AM_CFLAGS)
|
||||||
|
all: all-am
|
||||||
|
|
||||||
|
.SUFFIXES:
|
||||||
|
.SUFFIXES: .c .o .obj
|
||||||
|
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||||
|
@for dep in $?; do \
|
||||||
|
case '$(am__configure_deps)' in \
|
||||||
|
*$$dep*) \
|
||||||
|
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
|
||||||
|
&& { if test -f $@; then exit 0; else break; fi; }; \
|
||||||
|
exit 1;; \
|
||||||
|
esac; \
|
||||||
|
done; \
|
||||||
|
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign --ignore-deps src/libcdio/driver/Makefile'; \
|
||||||
|
$(am__cd) $(top_srcdir) && \
|
||||||
|
$(AUTOMAKE) --foreign --ignore-deps src/libcdio/driver/Makefile
|
||||||
|
.PRECIOUS: Makefile
|
||||||
|
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||||
|
@case '$?' in \
|
||||||
|
*config.status*) \
|
||||||
|
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||||
|
*) \
|
||||||
|
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||||
|
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||||
|
esac;
|
||||||
|
|
||||||
|
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||||
|
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||||
|
|
||||||
|
$(top_srcdir)/configure: $(am__configure_deps)
|
||||||
|
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||||
|
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||||
|
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||||
|
$(am__aclocal_m4_deps):
|
||||||
|
|
||||||
|
clean-noinstLIBRARIES:
|
||||||
|
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
|
||||||
|
libdriver.a: $(libdriver_a_OBJECTS) $(libdriver_a_DEPENDENCIES)
|
||||||
|
$(AM_V_at)-rm -f libdriver.a
|
||||||
|
$(AM_V_AR)$(libdriver_a_AR) libdriver.a $(libdriver_a_OBJECTS) $(libdriver_a_LIBADD)
|
||||||
|
$(AM_V_at)$(RANLIB) libdriver.a
|
||||||
|
|
||||||
|
mostlyclean-compile:
|
||||||
|
-rm -f *.$(OBJEXT)
|
||||||
|
|
||||||
|
distclean-compile:
|
||||||
|
-rm -f *.tab.c
|
||||||
|
|
||||||
|
.c.o:
|
||||||
|
$(AM_V_CC) @AM_BACKSLASH@
|
||||||
|
$(COMPILE) -c $<
|
||||||
|
|
||||||
|
.c.obj:
|
||||||
|
$(AM_V_CC) @AM_BACKSLASH@
|
||||||
|
$(COMPILE) -c `$(CYGPATH_W) '$<'`
|
||||||
|
|
||||||
|
libdriver_a-disc.o: disc.c
|
||||||
|
$(AM_V_CC) @AM_BACKSLASH@
|
||||||
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdriver_a_CFLAGS) $(CFLAGS) -c -o libdriver_a-disc.o `test -f 'disc.c' || echo '$(srcdir)/'`disc.c
|
||||||
|
|
||||||
|
libdriver_a-disc.obj: disc.c
|
||||||
|
$(AM_V_CC) @AM_BACKSLASH@
|
||||||
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdriver_a_CFLAGS) $(CFLAGS) -c -o libdriver_a-disc.obj `if test -f 'disc.c'; then $(CYGPATH_W) 'disc.c'; else $(CYGPATH_W) '$(srcdir)/disc.c'; fi`
|
||||||
|
|
||||||
|
libdriver_a-ds.o: ds.c
|
||||||
|
$(AM_V_CC) @AM_BACKSLASH@
|
||||||
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdriver_a_CFLAGS) $(CFLAGS) -c -o libdriver_a-ds.o `test -f 'ds.c' || echo '$(srcdir)/'`ds.c
|
||||||
|
|
||||||
|
libdriver_a-ds.obj: ds.c
|
||||||
|
$(AM_V_CC) @AM_BACKSLASH@
|
||||||
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdriver_a_CFLAGS) $(CFLAGS) -c -o libdriver_a-ds.obj `if test -f 'ds.c'; then $(CYGPATH_W) 'ds.c'; else $(CYGPATH_W) '$(srcdir)/ds.c'; fi`
|
||||||
|
|
||||||
|
libdriver_a-logging.o: logging.c
|
||||||
|
$(AM_V_CC) @AM_BACKSLASH@
|
||||||
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdriver_a_CFLAGS) $(CFLAGS) -c -o libdriver_a-logging.o `test -f 'logging.c' || echo '$(srcdir)/'`logging.c
|
||||||
|
|
||||||
|
libdriver_a-logging.obj: logging.c
|
||||||
|
$(AM_V_CC) @AM_BACKSLASH@
|
||||||
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdriver_a_CFLAGS) $(CFLAGS) -c -o libdriver_a-logging.obj `if test -f 'logging.c'; then $(CYGPATH_W) 'logging.c'; else $(CYGPATH_W) '$(srcdir)/logging.c'; fi`
|
||||||
|
|
||||||
|
libdriver_a-read.o: read.c
|
||||||
|
$(AM_V_CC) @AM_BACKSLASH@
|
||||||
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdriver_a_CFLAGS) $(CFLAGS) -c -o libdriver_a-read.o `test -f 'read.c' || echo '$(srcdir)/'`read.c
|
||||||
|
|
||||||
|
libdriver_a-read.obj: read.c
|
||||||
|
$(AM_V_CC) @AM_BACKSLASH@
|
||||||
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdriver_a_CFLAGS) $(CFLAGS) -c -o libdriver_a-read.obj `if test -f 'read.c'; then $(CYGPATH_W) 'read.c'; else $(CYGPATH_W) '$(srcdir)/read.c'; fi`
|
||||||
|
|
||||||
|
libdriver_a-sector.o: sector.c
|
||||||
|
$(AM_V_CC) @AM_BACKSLASH@
|
||||||
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdriver_a_CFLAGS) $(CFLAGS) -c -o libdriver_a-sector.o `test -f 'sector.c' || echo '$(srcdir)/'`sector.c
|
||||||
|
|
||||||
|
libdriver_a-sector.obj: sector.c
|
||||||
|
$(AM_V_CC) @AM_BACKSLASH@
|
||||||
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdriver_a_CFLAGS) $(CFLAGS) -c -o libdriver_a-sector.obj `if test -f 'sector.c'; then $(CYGPATH_W) 'sector.c'; else $(CYGPATH_W) '$(srcdir)/sector.c'; fi`
|
||||||
|
|
||||||
|
libdriver_a-track.o: track.c
|
||||||
|
$(AM_V_CC) @AM_BACKSLASH@
|
||||||
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdriver_a_CFLAGS) $(CFLAGS) -c -o libdriver_a-track.o `test -f 'track.c' || echo '$(srcdir)/'`track.c
|
||||||
|
|
||||||
|
libdriver_a-track.obj: track.c
|
||||||
|
$(AM_V_CC) @AM_BACKSLASH@
|
||||||
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdriver_a_CFLAGS) $(CFLAGS) -c -o libdriver_a-track.obj `if test -f 'track.c'; then $(CYGPATH_W) 'track.c'; else $(CYGPATH_W) '$(srcdir)/track.c'; fi`
|
||||||
|
|
||||||
|
libdriver_a-util.o: util.c
|
||||||
|
$(AM_V_CC) @AM_BACKSLASH@
|
||||||
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdriver_a_CFLAGS) $(CFLAGS) -c -o libdriver_a-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c
|
||||||
|
|
||||||
|
libdriver_a-util.obj: util.c
|
||||||
|
$(AM_V_CC) @AM_BACKSLASH@
|
||||||
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdriver_a_CFLAGS) $(CFLAGS) -c -o libdriver_a-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi`
|
||||||
|
|
||||||
|
libdriver_a-_cdio_stdio.o: _cdio_stdio.c
|
||||||
|
$(AM_V_CC) @AM_BACKSLASH@
|
||||||
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdriver_a_CFLAGS) $(CFLAGS) -c -o libdriver_a-_cdio_stdio.o `test -f '_cdio_stdio.c' || echo '$(srcdir)/'`_cdio_stdio.c
|
||||||
|
|
||||||
|
libdriver_a-_cdio_stdio.obj: _cdio_stdio.c
|
||||||
|
$(AM_V_CC) @AM_BACKSLASH@
|
||||||
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdriver_a_CFLAGS) $(CFLAGS) -c -o libdriver_a-_cdio_stdio.obj `if test -f '_cdio_stdio.c'; then $(CYGPATH_W) '_cdio_stdio.c'; else $(CYGPATH_W) '$(srcdir)/_cdio_stdio.c'; fi`
|
||||||
|
|
||||||
|
libdriver_a-_cdio_stream.o: _cdio_stream.c
|
||||||
|
$(AM_V_CC) @AM_BACKSLASH@
|
||||||
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdriver_a_CFLAGS) $(CFLAGS) -c -o libdriver_a-_cdio_stream.o `test -f '_cdio_stream.c' || echo '$(srcdir)/'`_cdio_stream.c
|
||||||
|
|
||||||
|
libdriver_a-_cdio_stream.obj: _cdio_stream.c
|
||||||
|
$(AM_V_CC) @AM_BACKSLASH@
|
||||||
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdriver_a_CFLAGS) $(CFLAGS) -c -o libdriver_a-_cdio_stream.obj `if test -f '_cdio_stream.c'; then $(CYGPATH_W) '_cdio_stream.c'; else $(CYGPATH_W) '$(srcdir)/_cdio_stream.c'; fi`
|
||||||
|
|
||||||
|
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||||
|
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||||
|
unique=`for i in $$list; do \
|
||||||
|
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||||
|
done | \
|
||||||
|
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||||
|
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||||
|
mkid -fID $$unique
|
||||||
|
tags: TAGS
|
||||||
|
|
||||||
|
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||||
|
$(TAGS_FILES) $(LISP)
|
||||||
|
set x; \
|
||||||
|
here=`pwd`; \
|
||||||
|
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||||
|
unique=`for i in $$list; do \
|
||||||
|
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||||
|
done | \
|
||||||
|
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||||
|
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||||
|
shift; \
|
||||||
|
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
|
||||||
|
test -n "$$unique" || unique=$$empty_fix; \
|
||||||
|
if test $$# -gt 0; then \
|
||||||
|
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||||
|
"$$@" $$unique; \
|
||||||
|
else \
|
||||||
|
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||||
|
$$unique; \
|
||||||
|
fi; \
|
||||||
|
fi
|
||||||
|
ctags: CTAGS
|
||||||
|
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||||
|
$(TAGS_FILES) $(LISP)
|
||||||
|
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||||
|
unique=`for i in $$list; do \
|
||||||
|
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||||
|
done | \
|
||||||
|
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||||
|
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||||
|
test -z "$(CTAGS_ARGS)$$unique" \
|
||||||
|
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||||
|
$$unique
|
||||||
|
|
||||||
|
GTAGS:
|
||||||
|
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||||
|
&& $(am__cd) $(top_srcdir) \
|
||||||
|
&& gtags -i $(GTAGS_ARGS) "$$here"
|
||||||
|
|
||||||
|
distclean-tags:
|
||||||
|
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||||
|
check-am: all-am
|
||||||
|
check: check-am
|
||||||
|
all-am: Makefile $(LIBRARIES)
|
||||||
|
installdirs:
|
||||||
|
install: install-am
|
||||||
|
install-exec: install-exec-am
|
||||||
|
install-data: install-data-am
|
||||||
|
uninstall: uninstall-am
|
||||||
|
|
||||||
|
install-am: all-am
|
||||||
|
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||||
|
|
||||||
|
installcheck: installcheck-am
|
||||||
|
install-strip:
|
||||||
|
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||||
|
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||||
|
`test -z '$(STRIP)' || \
|
||||||
|
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||||
|
mostlyclean-generic:
|
||||||
|
|
||||||
|
clean-generic:
|
||||||
|
|
||||||
|
distclean-generic:
|
||||||
|
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||||
|
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
||||||
|
|
||||||
|
maintainer-clean-generic:
|
||||||
|
@echo "This command is intended for maintainers to use"
|
||||||
|
@echo "it deletes files that may require special tools to rebuild."
|
||||||
|
clean: clean-am
|
||||||
|
|
||||||
|
clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am
|
||||||
|
|
||||||
|
distclean: distclean-am
|
||||||
|
-rm -f Makefile
|
||||||
|
distclean-am: clean-am distclean-compile distclean-generic \
|
||||||
|
distclean-tags
|
||||||
|
|
||||||
|
dvi: dvi-am
|
||||||
|
|
||||||
|
dvi-am:
|
||||||
|
|
||||||
|
html: html-am
|
||||||
|
|
||||||
|
html-am:
|
||||||
|
|
||||||
|
info: info-am
|
||||||
|
|
||||||
|
info-am:
|
||||||
|
|
||||||
|
install-data-am:
|
||||||
|
|
||||||
|
install-dvi: install-dvi-am
|
||||||
|
|
||||||
|
install-dvi-am:
|
||||||
|
|
||||||
|
install-exec-am:
|
||||||
|
|
||||||
|
install-html: install-html-am
|
||||||
|
|
||||||
|
install-html-am:
|
||||||
|
|
||||||
|
install-info: install-info-am
|
||||||
|
|
||||||
|
install-info-am:
|
||||||
|
|
||||||
|
install-man:
|
||||||
|
|
||||||
|
install-pdf: install-pdf-am
|
||||||
|
|
||||||
|
install-pdf-am:
|
||||||
|
|
||||||
|
install-ps: install-ps-am
|
||||||
|
|
||||||
|
install-ps-am:
|
||||||
|
|
||||||
|
installcheck-am:
|
||||||
|
|
||||||
|
maintainer-clean: maintainer-clean-am
|
||||||
|
-rm -f Makefile
|
||||||
|
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||||
|
|
||||||
|
mostlyclean: mostlyclean-am
|
||||||
|
|
||||||
|
mostlyclean-am: mostlyclean-compile mostlyclean-generic
|
||||||
|
|
||||||
|
pdf: pdf-am
|
||||||
|
|
||||||
|
pdf-am:
|
||||||
|
|
||||||
|
ps: ps-am
|
||||||
|
|
||||||
|
ps-am:
|
||||||
|
|
||||||
|
uninstall-am:
|
||||||
|
|
||||||
|
.MAKE: install-am install-strip
|
||||||
|
|
||||||
|
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
|
||||||
|
clean-noinstLIBRARIES ctags distclean distclean-compile \
|
||||||
|
distclean-generic distclean-tags dvi dvi-am html html-am info \
|
||||||
|
info-am install install-am install-data install-data-am \
|
||||||
|
install-dvi install-dvi-am install-exec install-exec-am \
|
||||||
|
install-html install-html-am install-info install-info-am \
|
||||||
|
install-man install-pdf install-pdf-am install-ps \
|
||||||
|
install-ps-am install-strip installcheck installcheck-am \
|
||||||
|
installdirs maintainer-clean maintainer-clean-generic \
|
||||||
|
mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \
|
||||||
|
ps ps-am tags uninstall uninstall-am
|
||||||
|
|
||||||
|
|
||||||
|
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||||
|
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||||
|
.NOEXPORT:
|
228
src/libcdio/driver/_cdio_stdio.c
Normal file
228
src/libcdio/driver/_cdio_stdio.c
Normal file
|
@ -0,0 +1,228 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2003, 2004, 2005, 2008, 2011 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
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_CONFIG_H) && !defined(__CDIO_CONFIG_H__)
|
||||||
|
# include "config.h"
|
||||||
|
# define __CDIO_CONFIG_H__ 1
|
||||||
|
#else
|
||||||
|
#ifndef EXTERNAL_LIBCDIO_CONFIG_H
|
||||||
|
#define EXTERNAL_LIBCDIO_CONFIG_H
|
||||||
|
#include <cdio/cdio_config.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_UNISTD_H
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif /*HAVE_UNISTD_H*/
|
||||||
|
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
#include <cdio/logging.h>
|
||||||
|
#include <cdio/util.h>
|
||||||
|
#include "_cdio_stream.h"
|
||||||
|
#include "_cdio_stdio.h"
|
||||||
|
|
||||||
|
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 {
|
||||||
|
char *pathname;
|
||||||
|
FILE *fd;
|
||||||
|
char *fd_buf;
|
||||||
|
off_t st_size; /* used only for source */
|
||||||
|
} _UserData;
|
||||||
|
|
||||||
|
static int
|
||||||
|
_stdio_open (void *user_data)
|
||||||
|
{
|
||||||
|
_UserData *const ud = user_data;
|
||||||
|
|
||||||
|
if ((ud->fd = fopen (ud->pathname, "rb")))
|
||||||
|
{
|
||||||
|
ud->fd_buf = calloc (1, CDIO_STDIO_BUFSIZE);
|
||||||
|
setvbuf (ud->fd, ud->fd_buf, _IOFBF, CDIO_STDIO_BUFSIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (ud->fd == NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_stdio_close(void *user_data)
|
||||||
|
{
|
||||||
|
_UserData *const ud = user_data;
|
||||||
|
|
||||||
|
if (fclose (ud->fd))
|
||||||
|
cdio_error ("fclose (): %s", strerror (errno));
|
||||||
|
|
||||||
|
ud->fd = NULL;
|
||||||
|
|
||||||
|
free (ud->fd_buf);
|
||||||
|
ud->fd_buf = NULL;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_stdio_free(void *user_data)
|
||||||
|
{
|
||||||
|
_UserData *const ud = user_data;
|
||||||
|
|
||||||
|
if (ud->pathname)
|
||||||
|
free(ud->pathname);
|
||||||
|
|
||||||
|
if (ud->fd) /* should be NULL anyway... */
|
||||||
|
_stdio_close(user_data);
|
||||||
|
|
||||||
|
free(ud);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Like fseek(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
|
||||||
|
is set to SEEK_SET, SEEK_CUR, or SEEK_END, the offset is relative to
|
||||||
|
the start of the file, the current position indicator, or end-of-file,
|
||||||
|
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 driver_return_code_t
|
||||||
|
_stdio_seek(void *p_user_data, long i_offset, int whence)
|
||||||
|
{
|
||||||
|
_UserData *const ud = p_user_data;
|
||||||
|
|
||||||
|
if ( (i_offset=fseek (ud->fd, i_offset, whence)) ) {
|
||||||
|
cdio_error ("fseek (): %s", strerror (errno));
|
||||||
|
}
|
||||||
|
|
||||||
|
return i_offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
static long int
|
||||||
|
_stdio_stat(void *p_user_data)
|
||||||
|
{
|
||||||
|
const _UserData *const ud = p_user_data;
|
||||||
|
|
||||||
|
return ud->st_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
static long
|
||||||
|
_stdio_read(void *user_data, void *buf, long int count)
|
||||||
|
{
|
||||||
|
_UserData *const ud = user_data;
|
||||||
|
long read_size;
|
||||||
|
|
||||||
|
read_size = fread(buf, 1, count, ud->fd);
|
||||||
|
|
||||||
|
if (read_size != count)
|
||||||
|
{ /* fixme -- ferror/feof */
|
||||||
|
if (feof (ud->fd))
|
||||||
|
{
|
||||||
|
cdio_debug ("fread (): EOF encountered");
|
||||||
|
clearerr (ud->fd);
|
||||||
|
}
|
||||||
|
else if (ferror (ud->fd))
|
||||||
|
{
|
||||||
|
cdio_error ("fread (): %s", strerror (errno));
|
||||||
|
clearerr (ud->fd);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
cdio_debug ("fread (): short read and no EOF?!?");
|
||||||
|
}
|
||||||
|
|
||||||
|
return read_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Deallocate resources assocaited with obj. After this obj is unusable.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
cdio_stdio_destroy(CdioDataSource_t *p_obj)
|
||||||
|
{
|
||||||
|
cdio_stream_destroy(p_obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
CdioDataSource_t *
|
||||||
|
cdio_stdio_new(const char pathname[])
|
||||||
|
{
|
||||||
|
CdioDataSource_t *new_obj = NULL;
|
||||||
|
cdio_stream_io_functions funcs = { NULL, NULL, NULL, NULL, NULL, NULL };
|
||||||
|
_UserData *ud = NULL;
|
||||||
|
struct _stat statbuf;
|
||||||
|
|
||||||
|
if (_stat (pathname, &statbuf) == -1)
|
||||||
|
{
|
||||||
|
cdio_warn ("could not retrieve file info for `%s': %s",
|
||||||
|
pathname, strerror (errno));
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ud = calloc (1, sizeof (_UserData));
|
||||||
|
|
||||||
|
ud->pathname = _strdup(pathname);
|
||||||
|
ud->st_size = statbuf.st_size; /* let's hope it doesn't change... */
|
||||||
|
|
||||||
|
funcs.open = _stdio_open;
|
||||||
|
funcs.seek = _stdio_seek;
|
||||||
|
funcs.stat = _stdio_stat;
|
||||||
|
funcs.read = _stdio_read;
|
||||||
|
funcs.close = _stdio_close;
|
||||||
|
funcs.free = _stdio_free;
|
||||||
|
|
||||||
|
new_obj = cdio_stream_new(ud, &funcs);
|
||||||
|
|
||||||
|
return new_obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* c-file-style: "gnu"
|
||||||
|
* tab-width: 8
|
||||||
|
* indent-tabs-mode: nil
|
||||||
|
* End:
|
||||||
|
*/
|
223
src/libcdio/driver/_cdio_stream.c
Normal file
223
src/libcdio/driver/_cdio_stream.c
Normal file
|
@ -0,0 +1,223 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2005, 2006, 2008, 2011 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
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_CONFIG_H) && !defined(__CDIO_CONFIG_H__)
|
||||||
|
# include "config.h"
|
||||||
|
# define __CDIO_CONFIG_H__ 1
|
||||||
|
#else
|
||||||
|
#ifndef EXTERNAL_LIBCDIO_CONFIG_H
|
||||||
|
#define EXTERNAL_LIBCDIO_CONFIG_H
|
||||||
|
#include <cdio/cdio_config.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_UNISTD_H
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif /*HAVE_UNISTD_H*/
|
||||||
|
|
||||||
|
#include "cdio_assert.h"
|
||||||
|
|
||||||
|
/* #define STREAM_DEBUG */
|
||||||
|
|
||||||
|
#include <cdio/logging.h>
|
||||||
|
#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
|
||||||
|
*/
|
||||||
|
|
||||||
|
struct _CdioDataSource {
|
||||||
|
void* user_data;
|
||||||
|
cdio_stream_io_functions op;
|
||||||
|
int is_open;
|
||||||
|
long position;
|
||||||
|
};
|
||||||
|
|
||||||
|
void
|
||||||
|
cdio_stream_close(CdioDataSource_t *p_obj)
|
||||||
|
{
|
||||||
|
if (!p_obj) return;
|
||||||
|
|
||||||
|
if (p_obj->is_open) {
|
||||||
|
cdio_debug ("closed source...");
|
||||||
|
p_obj->op.close(p_obj->user_data);
|
||||||
|
p_obj->is_open = 0;
|
||||||
|
p_obj->position = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
cdio_stream_destroy(CdioDataSource_t *p_obj)
|
||||||
|
{
|
||||||
|
if (!p_obj) return;
|
||||||
|
|
||||||
|
cdio_stream_close(p_obj);
|
||||||
|
|
||||||
|
p_obj->op.free(p_obj->user_data);
|
||||||
|
|
||||||
|
free(p_obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Like 3 fgetpos.
|
||||||
|
|
||||||
|
This function gets the current file position indicator for the stream
|
||||||
|
pointed to by stream.
|
||||||
|
|
||||||
|
@return unpon successful completion, return value is positive, else,
|
||||||
|
the global variable errno is set to indicate the error.
|
||||||
|
*/
|
||||||
|
ssize_t
|
||||||
|
cdio_stream_getpos(CdioDataSource_t* p_obj, /*out*/ ssize_t *i_offset)
|
||||||
|
{
|
||||||
|
if (!p_obj || !p_obj->is_open) return DRIVER_OP_UNINIT;
|
||||||
|
return *i_offset = p_obj->position;
|
||||||
|
}
|
||||||
|
|
||||||
|
CdioDataSource_t *
|
||||||
|
cdio_stream_new(void *user_data, const cdio_stream_io_functions *funcs)
|
||||||
|
{
|
||||||
|
CdioDataSource_t *new_obj;
|
||||||
|
|
||||||
|
new_obj = calloc (1, sizeof (CdioDataSource_t));
|
||||||
|
|
||||||
|
new_obj->user_data = user_data;
|
||||||
|
memcpy(&(new_obj->op), funcs, sizeof(cdio_stream_io_functions));
|
||||||
|
|
||||||
|
return new_obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Open if not already open.
|
||||||
|
Return false if we hit an error. Errno should be set for that error.
|
||||||
|
*/
|
||||||
|
static bool
|
||||||
|
_cdio_stream_open_if_necessary(CdioDataSource_t *p_obj)
|
||||||
|
{
|
||||||
|
if (!p_obj) return false;
|
||||||
|
|
||||||
|
if (!p_obj->is_open) {
|
||||||
|
if (p_obj->op.open(p_obj->user_data)) {
|
||||||
|
cdio_warn ("could not open input stream...");
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
cdio_debug ("opened source...");
|
||||||
|
p_obj->is_open = 1;
|
||||||
|
p_obj->position = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
ssize_t
|
||||||
|
cdio_stream_read(CdioDataSource_t* p_obj, void *ptr, long size, long nmemb)
|
||||||
|
{
|
||||||
|
long read_bytes;
|
||||||
|
|
||||||
|
if (!p_obj) return 0;
|
||||||
|
if (!_cdio_stream_open_if_necessary(p_obj)) return 0;
|
||||||
|
|
||||||
|
read_bytes = (p_obj->op.read)(p_obj->user_data, ptr, size*nmemb);
|
||||||
|
p_obj->position += read_bytes;
|
||||||
|
|
||||||
|
return read_bytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
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
|
||||||
|
is set to SEEK_SET, SEEK_CUR, or SEEK_END, the offset is relative to
|
||||||
|
the start of the file, the current position indicator, or end-of-file,
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
ssize_t
|
||||||
|
cdio_stream_seek(CdioDataSource_t* p_obj, ssize_t offset, int whence)
|
||||||
|
{
|
||||||
|
if (!p_obj) return DRIVER_OP_UNINIT;
|
||||||
|
|
||||||
|
if (!_cdio_stream_open_if_necessary(p_obj))
|
||||||
|
/* errno is set by _cdio_stream_open_if necessary. */
|
||||||
|
return DRIVER_OP_ERROR;
|
||||||
|
|
||||||
|
if (offset < 0) return DRIVER_OP_ERROR;
|
||||||
|
|
||||||
|
if (p_obj->position != offset) {
|
||||||
|
#ifdef STREAM_DEBUG
|
||||||
|
cdio_warn("had to reposition DataSource from %ld to %ld!", obj->position, offset);
|
||||||
|
#endif
|
||||||
|
p_obj->position = (long)offset;
|
||||||
|
return p_obj->op.seek(p_obj->user_data, (long)offset, whence);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Return whatever size of stream reports, I guess unit size is bytes.
|
||||||
|
On error return -1;
|
||||||
|
*/
|
||||||
|
ssize_t
|
||||||
|
cdio_stream_stat(CdioDataSource_t *p_obj)
|
||||||
|
{
|
||||||
|
if (!p_obj) return -1;
|
||||||
|
if (!_cdio_stream_open_if_necessary(p_obj)) return -1;
|
||||||
|
|
||||||
|
return p_obj->op.stat(p_obj->user_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* c-file-style: "gnu"
|
||||||
|
* tab-width: 8
|
||||||
|
* indent-tabs-mode: nil
|
||||||
|
* End:
|
||||||
|
*/
|
|
@ -27,62 +27,536 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <cdio/cdio.h>
|
#include <cdio/cdio.h>
|
||||||
#include <cdio/disc.h>
|
#include <cdio/audio.h>
|
||||||
#include <cdio/iso9660.h>
|
//#include <cdio/cdtext.h>
|
||||||
|
//#include "mmc/mmc_private.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
extern const char * cdio_dirname(const char *fname);
|
||||||
|
extern const char *cdio_abspath(const char *cwd, const char *fname);
|
||||||
|
|
||||||
|
/* Opaque type */
|
||||||
|
typedef struct _CdioDataSource CdioDataSource_t;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#include "generic.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
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)
|
||||||
|
(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,
|
||||||
|
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)
|
||||||
|
( 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)
|
||||||
|
( 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)
|
||||||
|
( 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.
|
||||||
|
|
||||||
|
@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.
|
||||||
|
*/
|
||||||
|
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
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
cdtext_t * (*get_cdtext) ( void *p_env );
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Get raw cdtext information as on the disc for a CdIo object
|
||||||
|
|
||||||
|
@param obj the CD object that may contain CD-TEXT information.
|
||||||
|
@return pointer to the raw CD-TEXT data or NULL if obj is NULL
|
||||||
|
or no CD-TEXT information present on the disc.
|
||||||
|
|
||||||
|
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
|
||||||
|
driver.
|
||||||
|
|
||||||
|
NULL is returned if we couldn't return a list of devices.
|
||||||
|
*/
|
||||||
|
char ** (*get_devices) ( void );
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Get the default CD device.
|
||||||
|
|
||||||
|
@return a string containing the default CD device or NULL is
|
||||||
|
if we couldn't get a default device.
|
||||||
|
|
||||||
|
In some situations of drivers or OS's we can't find a CD device if
|
||||||
|
there is no media in it and it is possible for this routine to return
|
||||||
|
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,
|
||||||
|
cdio_drive_read_cap_t *p_read_cap,
|
||||||
|
cdio_drive_write_cap_t *p_write_cap,
|
||||||
|
cdio_drive_misc_cap_t *p_misc_cap);
|
||||||
|
/*!
|
||||||
|
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)
|
||||||
|
( 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
|
||||||
|
return codes are the same as driver_return_code_t
|
||||||
|
*/
|
||||||
|
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
|
||||||
|
using track_num LEADOUT_TRACK or the total tracks+1.
|
||||||
|
CDIO_INVALID_LBA is returned on error.
|
||||||
|
*/
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
lba_t (*get_track_pregap_lba) ( const void *p_env, track_t i_track );
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Return the International Standard Recording Code (ISRC) for track number
|
||||||
|
i_track in p_cdio. Track numbers start at 1.
|
||||||
|
|
||||||
|
Note: string is malloc'd so caller has to free() the returned
|
||||||
|
string when done with it.
|
||||||
|
*/
|
||||||
|
char * (*get_track_isrc) ( const void *p_env, track_t i_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
|
||||||
|
using i_track LEADOUT_TRACK or the total tracks+1.
|
||||||
|
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)
|
||||||
|
( const void *p_env, track_t i_track );
|
||||||
|
|
||||||
|
/*!
|
||||||
|
lseek - reposition read/write file offset
|
||||||
|
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.
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
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,
|
||||||
|
M2RAW_SECTOR_SIZE, or M2F2_SECTOR_SIZE depending
|
||||||
|
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,
|
||||||
|
M2RAW_SECTOR_SIZE.
|
||||||
|
|
||||||
|
@param i_lsn sector to read
|
||||||
|
@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)
|
||||||
|
( 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.
|
||||||
|
*/
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
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.
|
||||||
|
|
||||||
|
cdio CD structure set by cdio_open().
|
||||||
|
i_timeout_ms time in milliseconds we will wait for the command
|
||||||
|
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
|
||||||
|
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;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
driver_return_code_t (*set_blocksize) ( void *p_env,
|
||||||
|
uint16_t i_blocksize );
|
||||||
|
|
||||||
|
/*!
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
int (*set_speed) ( void *p_env, int i_speed );
|
||||||
|
|
||||||
|
} cdio_funcs_t;
|
||||||
|
|
||||||
#define CdioDataSource_t int
|
|
||||||
|
|
||||||
/*! Implementation of CdIo type */
|
/*! Implementation of CdIo type */
|
||||||
struct _CdIo {
|
struct _CdIo {
|
||||||
// driver_id_t driver_id; /**< Particular driver opened. */
|
driver_id_t driver_id; /**< Particular driver opened. */
|
||||||
// cdio_funcs_t op; /**< driver-specific routines handling
|
cdio_funcs_t op; /**< driver-specific routines handling
|
||||||
// implementation*/
|
implementation*/
|
||||||
void *env; /**< environment. Passed to routine above. */
|
void *env; /**< environment. Passed to routine above. */
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct {
|
/* This is used in drivers that must keep their own internal
|
||||||
char *source_name; /**< Name used in open. */
|
position pointer for doing seeks. Stream-based drivers (like bincue,
|
||||||
bool init; /**< True if structure has been initialized */
|
nrg, toc, network) would use this.
|
||||||
bool toc_init; /**< True if TOC read in */
|
|
||||||
bool b_cdtext_error; /**< True if trouble reading CD-Text */
|
|
||||||
|
|
||||||
int ioctls_debugged; /**< for debugging */
|
|
||||||
|
|
||||||
/* Only one of data_source or fd is used; fd is for CD-ROM
|
|
||||||
devices and the data_source for stream reading (bincue, nrg, toc,
|
|
||||||
network).
|
|
||||||
*/
|
*/
|
||||||
CdioDataSource_t *data_source;
|
typedef struct
|
||||||
int fd; /**< File descriptor of device */
|
{
|
||||||
track_t i_first_track; /**< The starting track number. */
|
off_t buff_offset; /* buffer offset in disk-image seeks. */
|
||||||
track_t i_tracks; /**< The number of tracks. */
|
track_t index; /* Current track index in tocent. */
|
||||||
|
lba_t lba; /* Current LBA */
|
||||||
|
} internal_position_t;
|
||||||
|
|
||||||
uint8_t i_joliet_level; /**< 0 = no Joliet extensions.
|
CdIo_t * cdio_new (generic_img_private_t *p_env, cdio_funcs_t *p_funcs);
|
||||||
1-3: Joliet level. */
|
|
||||||
iso9660_pvd_t pvd;
|
|
||||||
iso9660_svd_t svd;
|
|
||||||
CdIo_t *cdio; /**< a way to call general cdio routines. */
|
|
||||||
// cdtext_t *cdtext; /**< CD-Text for disc. */
|
|
||||||
// track_flags_t track_flags[CDIO_CD_MAX_TRACKS+1];
|
|
||||||
|
|
||||||
/* Memorized sense reply of the most recent SCSI command.
|
/* The below structure describes a specific CD Input driver */
|
||||||
Recorded by driver implementations of cdio_funcs_t.run_mmc_cmd().
|
typedef struct
|
||||||
Read by API function mmc_get_cmd_scsi_sense().
|
{
|
||||||
|
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 (*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
|
||||||
|
on a particular host. */
|
||||||
|
extern CdIo_driver_t CdIo_driver[];
|
||||||
|
|
||||||
|
/* The last valid entry of Cdio_driver. -1 means uninitialzed. -2
|
||||||
|
means some sort of error.
|
||||||
*/
|
*/
|
||||||
// unsigned char scsi_mmc_sense[263]; /* See SPC-3 4.5.3 : 252 bytes legal
|
extern int CdIo_last_driver;
|
||||||
// but 263 bytes possible */
|
|
||||||
// int scsi_mmc_sense_valid; /* Number of valid sense bytes */
|
|
||||||
|
|
||||||
/* Memorized eventual system specific SCSI address tuple text.
|
/* The below array gives all drivers that can possibly appear.
|
||||||
Empty text means that there is no such text defined for the drive.
|
on a particular host. */
|
||||||
NULL means that the driver does not support "scsi-tuple".
|
extern CdIo_driver_t CdIo_all_drivers[];
|
||||||
To be read by cdio_get_arg("scsi-tuple").
|
|
||||||
System specific suffixes to the key may demand and eventually
|
/*!
|
||||||
guarantee a further specified format.
|
Add/allocate a drive to the end of drives.
|
||||||
E.g. "scsi-tuple-linux" guarantees either "Bus,Host,Channel,Target,Lun",
|
Use cdio_free_device_list() to free this device_list.
|
||||||
or empty text, or NULL. No other forms.
|
|
||||||
*/
|
*/
|
||||||
char *scsi_tuple;
|
void cdio_add_device_list(char **device_list[], const char *psz_drive,
|
||||||
} generic_img_private_t;
|
unsigned int *i_drives);
|
||||||
|
|
||||||
#endif
|
driver_return_code_t close_tray_bsdi (const char *psz_drive);
|
||||||
|
driver_return_code_t close_tray_freebsd (const char *psz_drive);
|
||||||
|
driver_return_code_t close_tray_linux (const char *psz_drive);
|
||||||
|
driver_return_code_t close_tray_netbsd (const char *psz_drive);
|
||||||
|
driver_return_code_t close_tray_os2 (const char *psz_drive);
|
||||||
|
driver_return_code_t close_tray_osx (const char *psz_drive);
|
||||||
|
driver_return_code_t close_tray_solaris (const char *psz_drive);
|
||||||
|
driver_return_code_t close_tray_win32 (const char *psz_drive);
|
||||||
|
|
||||||
|
bool cdio_have_netbsd(void);
|
||||||
|
CdIo_t * cdio_open_netbsd (const char *psz_source);
|
||||||
|
char * cdio_get_default_device_netbsd(void);
|
||||||
|
char **cdio_get_devices_netbsd(void);
|
||||||
|
/*! Set up CD-ROM for reading using the NetBSD driver. The device_name is
|
||||||
|
the some sort of device name.
|
||||||
|
|
||||||
|
NULL is returned on error or there is no FreeBSD driver.
|
||||||
|
|
||||||
|
@see cdio_open_cd, cdio_open
|
||||||
|
*/
|
||||||
|
CdIo_t * cdio_open_am_netbsd (const char *psz_source,
|
||||||
|
const char *psz_access_mode);
|
||||||
|
|
||||||
|
/*! DEPRICATED: use cdio_have_driver().
|
||||||
|
True if AIX driver is available. */
|
||||||
|
bool cdio_have_aix (void);
|
||||||
|
|
||||||
|
/*! DEPRICATED: use cdio_have_driver().
|
||||||
|
True if BSDI driver is available. */
|
||||||
|
bool cdio_have_bsdi (void);
|
||||||
|
|
||||||
|
/*! DEPRICATED: use cdio_have_driver().
|
||||||
|
True if FreeBSD driver is available. */
|
||||||
|
bool cdio_have_freebsd (void);
|
||||||
|
|
||||||
|
/*! DEPRICATED: use cdio_have_driver().
|
||||||
|
True if GNU/Linux driver is available. */
|
||||||
|
bool cdio_have_linux (void);
|
||||||
|
|
||||||
|
/*! DEPRICATED: use cdio_have_driver().
|
||||||
|
True if Sun Solaris driver is available. */
|
||||||
|
bool cdio_have_solaris (void);
|
||||||
|
|
||||||
|
/*! DEPRICATED: use cdio_have_driver().
|
||||||
|
True if IBM OS2 driver is available. */
|
||||||
|
bool cdio_have_os2 (void);
|
||||||
|
|
||||||
|
/*! DEPRICATED: use cdio_have_driver().
|
||||||
|
True if Apple OSX driver is available. */
|
||||||
|
bool cdio_have_osx (void);
|
||||||
|
|
||||||
|
/*! DEPRICATED: use cdio_have_driver().
|
||||||
|
True if Microsoft Windows driver is available. */
|
||||||
|
bool cdio_have_win32 (void);
|
||||||
|
|
||||||
|
/*! True if Nero driver is available. */
|
||||||
|
bool cdio_have_nrg (void);
|
||||||
|
|
||||||
|
/*! True if BIN/CUE driver is available. */
|
||||||
|
bool cdio_have_bincue (void);
|
||||||
|
|
||||||
|
/*! True if cdrdao CDRDAO driver is available. */
|
||||||
|
bool cdio_have_cdrdao (void);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#endif /* __CDIO_PRIVATE_H__ */
|
||||||
|
|
168
src/libcdio/driver/disc.c
Normal file
168
src/libcdio/driver/disc.c
Normal file
|
@ -0,0 +1,168 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2003, 2004, 2005, 2008, 2011
|
||||||
|
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
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_CONFIG_H) && !defined(__CDIO_CONFIG_H__)
|
||||||
|
# include "config.h"
|
||||||
|
# define __CDIO_CONFIG_H__ 1
|
||||||
|
#else
|
||||||
|
#ifndef EXTERNAL_LIBCDIO_CONFIG_H
|
||||||
|
#define EXTERNAL_LIBCDIO_CONFIG_H
|
||||||
|
#include <cdio/cdio_config.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <cdio/cdio.h>
|
||||||
|
#include "cdio_private.h"
|
||||||
|
|
||||||
|
/* Must match discmode enumeration */
|
||||||
|
const char *discmode2str[] = {
|
||||||
|
"CD-DA",
|
||||||
|
"CD-DATA (Mode 1)",
|
||||||
|
"CD DATA (Mode 2)",
|
||||||
|
"CD-ROM Mixed",
|
||||||
|
"DVD-ROM",
|
||||||
|
"DVD-RAM",
|
||||||
|
"DVD-R",
|
||||||
|
"DVD-RW",
|
||||||
|
"HD DVD ROM",
|
||||||
|
"HD_DVD RAM",
|
||||||
|
"HD DVD-R",
|
||||||
|
"DVD+R",
|
||||||
|
"DVD+RW",
|
||||||
|
"DVD+RW DL",
|
||||||
|
"DVD+R DL",
|
||||||
|
"Unknown/unclassified DVD",
|
||||||
|
"No information",
|
||||||
|
"Error in getting information",
|
||||||
|
"CD-i"
|
||||||
|
};
|
||||||
|
|
||||||
|
/*!
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
cdtext_t *
|
||||||
|
cdio_get_cdtext (CdIo *obj)
|
||||||
|
{
|
||||||
|
if (obj == NULL) return NULL;
|
||||||
|
|
||||||
|
if (NULL != obj->op.get_cdtext) {
|
||||||
|
return obj->op.get_cdtext (obj->env);
|
||||||
|
} else {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Get binary cdtext information for a CdIo object .
|
||||||
|
|
||||||
|
@param obj the CD object that may contain CD-TEXT information.
|
||||||
|
@return pointer to allocated memory area holding the raw CD-TEXT
|
||||||
|
or NULL if obj is NULL or CD-TEXT does not exist.
|
||||||
|
free() when done.
|
||||||
|
*/
|
||||||
|
uint8_t *
|
||||||
|
cdio_get_cdtext_raw (CdIo *obj)
|
||||||
|
{
|
||||||
|
if (obj == NULL) return NULL;
|
||||||
|
|
||||||
|
if (NULL != obj->op.get_cdtext_raw) {
|
||||||
|
return obj->op.get_cdtext_raw (obj->env);
|
||||||
|
} else {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Get the size of the CD in logical block address (LBA) units.
|
||||||
|
|
||||||
|
@param p_cdio the CD object queried
|
||||||
|
@return the lsn. On error 0 or CDIO_INVALD_LSN.
|
||||||
|
*/
|
||||||
|
lsn_t
|
||||||
|
cdio_get_disc_last_lsn(const CdIo_t *p_cdio)
|
||||||
|
{
|
||||||
|
if (!p_cdio) return CDIO_INVALID_LSN;
|
||||||
|
return p_cdio->op.get_disc_last_lsn (p_cdio->env);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Get medium associated with cd_obj.
|
||||||
|
*/
|
||||||
|
discmode_t
|
||||||
|
cdio_get_discmode (CdIo_t *cd_obj)
|
||||||
|
{
|
||||||
|
if (!cd_obj) return CDIO_DISC_MODE_ERROR;
|
||||||
|
|
||||||
|
if (cd_obj->op.get_discmode) {
|
||||||
|
return cd_obj->op.get_discmode (cd_obj->env);
|
||||||
|
} else {
|
||||||
|
return CDIO_DISC_MODE_NO_INFO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Return a string containing the name of the driver in use.
|
||||||
|
if CdIo is NULL (we haven't initialized a specific device driver),
|
||||||
|
then return NULL.
|
||||||
|
*/
|
||||||
|
char *
|
||||||
|
cdio_get_mcn (const CdIo_t *p_cdio)
|
||||||
|
{
|
||||||
|
if (p_cdio->op.get_mcn) {
|
||||||
|
return p_cdio->op.get_mcn (p_cdio->env);
|
||||||
|
} else {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
cdio_is_discmode_cdrom(discmode_t discmode)
|
||||||
|
{
|
||||||
|
switch (discmode) {
|
||||||
|
case CDIO_DISC_MODE_CD_DA:
|
||||||
|
case CDIO_DISC_MODE_CD_DATA:
|
||||||
|
case CDIO_DISC_MODE_CD_XA:
|
||||||
|
case CDIO_DISC_MODE_CD_MIXED:
|
||||||
|
case CDIO_DISC_MODE_NO_INFO:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
cdio_is_discmode_dvd(discmode_t discmode)
|
||||||
|
{
|
||||||
|
switch (discmode) {
|
||||||
|
case CDIO_DISC_MODE_DVD_ROM:
|
||||||
|
case CDIO_DISC_MODE_DVD_RAM:
|
||||||
|
case CDIO_DISC_MODE_DVD_R:
|
||||||
|
case CDIO_DISC_MODE_DVD_RW:
|
||||||
|
case CDIO_DISC_MODE_DVD_PR:
|
||||||
|
case CDIO_DISC_MODE_DVD_PRW:
|
||||||
|
case CDIO_DISC_MODE_DVD_OTHER:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
255
src/libcdio/driver/ds.c
Normal file
255
src/libcdio/driver/ds.c
Normal file
|
@ -0,0 +1,255 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2005, 2008, 2011 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
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_CONFIG_H) && !defined(__CDIO_CONFIG_H__)
|
||||||
|
# include "config.h"
|
||||||
|
# define __CDIO_CONFIG_H__ 1
|
||||||
|
#else
|
||||||
|
#ifndef EXTERNAL_LIBCDIO_CONFIG_H
|
||||||
|
#define EXTERNAL_LIBCDIO_CONFIG_H
|
||||||
|
#include <cdio/cdio_config.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <cdio/ds.h>
|
||||||
|
#include <cdio/util.h>
|
||||||
|
#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;
|
||||||
|
|
||||||
|
CdioListNode_t *begin;
|
||||||
|
CdioListNode_t *end;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _CdioListNode
|
||||||
|
{
|
||||||
|
CdioList_t *list;
|
||||||
|
|
||||||
|
CdioListNode_t *next;
|
||||||
|
|
||||||
|
void *data;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* impl */
|
||||||
|
|
||||||
|
CdioList_t *
|
||||||
|
_cdio_list_new (void)
|
||||||
|
{
|
||||||
|
CdioList_t *p_new_obj = calloc (1, sizeof (CdioList_t));
|
||||||
|
|
||||||
|
return p_new_obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
_cdio_list_free (CdioList_t *p_list, int free_data)
|
||||||
|
{
|
||||||
|
while (_cdio_list_length (p_list))
|
||||||
|
_cdio_list_node_free (_cdio_list_begin (p_list), free_data);
|
||||||
|
|
||||||
|
free (p_list);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned
|
||||||
|
_cdio_list_length (const CdioList_t *p_list)
|
||||||
|
{
|
||||||
|
cdio_assert (p_list != NULL);
|
||||||
|
|
||||||
|
return p_list->length;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
_cdio_list_prepend (CdioList_t *p_list, void *p_data)
|
||||||
|
{
|
||||||
|
CdioListNode_t *p_new_node;
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
p_list->begin = p_new_node;
|
||||||
|
if (p_list->length == 0)
|
||||||
|
p_list->end = p_new_node;
|
||||||
|
|
||||||
|
p_list->length++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
_cdio_list_append (CdioList_t *p_list, void *p_data)
|
||||||
|
{
|
||||||
|
cdio_assert (p_list != NULL);
|
||||||
|
|
||||||
|
if (p_list->length == 0)
|
||||||
|
{
|
||||||
|
_cdio_list_prepend (p_list, 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;
|
||||||
|
|
||||||
|
p_list->end->next = p_new_node;
|
||||||
|
p_list->end = p_new_node;
|
||||||
|
|
||||||
|
p_list->length++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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))
|
||||||
|
func (_cdio_list_node_data (node), p_user_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
CdioListNode_t *
|
||||||
|
_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))
|
||||||
|
if (cmp_func (_cdio_list_node_data (p_node), p_user_data))
|
||||||
|
break;
|
||||||
|
|
||||||
|
return p_node;
|
||||||
|
}
|
||||||
|
|
||||||
|
CdioListNode_t *
|
||||||
|
_cdio_list_begin (const CdioList_t *p_list)
|
||||||
|
{
|
||||||
|
cdio_assert (p_list != NULL);
|
||||||
|
|
||||||
|
return p_list->begin;
|
||||||
|
}
|
||||||
|
|
||||||
|
CdioListNode_t *
|
||||||
|
_cdio_list_end (CdioList_t *p_list)
|
||||||
|
{
|
||||||
|
cdio_assert (p_list != NULL);
|
||||||
|
|
||||||
|
return p_list->end;
|
||||||
|
}
|
||||||
|
|
||||||
|
CdioListNode_t *
|
||||||
|
_cdio_list_node_next (CdioListNode_t *p_node)
|
||||||
|
{
|
||||||
|
if (p_node)
|
||||||
|
return p_node->next;
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
if (free_data)
|
||||||
|
free (_cdio_list_node_data (p_node));
|
||||||
|
|
||||||
|
if (_cdio_list_length (p_list) == 1)
|
||||||
|
{
|
||||||
|
cdio_assert (p_list->begin == p_list->end);
|
||||||
|
|
||||||
|
p_list->end = p_list->begin = NULL;
|
||||||
|
p_list->length = 0;
|
||||||
|
free (p_node);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
cdio_assert (p_list->begin != p_list->end);
|
||||||
|
|
||||||
|
if (p_list->begin == p_node)
|
||||||
|
{
|
||||||
|
p_list->begin = p_node->next;
|
||||||
|
free (p_node);
|
||||||
|
p_list->length--;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (prev_node = p_list->begin; prev_node->next; prev_node = prev_node->next)
|
||||||
|
if (prev_node->next == p_node)
|
||||||
|
break;
|
||||||
|
|
||||||
|
cdio_assert (prev_node->next != NULL);
|
||||||
|
|
||||||
|
if (p_list->end == p_node)
|
||||||
|
p_list->end = prev_node;
|
||||||
|
|
||||||
|
prev_node->next = p_node->next;
|
||||||
|
|
||||||
|
p_list->length--;
|
||||||
|
|
||||||
|
free (p_node);
|
||||||
|
}
|
||||||
|
|
||||||
|
void *
|
||||||
|
_cdio_list_node_data (CdioListNode_t *p_node)
|
||||||
|
{
|
||||||
|
if (p_node)
|
||||||
|
return p_node->data;
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* eof */
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* c-file-style: "gnu"
|
||||||
|
* tab-width: 8
|
||||||
|
* indent-tabs-mode: nil
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
|
249
src/libcdio/driver/generic.h
Normal file
249
src/libcdio/driver/generic.h
Normal file
|
@ -0,0 +1,249 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2004, 2005, 2006, 2008, 2009 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
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Internal routines for CD I/O drivers. */
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __CDIO_GENERIC_H__
|
||||||
|
#define __CDIO_GENERIC_H__
|
||||||
|
|
||||||
|
#if defined(HAVE_CONFIG_H) && !defined(LIBCDIO_CONFIG_H)
|
||||||
|
# include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <cdio/cdio.h>
|
||||||
|
//#include <cdio/cdtext.h>
|
||||||
|
#include <cdio/iso9660.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Things common to private device structures. Even though not all
|
||||||
|
devices may have some of these fields, by listing common ones
|
||||||
|
we facilitate writing generic routines and even cut-and-paste
|
||||||
|
code.
|
||||||
|
*/
|
||||||
|
typedef struct {
|
||||||
|
char *source_name; /**< Name used in open. */
|
||||||
|
bool init; /**< True if structure has been initialized */
|
||||||
|
bool toc_init; /**< True if TOC read in */
|
||||||
|
bool b_cdtext_error; /**< True if trouble reading CD-Text */
|
||||||
|
|
||||||
|
int ioctls_debugged; /**< for debugging */
|
||||||
|
|
||||||
|
/* Only one of data_source or fd is used; fd is for CD-ROM
|
||||||
|
devices and the data_source for stream reading (bincue, nrg, toc,
|
||||||
|
network).
|
||||||
|
*/
|
||||||
|
CdioDataSource_t *data_source;
|
||||||
|
int fd; /**< File descriptor of device */
|
||||||
|
track_t i_first_track; /**< The starting track number. */
|
||||||
|
track_t i_tracks; /**< The number of tracks. */
|
||||||
|
|
||||||
|
uint8_t i_joliet_level; /**< 0 = no Joliet extensions.
|
||||||
|
1-3: Joliet level. */
|
||||||
|
iso9660_pvd_t pvd;
|
||||||
|
iso9660_svd_t svd;
|
||||||
|
CdIo_t *cdio; /**< a way to call general cdio routines. */
|
||||||
|
cdtext_t *cdtext; /**< CD-Text for disc. */
|
||||||
|
// track_flags_t track_flags[CDIO_CD_MAX_TRACKS+1];
|
||||||
|
|
||||||
|
/* Memorized sense reply of the most recent SCSI command.
|
||||||
|
Recorded by driver implementations of cdio_funcs_t.run_mmc_cmd().
|
||||||
|
Read by API function mmc_get_cmd_scsi_sense().
|
||||||
|
*/
|
||||||
|
unsigned char scsi_mmc_sense[263]; /* See SPC-3 4.5.3 : 252 bytes legal
|
||||||
|
but 263 bytes possible */
|
||||||
|
int scsi_mmc_sense_valid; /* Number of valid sense bytes */
|
||||||
|
|
||||||
|
/* Memorized eventual system specific SCSI address tuple text.
|
||||||
|
Empty text means that there is no such text defined for the drive.
|
||||||
|
NULL means that the driver does not support "scsi-tuple".
|
||||||
|
To be read by cdio_get_arg("scsi-tuple").
|
||||||
|
System specific suffixes to the key may demand and eventually
|
||||||
|
guarantee a further specified format.
|
||||||
|
E.g. "scsi-tuple-linux" guarantees either "Bus,Host,Channel,Target,Lun",
|
||||||
|
or empty text, or NULL. No other forms.
|
||||||
|
*/
|
||||||
|
char *scsi_tuple;
|
||||||
|
} generic_img_private_t;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Bogus eject media when there is no ejectable media, e.g. a disk image
|
||||||
|
We always return 2. Should we also free resources?
|
||||||
|
*/
|
||||||
|
driver_return_code_t cdio_generic_unimplemented_eject_media (void *p_env);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Set the blocksize for subsequent reads.
|
||||||
|
|
||||||
|
@return -2 since it's not implemented.
|
||||||
|
*/
|
||||||
|
driver_return_code_t
|
||||||
|
cdio_generic_unimplemented_set_blocksize (void *p_user_data,
|
||||||
|
uint16_t i_blocksize);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Set the drive speed.
|
||||||
|
|
||||||
|
@return -2 since it's not implemented.
|
||||||
|
*/
|
||||||
|
driver_return_code_t cdio_generic_unimplemented_set_speed (void *p_user_data,
|
||||||
|
int i_speed);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Release and free resources associated with cd.
|
||||||
|
*/
|
||||||
|
void cdio_generic_free (void *p_env);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Initialize CD device.
|
||||||
|
*/
|
||||||
|
bool cdio_generic_init (void *p_env, int open_mode);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Reads into buf the next size bytes.
|
||||||
|
Returns -1 on error.
|
||||||
|
Is in fact libc's read().
|
||||||
|
*/
|
||||||
|
off_t cdio_generic_lseek (void *p_env, off_t offset, int whence);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Reads into buf the next size bytes.
|
||||||
|
Returns -1 on error.
|
||||||
|
Is in fact libc's read().
|
||||||
|
*/
|
||||||
|
ssize_t cdio_generic_read (void *p_env, void *p_buf, size_t size);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Reads a single form1 sector from cd device into data starting
|
||||||
|
from lsn. Returns 0 if no error.
|
||||||
|
*/
|
||||||
|
int cdio_generic_read_form1_sector (void * user_data, void *data,
|
||||||
|
lsn_t lsn);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Release and free resources associated with stream or disk image.
|
||||||
|
*/
|
||||||
|
void cdio_generic_stdio_free (void *env);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Return true if source_name could be a device containing a CD-ROM on
|
||||||
|
Win32
|
||||||
|
*/
|
||||||
|
bool cdio_is_device_win32(const char *source_name);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Return true if source_name could be a device containing a CD-ROM on
|
||||||
|
OS/2
|
||||||
|
*/
|
||||||
|
bool cdio_is_device_os2(const char *source_name);
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Return true if source_name could be a device containing a CD-ROM on
|
||||||
|
most Unix servers with block and character devices.
|
||||||
|
*/
|
||||||
|
bool cdio_is_device_generic(const char *source_name);
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Like above, but don't give a warning device doesn't exist.
|
||||||
|
*/
|
||||||
|
bool cdio_is_device_quiet_generic(const char *source_name);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
cdtext_t *get_cdtext_generic (void *p_user_data);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Return the number of of the first track.
|
||||||
|
CDIO_INVALID_TRACK is returned on error.
|
||||||
|
*/
|
||||||
|
track_t get_first_track_num_generic(void *p_user_data);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Return the number of tracks in the current medium.
|
||||||
|
*/
|
||||||
|
track_t get_num_tracks_generic(void *p_user_data);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Get disc type associated with cd object.
|
||||||
|
*/
|
||||||
|
discmode_t get_discmode_generic (void *p_user_data );
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Same as above but only handles CD cases
|
||||||
|
*/
|
||||||
|
discmode_t get_discmode_cd_generic (void *p_user_data );
|
||||||
|
|
||||||
|
/*! 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_generic(const void *p_user_data, track_t i_track);
|
||||||
|
|
||||||
|
/*! Return 1 if copy is permitted on the track, 0 if not, or -1 for error.
|
||||||
|
Is this meaningful if not an audio track?
|
||||||
|
*/
|
||||||
|
track_flag_t get_track_copy_permit_generic(void *p_user_data,
|
||||||
|
track_t i_track);
|
||||||
|
|
||||||
|
/*! Return 1 if track has pre-emphasis, 0 if not, or -1 for error.
|
||||||
|
Is this meaningful if not an audio track?
|
||||||
|
|
||||||
|
pre-emphasis is a non linear frequency response.
|
||||||
|
*/
|
||||||
|
track_flag_t get_track_preemphasis_generic(const void *p_user_data,
|
||||||
|
track_t i_track);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Read cdtext information for a CdIo object .
|
||||||
|
|
||||||
|
return true on success, false on error or CD-Text information does
|
||||||
|
not exist.
|
||||||
|
*/
|
||||||
|
uint8_t * read_cdtext_generic (void *p_env);
|
||||||
|
|
||||||
|
void set_track_flags(track_flags_t *p_track_flag, uint8_t flag);
|
||||||
|
|
||||||
|
/*! Read mode 1 or mode2 sectors (using cooked mode). */
|
||||||
|
driver_return_code_t read_data_sectors_generic (void *p_user_data,
|
||||||
|
void *p_buf, lsn_t i_lsn,
|
||||||
|
uint16_t i_blocksize,
|
||||||
|
uint32_t i_blocks);
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#endif /* __CDIO_GENERIC_H__ */
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* c-file-style: "gnu"
|
||||||
|
* tab-width: 8
|
||||||
|
* indent-tabs-mode: nil
|
||||||
|
* End:
|
||||||
|
*/
|
146
src/libcdio/driver/logging.c
Normal file
146
src/libcdio/driver/logging.c
Normal file
|
@ -0,0 +1,146 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2003, 2004, 2008, 2011 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
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_CONFIG_H) && !defined(__CDIO_CONFIG_H__)
|
||||||
|
# include "config.h"
|
||||||
|
# define __CDIO_CONFIG_H__ 1
|
||||||
|
#else
|
||||||
|
#ifndef EXTERNAL_LIBCDIO_CONFIG_H
|
||||||
|
#define EXTERNAL_LIBCDIO_CONFIG_H
|
||||||
|
#include <cdio/cdio_config.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include <cdio/logging.h>
|
||||||
|
#include "cdio_assert.h"
|
||||||
|
#include "portable.h"
|
||||||
|
|
||||||
|
static const char _rcsid[] = "$Id: logging.c,v 1.2 2008/04/22 15:29:12 karl Exp $";
|
||||||
|
|
||||||
|
cdio_log_level_t cdio_loglevel_default = CDIO_LOG_WARN;
|
||||||
|
|
||||||
|
static void
|
||||||
|
default_cdio_log_handler (cdio_log_level_t level, const char message[])
|
||||||
|
{
|
||||||
|
switch (level)
|
||||||
|
{
|
||||||
|
case CDIO_LOG_ERROR:
|
||||||
|
if (level >= cdio_loglevel_default) {
|
||||||
|
fprintf (stderr, "**ERROR: %s\n", message);
|
||||||
|
fflush (stderr);
|
||||||
|
}
|
||||||
|
exit (EXIT_FAILURE);
|
||||||
|
break;
|
||||||
|
case CDIO_LOG_DEBUG:
|
||||||
|
if (level >= cdio_loglevel_default) {
|
||||||
|
fprintf (stdout, "--DEBUG: %s\n", message);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case CDIO_LOG_WARN:
|
||||||
|
if (level >= cdio_loglevel_default) {
|
||||||
|
fprintf (stdout, "++ WARN: %s\n", message);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case CDIO_LOG_INFO:
|
||||||
|
if (level >= cdio_loglevel_default) {
|
||||||
|
fprintf (stdout, " INFO: %s\n", message);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case CDIO_LOG_ASSERT:
|
||||||
|
if (level >= cdio_loglevel_default) {
|
||||||
|
fprintf (stderr, "!ASSERT: %s\n", message);
|
||||||
|
fflush (stderr);
|
||||||
|
}
|
||||||
|
abort ();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
cdio_assert_not_reached ();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
fflush (stdout);
|
||||||
|
}
|
||||||
|
|
||||||
|
static cdio_log_handler_t _handler = default_cdio_log_handler;
|
||||||
|
|
||||||
|
cdio_log_handler_t
|
||||||
|
cdio_log_set_handler (cdio_log_handler_t new_handler)
|
||||||
|
{
|
||||||
|
cdio_log_handler_t old_handler = _handler;
|
||||||
|
|
||||||
|
_handler = new_handler;
|
||||||
|
|
||||||
|
return old_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
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 ();
|
||||||
|
|
||||||
|
in_recursion = 1;
|
||||||
|
|
||||||
|
_vsnprintf(buf, sizeof(buf)-1, format, args);
|
||||||
|
|
||||||
|
_handler(level, buf);
|
||||||
|
|
||||||
|
in_recursion = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
cdio_log (cdio_log_level_t level, const char format[], ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
va_start (args, format);
|
||||||
|
cdio_logv (level, format, args);
|
||||||
|
va_end (args);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define CDIO_LOG_TEMPLATE(level, LEVEL) \
|
||||||
|
void \
|
||||||
|
cdio_ ## level (const char format[], ...) \
|
||||||
|
{ \
|
||||||
|
va_list args; \
|
||||||
|
va_start (args, format); \
|
||||||
|
cdio_logv (CDIO_LOG_ ## LEVEL, format, args); \
|
||||||
|
va_end (args); \
|
||||||
|
}
|
||||||
|
|
||||||
|
CDIO_LOG_TEMPLATE(debug, DEBUG)
|
||||||
|
CDIO_LOG_TEMPLATE(info, INFO)
|
||||||
|
CDIO_LOG_TEMPLATE(warn, WARN)
|
||||||
|
CDIO_LOG_TEMPLATE(error, ERROR)
|
||||||
|
|
||||||
|
#undef CDIO_LOG_TEMPLATE
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* c-file-style: "gnu"
|
||||||
|
* tab-width: 8
|
||||||
|
* indent-tabs-mode: nil
|
||||||
|
* End:
|
||||||
|
*/
|
75
src/libcdio/driver/portable.h
Normal file
75
src/libcdio/driver/portable.h
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2006, 2008, 2011 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
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
This file contains definitions to fill in for differences or
|
||||||
|
deficiencies to OS or compiler irregularities. If this file is
|
||||||
|
included other routines can be more portable.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __CDIO_PORTABLE_H__
|
||||||
|
#define __CDIO_PORTABLE_H__
|
||||||
|
|
||||||
|
#if defined(HAVE_CONFIG_H) && !defined(__CDIO_CONFIG_H__)
|
||||||
|
# include "config.h"
|
||||||
|
# define __CDIO_CONFIG_H__ 1
|
||||||
|
#else
|
||||||
|
#ifndef EXTERNAL_LIBCDIO_CONFIG_H
|
||||||
|
#define EXTERNAL_LIBCDIO_CONFIG_H
|
||||||
|
#include <cdio/cdio_config.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(HAVE_FTRUNCATE)
|
||||||
|
# if defined (_WIN32)
|
||||||
|
# define ftruncate chsize
|
||||||
|
# endif
|
||||||
|
#endif /*HAVE_FTRUNCATE*/
|
||||||
|
|
||||||
|
#if !defined(HAVE_SNPRINTF)
|
||||||
|
# if defined (_MSC_VER)
|
||||||
|
# define snprintf _snprintf
|
||||||
|
# endif
|
||||||
|
#endif /*HAVE_SNPRINTF*/
|
||||||
|
|
||||||
|
#if !defined(HAVE_DRAND48) && defined(HAVE_RAND)
|
||||||
|
# define drand48() (rand() / (double)RAND_MAX)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
# include <io.h>
|
||||||
|
|
||||||
|
# ifndef S_ISBLK
|
||||||
|
# define _S_IFBLK 0060000 /* Block Special */
|
||||||
|
# define S_ISBLK(x) (x & _S_IFBLK)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifndef S_ISCHR
|
||||||
|
# define _S_IFCHR 0020000 /* character special */
|
||||||
|
# define S_ISCHR(x) (x & _S_IFCHR)
|
||||||
|
# endif
|
||||||
|
#endif /* _MSC_VER */
|
||||||
|
|
||||||
|
#if defined(HAVE_MEMSET)
|
||||||
|
# define BZERO(ptr, size) memset(ptr, 0, size)
|
||||||
|
#elif defined(HAVE_BZERO)
|
||||||
|
# define BZERO(ptr, size) bzero(ptr, size)
|
||||||
|
#else
|
||||||
|
#error You need either memset or bzero
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __CDIO_PORTABLE_H__ */
|
335
src/libcdio/driver/read.c
Normal file
335
src/libcdio/driver/read.c
Normal file
|
@ -0,0 +1,335 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2005, 2008, 2011 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
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/** \file read.h
|
||||||
|
*
|
||||||
|
* \brief sector (block, frame)-related libcdio routines.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_CONFIG_H) && !defined(__CDIO_CONFIG_H__)
|
||||||
|
# include "config.h"
|
||||||
|
# define __CDIO_CONFIG_H__ 1
|
||||||
|
#else
|
||||||
|
#ifndef EXTERNAL_LIBCDIO_CONFIG_H
|
||||||
|
#define EXTERNAL_LIBCDIO_CONFIG_H
|
||||||
|
#include <cdio/cdio_config.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <cdio/cdio.h>
|
||||||
|
#include <cdio/logging.h>
|
||||||
|
#include "cdio_private.h"
|
||||||
|
#include "cdio_assert.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_STRING_H
|
||||||
|
#include <string.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define check_read_parms(p_cdio, p_buf, i_lsn) \
|
||||||
|
if (!p_cdio) return DRIVER_OP_UNINIT; \
|
||||||
|
if (!p_buf || CDIO_INVALID_LSN == i_lsn) \
|
||||||
|
return DRIVER_OP_ERROR;
|
||||||
|
|
||||||
|
#define check_lsn(i_lsn) \
|
||||||
|
check_read_parms(p_cdio, p_buf, i_lsn); \
|
||||||
|
{ \
|
||||||
|
lsn_t end_lsn = \
|
||||||
|
cdio_get_track_lsn(p_cdio, CDIO_CDROM_LEADOUT_TRACK); \
|
||||||
|
if ( i_lsn > end_lsn ) { \
|
||||||
|
cdio_info("Trying to access past end of disk lsn: %ld, end lsn: %ld", \
|
||||||
|
(long int) i_lsn, (long int) end_lsn); \
|
||||||
|
return DRIVER_OP_ERROR; \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define check_lsn_blocks(i_lsn, i_blocks) \
|
||||||
|
check_read_parms(p_cdio, p_buf, i_lsn); \
|
||||||
|
{ \
|
||||||
|
lsn_t end_lsn = \
|
||||||
|
cdio_get_track_lsn(p_cdio, CDIO_CDROM_LEADOUT_TRACK); \
|
||||||
|
if ( i_lsn > end_lsn ) { \
|
||||||
|
cdio_info("Trying to access past end of disk lsn: %ld, end lsn: %ld", \
|
||||||
|
(long int) i_lsn, (long int) end_lsn); \
|
||||||
|
return DRIVER_OP_ERROR; \
|
||||||
|
} \
|
||||||
|
/* Care is used in the expression below to be correct with */ \
|
||||||
|
/* respect to unsigned integers. */ \
|
||||||
|
if ( i_lsn + i_blocks > end_lsn + 1 ) { \
|
||||||
|
cdio_info("Request truncated to end disk; lsn: %ld, end lsn: %ld", \
|
||||||
|
(long int) i_lsn, (long int) end_lsn); \
|
||||||
|
i_blocks = end_lsn - i_lsn + 1; \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
lseek - reposition read/write file offset
|
||||||
|
Returns (off_t) -1 on error.
|
||||||
|
Similar to (if not the same as) libc's lseek()
|
||||||
|
*/
|
||||||
|
off_t
|
||||||
|
cdio_lseek (const CdIo_t *p_cdio, off_t offset, int whence)
|
||||||
|
{
|
||||||
|
if (!p_cdio) return DRIVER_OP_UNINIT;
|
||||||
|
|
||||||
|
if (p_cdio->op.lseek)
|
||||||
|
return (p_cdio->op.lseek) (p_cdio->env, offset, whence);
|
||||||
|
return DRIVER_OP_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*! Reads into buf the next size bytes. Similar to (if not the
|
||||||
|
same as) libc's read(). This is a "cooked" read, or one handled by
|
||||||
|
the OS. It probably won't work on audio data. For that use
|
||||||
|
cdio_read_audio_sector(s).
|
||||||
|
|
||||||
|
@param p_cdio object to read from
|
||||||
|
@param p_buf place to read data into. The caller should make sure
|
||||||
|
this location can store at least i_size bytes.
|
||||||
|
@param i_size number of bytes to read
|
||||||
|
|
||||||
|
@return (ssize_t) -1 on error.
|
||||||
|
*/
|
||||||
|
ssize_t
|
||||||
|
cdio_read (const CdIo_t *p_cdio, void *p_buf, size_t i_size)
|
||||||
|
{
|
||||||
|
if (!p_cdio) return DRIVER_OP_UNINIT;
|
||||||
|
|
||||||
|
if (p_cdio->op.read)
|
||||||
|
return (p_cdio->op.read) (p_cdio->env, p_buf, i_size);
|
||||||
|
return DRIVER_OP_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Reads an audio sector from cd device into data starting
|
||||||
|
from lsn. Returns DRIVER_OP_SUCCESS if no error.
|
||||||
|
*/
|
||||||
|
driver_return_code_t
|
||||||
|
cdio_read_audio_sector (const CdIo_t *p_cdio, void *p_buf, lsn_t i_lsn)
|
||||||
|
{
|
||||||
|
check_lsn(i_lsn);
|
||||||
|
if (p_cdio->op.read_audio_sectors)
|
||||||
|
return p_cdio->op.read_audio_sectors (p_cdio->env, p_buf, i_lsn, 1);
|
||||||
|
return DRIVER_OP_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Reads audio sectors from cd device into data starting
|
||||||
|
from lsn. Returns DRIVER_OP_SUCCESS if no error.
|
||||||
|
*/
|
||||||
|
driver_return_code_t
|
||||||
|
cdio_read_audio_sectors (const CdIo_t *p_cdio, void *p_buf, lsn_t i_lsn,
|
||||||
|
uint32_t i_blocks)
|
||||||
|
{
|
||||||
|
lsn_t _i_blocks = (lsn_t)i_blocks;
|
||||||
|
check_lsn_blocks(i_lsn, _i_blocks);
|
||||||
|
|
||||||
|
if (0 == i_blocks) return DRIVER_OP_SUCCESS;
|
||||||
|
|
||||||
|
if (p_cdio->op.read_audio_sectors)
|
||||||
|
return (p_cdio->op.read_audio_sectors) (p_cdio->env, p_buf, i_lsn,
|
||||||
|
i_blocks);
|
||||||
|
return DRIVER_OP_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Reads an audio sector from cd device into data starting
|
||||||
|
from lsn. Returns DRIVER_OP_SUCCESS if no error.
|
||||||
|
*/
|
||||||
|
driver_return_code_t
|
||||||
|
cdio_read_data_sectors (const CdIo_t *p_cdio, void *p_buf, lsn_t i_lsn,
|
||||||
|
uint16_t i_blocksize, uint32_t i_blocks)
|
||||||
|
{
|
||||||
|
check_lsn(i_lsn);
|
||||||
|
|
||||||
|
if (0 == i_blocks) return DRIVER_OP_SUCCESS;
|
||||||
|
|
||||||
|
if (p_cdio->op.read_data_sectors)
|
||||||
|
return p_cdio->op.read_data_sectors (p_cdio->env, p_buf, i_lsn,
|
||||||
|
i_blocksize, i_blocks);
|
||||||
|
return DRIVER_OP_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef SEEK_SET
|
||||||
|
#define SEEK_SET 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Reads a single mode1 form1 or form2 sector from cd device
|
||||||
|
into data starting from lsn. Returns DRIVER_OP_SUCCESS if no error.
|
||||||
|
*/
|
||||||
|
driver_return_code_t
|
||||||
|
cdio_read_mode1_sector (const CdIo_t *p_cdio, void *p_buf, lsn_t i_lsn,
|
||||||
|
bool b_form2)
|
||||||
|
{
|
||||||
|
uint32_t size = b_form2 ? M2RAW_SECTOR_SIZE : CDIO_CD_FRAMESIZE ;
|
||||||
|
|
||||||
|
check_lsn(i_lsn);
|
||||||
|
if (p_cdio->op.read_mode1_sector) {
|
||||||
|
return p_cdio->op.read_mode1_sector(p_cdio->env, p_buf, i_lsn, b_form2);
|
||||||
|
} else if (p_cdio->op.lseek && p_cdio->op.read) {
|
||||||
|
char buf[M2RAW_SECTOR_SIZE] = { 0, };
|
||||||
|
if (0 > cdio_lseek(p_cdio, CDIO_CD_FRAMESIZE*i_lsn, SEEK_SET))
|
||||||
|
return -1;
|
||||||
|
if (0 > cdio_read(p_cdio, buf, CDIO_CD_FRAMESIZE))
|
||||||
|
return -1;
|
||||||
|
memcpy (p_buf, buf, size);
|
||||||
|
return DRIVER_OP_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
return DRIVER_OP_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Reads mode 1 sectors
|
||||||
|
|
||||||
|
@param p_cdio object to read from
|
||||||
|
@param buf place to read data into
|
||||||
|
@param lsn sector to read
|
||||||
|
@param b_form2 true for reading mode 1 form 2 sectors or false for
|
||||||
|
mode 1 form 1 sectors.
|
||||||
|
@param i_blocks number of sectors to read
|
||||||
|
*/
|
||||||
|
driver_return_code_t
|
||||||
|
cdio_read_mode1_sectors (const CdIo_t *p_cdio, void *p_buf, lsn_t i_lsn,
|
||||||
|
bool b_form2, uint32_t i_blocks)
|
||||||
|
{
|
||||||
|
lsn_t _i_blocks = (lsn_t)i_blocks;
|
||||||
|
check_lsn_blocks(i_lsn, _i_blocks);
|
||||||
|
|
||||||
|
if (0 == i_blocks) return DRIVER_OP_SUCCESS;
|
||||||
|
|
||||||
|
if (p_cdio->op.read_mode1_sectors)
|
||||||
|
return (p_cdio->op.read_mode1_sectors) (p_cdio->env, p_buf, i_lsn, b_form2,
|
||||||
|
i_blocks);
|
||||||
|
return DRIVER_OP_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Reads a mode 2 sector
|
||||||
|
|
||||||
|
@param p_cdio object to read from
|
||||||
|
@param buf place to read data into
|
||||||
|
@param lsn sector to read
|
||||||
|
@param b_form2 true for reading mode 2 form 2 sectors or false for
|
||||||
|
mode 2 form 1 sectors.
|
||||||
|
*/
|
||||||
|
driver_return_code_t
|
||||||
|
cdio_read_mode2_sector (const CdIo_t *p_cdio, void *p_buf, lsn_t i_lsn,
|
||||||
|
bool b_form2)
|
||||||
|
{
|
||||||
|
check_lsn(i_lsn);
|
||||||
|
if (p_cdio->op.read_mode2_sector)
|
||||||
|
return p_cdio->op.read_mode2_sector (p_cdio->env, p_buf, i_lsn, b_form2);
|
||||||
|
|
||||||
|
/* fallback */
|
||||||
|
if (p_cdio->op.read_mode2_sectors != NULL)
|
||||||
|
return cdio_read_mode2_sectors (p_cdio, p_buf, i_lsn, b_form2, 1);
|
||||||
|
return DRIVER_OP_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Reads mode 2 sectors
|
||||||
|
|
||||||
|
@param p_cdio object to read from
|
||||||
|
@param buf place to read data into
|
||||||
|
@param lsn sector to read
|
||||||
|
@param b_form2 true for reading mode2 form 2 sectors or false for
|
||||||
|
mode 2 form 1 sectors.
|
||||||
|
@param i_blocks number of sectors to read
|
||||||
|
*/
|
||||||
|
driver_return_code_t
|
||||||
|
cdio_read_mode2_sectors (const CdIo_t *p_cdio, void *p_buf, lsn_t i_lsn,
|
||||||
|
bool b_form2, uint32_t i_blocks)
|
||||||
|
{
|
||||||
|
lsn_t _i_blocks = (lsn_t)i_blocks;
|
||||||
|
check_lsn_blocks(i_lsn, _i_blocks);
|
||||||
|
|
||||||
|
if (0 == i_blocks) return DRIVER_OP_SUCCESS;
|
||||||
|
|
||||||
|
if (p_cdio->op.read_mode2_sectors)
|
||||||
|
return (p_cdio->op.read_mode2_sectors) (p_cdio->env, p_buf, i_lsn,
|
||||||
|
b_form2, i_blocks);
|
||||||
|
return DRIVER_OP_UNSUPPORTED;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** The special case of reading a single block is a common one so we
|
||||||
|
provide a routine for that as a convenience.
|
||||||
|
*/
|
||||||
|
driver_return_code_t
|
||||||
|
cdio_read_sector(const CdIo_t *p_cdio, void *p_buf, lsn_t i_lsn,
|
||||||
|
cdio_read_mode_t read_mode)
|
||||||
|
{
|
||||||
|
return cdio_read_sectors(p_cdio, p_buf, i_lsn, read_mode, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Reads a number of sectors (AKA blocks).
|
||||||
|
|
||||||
|
@param p_buf place to read data into. The caller should make sure
|
||||||
|
this location is large enough. See below for size information.
|
||||||
|
@param read_mode the kind of "mode" to use in reading.
|
||||||
|
@param i_lsn sector to read
|
||||||
|
@param i_blocks number of sectors to read
|
||||||
|
@return DRIVER_OP_SUCCESS (0) if no error, other (negative) enumerations
|
||||||
|
are returned on error.
|
||||||
|
|
||||||
|
If read_mode is CDIO_MODE_AUDIO,
|
||||||
|
*p_buf should hold at least CDIO_FRAMESIZE_RAW * i_blocks bytes.
|
||||||
|
|
||||||
|
If read_mode is CDIO_MODE_DATA,
|
||||||
|
*p_buf should hold at least i_blocks times either ISO_BLOCKSIZE,
|
||||||
|
M1RAW_SECTOR_SIZE or M2F2_SECTOR_SIZE depending 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
|
||||||
|
which is M2RAW_SECTOR_SIZE.
|
||||||
|
|
||||||
|
If read_mode is CDIO_MODE_M2F1,
|
||||||
|
*p_buf should hold at least M2RAW_SECTOR_SIZE * i_blocks bytes.
|
||||||
|
|
||||||
|
If read_mode is CDIO_MODE_M2F2,
|
||||||
|
*p_buf should hold at least CDIO_CD_FRAMESIZE * i_blocks bytes.
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
driver_return_code_t
|
||||||
|
cdio_read_sectors(const CdIo_t *p_cdio, void *p_buf, lsn_t i_lsn,
|
||||||
|
cdio_read_mode_t read_mode, uint32_t i_blocks)
|
||||||
|
{
|
||||||
|
switch(read_mode) {
|
||||||
|
case CDIO_READ_MODE_AUDIO:
|
||||||
|
return cdio_read_audio_sectors (p_cdio, p_buf, i_lsn, i_blocks);
|
||||||
|
case CDIO_READ_MODE_M1F1:
|
||||||
|
return cdio_read_mode1_sectors (p_cdio, p_buf, i_lsn, false, i_blocks);
|
||||||
|
case CDIO_READ_MODE_M1F2:
|
||||||
|
return cdio_read_mode1_sectors (p_cdio, p_buf, i_lsn, true, i_blocks);
|
||||||
|
case CDIO_READ_MODE_M2F1:
|
||||||
|
return cdio_read_mode2_sectors (p_cdio, p_buf, i_lsn, false, i_blocks);
|
||||||
|
case CDIO_READ_MODE_M2F2:
|
||||||
|
return cdio_read_mode2_sectors (p_cdio, p_buf, i_lsn, true, i_blocks);
|
||||||
|
}
|
||||||
|
/* Can't happen. Just to shut up gcc. */
|
||||||
|
return DRIVER_OP_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* c-file-style: "gnu"
|
||||||
|
* tab-width: 8
|
||||||
|
* indent-tabs-mode: nil
|
||||||
|
* End:
|
||||||
|
*/
|
273
src/libcdio/driver/sector.c
Normal file
273
src/libcdio/driver/sector.c
Normal file
|
@ -0,0 +1,273 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2004, 2005, 2011 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
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_CONFIG_H) && !defined(__CDIO_CONFIG_H__)
|
||||||
|
# include "config.h"
|
||||||
|
# define __CDIO_CONFIG_H__ 1
|
||||||
|
#else
|
||||||
|
#ifndef EXTERNAL_LIBCDIO_CONFIG_H
|
||||||
|
#define EXTERNAL_LIBCDIO_CONFIG_H
|
||||||
|
#include <cdio/cdio_config.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <cdio/sector.h>
|
||||||
|
#include <cdio/util.h>
|
||||||
|
#include <cdio/logging.h>
|
||||||
|
#include "cdio_assert.h"
|
||||||
|
#include "portable.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#ifdef HAVE_STRING_H
|
||||||
|
#include <string.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#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] =
|
||||||
|
{0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0};
|
||||||
|
|
||||||
|
/* Variables to hold debugger-helping enumerations */
|
||||||
|
enum cdio_cd_enums;
|
||||||
|
enum m2_sector_enums;
|
||||||
|
|
||||||
|
lba_t
|
||||||
|
cdio_lba_to_lsn (lba_t lba)
|
||||||
|
{
|
||||||
|
if (CDIO_INVALID_LBA == lba) return CDIO_INVALID_LSN;
|
||||||
|
return lba - CDIO_PREGAP_SECTORS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
The below is adapted from cdparanoia code which claims it is
|
||||||
|
straight from the MMC3 spec.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void
|
||||||
|
cdio_lsn_to_msf (lsn_t lsn, msf_t *msf)
|
||||||
|
{
|
||||||
|
int m, s, f;
|
||||||
|
|
||||||
|
cdio_assert (msf != 0);
|
||||||
|
|
||||||
|
if ( lsn >= -CDIO_PREGAP_SECTORS ){
|
||||||
|
m = (lsn + CDIO_PREGAP_SECTORS) / CDIO_CD_FRAMES_PER_MIN;
|
||||||
|
lsn -= m * CDIO_CD_FRAMES_PER_MIN;
|
||||||
|
s = (lsn + CDIO_PREGAP_SECTORS) / CDIO_CD_FRAMES_PER_SEC;
|
||||||
|
lsn -= s * CDIO_CD_FRAMES_PER_SEC;
|
||||||
|
f = lsn + CDIO_PREGAP_SECTORS;
|
||||||
|
} else {
|
||||||
|
m = (lsn + CDIO_CD_MAX_LSN) / CDIO_CD_FRAMES_PER_MIN;
|
||||||
|
lsn -= m * (CDIO_CD_FRAMES_PER_MIN);
|
||||||
|
s = (lsn+CDIO_CD_MAX_LSN) / CDIO_CD_FRAMES_PER_SEC;
|
||||||
|
lsn -= s * CDIO_CD_FRAMES_PER_SEC;
|
||||||
|
f = lsn + CDIO_CD_MAX_LSN;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m > 99) {
|
||||||
|
cdio_warn ("number of minutes (%d) truncated to 99.", m);
|
||||||
|
m = 99;
|
||||||
|
}
|
||||||
|
|
||||||
|
msf->m = cdio_to_bcd8 ((uint8_t)m);
|
||||||
|
msf->s = cdio_to_bcd8 ((uint8_t)s);
|
||||||
|
msf->f = cdio_to_bcd8 ((uint8_t)f);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Convert an LBA into a string representation of the MSF.
|
||||||
|
\warning cdio_lba_to_msf_str returns new allocated string */
|
||||||
|
char *
|
||||||
|
cdio_lba_to_msf_str (lba_t lba)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (CDIO_INVALID_LBA == lba) {
|
||||||
|
return _strdup("*INVALID");
|
||||||
|
} else {
|
||||||
|
msf_t msf;
|
||||||
|
msf.m = msf.s = msf.f = 0;
|
||||||
|
cdio_lba_to_msf (lba, &msf);
|
||||||
|
return cdio_msf_to_str(&msf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Convert an LSN into the corresponding LBA.
|
||||||
|
CDIO_INVALID_LBA is returned if there is an error.
|
||||||
|
*/
|
||||||
|
lba_t
|
||||||
|
cdio_lsn_to_lba (lsn_t lsn)
|
||||||
|
{
|
||||||
|
if (CDIO_INVALID_LSN == lsn) return CDIO_INVALID_LBA;
|
||||||
|
return lsn + CDIO_PREGAP_SECTORS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Convert an LBA into the corresponding MSF.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
cdio_lba_to_msf (lba_t lba, msf_t *msf)
|
||||||
|
{
|
||||||
|
cdio_assert (msf != 0);
|
||||||
|
cdio_lsn_to_msf(cdio_lba_to_lsn(lba), msf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Convert a MSF into the corresponding LBA.
|
||||||
|
CDIO_INVALID_LBA is returned if there is an error.
|
||||||
|
*/
|
||||||
|
lba_t
|
||||||
|
cdio_msf_to_lba (const msf_t *msf)
|
||||||
|
{
|
||||||
|
uint32_t lba = 0;
|
||||||
|
|
||||||
|
cdio_assert (msf != 0);
|
||||||
|
|
||||||
|
lba = cdio_from_bcd8 (msf->m);
|
||||||
|
lba *= CDIO_CD_SECS_PER_MIN;
|
||||||
|
|
||||||
|
lba += cdio_from_bcd8 (msf->s);
|
||||||
|
lba *= CDIO_CD_FRAMES_PER_SEC;
|
||||||
|
|
||||||
|
lba += cdio_from_bcd8 (msf->f);
|
||||||
|
|
||||||
|
return lba;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Convert a MSF into the corresponding LSN.
|
||||||
|
CDIO_INVALID_LSN is returned if there is an error.
|
||||||
|
*/
|
||||||
|
lba_t
|
||||||
|
cdio_msf_to_lsn (const msf_t *msf)
|
||||||
|
{
|
||||||
|
return cdio_lba_to_lsn(cdio_msf_to_lba (msf));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Convert an LBA into a string representation of the MSF.
|
||||||
|
\warning cdio_lba_to_msf_str returns new allocated string */
|
||||||
|
char *
|
||||||
|
cdio_msf_to_str (const msf_t *msf)
|
||||||
|
{
|
||||||
|
char buf[16];
|
||||||
|
|
||||||
|
snprintf (buf, sizeof (buf), "%2.2x:%2.2x:%2.2x", msf->m, msf->s, msf->f);
|
||||||
|
return _strdup (buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Convert a MSF - broken out as 3 integer components into the
|
||||||
|
corresponding LBA.
|
||||||
|
CDIO_INVALID_LBA is returned if there is an error.
|
||||||
|
*/
|
||||||
|
lba_t
|
||||||
|
cdio_msf3_to_lba (unsigned int minutes, unsigned int seconds,
|
||||||
|
unsigned int frames)
|
||||||
|
{
|
||||||
|
return ((minutes * CDIO_CD_SECS_PER_MIN + seconds) * CDIO_CD_FRAMES_PER_SEC
|
||||||
|
+ frames);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Convert a string of the form MM:SS:FF into the corresponding LBA.
|
||||||
|
CDIO_INVALID_LBA is returned if there is an error.
|
||||||
|
*/
|
||||||
|
lba_t
|
||||||
|
cdio_mmssff_to_lba (const char *psz_mmssff)
|
||||||
|
{
|
||||||
|
int psz_field;
|
||||||
|
lba_t ret;
|
||||||
|
char c;
|
||||||
|
|
||||||
|
if (0 == strcmp (psz_mmssff, "0"))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
c = *psz_mmssff++;
|
||||||
|
if(c >= '0' && c <= '9')
|
||||||
|
psz_field = (c - '0');
|
||||||
|
else
|
||||||
|
return CDIO_INVALID_LBA;
|
||||||
|
while(':' != (c = *psz_mmssff++)) {
|
||||||
|
if(c >= '0' && c <= '9')
|
||||||
|
psz_field = psz_field * 10 + (c - '0');
|
||||||
|
else
|
||||||
|
return CDIO_INVALID_LBA;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = cdio_msf3_to_lba (psz_field, 0, 0);
|
||||||
|
|
||||||
|
c = *psz_mmssff++;
|
||||||
|
if(c >= '0' && c <= '9')
|
||||||
|
psz_field = (c - '0');
|
||||||
|
else
|
||||||
|
return CDIO_INVALID_LBA;
|
||||||
|
if(':' != (c = *psz_mmssff++)) {
|
||||||
|
if(c >= '0' && c <= '9') {
|
||||||
|
psz_field = psz_field * 10 + (c - '0');
|
||||||
|
c = *psz_mmssff++;
|
||||||
|
if(c != ':')
|
||||||
|
return CDIO_INVALID_LBA;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return CDIO_INVALID_LBA;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(psz_field >= CDIO_CD_SECS_PER_MIN)
|
||||||
|
return CDIO_INVALID_LBA;
|
||||||
|
|
||||||
|
ret += cdio_msf3_to_lba (0, psz_field, 0);
|
||||||
|
|
||||||
|
c = *psz_mmssff++;
|
||||||
|
if (isdigit(c))
|
||||||
|
psz_field = (c - '0');
|
||||||
|
else
|
||||||
|
return -1;
|
||||||
|
if('\0' != (c = *psz_mmssff++)) {
|
||||||
|
if (isdigit(c)) {
|
||||||
|
psz_field = psz_field * 10 + (c - '0');
|
||||||
|
c = *psz_mmssff++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return CDIO_INVALID_LBA;
|
||||||
|
}
|
||||||
|
|
||||||
|
if('\0' != c)
|
||||||
|
return CDIO_INVALID_LBA;
|
||||||
|
|
||||||
|
if(psz_field >= CDIO_CD_FRAMES_PER_SEC)
|
||||||
|
return CDIO_INVALID_LBA;
|
||||||
|
|
||||||
|
ret += psz_field;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* c-file-style: "gnu"
|
||||||
|
* tab-width: 8
|
||||||
|
* indent-tabs-mode: nil
|
||||||
|
* End:
|
||||||
|
*/
|
364
src/libcdio/driver/track.c
Normal file
364
src/libcdio/driver/track.c
Normal file
|
@ -0,0 +1,364 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2003, 2004, 2005, 2008, 2011 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
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/*! Track-related routines. */
|
||||||
|
|
||||||
|
#if defined(HAVE_CONFIG_H) && !defined(__CDIO_CONFIG_H__)
|
||||||
|
# include "config.h"
|
||||||
|
# define __CDIO_CONFIG_H__ 1
|
||||||
|
#else
|
||||||
|
#ifndef EXTERNAL_LIBCDIO_CONFIG_H
|
||||||
|
#define EXTERNAL_LIBCDIO_CONFIG_H
|
||||||
|
#include <cdio/cdio_config.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <cdio/cdio.h>
|
||||||
|
#include "cdio_private.h"
|
||||||
|
|
||||||
|
const char *track_format2str[6] =
|
||||||
|
{
|
||||||
|
"audio", "CD-i", "XA", "data", "PSX", "error"
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Variables to hold debugger-helping enumerations */
|
||||||
|
enum cdio_track_enums;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Return the number of the first track.
|
||||||
|
CDIO_INVALID_TRACK is returned on error.
|
||||||
|
*/
|
||||||
|
track_t
|
||||||
|
cdio_get_first_track_num (const CdIo_t *p_cdio)
|
||||||
|
{
|
||||||
|
if (NULL == p_cdio) return CDIO_INVALID_TRACK;
|
||||||
|
|
||||||
|
if (p_cdio->op.get_first_track_num) {
|
||||||
|
return p_cdio->op.get_first_track_num (p_cdio->env);
|
||||||
|
} else {
|
||||||
|
return CDIO_INVALID_TRACK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Return the last track number.
|
||||||
|
CDIO_INVALID_TRACK is returned on error.
|
||||||
|
*/
|
||||||
|
track_t
|
||||||
|
cdio_get_last_track_num (const CdIo_t *p_cdio)
|
||||||
|
{
|
||||||
|
if (NULL == p_cdio) return CDIO_INVALID_TRACK;
|
||||||
|
{
|
||||||
|
const track_t i_first_track = cdio_get_first_track_num(p_cdio);
|
||||||
|
if ( CDIO_INVALID_TRACK != i_first_track ) {
|
||||||
|
const track_t i_tracks = cdio_get_num_tracks(p_cdio);
|
||||||
|
if ( CDIO_INVALID_TRACK != i_tracks )
|
||||||
|
return i_first_track + i_tracks - 1;
|
||||||
|
}
|
||||||
|
return CDIO_INVALID_TRACK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*! 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
|
||||||
|
cdio_get_track_channels(const CdIo_t *p_cdio, track_t i_track)
|
||||||
|
{
|
||||||
|
if (p_cdio->op.get_track_channels) {
|
||||||
|
return p_cdio->op.get_track_channels (p_cdio->env, i_track);
|
||||||
|
} else {
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*! Return copy protection status on a track. Is this meaningful
|
||||||
|
if not an audio track?
|
||||||
|
*/
|
||||||
|
track_flag_t
|
||||||
|
cdio_get_track_copy_permit(const CdIo_t *p_cdio, track_t i_track)
|
||||||
|
{
|
||||||
|
if (p_cdio->op.get_track_copy_permit) {
|
||||||
|
return p_cdio->op.get_track_copy_permit (p_cdio->env, i_track);
|
||||||
|
} else {
|
||||||
|
return CDIO_TRACK_FLAG_UNKNOWN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Get format of track.
|
||||||
|
*/
|
||||||
|
track_format_t
|
||||||
|
cdio_get_track_format(const CdIo_t *p_cdio, track_t i_track)
|
||||||
|
{
|
||||||
|
if (!p_cdio) return TRACK_FORMAT_ERROR;
|
||||||
|
|
||||||
|
if (p_cdio->op.get_track_format) {
|
||||||
|
return p_cdio->op.get_track_format (p_cdio->env, i_track);
|
||||||
|
} else {
|
||||||
|
return TRACK_FORMAT_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*!
|
||||||
|
Return the Joliet level recognized for p_cdio.
|
||||||
|
*/
|
||||||
|
uint8_t
|
||||||
|
cdio_get_joliet_level(const CdIo_t *p_cdio)
|
||||||
|
{
|
||||||
|
if (!p_cdio) return 0;
|
||||||
|
{
|
||||||
|
const generic_img_private_t *p_env
|
||||||
|
= (generic_img_private_t *) (p_cdio->env);
|
||||||
|
return p_env->i_joliet_level;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Return the number of tracks in the current medium.
|
||||||
|
CDIO_INVALID_TRACK is returned on error.
|
||||||
|
*/
|
||||||
|
track_t
|
||||||
|
cdio_get_num_tracks (const CdIo_t *p_cdio)
|
||||||
|
{
|
||||||
|
if (p_cdio == NULL) return CDIO_INVALID_TRACK;
|
||||||
|
|
||||||
|
if (p_cdio->op.get_num_tracks) {
|
||||||
|
return p_cdio->op.get_num_tracks (p_cdio->env);
|
||||||
|
} else {
|
||||||
|
return CDIO_INVALID_TRACK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*! Find the track which contans lsn.
|
||||||
|
CDIO_INVALID_TRACK is returned if the lsn outside of the CD or
|
||||||
|
if there was some error.
|
||||||
|
|
||||||
|
If the lsn is before the pregap of the first track 0 is returned.
|
||||||
|
Otherwise we return the track that spans the lsn.
|
||||||
|
*/
|
||||||
|
track_t
|
||||||
|
cdio_get_track(const CdIo_t *p_cdio, lsn_t lsn)
|
||||||
|
{
|
||||||
|
if (!p_cdio) return CDIO_INVALID_TRACK;
|
||||||
|
|
||||||
|
{
|
||||||
|
track_t i_low_track = cdio_get_first_track_num(p_cdio);
|
||||||
|
track_t i_high_track = cdio_get_last_track_num(p_cdio)+1; /* LEADOUT */
|
||||||
|
|
||||||
|
if (CDIO_INVALID_TRACK == i_low_track
|
||||||
|
|| CDIO_INVALID_TRACK == i_high_track ) return CDIO_INVALID_TRACK;
|
||||||
|
|
||||||
|
if (lsn < cdio_get_track_lsn(p_cdio, i_low_track))
|
||||||
|
return 0; /* We're in the pre-gap of first track */
|
||||||
|
|
||||||
|
if (lsn > cdio_get_track_lsn(p_cdio, i_high_track))
|
||||||
|
return CDIO_INVALID_TRACK; /* We're beyond the end. */
|
||||||
|
|
||||||
|
do {
|
||||||
|
const track_t i_mid = (i_low_track + i_high_track) / 2;
|
||||||
|
const lsn_t i_mid_lsn = cdio_get_track_lsn(p_cdio, i_mid);
|
||||||
|
if (lsn <= i_mid_lsn) i_high_track = i_mid - 1;
|
||||||
|
if (lsn >= i_mid_lsn) i_low_track = i_mid + 1;
|
||||||
|
} while ( i_low_track <= i_high_track );
|
||||||
|
|
||||||
|
return (i_low_track > i_high_track + 1)
|
||||||
|
? i_high_track + 1 : i_high_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
|
||||||
|
cdio_get_track_green(const CdIo_t *p_cdio, track_t i_track)
|
||||||
|
{
|
||||||
|
if (p_cdio == NULL) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p_cdio->op.get_track_green) {
|
||||||
|
return p_cdio->op.get_track_green (p_cdio->env, i_track);
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Return the starting LBA for track number
|
||||||
|
track_num in cdio. Tracks numbers start at 1.
|
||||||
|
The "leadout" track is specified either by
|
||||||
|
using track_num LEADOUT_TRACK or the total tracks+1.
|
||||||
|
CDIO_INVALID_LBA is returned on error.
|
||||||
|
*/
|
||||||
|
lba_t
|
||||||
|
cdio_get_track_lba(const CdIo_t *p_cdio, track_t i_track)
|
||||||
|
{
|
||||||
|
if (!p_cdio) return CDIO_INVALID_LBA;
|
||||||
|
|
||||||
|
if (p_cdio->op.get_track_lba) {
|
||||||
|
return p_cdio->op.get_track_lba (p_cdio->env, i_track);
|
||||||
|
} else {
|
||||||
|
msf_t msf;
|
||||||
|
if (p_cdio->op.get_track_msf)
|
||||||
|
if (cdio_get_track_msf(p_cdio, i_track, &msf))
|
||||||
|
return cdio_msf_to_lba(&msf);
|
||||||
|
return CDIO_INVALID_LBA;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Return the starting LSN for track number
|
||||||
|
i_track in cdio. Tracks numbers start at 1.
|
||||||
|
The "leadout" track is specified either by
|
||||||
|
using i_track LEADOUT_TRACK or the total tracks+1.
|
||||||
|
CDIO_INVALID_LSN is returned on error.
|
||||||
|
*/
|
||||||
|
lsn_t
|
||||||
|
cdio_get_track_lsn(const CdIo_t *p_cdio, track_t i_track)
|
||||||
|
{
|
||||||
|
if (p_cdio == NULL) return CDIO_INVALID_LSN;
|
||||||
|
|
||||||
|
if (p_cdio->op.get_track_lba) {
|
||||||
|
return cdio_lba_to_lsn(p_cdio->op.get_track_lba (p_cdio->env, i_track));
|
||||||
|
} else {
|
||||||
|
msf_t msf;
|
||||||
|
if (cdio_get_track_msf(p_cdio, i_track, &msf))
|
||||||
|
return cdio_msf_to_lsn(&msf);
|
||||||
|
return CDIO_INVALID_LSN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Return the International Standard Recording Code (ISRC) for track number
|
||||||
|
i_track in p_cdio. Track numbers start at 1.
|
||||||
|
|
||||||
|
Note: string is malloc'd so caller has to free() the returned
|
||||||
|
string when done with it.
|
||||||
|
*/
|
||||||
|
char *
|
||||||
|
cdio_get_track_isrc (const CdIo_t *p_cdio, track_t i_track)
|
||||||
|
{
|
||||||
|
if (p_cdio == NULL) return NULL;
|
||||||
|
|
||||||
|
if (p_cdio->op.get_track_isrc) {
|
||||||
|
return p_cdio->op.get_track_isrc (p_cdio->env, i_track);
|
||||||
|
} else {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Return the starting LBA for the pregap for track number
|
||||||
|
i_track in cdio. Track numbers start at 1.
|
||||||
|
CDIO_INVALID_LBA is returned on error.
|
||||||
|
*/
|
||||||
|
lba_t
|
||||||
|
cdio_get_track_pregap_lba(const CdIo_t *p_cdio, track_t i_track)
|
||||||
|
{
|
||||||
|
if (p_cdio == NULL) return CDIO_INVALID_LBA;
|
||||||
|
|
||||||
|
if (p_cdio->op.get_track_pregap_lba) {
|
||||||
|
return p_cdio->op.get_track_pregap_lba (p_cdio->env, i_track);
|
||||||
|
} else {
|
||||||
|
return CDIO_INVALID_LBA;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Return the starting LSN for the pregap for track number
|
||||||
|
i_track in cdio. Track numbers start at 1.
|
||||||
|
CDIO_INVALID_LSN is returned on error.
|
||||||
|
*/
|
||||||
|
lsn_t
|
||||||
|
cdio_get_track_pregap_lsn(const CdIo_t *p_cdio, track_t i_track)
|
||||||
|
{
|
||||||
|
return cdio_lba_to_lsn(cdio_get_track_pregap_lba(p_cdio, i_track));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Return the ending LSN for track number
|
||||||
|
i_track in cdio. CDIO_INVALID_LSN is returned on error.
|
||||||
|
*/
|
||||||
|
lsn_t
|
||||||
|
cdio_get_track_last_lsn(const CdIo_t *p_cdio, track_t i_track)
|
||||||
|
{
|
||||||
|
lsn_t lsn = cdio_get_track_lsn(p_cdio, i_track+1);
|
||||||
|
|
||||||
|
if (CDIO_INVALID_LSN == lsn) return CDIO_INVALID_LSN;
|
||||||
|
/* Safe, we've always the leadout. */
|
||||||
|
return lsn - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Return the starting MSF (minutes/secs/frames) for track number
|
||||||
|
i_track in cdio. Track numbers start at 1.
|
||||||
|
The "leadout" track is specified either by
|
||||||
|
using i_track LEADOUT_TRACK or the total tracks+1.
|
||||||
|
False is returned if there is no track entry.
|
||||||
|
*/
|
||||||
|
bool
|
||||||
|
cdio_get_track_msf(const CdIo_t *p_cdio, track_t i_track, /*out*/ msf_t *msf)
|
||||||
|
{
|
||||||
|
if (!p_cdio) return false;
|
||||||
|
|
||||||
|
if (p_cdio->op.get_track_msf) {
|
||||||
|
return p_cdio->op.get_track_msf (p_cdio->env, i_track, msf);
|
||||||
|
} else if (p_cdio->op.get_track_lba) {
|
||||||
|
lba_t lba = p_cdio->op.get_track_lba (p_cdio->env, i_track);
|
||||||
|
if (lba == CDIO_INVALID_LBA) return false;
|
||||||
|
cdio_lba_to_msf(lba, msf);
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*! Return copy protection status on a track. Is this meaningful
|
||||||
|
if not an audio track?
|
||||||
|
*/
|
||||||
|
track_flag_t
|
||||||
|
cdio_get_track_preemphasis(const CdIo *p_cdio, track_t i_track)
|
||||||
|
{
|
||||||
|
if (p_cdio->op.get_track_preemphasis) {
|
||||||
|
return p_cdio->op.get_track_preemphasis (p_cdio->env, i_track);
|
||||||
|
} else {
|
||||||
|
return CDIO_TRACK_FLAG_UNKNOWN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Return the number of sectors between this track an the next. This
|
||||||
|
includes any pregap sectors before the start of the next track.
|
||||||
|
Tracks start at 1.
|
||||||
|
0 is returned if there is an error.
|
||||||
|
*/
|
||||||
|
unsigned int
|
||||||
|
cdio_get_track_sec_count(const CdIo_t *p_cdio, track_t i_track)
|
||||||
|
{
|
||||||
|
const track_t i_tracks = cdio_get_num_tracks(p_cdio);
|
||||||
|
|
||||||
|
if (i_track >=1 && i_track <= i_tracks)
|
||||||
|
return ( cdio_get_track_lba(p_cdio, i_track+1)
|
||||||
|
- cdio_get_track_lba(p_cdio, i_track) );
|
||||||
|
return 0;
|
||||||
|
}
|
166
src/libcdio/driver/util.c
Normal file
166
src/libcdio/driver/util.c
Normal file
|
@ -0,0 +1,166 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2003, 2004, 2005, 2008, 2009, 2010, 2011
|
||||||
|
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
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_CONFIG_H) && !defined(__CDIO_CONFIG_H__)
|
||||||
|
# include "config.h"
|
||||||
|
# define __CDIO_CONFIG_H__ 1
|
||||||
|
#else
|
||||||
|
#ifndef EXTERNAL_LIBCDIO_CONFIG_H
|
||||||
|
#define EXTERNAL_LIBCDIO_CONFIG_H
|
||||||
|
#include <cdio/cdio_config.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
|
#ifdef HAVE_STDLIB_H
|
||||||
|
#include <stdlib.h>
|
||||||
|
#endif
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_STRING_H
|
||||||
|
#include <string.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_INTTYPES_H
|
||||||
|
#include "inttypes.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "cdio_assert.h"
|
||||||
|
#include <cdio/types.h>
|
||||||
|
#include <cdio/util.h>
|
||||||
|
#include <cdio/version.h>
|
||||||
|
|
||||||
|
size_t
|
||||||
|
_cdio_strlenv(char **str_array)
|
||||||
|
{
|
||||||
|
size_t n = 0;
|
||||||
|
|
||||||
|
cdio_assert (str_array != NULL);
|
||||||
|
|
||||||
|
while(str_array[n])
|
||||||
|
n++;
|
||||||
|
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
_cdio_strfreev(char **strv)
|
||||||
|
{
|
||||||
|
int n;
|
||||||
|
|
||||||
|
cdio_assert (strv != NULL);
|
||||||
|
|
||||||
|
for(n = 0; strv[n]; n++)
|
||||||
|
free(strv[n]);
|
||||||
|
|
||||||
|
free(strv);
|
||||||
|
}
|
||||||
|
|
||||||
|
char **
|
||||||
|
_cdio_strsplit(const char str[], char delim) /* fixme -- non-reentrant */
|
||||||
|
{
|
||||||
|
int n;
|
||||||
|
char **strv = NULL;
|
||||||
|
char *_str, *p;
|
||||||
|
char _delim[2] = { 0, 0 };
|
||||||
|
|
||||||
|
cdio_assert (str != NULL);
|
||||||
|
|
||||||
|
_str = _strdup(str);
|
||||||
|
_delim[0] = delim;
|
||||||
|
|
||||||
|
cdio_assert (_str != NULL);
|
||||||
|
|
||||||
|
n = 1;
|
||||||
|
p = _str;
|
||||||
|
while(*p)
|
||||||
|
if (*(p++) == delim)
|
||||||
|
n++;
|
||||||
|
|
||||||
|
strv = calloc (1, sizeof (char *) * (n+1));
|
||||||
|
|
||||||
|
n = 0;
|
||||||
|
while((p = strtok(n ? NULL : _str, _delim)) != NULL)
|
||||||
|
strv[n++] = _strdup(p);
|
||||||
|
|
||||||
|
free(_str);
|
||||||
|
|
||||||
|
return strv;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *
|
||||||
|
_cdio_memdup (const void *mem, size_t count)
|
||||||
|
{
|
||||||
|
void *new_mem = NULL;
|
||||||
|
|
||||||
|
if (mem)
|
||||||
|
{
|
||||||
|
new_mem = calloc (1, count);
|
||||||
|
memcpy (new_mem, mem, count);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new_mem;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
_cdio_strdup_upper (const char str[])
|
||||||
|
{
|
||||||
|
char *new_str = NULL;
|
||||||
|
|
||||||
|
if (str)
|
||||||
|
{
|
||||||
|
char *p;
|
||||||
|
|
||||||
|
p = new_str = _strdup (str);
|
||||||
|
|
||||||
|
while (*p)
|
||||||
|
{
|
||||||
|
*p = (char)toupper (*p);
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return new_str;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t
|
||||||
|
cdio_to_bcd8 (uint8_t n)
|
||||||
|
{
|
||||||
|
/*cdio_assert (n < 100);*/
|
||||||
|
|
||||||
|
return ((n/10)<<4) | (n%10);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t
|
||||||
|
cdio_from_bcd8(uint8_t p)
|
||||||
|
{
|
||||||
|
return (0xf & p)+(10*(p >> 4));
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *cdio_version_string = CDIO_VERSION;
|
||||||
|
const unsigned int libcdio_version_num = LIBCDIO_VERSION_NUM;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* c-file-style: "gnu"
|
||||||
|
* tab-width: 8
|
||||||
|
* indent-tabs-mode: nil
|
||||||
|
* End:
|
||||||
|
*/
|
|
@ -23,9 +23,7 @@
|
||||||
<ClInclude Include="..\iso9660_private.h" />
|
<ClInclude Include="..\iso9660_private.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\iso9660.c" />
|
<ClCompile Include="..\iso9660.c" />
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClCompile Include="..\iso9660_fs.c" />
|
<ClCompile Include="..\iso9660_fs.c" />
|
||||||
<ClCompile Include="..\rock.c" />
|
<ClCompile Include="..\rock.c" />
|
||||||
<ClCompile Include="..\xa.c" />
|
<ClCompile Include="..\xa.c" />
|
||||||
|
@ -97,7 +95,7 @@
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>..;..\..;..\..\driver;..\..\msvc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..;..\..;..\..\driver;..\..\..\msvc-missing;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -117,7 +115,7 @@
|
||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>..;..\..;..\..\driver;..\..\msvc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..;..\..;..\..\driver;..\..\..\msvc-missing;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -132,7 +130,7 @@
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>..;..\..;..\..\driver;..\..\msvc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..;..\..;..\..\driver;..\..\..\msvc-missing;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -152,7 +150,7 @@
|
||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>..;..\..;..\..\driver;..\..\msvc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..;..\..;..\..\driver;..\..\..\msvc-missing;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
|
|
@ -14,9 +14,6 @@
|
||||||
<ClInclude Include="..\iso9660_private.h">
|
<ClInclude Include="..\iso9660_private.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\iso9660.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\cdio\cdio_config.h">
|
<ClInclude Include="..\..\cdio\cdio_config.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
@ -31,5 +28,8 @@
|
||||||
<ClCompile Include="..\xa.c">
|
<ClCompile Include="..\xa.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\iso9660.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -1,7 +1,7 @@
|
||||||
TARGETNAME=iso9660
|
TARGETNAME=iso9660
|
||||||
TARGETTYPE=LIBRARY
|
TARGETTYPE=LIBRARY
|
||||||
|
|
||||||
INCLUDES=$(DDK_INC_PATH);.;..;..\driver;..\msvc
|
INCLUDES=$(DDK_INC_PATH);.;..;..\driver;..\..\msvc-missing
|
||||||
C_DEFINES=$(C_DEFINES) /DDDKBUILD /DUNICODE /D_UNICODE /DISOLATION_AWARE_ENABLED
|
C_DEFINES=$(C_DEFINES) /DDDKBUILD /DUNICODE /D_UNICODE /DISOLATION_AWARE_ENABLED
|
||||||
|
|
||||||
!IFNDEF MSC_WARNING_LEVEL
|
!IFNDEF MSC_WARNING_LEVEL
|
||||||
|
|
|
@ -80,13 +80,13 @@ timegm(struct tm *tm)
|
||||||
|
|
||||||
tz = getenv("TZ");
|
tz = getenv("TZ");
|
||||||
setenv("TZ", "UTC", 1);
|
setenv("TZ", "UTC", 1);
|
||||||
tzset();
|
_tzset();
|
||||||
ret = mktime(tm);
|
ret = mktime(tm);
|
||||||
if (tz)
|
if (tz)
|
||||||
setenv("TZ", tz, 1);
|
setenv("TZ", tz, 1);
|
||||||
else
|
else
|
||||||
unsetenv("TZ");
|
unsetenv("TZ");
|
||||||
tzset();
|
_tzset();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -1048,7 +1048,7 @@ iso9660_pathname_valid_p (const char pathname[])
|
||||||
if ((p = strrchr (pathname, '/')))
|
if ((p = strrchr (pathname, '/')))
|
||||||
{
|
{
|
||||||
bool rc;
|
bool rc;
|
||||||
char *_tmp = strdup (pathname);
|
char *_tmp = _strdup (pathname);
|
||||||
|
|
||||||
*strrchr (_tmp, '/') = '\0';
|
*strrchr (_tmp, '/') = '\0';
|
||||||
|
|
||||||
|
@ -1112,7 +1112,7 @@ iso9660_pathname_isofy (const char pathname[], uint16_t version)
|
||||||
|
|
||||||
_snprintf (tmpbuf, sizeof(tmpbuf), "%s;%d", pathname, version);
|
_snprintf (tmpbuf, sizeof(tmpbuf), "%s;%d", pathname, version);
|
||||||
|
|
||||||
return strdup (tmpbuf);
|
return _strdup (tmpbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -1123,7 +1123,7 @@ char *
|
||||||
iso9660_get_application_id(iso9660_pvd_t *p_pvd)
|
iso9660_get_application_id(iso9660_pvd_t *p_pvd)
|
||||||
{
|
{
|
||||||
if (NULL==p_pvd) return NULL;
|
if (NULL==p_pvd) return NULL;
|
||||||
return strdup(strip_trail(p_pvd->application_id, ISO_MAX_APPLICATION_ID));
|
return _strdup(strip_trail(p_pvd->application_id, ISO_MAX_APPLICATION_ID));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef FIXME
|
#ifdef FIXME
|
||||||
|
@ -1212,7 +1212,7 @@ char *
|
||||||
iso9660_get_preparer_id(const iso9660_pvd_t *pvd)
|
iso9660_get_preparer_id(const iso9660_pvd_t *pvd)
|
||||||
{
|
{
|
||||||
if (NULL==pvd) return NULL;
|
if (NULL==pvd) return NULL;
|
||||||
return strdup(strip_trail(pvd->preparer_id, ISO_MAX_PREPARER_ID));
|
return _strdup(strip_trail(pvd->preparer_id, ISO_MAX_PREPARER_ID));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -1223,7 +1223,7 @@ char *
|
||||||
iso9660_get_publisher_id(const iso9660_pvd_t *pvd)
|
iso9660_get_publisher_id(const iso9660_pvd_t *pvd)
|
||||||
{
|
{
|
||||||
if (NULL==pvd) return NULL;
|
if (NULL==pvd) return NULL;
|
||||||
return strdup(strip_trail(pvd->publisher_id, ISO_MAX_PUBLISHER_ID));
|
return _strdup(strip_trail(pvd->publisher_id, ISO_MAX_PUBLISHER_ID));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -1234,7 +1234,7 @@ char *
|
||||||
iso9660_get_system_id(const iso9660_pvd_t *pvd)
|
iso9660_get_system_id(const iso9660_pvd_t *pvd)
|
||||||
{
|
{
|
||||||
if (NULL==pvd) return NULL;
|
if (NULL==pvd) return NULL;
|
||||||
return strdup(strip_trail(pvd->system_id, ISO_MAX_SYSTEM_ID));
|
return _strdup(strip_trail(pvd->system_id, ISO_MAX_SYSTEM_ID));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -1244,7 +1244,7 @@ char *
|
||||||
iso9660_get_volume_id(const iso9660_pvd_t *pvd)
|
iso9660_get_volume_id(const iso9660_pvd_t *pvd)
|
||||||
{
|
{
|
||||||
if (NULL == pvd) return NULL;
|
if (NULL == pvd) return NULL;
|
||||||
return strdup(strip_trail(pvd->volume_id, ISO_MAX_VOLUME_ID));
|
return _strdup(strip_trail(pvd->volume_id, ISO_MAX_VOLUME_ID));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -1255,7 +1255,7 @@ char *
|
||||||
iso9660_get_volumeset_id(const iso9660_pvd_t *pvd)
|
iso9660_get_volumeset_id(const iso9660_pvd_t *pvd)
|
||||||
{
|
{
|
||||||
if ( NULL == pvd ) return NULL;
|
if ( NULL == pvd ) return NULL;
|
||||||
return strdup(strip_trail(pvd->volume_set_id, ISO_MAX_VOLUMESET_ID));
|
return _strdup(strip_trail(pvd->volume_set_id, ISO_MAX_VOLUMESET_ID));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -97,7 +97,7 @@
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>..;..\..;..\..\driver;..\..\msvc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..;..\..;..\..\driver;..\..\..\msvc-missing;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -117,7 +117,7 @@
|
||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>..;..\..;..\..\driver;..\..\msvc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..;..\..;..\..\driver;..\..\..\msvc-missing;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -132,7 +132,7 @@
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>..;..\..;..\..\driver;..\..\msvc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..;..\..;..\..\driver;..\..\..\msvc-missing;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -152,7 +152,7 @@
|
||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>..;..\..;..\..\driver;..\..\msvc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..;..\..;..\..\driver;..\..\..\msvc-missing;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
TARGETNAME=udf
|
TARGETNAME=udf
|
||||||
TARGETTYPE=LIBRARY
|
TARGETTYPE=LIBRARY
|
||||||
|
|
||||||
INCLUDES=$(DDK_INC_PATH);.;..;..\driver;..\msvc
|
INCLUDES=$(DDK_INC_PATH);.;..;..\driver;..\..\msvc-missing
|
||||||
C_DEFINES=$(C_DEFINES) /DDDKBUILD /DUNICODE /D_UNICODE /DISOLATION_AWARE_ENABLED
|
C_DEFINES=$(C_DEFINES) /DDDKBUILD /DUNICODE /D_UNICODE /DISOLATION_AWARE_ENABLED
|
||||||
|
|
||||||
!IFNDEF MSC_WARNING_LEVEL
|
!IFNDEF MSC_WARNING_LEVEL
|
||||||
|
|
|
@ -23,6 +23,11 @@
|
||||||
#error This header should only be used with Microsoft compilers
|
#error This header should only be used with Microsoft compilers
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* It's convenient to hijack this header to also define 'inline' on MS environments */
|
||||||
|
#ifndef inline
|
||||||
|
#define inline __inline
|
||||||
|
#endif
|
||||||
|
|
||||||
/* 7.8 Format conversion of integer types <inttypes.h> */
|
/* 7.8 Format conversion of integer types <inttypes.h> */
|
||||||
|
|
||||||
#ifndef _INTTYPES_H_
|
#ifndef _INTTYPES_H_
|
12
src/rufus.rc
12
src/rufus.rc
|
@ -33,7 +33,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL
|
||||||
IDD_DIALOG DIALOGEX 12, 12, 206, 278
|
IDD_DIALOG DIALOGEX 12, 12, 206, 278
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
EXSTYLE WS_EX_APPWINDOW
|
EXSTYLE WS_EX_APPWINDOW
|
||||||
CAPTION "Rufus v1.0.7.123"
|
CAPTION "Rufus v1.0.7.124"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
DEFPUSHBUTTON "Start",IDC_START,94,236,50,14
|
DEFPUSHBUTTON "Start",IDC_START,94,236,50,14
|
||||||
|
@ -69,7 +69,7 @@ BEGIN
|
||||||
DEFPUSHBUTTON "OK",IDOK,231,175,50,14,WS_GROUP
|
DEFPUSHBUTTON "OK",IDOK,231,175,50,14,WS_GROUP
|
||||||
CONTROL "<a href=""http://rufus.akeo.ie"">http://rufus.akeo.ie</a>",IDC_ABOUT_RUFUS_URL,
|
CONTROL "<a href=""http://rufus.akeo.ie"">http://rufus.akeo.ie</a>",IDC_ABOUT_RUFUS_URL,
|
||||||
"SysLink",WS_TABSTOP,46,47,114,9
|
"SysLink",WS_TABSTOP,46,47,114,9
|
||||||
LTEXT "Version 1.0.7 (Build 123)",IDC_STATIC,46,19,78,8
|
LTEXT "Version 1.0.7 (Build 124)",IDC_STATIC,46,19,78,8
|
||||||
PUSHBUTTON "License...",IDC_ABOUT_LICENSE,46,175,50,14,WS_GROUP
|
PUSHBUTTON "License...",IDC_ABOUT_LICENSE,46,175,50,14,WS_GROUP
|
||||||
EDITTEXT IDC_ABOUT_COPYRIGHTS,46,107,235,63,ES_MULTILINE | ES_READONLY | WS_VSCROLL
|
EDITTEXT IDC_ABOUT_COPYRIGHTS,46,107,235,63,ES_MULTILINE | ES_READONLY | WS_VSCROLL
|
||||||
LTEXT "Report bugs or request enhancements at:",IDC_STATIC,46,66,187,8
|
LTEXT "Report bugs or request enhancements at:",IDC_STATIC,46,66,187,8
|
||||||
|
@ -207,8 +207,8 @@ END
|
||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 1,0,7,123
|
FILEVERSION 1,0,7,124
|
||||||
PRODUCTVERSION 1,0,7,123
|
PRODUCTVERSION 1,0,7,124
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
|
@ -225,13 +225,13 @@ BEGIN
|
||||||
BEGIN
|
BEGIN
|
||||||
VALUE "CompanyName", "akeo.ie"
|
VALUE "CompanyName", "akeo.ie"
|
||||||
VALUE "FileDescription", "Rufus"
|
VALUE "FileDescription", "Rufus"
|
||||||
VALUE "FileVersion", "1.0.7.123"
|
VALUE "FileVersion", "1.0.7.124"
|
||||||
VALUE "InternalName", "Rufus"
|
VALUE "InternalName", "Rufus"
|
||||||
VALUE "LegalCopyright", "© 2011 Pete Batard (GPL v3)"
|
VALUE "LegalCopyright", "© 2011 Pete Batard (GPL v3)"
|
||||||
VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html"
|
VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html"
|
||||||
VALUE "OriginalFilename", "rufus.exe"
|
VALUE "OriginalFilename", "rufus.exe"
|
||||||
VALUE "ProductName", "Rufus"
|
VALUE "ProductName", "Rufus"
|
||||||
VALUE "ProductVersion", "1.0.7.123"
|
VALUE "ProductVersion", "1.0.7.124"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
|
|
@ -1,301 +0,0 @@
|
||||||
/**
|
|
||||||
* This file has no copyright assigned and is placed in the Public Domain.
|
|
||||||
* This file was original part of the w64 mingw-runtime package.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
|
||||||
*
|
|
||||||
* Modified for libusb/MSVC: Pete Batard <pbatard@gmail.com>
|
|
||||||
*
|
|
||||||
* This source code is offered for use in the public domain. You may
|
|
||||||
* use, modify or distribute it freely.
|
|
||||||
*
|
|
||||||
* This code is distributed in the hope that it will be useful but
|
|
||||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
|
||||||
* DISCLAIMED. This includes but is not limited to warranties of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
* Date: 2010-04-02
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _MSC_VER
|
|
||||||
#error This header should only be used with Microsoft compilers
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* 7.8 Format conversion of integer types <inttypes.h> */
|
|
||||||
|
|
||||||
#ifndef _INTTYPES_H_
|
|
||||||
#define _INTTYPES_H_
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
/* Workaround - TODO: move this include back into source */
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
intmax_t quot;
|
|
||||||
intmax_t rem;
|
|
||||||
} imaxdiv_t;
|
|
||||||
|
|
||||||
|
|
||||||
#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS)
|
|
||||||
|
|
||||||
/* 7.8.1 Macros for format specifiers
|
|
||||||
*
|
|
||||||
* MS runtime does not yet understand C9x standard "ll"
|
|
||||||
* length specifier. It appears to treat "ll" as "l".
|
|
||||||
* The non-standard I64 length specifier causes warning in GCC,
|
|
||||||
* but understood by MS runtime functions.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* fprintf macros for signed types */
|
|
||||||
#define PRId8 "d"
|
|
||||||
#define PRId16 "d"
|
|
||||||
#define PRId32 "d"
|
|
||||||
#define PRId64 "I64d"
|
|
||||||
|
|
||||||
#define PRIdLEAST8 "d"
|
|
||||||
#define PRIdLEAST16 "d"
|
|
||||||
#define PRIdLEAST32 "d"
|
|
||||||
#define PRIdLEAST64 "I64d"
|
|
||||||
|
|
||||||
#define PRIdFAST8 "d"
|
|
||||||
#define PRIdFAST16 "d"
|
|
||||||
#define PRIdFAST32 "d"
|
|
||||||
#define PRIdFAST64 "I64d"
|
|
||||||
|
|
||||||
#define PRIdMAX "I64d"
|
|
||||||
|
|
||||||
#define PRIi8 "i"
|
|
||||||
#define PRIi16 "i"
|
|
||||||
#define PRIi32 "i"
|
|
||||||
#define PRIi64 "I64i"
|
|
||||||
|
|
||||||
#define PRIiLEAST8 "i"
|
|
||||||
#define PRIiLEAST16 "i"
|
|
||||||
#define PRIiLEAST32 "i"
|
|
||||||
#define PRIiLEAST64 "I64i"
|
|
||||||
|
|
||||||
#define PRIiFAST8 "i"
|
|
||||||
#define PRIiFAST16 "i"
|
|
||||||
#define PRIiFAST32 "i"
|
|
||||||
#define PRIiFAST64 "I64i"
|
|
||||||
|
|
||||||
#define PRIiMAX "I64i"
|
|
||||||
|
|
||||||
#define PRIo8 "o"
|
|
||||||
#define PRIo16 "o"
|
|
||||||
#define PRIo32 "o"
|
|
||||||
#define PRIo64 "I64o"
|
|
||||||
|
|
||||||
#define PRIoLEAST8 "o"
|
|
||||||
#define PRIoLEAST16 "o"
|
|
||||||
#define PRIoLEAST32 "o"
|
|
||||||
#define PRIoLEAST64 "I64o"
|
|
||||||
|
|
||||||
#define PRIoFAST8 "o"
|
|
||||||
#define PRIoFAST16 "o"
|
|
||||||
#define PRIoFAST32 "o"
|
|
||||||
#define PRIoFAST64 "I64o"
|
|
||||||
|
|
||||||
#define PRIoMAX "I64o"
|
|
||||||
|
|
||||||
/* fprintf macros for unsigned types */
|
|
||||||
#define PRIu8 "u"
|
|
||||||
#define PRIu16 "u"
|
|
||||||
#define PRIu32 "u"
|
|
||||||
#define PRIu64 "I64u"
|
|
||||||
|
|
||||||
|
|
||||||
#define PRIuLEAST8 "u"
|
|
||||||
#define PRIuLEAST16 "u"
|
|
||||||
#define PRIuLEAST32 "u"
|
|
||||||
#define PRIuLEAST64 "I64u"
|
|
||||||
|
|
||||||
#define PRIuFAST8 "u"
|
|
||||||
#define PRIuFAST16 "u"
|
|
||||||
#define PRIuFAST32 "u"
|
|
||||||
#define PRIuFAST64 "I64u"
|
|
||||||
|
|
||||||
#define PRIuMAX "I64u"
|
|
||||||
|
|
||||||
#define PRIx8 "x"
|
|
||||||
#define PRIx16 "x"
|
|
||||||
#define PRIx32 "x"
|
|
||||||
#define PRIx64 "I64x"
|
|
||||||
|
|
||||||
#define PRIxLEAST8 "x"
|
|
||||||
#define PRIxLEAST16 "x"
|
|
||||||
#define PRIxLEAST32 "x"
|
|
||||||
#define PRIxLEAST64 "I64x"
|
|
||||||
|
|
||||||
#define PRIxFAST8 "x"
|
|
||||||
#define PRIxFAST16 "x"
|
|
||||||
#define PRIxFAST32 "x"
|
|
||||||
#define PRIxFAST64 "I64x"
|
|
||||||
|
|
||||||
#define PRIxMAX "I64x"
|
|
||||||
|
|
||||||
#define PRIX8 "X"
|
|
||||||
#define PRIX16 "X"
|
|
||||||
#define PRIX32 "X"
|
|
||||||
#define PRIX64 "I64X"
|
|
||||||
|
|
||||||
#define PRIXLEAST8 "X"
|
|
||||||
#define PRIXLEAST16 "X"
|
|
||||||
#define PRIXLEAST32 "X"
|
|
||||||
#define PRIXLEAST64 "I64X"
|
|
||||||
|
|
||||||
#define PRIXFAST8 "X"
|
|
||||||
#define PRIXFAST16 "X"
|
|
||||||
#define PRIXFAST32 "X"
|
|
||||||
#define PRIXFAST64 "I64X"
|
|
||||||
|
|
||||||
#define PRIXMAX "I64X"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* fscanf macros for signed int types
|
|
||||||
* NOTE: if 32-bit int is used for int_fast8_t and int_fast16_t
|
|
||||||
* (see stdint.h, 7.18.1.3), FAST8 and FAST16 should have
|
|
||||||
* no length identifiers
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define SCNd16 "hd"
|
|
||||||
#define SCNd32 "d"
|
|
||||||
#define SCNd64 "I64d"
|
|
||||||
|
|
||||||
#define SCNdLEAST16 "hd"
|
|
||||||
#define SCNdLEAST32 "d"
|
|
||||||
#define SCNdLEAST64 "I64d"
|
|
||||||
|
|
||||||
#define SCNdFAST16 "hd"
|
|
||||||
#define SCNdFAST32 "d"
|
|
||||||
#define SCNdFAST64 "I64d"
|
|
||||||
|
|
||||||
#define SCNdMAX "I64d"
|
|
||||||
|
|
||||||
#define SCNi16 "hi"
|
|
||||||
#define SCNi32 "i"
|
|
||||||
#define SCNi64 "I64i"
|
|
||||||
|
|
||||||
#define SCNiLEAST16 "hi"
|
|
||||||
#define SCNiLEAST32 "i"
|
|
||||||
#define SCNiLEAST64 "I64i"
|
|
||||||
|
|
||||||
#define SCNiFAST16 "hi"
|
|
||||||
#define SCNiFAST32 "i"
|
|
||||||
#define SCNiFAST64 "I64i"
|
|
||||||
|
|
||||||
#define SCNiMAX "I64i"
|
|
||||||
|
|
||||||
#define SCNo16 "ho"
|
|
||||||
#define SCNo32 "o"
|
|
||||||
#define SCNo64 "I64o"
|
|
||||||
|
|
||||||
#define SCNoLEAST16 "ho"
|
|
||||||
#define SCNoLEAST32 "o"
|
|
||||||
#define SCNoLEAST64 "I64o"
|
|
||||||
|
|
||||||
#define SCNoFAST16 "ho"
|
|
||||||
#define SCNoFAST32 "o"
|
|
||||||
#define SCNoFAST64 "I64o"
|
|
||||||
|
|
||||||
#define SCNoMAX "I64o"
|
|
||||||
|
|
||||||
#define SCNx16 "hx"
|
|
||||||
#define SCNx32 "x"
|
|
||||||
#define SCNx64 "I64x"
|
|
||||||
|
|
||||||
#define SCNxLEAST16 "hx"
|
|
||||||
#define SCNxLEAST32 "x"
|
|
||||||
#define SCNxLEAST64 "I64x"
|
|
||||||
|
|
||||||
#define SCNxFAST16 "hx"
|
|
||||||
#define SCNxFAST32 "x"
|
|
||||||
#define SCNxFAST64 "I64x"
|
|
||||||
|
|
||||||
#define SCNxMAX "I64x"
|
|
||||||
|
|
||||||
/* fscanf macros for unsigned int types */
|
|
||||||
|
|
||||||
#define SCNu16 "hu"
|
|
||||||
#define SCNu32 "u"
|
|
||||||
#define SCNu64 "I64u"
|
|
||||||
|
|
||||||
#define SCNuLEAST16 "hu"
|
|
||||||
#define SCNuLEAST32 "u"
|
|
||||||
#define SCNuLEAST64 "I64u"
|
|
||||||
|
|
||||||
#define SCNuFAST16 "hu"
|
|
||||||
#define SCNuFAST32 "u"
|
|
||||||
#define SCNuFAST64 "I64u"
|
|
||||||
|
|
||||||
#define SCNuMAX "I64u"
|
|
||||||
|
|
||||||
#ifdef _WIN64
|
|
||||||
#define PRIdPTR "I64d"
|
|
||||||
#define PRIiPTR "I64i"
|
|
||||||
#define PRIoPTR "I64o"
|
|
||||||
#define PRIuPTR "I64u"
|
|
||||||
#define PRIxPTR "I64x"
|
|
||||||
#define PRIXPTR "I64X"
|
|
||||||
#define SCNdPTR "I64d"
|
|
||||||
#define SCNiPTR "I64i"
|
|
||||||
#define SCNoPTR "I64o"
|
|
||||||
#define SCNxPTR "I64x"
|
|
||||||
#define SCNuPTR "I64u"
|
|
||||||
#else
|
|
||||||
#define PRIdPTR "d"
|
|
||||||
#define PRIiPTR "i"
|
|
||||||
#define PRIoPTR "o"
|
|
||||||
#define PRIuPTR "u"
|
|
||||||
#define PRIxPTR "x"
|
|
||||||
#define PRIXPTR "X"
|
|
||||||
#define SCNdPTR "d"
|
|
||||||
#define SCNiPTR "i"
|
|
||||||
#define SCNoPTR "o"
|
|
||||||
#define SCNxPTR "x"
|
|
||||||
#define SCNuPTR "u"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
|
|
||||||
/*
|
|
||||||
* no length modifier for char types prior to C9x
|
|
||||||
* MS runtime scanf appears to treat "hh" as "h"
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* signed char */
|
|
||||||
#define SCNd8 "hhd"
|
|
||||||
#define SCNdLEAST8 "hhd"
|
|
||||||
#define SCNdFAST8 "hhd"
|
|
||||||
|
|
||||||
#define SCNi8 "hhi"
|
|
||||||
#define SCNiLEAST8 "hhi"
|
|
||||||
#define SCNiFAST8 "hhi"
|
|
||||||
|
|
||||||
#define SCNo8 "hho"
|
|
||||||
#define SCNoLEAST8 "hho"
|
|
||||||
#define SCNoFAST8 "hho"
|
|
||||||
|
|
||||||
#define SCNx8 "hhx"
|
|
||||||
#define SCNxLEAST8 "hhx"
|
|
||||||
#define SCNxFAST8 "hhx"
|
|
||||||
|
|
||||||
/* unsigned char */
|
|
||||||
#define SCNu8 "hhu"
|
|
||||||
#define SCNuLEAST8 "hhu"
|
|
||||||
#define SCNuFAST8 "hhu"
|
|
||||||
#endif /* __STDC_VERSION__ >= 199901 */
|
|
||||||
|
|
||||||
#endif /* !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) */
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* ndef _INTTYPES_H */
|
|
|
@ -97,7 +97,7 @@
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>..;..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..;..\..\..\msvc-missing;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -117,7 +117,7 @@
|
||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>..;..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..;..\..\..\msvc-missing;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -132,7 +132,7 @@
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>..;..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..;..\..\..\msvc-missing;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -152,7 +152,7 @@
|
||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>..;..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..;..\..\..\msvc-missing;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
TARGETNAME=libfat
|
TARGETNAME=libfat
|
||||||
TARGETTYPE=LIBRARY
|
TARGETTYPE=LIBRARY
|
||||||
|
|
||||||
INCLUDES=$(DDK_INC_PATH);..
|
INCLUDES=$(DDK_INC_PATH);..\..\msvc-missing
|
||||||
C_DEFINES=$(C_DEFINES) /DDDKBUILD /DUNICODE /D_UNICODE /DISOLATION_AWARE_ENABLED
|
C_DEFINES=$(C_DEFINES) /DDDKBUILD /DUNICODE /D_UNICODE /DISOLATION_AWARE_ENABLED
|
||||||
|
|
||||||
!IFNDEF MSC_WARNING_LEVEL
|
!IFNDEF MSC_WARNING_LEVEL
|
||||||
|
|
|
@ -95,7 +95,7 @@
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>..;..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..;..\..\..\msvc-missing;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -115,7 +115,7 @@
|
||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>..;..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..;..\..\..\msvc-missing;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -130,7 +130,7 @@
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>..;..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..;..\..\..\msvc-missing;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -150,7 +150,7 @@
|
||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;ISOLATION_AWARE_ENABLED;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>..;..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..;..\..\..\msvc-missing;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
TARGETNAME=libinstaller
|
TARGETNAME=libinstaller
|
||||||
TARGETTYPE=LIBRARY
|
TARGETTYPE=LIBRARY
|
||||||
|
|
||||||
INCLUDES=$(DDK_INC_PATH);..
|
INCLUDES=$(DDK_INC_PATH);..\..\msvc-missing
|
||||||
C_DEFINES=$(C_DEFINES) /DDDKBUILD /DUNICODE /D_UNICODE /DISOLATION_AWARE_ENABLED
|
C_DEFINES=$(C_DEFINES) /DDDKBUILD /DUNICODE /D_UNICODE /DISOLATION_AWARE_ENABLED
|
||||||
|
|
||||||
!IFNDEF MSC_WARNING_LEVEL
|
!IFNDEF MSC_WARNING_LEVEL
|
||||||
|
|
|
@ -1,262 +0,0 @@
|
||||||
/**
|
|
||||||
* This file has no copyright assigned and is placed in the Public Domain.
|
|
||||||
* This file was originally part of the w64 mingw-runtime package.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* ISO C9x 7.18 Integer types <stdint.h>
|
|
||||||
* Based on ISO/IEC SC22/WG14 9899 Committee draft (SC22 N2794)
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
|
||||||
*
|
|
||||||
* Contributor: Danny Smith <danny_r_smith_2001@yahoo.co.nz>
|
|
||||||
* Modified for libusb/MSVC: Pete Batard <pbatard@gmail.com>
|
|
||||||
*
|
|
||||||
* This source code is offered for use in the public domain. You may
|
|
||||||
* use, modify or distribute it freely.
|
|
||||||
*
|
|
||||||
* This code is distributed in the hope that it will be useful but
|
|
||||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
|
||||||
* DISCLAIMED. This includes but is not limited to warranties of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
* Date: 2010-04-02
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _MSC_VER
|
|
||||||
#error This header should only be used with Microsoft compilers
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef _STDINT_H
|
|
||||||
#define _STDINT_H
|
|
||||||
|
|
||||||
#ifndef _INTPTR_T_DEFINED
|
|
||||||
#define _INTPTR_T_DEFINED
|
|
||||||
#ifndef __intptr_t_defined
|
|
||||||
#define __intptr_t_defined
|
|
||||||
#undef intptr_t
|
|
||||||
#ifdef _WIN64
|
|
||||||
typedef __int64 intptr_t;
|
|
||||||
#else
|
|
||||||
typedef int intptr_t;
|
|
||||||
#endif /* _WIN64 */
|
|
||||||
#endif /* __intptr_t_defined */
|
|
||||||
#endif /* _INTPTR_T_DEFINED */
|
|
||||||
|
|
||||||
#ifndef _UINTPTR_T_DEFINED
|
|
||||||
#define _UINTPTR_T_DEFINED
|
|
||||||
#ifndef __uintptr_t_defined
|
|
||||||
#define __uintptr_t_defined
|
|
||||||
#undef uintptr_t
|
|
||||||
#ifdef _WIN64
|
|
||||||
typedef unsigned __int64 uintptr_t;
|
|
||||||
#else
|
|
||||||
typedef unsigned int uintptr_t;
|
|
||||||
#endif /* _WIN64 */
|
|
||||||
#endif /* __uintptr_t_defined */
|
|
||||||
#endif /* _UINTPTR_T_DEFINED */
|
|
||||||
|
|
||||||
#ifndef _PTRDIFF_T_DEFINED
|
|
||||||
#define _PTRDIFF_T_DEFINED
|
|
||||||
#ifndef _PTRDIFF_T_
|
|
||||||
#define _PTRDIFF_T_
|
|
||||||
#undef ptrdiff_t
|
|
||||||
#ifdef _WIN64
|
|
||||||
typedef __int64 ptrdiff_t;
|
|
||||||
#else
|
|
||||||
typedef int ptrdiff_t;
|
|
||||||
#endif /* _WIN64 */
|
|
||||||
#endif /* _PTRDIFF_T_ */
|
|
||||||
#endif /* _PTRDIFF_T_DEFINED */
|
|
||||||
|
|
||||||
#ifndef _WCHAR_T_DEFINED
|
|
||||||
#define _WCHAR_T_DEFINED
|
|
||||||
#ifndef __cplusplus
|
|
||||||
typedef unsigned short wchar_t;
|
|
||||||
#endif /* C++ */
|
|
||||||
#endif /* _WCHAR_T_DEFINED */
|
|
||||||
|
|
||||||
#ifndef _WCTYPE_T_DEFINED
|
|
||||||
#define _WCTYPE_T_DEFINED
|
|
||||||
#ifndef _WINT_T
|
|
||||||
#define _WINT_T
|
|
||||||
typedef unsigned short wint_t;
|
|
||||||
typedef unsigned short wctype_t;
|
|
||||||
#endif /* _WINT_T */
|
|
||||||
#endif /* _WCTYPE_T_DEFINED */
|
|
||||||
|
|
||||||
/* 7.18.1.1 Exact-width integer types */
|
|
||||||
typedef __int8 int8_t;
|
|
||||||
typedef unsigned __int8 uint8_t;
|
|
||||||
typedef __int16 int16_t;
|
|
||||||
typedef unsigned __int16 uint16_t;
|
|
||||||
typedef __int32 int32_t;
|
|
||||||
typedef unsigned __int32 uint32_t;
|
|
||||||
typedef __int64 int64_t;
|
|
||||||
typedef unsigned __int64 uint64_t;
|
|
||||||
|
|
||||||
/* 7.18.1.2 Minimum-width integer types */
|
|
||||||
typedef signed char int_least8_t;
|
|
||||||
typedef unsigned char uint_least8_t;
|
|
||||||
typedef short int_least16_t;
|
|
||||||
typedef unsigned short uint_least16_t;
|
|
||||||
typedef int int_least32_t;
|
|
||||||
typedef unsigned uint_least32_t;
|
|
||||||
typedef __int64 int_least64_t;
|
|
||||||
typedef unsigned __int64 uint_least64_t;
|
|
||||||
|
|
||||||
/* 7.18.1.3 Fastest minimum-width integer types
|
|
||||||
* Not actually guaranteed to be fastest for all purposes
|
|
||||||
* Here we use the exact-width types for 8 and 16-bit ints.
|
|
||||||
*/
|
|
||||||
typedef __int8 int_fast8_t;
|
|
||||||
typedef unsigned __int8 uint_fast8_t;
|
|
||||||
typedef __int16 int_fast16_t;
|
|
||||||
typedef unsigned __int16 uint_fast16_t;
|
|
||||||
typedef __int32 int_fast32_t;
|
|
||||||
typedef unsigned __int32 uint_fast32_t;
|
|
||||||
typedef __int64 int_fast64_t;
|
|
||||||
typedef unsigned __int64 uint_fast64_t;
|
|
||||||
|
|
||||||
/* 7.18.1.5 Greatest-width integer types */
|
|
||||||
typedef __int64 intmax_t;
|
|
||||||
typedef unsigned __int64 uintmax_t;
|
|
||||||
|
|
||||||
/* 7.18.2 Limits of specified-width integer types */
|
|
||||||
#if !defined ( __cplusplus) || defined (__STDC_LIMIT_MACROS)
|
|
||||||
|
|
||||||
/* 7.18.2.1 Limits of exact-width integer types */
|
|
||||||
#define INT8_MIN (-128)
|
|
||||||
#define INT16_MIN (-32768)
|
|
||||||
#define INT32_MIN (-2147483647 - 1)
|
|
||||||
#define INT64_MIN (-9223372036854775807LL - 1)
|
|
||||||
|
|
||||||
#define INT8_MAX 127
|
|
||||||
#define INT16_MAX 32767
|
|
||||||
#define INT32_MAX 2147483647
|
|
||||||
#define INT64_MAX 9223372036854775807LL
|
|
||||||
|
|
||||||
#define UINT8_MAX 255
|
|
||||||
#define UINT16_MAX 65535
|
|
||||||
#define UINT32_MAX 0xffffffffU /* 4294967295U */
|
|
||||||
#define UINT64_MAX 0xffffffffffffffffULL /* 18446744073709551615ULL */
|
|
||||||
|
|
||||||
/* 7.18.2.2 Limits of minimum-width integer types */
|
|
||||||
#define INT_LEAST8_MIN INT8_MIN
|
|
||||||
#define INT_LEAST16_MIN INT16_MIN
|
|
||||||
#define INT_LEAST32_MIN INT32_MIN
|
|
||||||
#define INT_LEAST64_MIN INT64_MIN
|
|
||||||
|
|
||||||
#define INT_LEAST8_MAX INT8_MAX
|
|
||||||
#define INT_LEAST16_MAX INT16_MAX
|
|
||||||
#define INT_LEAST32_MAX INT32_MAX
|
|
||||||
#define INT_LEAST64_MAX INT64_MAX
|
|
||||||
|
|
||||||
#define UINT_LEAST8_MAX UINT8_MAX
|
|
||||||
#define UINT_LEAST16_MAX UINT16_MAX
|
|
||||||
#define UINT_LEAST32_MAX UINT32_MAX
|
|
||||||
#define UINT_LEAST64_MAX UINT64_MAX
|
|
||||||
|
|
||||||
/* 7.18.2.3 Limits of fastest minimum-width integer types */
|
|
||||||
#define INT_FAST8_MIN INT8_MIN
|
|
||||||
#define INT_FAST16_MIN INT16_MIN
|
|
||||||
#define INT_FAST32_MIN INT32_MIN
|
|
||||||
#define INT_FAST64_MIN INT64_MIN
|
|
||||||
|
|
||||||
#define INT_FAST8_MAX INT8_MAX
|
|
||||||
#define INT_FAST16_MAX INT16_MAX
|
|
||||||
#define INT_FAST32_MAX INT32_MAX
|
|
||||||
#define INT_FAST64_MAX INT64_MAX
|
|
||||||
|
|
||||||
#define UINT_FAST8_MAX UINT8_MAX
|
|
||||||
#define UINT_FAST16_MAX UINT16_MAX
|
|
||||||
#define UINT_FAST32_MAX UINT32_MAX
|
|
||||||
#define UINT_FAST64_MAX UINT64_MAX
|
|
||||||
|
|
||||||
/* 7.18.2.4 Limits of integer types capable of holding
|
|
||||||
object pointers */
|
|
||||||
#ifdef _WIN64
|
|
||||||
#define INTPTR_MIN INT64_MIN
|
|
||||||
#define INTPTR_MAX INT64_MAX
|
|
||||||
#define UINTPTR_MAX UINT64_MAX
|
|
||||||
#else
|
|
||||||
#define INTPTR_MIN INT32_MIN
|
|
||||||
#define INTPTR_MAX INT32_MAX
|
|
||||||
#define UINTPTR_MAX UINT32_MAX
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* 7.18.2.5 Limits of greatest-width integer types */
|
|
||||||
#define INTMAX_MIN INT64_MIN
|
|
||||||
#define INTMAX_MAX INT64_MAX
|
|
||||||
#define UINTMAX_MAX UINT64_MAX
|
|
||||||
|
|
||||||
/* 7.18.3 Limits of other integer types */
|
|
||||||
#ifdef _WIN64
|
|
||||||
#define PTRDIFF_MIN INT64_MIN
|
|
||||||
#define PTRDIFF_MAX INT64_MAX
|
|
||||||
#else
|
|
||||||
#define PTRDIFF_MIN INT32_MIN
|
|
||||||
#define PTRDIFF_MAX INT32_MAX
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define SIG_ATOMIC_MIN INT32_MIN
|
|
||||||
#define SIG_ATOMIC_MAX INT32_MAX
|
|
||||||
|
|
||||||
#ifndef SIZE_MAX
|
|
||||||
#ifdef _WIN64
|
|
||||||
#define SIZE_MAX UINT64_MAX
|
|
||||||
#else
|
|
||||||
#define SIZE_MAX UINT32_MAX
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef WCHAR_MIN /* also in wchar.h */
|
|
||||||
#define WCHAR_MIN 0U
|
|
||||||
#define WCHAR_MAX 0xffffU
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* wint_t is unsigned short for compatibility with MS runtime
|
|
||||||
*/
|
|
||||||
#define WINT_MIN 0U
|
|
||||||
#define WINT_MAX 0xffffU
|
|
||||||
|
|
||||||
#endif /* !defined ( __cplusplus) || defined __STDC_LIMIT_MACROS */
|
|
||||||
|
|
||||||
|
|
||||||
/* 7.18.4 Macros for integer constants */
|
|
||||||
#if !defined ( __cplusplus) || defined (__STDC_CONSTANT_MACROS)
|
|
||||||
|
|
||||||
/* 7.18.4.1 Macros for minimum-width integer constants
|
|
||||||
|
|
||||||
Accoding to Douglas Gwyn <gwyn@arl.mil>:
|
|
||||||
"This spec was changed in ISO/IEC 9899:1999 TC1; in ISO/IEC
|
|
||||||
9899:1999 as initially published, the expansion was required
|
|
||||||
to be an integer constant of precisely matching type, which
|
|
||||||
is impossible to accomplish for the shorter types on most
|
|
||||||
platforms, because C99 provides no standard way to designate
|
|
||||||
an integer constant with width less than that of type int.
|
|
||||||
TC1 changed this to require just an integer constant
|
|
||||||
*expression* with *promoted* type."
|
|
||||||
|
|
||||||
The trick used here is from Clive D W Feather.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define INT8_C(val) (INT_LEAST8_MAX-INT_LEAST8_MAX+(val))
|
|
||||||
#define INT16_C(val) (INT_LEAST16_MAX-INT_LEAST16_MAX+(val))
|
|
||||||
#define INT32_C(val) (INT_LEAST32_MAX-INT_LEAST32_MAX+(val))
|
|
||||||
/* The 'trick' doesn't work in C89 for long long because, without
|
|
||||||
suffix, (val) will be evaluated as int, not intmax_t */
|
|
||||||
#define INT64_C(val) val##i64
|
|
||||||
|
|
||||||
#define UINT8_C(val) (val)
|
|
||||||
#define UINT16_C(val) (val)
|
|
||||||
#define UINT32_C(val) (val##i32)
|
|
||||||
#define UINT64_C(val) val##ui64
|
|
||||||
|
|
||||||
/* 7.18.4.2 Macros for greatest-width integer constants */
|
|
||||||
#define INTMAX_C(val) val##i64
|
|
||||||
#define UINTMAX_C(val) val##ui64
|
|
||||||
|
|
||||||
#endif /* !defined ( __cplusplus) || defined __STDC_CONSTANT_MACROS */
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,26 +0,0 @@
|
||||||
#ifndef _MSC_VER
|
|
||||||
#error This header should only be used with Microsoft compilers
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Workaround unisdt.h for MS compilers */
|
|
||||||
|
|
||||||
#ifndef _UNISTD_H_
|
|
||||||
#define _UNISTD_H_
|
|
||||||
|
|
||||||
/* On MS environments, the inline keyword is available in C++ only */
|
|
||||||
#ifndef inline
|
|
||||||
#define inline __inline
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* ssize_t is also not available (copy/paste from MinGW) */
|
|
||||||
#ifndef _SSIZE_T_DEFINED
|
|
||||||
#define _SSIZE_T_DEFINED
|
|
||||||
#undef ssize_t
|
|
||||||
#ifdef _WIN64
|
|
||||||
typedef __int64 ssize_t;
|
|
||||||
#else
|
|
||||||
typedef int ssize_t;
|
|
||||||
#endif /* _WIN64 */
|
|
||||||
#endif /* _SSIZE_T_DEFINED */
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -65,7 +65,7 @@ copy .msvc\iso9660_sources sources >NUL 2>&1
|
||||||
%BUILD_CMD%
|
%BUILD_CMD%
|
||||||
@echo off
|
@echo off
|
||||||
if errorlevel 1 goto builderror
|
if errorlevel 1 goto builderror
|
||||||
copy obj%BUILD_ALT_DIR%\%ARCH_DIR%\libfat.lib . >NUL 2>&1
|
copy obj%BUILD_ALT_DIR%\%ARCH_DIR%\iso9660.lib . >NUL 2>&1
|
||||||
|
|
||||||
if EXIST Makefile.hide ren Makefile.hide Makefile
|
if EXIST Makefile.hide ren Makefile.hide Makefile
|
||||||
if EXIST sources del sources >NUL 2>&1
|
if EXIST sources del sources >NUL 2>&1
|
||||||
|
@ -80,7 +80,22 @@ copy .msvc\udf_sources sources >NUL 2>&1
|
||||||
%BUILD_CMD%
|
%BUILD_CMD%
|
||||||
@echo off
|
@echo off
|
||||||
if errorlevel 1 goto builderror
|
if errorlevel 1 goto builderror
|
||||||
copy obj%BUILD_ALT_DIR%\%ARCH_DIR%\libfat.lib . >NUL 2>&1
|
copy obj%BUILD_ALT_DIR%\%ARCH_DIR%\udf.lib . >NUL 2>&1
|
||||||
|
|
||||||
|
if EXIST Makefile.hide ren Makefile.hide Makefile
|
||||||
|
if EXIST sources del sources >NUL 2>&1
|
||||||
|
|
||||||
|
::# libcdio driver Library
|
||||||
|
cd ..\driver
|
||||||
|
if EXIST Makefile ren Makefile Makefile.hide
|
||||||
|
|
||||||
|
copy .msvc\driver_sources sources >NUL 2>&1
|
||||||
|
|
||||||
|
@echo on
|
||||||
|
%BUILD_CMD%
|
||||||
|
@echo off
|
||||||
|
if errorlevel 1 goto builderror
|
||||||
|
copy obj%BUILD_ALT_DIR%\%ARCH_DIR%\driver.lib . >NUL 2>&1
|
||||||
|
|
||||||
if EXIST Makefile.hide ren Makefile.hide Makefile
|
if EXIST Makefile.hide ren Makefile.hide Makefile
|
||||||
if EXIST sources del sources >NUL 2>&1
|
if EXIST sources del sources >NUL 2>&1
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue