Commit b1ec796b authored by Josh Coalson's avatar Josh Coalson

complete largefile support

parent 6977bda1
......@@ -44,12 +44,12 @@ all default: $(DEFAULT_BUILD)
VERSION=\"CVS\"
ifeq ($(DARWIN_BUILD),yes)
#CONFIG_CFLAGS=-DHAVE_INTTYPES_H -DHAVE_ICONV -DHAVE_LANGINFO_CODESET -DHAVE_SOCKLEN_T -DFLAC__HAS_OGG -DFLAC__SYS_DARWIN
CONFIG_CFLAGS=-DHAVE_INTTYPES_H -DHAVE_ICONV -DHAVE_LANGINFO_CODESET -DFLAC__HAS_OGG -DFLAC__SYS_DARWIN
#CONFIG_CFLAGS=-DHAVE_INTTYPES_H -DHAVE_ICONV -DHAVE_LANGINFO_CODESET -DHAVE_SOCKLEN_T -DFLAC__HAS_OGG -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DFLAC__SYS_DARWIN
CONFIG_CFLAGS=-DHAVE_INTTYPES_H -DHAVE_ICONV -DHAVE_LANGINFO_CODESET -DFLAC__HAS_OGG -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DFLAC__SYS_DARWIN
ICONV_INCLUDE_DIR=$(HOME)/local.i18n/include
ICONV_LIB_DIR=$(HOME)/local.i18n/lib
else
CONFIG_CFLAGS=-DHAVE_INTTYPES_H -DHAVE_ICONV -DHAVE_LANGINFO_CODESET -DHAVE_SOCKLEN_T -DFLAC__HAS_OGG
CONFIG_CFLAGS=-DHAVE_INTTYPES_H -DHAVE_ICONV -DHAVE_LANGINFO_CODESET -DHAVE_SOCKLEN_T -DFLAC__HAS_OGG -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
endif
OGG_INCLUDE_DIR=$(HOME)/local/include
......
......@@ -42,6 +42,9 @@ AC_PROG_MAKE_SET
AC_SYS_LARGEFILE
AC_FUNC_FSEEKO
#@@@ new name is AC_CONFIG_HEADERS
AM_CONFIG_HEADER(config.h)
AC_CHECK_TYPES(socklen_t, [], [])
dnl check for getopt in standard library
......@@ -49,13 +52,25 @@ dnl AC_CHECK_FUNCS(getopt_long , , [LIBOBJS="$LIBOBJS getopt.o getopt1.o"] )
AC_CHECK_FUNCS(getopt_long, [], [])
case "$host_cpu" in
i*86) cpu_ia32=true ; AC_DEFINE(FLAC__CPU_IA32) ;;
powerpc) cpu_ppc=true ; AC_DEFINE(FLAC__CPU_PPC) ;;
sparc) cpu_sparc=true ; AC_DEFINE(FLAC__CPU_SPARC) ;;
i*86)
cpu_ia32=true
AC_DEFINE(FLAC__CPU_IA32)
AH_TEMPLATE(FLAC__CPU_IA32, [define if building for ia32/i386])
;;
powerpc)
cpu_ppc=true
AC_DEFINE(FLAC__CPU_PPC)
AH_TEMPLATE(FLAC__CPU_PPC, [define if building for PowerPC])
;;
sparc)
cpu_sparc=true
AC_DEFINE(FLAC__CPU_SPARC)
AH_TEMPLATE(FLAC__CPU_SPARC, [define if building for SPARC])
;;
esac
AM_CONDITIONAL(FLaC__CPU_IA32, test x$cpu_ia32 = xtrue)
AM_CONDITIONAL(FLaC__CPU_PPC, test x$cpu_ppc = xtrue)
AM_CONDITIONAL(FLaC__CPU_SPARC, test x$cpu_sparc = xtrue)
AM_CONDITIONAL(FLaC__CPU_IA32, test "x$cpu_ia32" = xtrue)
AM_CONDITIONAL(FLaC__CPU_PPC, test "x$cpu_ppc" = xtrue)
AM_CONDITIONAL(FLaC__CPU_SPARC, test "x$cpu_sparc" = xtrue)
case "$host" in
i386-*-openbsd3.[[0-3]]) OBJ_FORMAT=aoutb ;;
*-*-cygwin|*mingw*) OBJ_FORMAT=win32 ;;
......@@ -63,20 +78,30 @@ case "$host" in
esac
AC_SUBST(OBJ_FORMAT)
case "$host" in
*-pc-linux-gnu) sys_linux=true ; AC_DEFINE(FLAC__SYS_LINUX) ;;
*-*-darwin*) sys_darwin=true ; AC_DEFINE(FLAC__SYS_DARWIN) ;;
*-pc-linux-gnu)
sys_linux=true
AC_DEFINE(FLAC__SYS_LINUX)
AH_TEMPLATE(FLAC__SYS_LINUX, [define if building for Linux])
;;
*-*-darwin*)
sys_darwin=true
AC_DEFINE(FLAC__SYS_DARWIN)
AH_TEMPLATE(FLAC__SYS_DARWIN, [define if building for Darwin / MacOS X])
;;
esac
AM_CONDITIONAL(FLaC__SYS_DARWIN, test x$sys_darwin = xtrue)
AM_CONDITIONAL(FLaC__SYS_LINUX, test x$sys_linux = xtrue)
AM_CONDITIONAL(FLaC__SYS_DARWIN, test "x$sys_darwin" = xtrue)
AM_CONDITIONAL(FLaC__SYS_LINUX, test "x$sys_linux" = xtrue)
if test x$cpu_ia32 = xtrue ; then
if test "x$cpu_ia32" = xtrue ; then
AC_DEFINE(FLAC__ALIGN_MALLOC_DATA)
AH_TEMPLATE(FLAC__ALIGN_MALLOC_DATA, [define to align allocated memory on 32-byte boundaries])
fi
AC_ARG_ENABLE(asm-optimizations, [ --disable-asm-optimizations Don't use any assembly optimization routines], asm_opt=no, asm_opt=yes)
AM_CONDITIONAL(FLaC__NO_ASM, test x$asm_opt = xno)
if test x$asm_opt = xno ; then
AC_ARG_ENABLE(asm-optimizations, AC_HELP_STRING([--disable-asm-optimizations], [Don't use any assembly optimization routines]), asm_opt=no, asm_opt=yes)
AM_CONDITIONAL(FLaC__NO_ASM, test "x$asm_opt" = xno)
if test "x$asm_opt" = xno ; then
AC_DEFINE(FLAC__NO_ASM)
AH_TEMPLATE(FLAC__NO_ASM, [define to disable use of assembly code])
fi
AC_ARG_ENABLE(debug,
......@@ -86,7 +111,7 @@ AC_ARG_ENABLE(debug,
no) debug=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-debug) ;;
esac],[debug=false])
AM_CONDITIONAL(DEBUG, test x$debug = xtrue)
AM_CONDITIONAL(DEBUG, test "x$debug" = xtrue)
AC_ARG_ENABLE(sse,
[ --enable-sse Enable SSE support by asserting that the OS supports SSE instructions],
......@@ -95,9 +120,10 @@ AC_ARG_ENABLE(sse,
no) sse_os=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-sse) ;;
esac],[sse_os=false])
AM_CONDITIONAL(FLaC__SSE_OS, test x$sse_os = xtrue)
if test x$sse_os = xtrue ; then
AM_CONDITIONAL(FLaC__SSE_OS, test "x$sse_os" = xtrue)
if test "x$sse_os" = xtrue ; then
AC_DEFINE(FLAC__SSE_OS)
AH_TEMPLATE(FLAC__SSE_OS, [define if your operating system supports SSE instructions])
fi
AC_ARG_ENABLE(3dnow,
......@@ -107,9 +133,10 @@ AC_ARG_ENABLE(3dnow,
no) use_3dnow=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-3dnow) ;;
esac],[use_3dnow=true])
AM_CONDITIONAL(FLaC__USE_3DNOW, test x$use_3dnow = xtrue)
if test x$use_3dnow = xtrue ; then
AM_CONDITIONAL(FLaC__USE_3DNOW, test "x$use_3dnow" = xtrue)
if test "x$use_3dnow" = xtrue ; then
AC_DEFINE(FLAC__USE_3DNOW)
AH_TEMPLATE(FLAC__USE_3DNOW, [define to enable use of 3Dnow! instructions])
fi
AC_ARG_ENABLE(altivec,
......@@ -119,9 +146,10 @@ AC_ARG_ENABLE(altivec,
no) use_altivec=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-altivec) ;;
esac],[use_altivec=true])
AM_CONDITIONAL(FLaC__USE_ALTIVEC, test x$use_altivec = xtrue)
if test x$use_altivec = xtrue ; then
AM_CONDITIONAL(FLaC__USE_ALTIVEC, test "x$use_altivec" = xtrue)
if test "x$use_altivec" = xtrue ; then
AC_DEFINE(FLAC__USE_ALTIVEC)
AH_TEMPLATE(FLAC__USE_ALTIVEC, [define to enable use of Altivec instructions])
fi
AC_ARG_ENABLE(local-xmms-plugin,
......@@ -131,7 +159,7 @@ AC_ARG_ENABLE(local-xmms-plugin,
no) install_xmms_plugin_locally=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-local-xmms-plugin) ;;
esac],[install_xmms_plugin_locally=false])
AM_CONDITIONAL(FLaC__INSTALL_XMMS_PLUGIN_LOCALLY, test x$install_xmms_plugin_locally = xtrue)
AM_CONDITIONAL(FLaC__INSTALL_XMMS_PLUGIN_LOCALLY, test "x$install_xmms_plugin_locally" = xtrue)
AC_ARG_ENABLE(exhaustive-tests,
[ --enable-exhaustive-tests Enable exhaustive testing],
......@@ -140,50 +168,57 @@ AC_ARG_ENABLE(exhaustive-tests,
no) exhaustive_tests=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-exhaustive-tests) ;;
esac],[exhaustive_tests=false])
AM_CONDITIONAL(FLaC__EXHAUSTIVE_TESTS, test x$exhaustive_tests = xtrue)
if test x$exhaustive_tests = xtrue ; then
AM_CONDITIONAL(FLaC__EXHAUSTIVE_TESTS, test "x$exhaustive_tests" = xtrue)
if test "x$exhaustive_tests" = xtrue ; then
AC_DEFINE(FLAC__EXHAUSTIVE_TESTS)
AH_TEMPLATE(FLAC__EXHAUSTIVE_TESTS, [define to run even more tests])
fi
AC_ARG_ENABLE(valgrind-testing,
[ --enable-valgrind-testing Run all tests inside Valgrind],
AC_HELP_STRING([--enable-valgrind-testing], [Run all tests inside Valgrind]),
[case "${enableval}" in
yes) valgrind_testing=true ;;
no) valgrind_testing=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-valgrind-testing) ;;
esac],[valgrind_testing=false])
AM_CONDITIONAL(FLaC__VALGRIND_TESTING, test x$valgrind_testing = xtrue)
if test x$valgrind_testing = xtrue ; then
AM_CONDITIONAL(FLaC__VALGRIND_TESTING, test "x$valgrind_testing" = xtrue)
if test "x$valgrind_testing" = xtrue ; then
AC_DEFINE(FLAC__VALGRIND_TESTING)
AH_TEMPLATE(FLAC__VALGRIND_TESTING, [define to enable use of Valgrind in testers])
fi
AC_ARG_ENABLE(doxygen-docs,
AC_HELP_STRING([--disable-doxygen-docs], [Disable API documentation building via Doxygen]),
[case "${enableval}" in
yes) enable_doxygen_docs=true ;;
no) enable_doxygen_docs=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-doxygen-docs) ;;
esac],[enable_doxygen_docs=true])
if test "x$enable_doxygen_docs" != xno ; then
AC_CHECK_PROGS(DOXYGEN, doxygen)
fi
AM_CONDITIONAL(FLaC__HAS_DOXYGEN, test -n "$DOXYGEN")
dnl check for ogg library
XIPH_PATH_OGG(have_ogg=yes, AC_MSG_WARN([*** Ogg development enviroment not installed - Ogg support will not be built]))
AM_CONDITIONAL(FLaC__HAS_OGG, [test x$have_ogg = xyes])
if test x$have_ogg = xyes ; then
AM_CONDITIONAL(FLaC__HAS_OGG, [test "x$have_ogg" = xyes])
if test "x$have_ogg" = xyes ; then
AC_DEFINE(FLAC__HAS_OGG)
AH_TEMPLATE(FLAC__HAS_OGG, [define if you have the ogg library])
fi
AM_PATH_XMMS(0.9.5.1, , AC_MSG_WARN([*** XMMS >= 0.9.5.1 not installed - xmms support will not be built]))
AM_CONDITIONAL(FLaC__HAS_XMMS, test x$XMMS_INPUT_PLUGIN_DIR != x)
AM_CONDITIONAL(FLaC__HAS_XMMS, test -n "$XMMS_INPUT_PLUGIN_DIR")
dnl check for i18n(internationalization); these are from libiconv/gettext
AM_ICONV
AM_LANGINFO_CODESET
AC_ARG_ENABLE(doxygen_docs, AC_HELP_STRING([--disable-doxygen-docs], [Disable API documentation building via Doxygen]))
if test "x$enable_doxygen_docs" != "xno" ; then
AC_CHECK_PROGS(DOXYGEN, doxygen)
fi
AM_CONDITIONAL(FLaC__HAS_DOXYGEN, test -n "$DOXYGEN")
if test -n "$DOXYGEN" ; then
AC_DEFINE(FLAC__HAS_DOXYGEN)
fi
AC_CHECK_PROGS(DOCBOOK_TO_MAN, docbook-to-man docbook2man)
AM_CONDITIONAL(FLaC__HAS_DOCBOOK_TO_MAN, test -n "$DOCBOOK_TO_MAN")
if test -n "$DOCBOOK_TO_MAN" ; then
AC_DEFINE(FLAC__HAS_DOCBOOK_TO_MAN)
AH_TEMPLATE(FLAC__HAS_DOCBOOK_TO_MAN, [define if you have docbook-to-man or docbook2man])
fi
# only matters for x86
......@@ -191,6 +226,7 @@ AC_CHECK_PROGS(NASM, nasm)
AM_CONDITIONAL(FLaC__HAS_NASM, test -n "$NASM")
if test -n "$NASM" ; then
AC_DEFINE(FLAC__HAS_NASM)
AH_TEMPLATE(FLAC__HAS_NASM, [define if you are compiling for x86 and have the NASM assembler])
fi
# only matters for PowerPC
......@@ -203,18 +239,20 @@ AM_CONDITIONAL(FLaC__HAS_AS, test "$AS" = "as")
AM_CONDITIONAL(FLaC__HAS_GAS, test "$AS" = "gas")
if test "$AS" = "as" ; then
AC_DEFINE(FLAC__HAS_AS)
AH_TEMPLATE(FLAC__HAS_AS, [define if you are compiling for PowerPC and have the 'as' assembler])
fi
if test "$AS" = "gas" ; then
# funniest. macro. ever.
AC_DEFINE(FLAC__HAS_GAS)
AH_TEMPLATE(FLAC__HAS_GAS, [define if you are compiling for PowerPC and have the 'gas' assembler])
fi
OUR_CFLAGS_HEAD='-I$(top_builddir) -I$(srcdir)/include -I$(top_srcdir)/include'
if test x$debug = xtrue; then
if test "x$debug" = xtrue; then
OUR_CFLAGS_HEAD="$OUR_CFLAGS_HEAD -g -O0 -DDEBUG"
else
OUR_CFLAGS_HEAD="$OUR_CFLAGS_HEAD -O2 -DNDEBUG"
if test x$GCC = xyes; then
if test "x$GCC" = xyes; then
OUR_CFLAGS_HEAD="$OUR_CFLAGS_HEAD -O3 -fomit-frame-pointer -funroll-loops -finline-functions -Wall -W -Winline -DFLaC__INLINE=__inline__"
fi
fi
......@@ -225,27 +263,7 @@ CXXFLAGS="$OUR_CFLAGS_HEAD $CXXFLAGS"
AM_CONDITIONAL(FLaC__HAS_AS__TEMPORARILY_DISABLED, test "yes" = "no")
AM_CONDITIONAL(FLaC__HAS_GAS__TEMPORARILY_DISABLED, test "yes" = "no")
AM_CONFIG_HEADER(config.h)
AH_TEMPLATE(FLAC__ALIGN_MALLOC_DATA, [define to align allocated memory on 32-byte boundaries])
AH_TEMPLATE(FLAC__CPU_IA32, [define if building for ia32/i386])
AH_TEMPLATE(FLAC__CPU_PPC, [define if building for PowerPC])
AH_TEMPLATE(FLAC__CPU_SPARC, [define if building for SPARC])
AH_TEMPLATE(FLAC__SYS_DARWIN, [define if building for Darwin / MacOS X])
AH_TEMPLATE(FLAC__SYS_LINUX, [define if building for Linux])
AH_TEMPLATE(FLAC__EXHAUSTIVE_TESTS, [define to run even more tests])
AH_TEMPLATE(FLAC__VALGRIND_TESTING, [define to enable use of Valgrind in testers])
AH_TEMPLATE(FLAC__HAS_DOXYGEN, [define if you have Doxygen])
AH_TEMPLATE(FLAC__HAS_DOCBOOK_TO_MAN, [define if you have docbook-to-man or docbook2man])
AH_TEMPLATE(FLAC__HAS_NASM, [define if you are compiling for x86 and have the NASM assembler])
AH_TEMPLATE(FLAC__HAS_AS, [define if you are compiling for PowerPC and have the 'as' assembler])
AH_TEMPLATE(FLAC__HAS_GAS, [define if you are compiling for PowerPC and have the 'gas' assembler])
AH_TEMPLATE(FLAC__HAS_OGG, [define if you have the ogg library])
AH_TEMPLATE(FLAC__NO_ASM, [define to disable use of assembly code])
AH_TEMPLATE(FLAC__SSE_OS, [define if your operating system supports SSE instructions])
AH_TEMPLATE(FLAC__USE_3DNOW, [define to enable use of 3Dnow! instructions])
AH_TEMPLATE(FLAC__USE_ALTIVEC, [define to enable use of Altivec instructions])
AC_OUTPUT( \
AC_CONFIG_FILES([ \
Makefile \
src/Makefile \
src/libFLAC/Makefile \
......@@ -311,4 +329,5 @@ AC_OUTPUT( \
obj/release/bin/Makefile \
obj/release/lib/Makefile \
flac.pbproj/Makefile \
)
])
AC_OUTPUT
......@@ -65,7 +65,7 @@
<li>
General:
<ul>
<li>(none)</li>
<li>Large file (&gt;2GB) support everywhere</li>
</ul>
</li>
<li>
......@@ -98,6 +98,7 @@
<ul>
<li>Added a new option <a href="documentation.html#metaflac_shorthand_set_tag_from_file"><span class="argument">--set-tag-from-file</span></a> for setting a tag from file (e.g. for importing a cuesheet as a tag).</li>
<li>Added shorthand operation <a href="documentation.html#metaflac_shorthand_remove_replay_gain"><span class="argument">--remove-replay-gain</span></a> for removing ReplayGain tags.</li>
<li><a href="documentation.html#metaflac_shorthand_export_cuesheet_to"><span class="argument">--export-cuesheet-to</span></a> now properly specifies the FLAC file name (<a href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1272825&amp;group_id=13478&amp;atid=363478">SF #1272825</a>).</li>
<li>Importing of non-CDDA-compliant cuesheets now issues a warning.</li>
</ul>
</li>
......@@ -105,14 +106,16 @@
plugins:
<ul>
<li>When ReplayGain is on, if tags for the preferred kind of gain (album/track) are not in a stream, the other kind will be used.</li>
<li>Add ReplayGain info to file info box in XMMS plugin</li>
<li>Added ReplayGain info to file info box in XMMS plugin</li>
<li>Fixed UTF-8 decoder to disallow non-shortest-form and surrogate sequences (see <a href="http://www.unicode.org/versions/corrigendum1.html">here</a>).</li>
</ul>
</li>
<li>
build system:
<ul>
<li>Add support for building on OS/2 with EMX (<a href="https://sourceforge.net/tracker/index.php?func=detail&aid=1229495&group_id=13478&atid=113478">SF #1229495</a>)</li>
<li>Added support for building on OS/2 with EMX (<a href="https://sourceforge.net/tracker/index.php?func=detail&aid=1229495&group_id=13478&atid=113478">SF #1229495</a>)</li>
<li>Added <span class="argument">--disable-doxygen-docs</span> to <span class="command">configure</span> for disabling Doxygen-based API doc generation (<a href="https://sourceforge.net/tracker/index.php?func=detail&aid=1365935&group_id=13478&atid=313478">SF #1365935</a>).</li>
<li>Added large file support with <span class="argument">AC_SYS_LARGEFILE</span>; use <span class="argument">--disable-largefile</span> with <span class="command">configure</span> to disable.</li>
</ul>
</li>
<li>
......
......@@ -23,6 +23,11 @@
#ifndef GRABAG__FILE_H
#define GRABAG__FILE_H
/* needed because of off_t */
#if HAVE_CONFIG_H
# include <config.h>
#endif
#include <sys/types.h> /* for off_t */
#include <stdio.h> /* for FILE */
#include "FLAC/ordinals.h"
......
......@@ -16,6 +16,11 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#if HAVE_CONFIG_H
# include <config.h>
#endif
#include <errno.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
......@@ -208,7 +213,7 @@ FLAC__bool dump_stats(const subframe_stats_t *stats, const char *filename)
outfile = fopen(filename, "w");
if(0 == outfile) {
fprintf(stderr, "ERROR opening %s\n", filename);
fprintf(stderr, "ERROR opening %s: %s\n", filename, strerror(errno));
return false;
}
......
......@@ -16,8 +16,8 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifdef HAVE_CONFIG_H
#include <config.h>
#if HAVE_CONFIG_H
# include <config.h>
#endif
#if defined _WIN32 && !defined __CYGWIN__
......@@ -26,10 +26,16 @@
#else
# include <unistd.h>
#endif
#if defined _MSC_VER || defined __MINGW32__
#include <sys/types.h> /* for off_t */
//@@@ [2G limit] hacks for MSVC6
#define fseeko fseek
#define ftello ftell
#endif
#include <errno.h>
#include <math.h> /* for floor() */
#include <stdio.h> /* for FILE et al. */
#include <string.h> /* for strcmp() */
#include <stdio.h> /* for FILE etc. */
#include <string.h> /* for strcmp(), strerror() */
#include "FLAC/all.h"
#include "share/grabbag.h"
#include "share/replaygain_synthesis.h"
......@@ -72,9 +78,9 @@ typedef struct {
struct {
FLAC__bool needs_fixup;
unsigned riff_offset; /* or FORM offset for AIFF */
unsigned data_offset; /* or SSND offset for AIFF */
unsigned frames_offset; /* AIFF only */
off_t riff_offset; /* or FORM offset for AIFF */
off_t data_offset; /* or SSND offset for AIFF */
off_t frames_offset; /* AIFF only */
} wave_chunk_size_fixup;
FLAC__bool is_big_endian;
......@@ -292,7 +298,7 @@ FLAC__bool DecoderSession_construct(DecoderSession *d, FLAC__bool is_ogg, FLAC__
}
else {
if(0 == (d->fout = fopen(outfilename, "wb"))) {
flac__utils_printf(stderr, 1, "%s: ERROR: can't open output file %s\n", d->inbasefilename, outfilename);
flac__utils_printf(stderr, 1, "%s: ERROR: can't open output file %s: %s\n", d->inbasefilename, outfilename, strerror(errno));
DecoderSession_destroy(d, /*error_occurred=*/true);
return false;
}
......@@ -639,7 +645,7 @@ FLAC__bool write_necessary_headers(DecoderSession *decoder_session)
return false;
if(decoder_session->wave_chunk_size_fixup.needs_fixup)
decoder_session->wave_chunk_size_fixup.riff_offset = ftell(decoder_session->fout);
decoder_session->wave_chunk_size_fixup.riff_offset = ftello(decoder_session->fout);
if(!write_little_endian_uint32(decoder_session->fout, aligned_data_size+36)) /* filesize-8 */
return false;
......@@ -672,7 +678,7 @@ FLAC__bool write_necessary_headers(DecoderSession *decoder_session)
return false;
if(decoder_session->wave_chunk_size_fixup.needs_fixup)
decoder_session->wave_chunk_size_fixup.data_offset = ftell(decoder_session->fout);
decoder_session->wave_chunk_size_fixup.data_offset = ftello(decoder_session->fout);
if(!write_little_endian_uint32(decoder_session->fout, (FLAC__uint32)data_size)) /* data size */
return false;
......@@ -682,7 +688,7 @@ FLAC__bool write_necessary_headers(DecoderSession *decoder_session)
return false;
if(decoder_session->wave_chunk_size_fixup.needs_fixup)
decoder_session->wave_chunk_size_fixup.riff_offset = ftell(decoder_session->fout);
decoder_session->wave_chunk_size_fixup.riff_offset = ftello(decoder_session->fout);
if(!write_big_endian_uint32(decoder_session->fout, aligned_data_size+46)) /* filesize-8 */
return false;
......@@ -697,7 +703,7 @@ FLAC__bool write_necessary_headers(DecoderSession *decoder_session)
return false;
if(decoder_session->wave_chunk_size_fixup.needs_fixup)
decoder_session->wave_chunk_size_fixup.frames_offset = ftell(decoder_session->fout);
decoder_session->wave_chunk_size_fixup.frames_offset = ftello(decoder_session->fout);
if(!write_big_endian_uint32(decoder_session->fout, (FLAC__uint32)decoder_session->total_samples))
return false;
......@@ -712,7 +718,7 @@ FLAC__bool write_necessary_headers(DecoderSession *decoder_session)
return false;
if(decoder_session->wave_chunk_size_fixup.needs_fixup)
decoder_session->wave_chunk_size_fixup.data_offset = ftell(decoder_session->fout);
decoder_session->wave_chunk_size_fixup.data_offset = ftello(decoder_session->fout);
if(!write_big_endian_uint32(decoder_session->fout, (FLAC__uint32)data_size+8)) /* data size */
return false;
......@@ -805,11 +811,11 @@ FLAC__bool fixup_wave_chunk_size(const char *outfilename, FLAC__bool is_wave_out
{
const char *fmt_desc = (is_wave_out? "WAVE" : "AIFF");
FLAC__bool (*write_it)(FILE *, FLAC__uint32) = (is_wave_out? write_little_endian_uint32 : write_big_endian_uint32);
FILE *f = fopen(outfilename, "r+b");
FLAC__uint32 data_size, aligned_data_size;
FILE *f = fopen(outfilename, "r+b");
if(0 == f) {
flac__utils_printf(stderr, 1, "ERROR, couldn't open file %s while fixing up %s chunk size\n", outfilename, fmt_desc);
flac__utils_printf(stderr, 1, "ERROR, couldn't open file %s while fixing up %s chunk size: %s\n", outfilename, fmt_desc, strerror(errno));
return false;
}
......@@ -817,7 +823,7 @@ FLAC__bool fixup_wave_chunk_size(const char *outfilename, FLAC__bool is_wave_out
if(aligned_data_size & 1)
aligned_data_size++;
if(fseek(f, riff_offset, SEEK_SET) < 0) {
if(fseeko(f, riff_offset, SEEK_SET) < 0) {
flac__utils_printf(stderr, 1, "ERROR, couldn't seek in file %s while fixing up %s chunk size\n", outfilename, fmt_desc);
fclose(f);
return false;
......@@ -828,7 +834,7 @@ FLAC__bool fixup_wave_chunk_size(const char *outfilename, FLAC__bool is_wave_out
return false;
}
if(!is_wave_out) {
if(fseek(f, frames_offset, SEEK_SET) < 0) {
if(fseeko(f, frames_offset, SEEK_SET) < 0) {
flac__utils_printf(stderr, 1, "ERROR, couldn't seek in file %s while fixing up %s chunk size\n", outfilename, fmt_desc);
fclose(f);
return false;
......@@ -839,7 +845,7 @@ FLAC__bool fixup_wave_chunk_size(const char *outfilename, FLAC__bool is_wave_out
return false;
}
}
if(fseek(f, data_offset, SEEK_SET) < 0) {
if(fseeko(f, data_offset, SEEK_SET) < 0) {
flac__utils_printf(stderr, 1, "ERROR, couldn't seek in file %s while fixing up %s chunk size\n", outfilename, fmt_desc);
fclose(f);
return false;
......
......@@ -16,25 +16,32 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#if HAVE_CONFIG_H
# include <config.h>
#endif
#if defined _WIN32 && !defined __CYGWIN__
/* where MSVC puts unlink() */
# include <io.h>
#else
# include <unistd.h>
#endif
#if defined _MSC_VER || defined __MINGW32__
#include <sys/types.h> /* for off_t */
//@@@ [2G limit] hacks for MSVC6
#define fseeko fseek
#define ftello ftell
#endif
#include <errno.h>
#include <limits.h> /* for LONG_MAX */
#include <math.h> /* for floor() */
#include <stdio.h> /* for FILE etc. */
#include <stdlib.h> /* for malloc */
#include <string.h> /* for strcmp() */
#include <string.h> /* for strcmp(), strerror( */
#include "FLAC/all.h"
#include "share/grabbag.h"
#include "encode.h"
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#ifdef FLAC__HAS_OGG
#include "OggFLAC/stream_encoder.h"
#include "OggFLAC/file_encoder.h"
......@@ -160,7 +167,7 @@ static FLAC__bool fskip_ahead(FILE *f, FLAC__uint64 offset);
/*
* public routines
*/
int flac__encode_aif(FILE *infile, long infilesize, const char *infilename, const char *outfilename, const FLAC__byte *lookahead, unsigned lookahead_length, wav_encode_options_t options, FLAC__bool is_aifc)
int flac__encode_aif(FILE *infile, off_t infilesize, const char *infilename, const char *outfilename, const FLAC__byte *lookahead, unsigned lookahead_length, wav_encode_options_t options, FLAC__bool is_aifc)
{
EncoderSession encoder_session;
FLAC__uint16 x;
......@@ -525,7 +532,7 @@ int flac__encode_aif(FILE *infile, long infilesize, const char *infilename, cons
return EncoderSession_finish_ok(&encoder_session, info_align_carry, info_align_zero);
}
int flac__encode_wav(FILE *infile, long infilesize, const char *infilename, const char *outfilename, const FLAC__byte *lookahead, unsigned lookahead_length, wav_encode_options_t options)
int flac__encode_wav(FILE *infile, off_t infilesize, const char *infilename, const char *outfilename, const FLAC__byte *lookahead, unsigned lookahead_length, wav_encode_options_t options)
{
EncoderSession encoder_session;
FLAC__bool is_unsigned_samples = false;
......@@ -860,7 +867,7 @@ int flac__encode_wav(FILE *infile, long infilesize, const char *infilename, cons
return EncoderSession_finish_ok(&encoder_session, info_align_carry, info_align_zero);
}
int flac__encode_raw(FILE *infile, long infilesize, const char *infilename, const char *outfilename, const FLAC__byte *lookahead, unsigned lookahead_length, raw_encode_options_t options)
int flac__encode_raw(FILE *infile, off_t infilesize, const char *infilename, const char *outfilename, const FLAC__byte *lookahead, unsigned lookahead_length, raw_encode_options_t options)
{
EncoderSession encoder_session;
size_t bytes_read;
......@@ -906,7 +913,7 @@ int flac__encode_raw(FILE *infile, long infilesize, const char *infilename, cons
else {
/* *options.common.align_reservoir_samples will be 0 unless --sector-align is used */
FLAC__ASSERT(options.common.sector_align || *options.common.align_reservoir_samples == 0);
total_samples_in_input = (unsigned)infilesize / bytes_per_wide_sample + *options.common.align_reservoir_samples;
total_samples_in_input = (FLAC__uint64)infilesize / bytes_per_wide_sample + *options.common.align_reservoir_samples;
}
/*
......@@ -918,13 +925,13 @@ int flac__encode_raw(FILE *infile, long infilesize, const char *infilename, cons
encoder_session.until = (FLAC__uint64)options.common.until_specification.value.samples;
FLAC__ASSERT(!options.common.sector_align || encoder_session.until == 0);
infilesize -= (unsigned)encoder_session.skip * bytes_per_wide_sample; /*@@@ WATCHOUT: 4GB limit */
infilesize -= (off_t)encoder_session.skip * bytes_per_wide_sample;
encoder_session.total_samples_to_encode = total_samples_in_input - encoder_session.skip;
if(encoder_session.until > 0) {
const FLAC__uint64 trim = total_samples_in_input - encoder_session.until;
FLAC__ASSERT(total_samples_in_input > 0);
FLAC__ASSERT(!options.common.sector_align);
infilesize -= (unsigned int)trim * bytes_per_wide_sample;
infilesize -= (off_t)trim * bytes_per_wide_sample;
encoder_session.total_samples_to_encode -= trim;
}
if(infilesize >= 0 && options.common.sector_align) {
......@@ -979,7 +986,7 @@ int flac__encode_raw(FILE *infile, long infilesize, const char *infilename, cons
}
else {
*options.common.align_reservoir_samples = align_remainder;
infilesize -= (long)((*options.common.align_reservoir_samples) * bytes_per_wide_sample);
infilesize -= (off_t)((*options.common.align_reservoir_samples) * bytes_per_wide_sample);
FLAC__ASSERT(infilesize >= 0);
}
}
......@@ -1024,7 +1031,7 @@ int flac__encode_raw(FILE *infile, long infilesize, const char *infilename, cons
}
}
else {
const FLAC__uint64 max_input_bytes = (FLAC__uint64)infilesize;
const FLAC__uint64 max_input_bytes = infilesize;
FLAC__uint64 total_input_bytes_read = 0;
while(total_input_bytes_read < max_input_bytes) {
{
......@@ -1858,7 +1865,7 @@ FLAC__bool parse_cuesheet_(FLAC__StreamMetadata **cuesheet, const char *cuesheet
}
if(0 == (f = fopen(cuesheet_filename, "r"))) {
flac__utils_printf(stderr, 1, "%s: ERROR opening cuesheet \"%s\" for reading\n", inbasefilename, cuesheet_filename);
flac__utils_printf(stderr, 1, "%s: ERROR opening cuesheet \"%s\" for reading: %s\n", inbasefilename, cuesheet_filename, strerror(errno));
return false;
}
......@@ -2143,7 +2150,7 @@ FLAC__bool fskip_ahead(FILE *f, FLAC__uint64 offset)
while(offset > 0) {
long need = (long)min(offset, LONG_MAX);
if(fseek(f, need, SEEK_CUR) < 0) {
if(fseeko(f, need, SEEK_CUR) < 0) {
need = (long)min(offset, sizeof(dump));
if((long)fread(dump, 1, need, f) < need)
return false;
......
......@@ -19,6 +19,11 @@
#ifndef flac__encode_h
#define flac__encode_h
/* needed because of off_t */
#if HAVE_CONFIG_H
# include <config.h>
#endif