diff -ru /tmp/flac-1.1.0/src/libFLAC/file_decoder.c flac-1.1.0/src/libFLAC/file_decoder.c --- /tmp/flac-1.1.0/src/libFLAC/file_decoder.c 2003-01-02 09:18:54.000000000 +0200 +++ flac-1.1.0/src/libFLAC/file_decoder.c 2006-09-18 17:30:11.000000000 +0300 @@ -20,10 +20,14 @@ #include #include /* for malloc() */ #include /* for strcmp() */ +#ifndef _WIN32_WCE #include /* for stat() */ +#endif #if defined _MSC_VER || defined __MINGW32__ +#if defined(_WIN32_WCE) && defined(__GNUC__) #include /* for _setmode() */ #include /* for _O_BINARY */ +#endif #elif defined __CYGWIN__ #include /* for setmode(), O_BINARY */ #include /* for _O_BINARY */ @@ -599,6 +603,7 @@ FLAC__SeekableStreamDecoderLengthStatus length_callback_(const FLAC__SeekableStreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data) { FLAC__FileDecoder *file_decoder = (FLAC__FileDecoder *)client_data; +#ifndef _WIN32_WCE struct stat filestats; (void)decoder; @@ -608,6 +613,20 @@ *stream_length = (FLAC__uint64)filestats.st_size; return FLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_OK; } +#endif + + FILE *work; + + if (0 == file_decoder->private_->filename) + return FLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_ERROR; + work = fopen(file_decoder->private_->filename, "rb"); + if (!work) + return FLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_ERROR; + fseek(work, 0, SEEK_END); + *stream_length = ftell(work); + fclose(work); + + return FLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_OK; } FLAC__bool eof_callback_(const FLAC__SeekableStreamDecoder *decoder, void *client_data) diff -ru /tmp/flac-1.1.0/src/libFLAC/metadata_iterators.c flac-1.1.0/src/libFLAC/metadata_iterators.c --- /tmp/flac-1.1.0/src/libFLAC/metadata_iterators.c 2003-01-14 23:42:44.000000000 +0200 +++ flac-1.1.0/src/libFLAC/metadata_iterators.c 2006-09-18 17:53:57.000000000 +0300 @@ -30,7 +30,32 @@ #include /* for utime() */ #include /* for chown(), unlink() */ #endif +#if defined(_WIN32_WCE) && defined(__GNUC__) +#include + +struct stat { + _dev_t st_dev; + _ino_t st_ino; + unsigned short st_mode; + short st_nlink; + short st_uid; + short st_gid; + _dev_t st_rdev; + _off_t st_size; + time_t st_atime; + time_t st_mtime; + time_t st_ctime; +}; + + +#define _S_IFDIR 0040000 /* directory */ +#define S_IFDIR _S_IFDIR + +int stat(const char *, struct stat *); + +#else #include /* for stat(), maybe chmod() */ +#endif #include "private/metadata.h"