[Flac-dev] FLAC C API / Visual Studio 2008 FILE* Issue

Ben Allison benski at winamp.com
Tue Jan 5 15:15:25 PST 2010


Ivailo -

FILE objects are internal to the C runtime library, they are not system
objects like HANDLEs (windows) or file descriptors (unix).  This means
that if libFLAC has linked against a different C runtime library than your
application, then the two FILE objects are incompatible.  This isn't just
a Windows specific issue either - if libFLAC was compiled against libc and
your application links to glibc (or even a different version of libc) you
will experience the same issue.  In my opinion, this function should have
never been in the API in the first place.  A function that accepts a
HANDLE on Windows or an int (file descriptor) on Unix is more appropriate.

-Ben Allison

> I managed to get around it. I used the stream functions and provided my
> own
> callbacks for reading and writing. What's strange is that what I've done
> is
> just copied the contents of read/write/seek/tell/eof callbacks from the
> sources to my application and it works just fine, no glitches. When I use
> the build-in implementation, it just crashes without any reason. It's not
> a
> problem to stick with my own callbacks for reading, but fixing this issue
> (if it's not just me) would be nice.
>
> On Wed, Jan 6, 2010 at 12:38 AM, Erik de Castro Lopo
> <mle+la at mega-nerd.com<mle%2Bla at mega-nerd.com>
>> wrote:
>
>> Ivailo Karamanolev wrote:
>>
>> > I am currently learning the FLAC C API and had the code working with
>> > FLAC__stream_decoder_init_file. However, since I'd need the Unicode
>> filename
>> > support, I tried _wfopen_s in combination with
>> > FLAC__stream_decoder_init_FILE, however I get a runtime crash as sonn
>> as
>> I
>> > call FLAC__stream_decoder_process_until_end_of_stream. The same code
>> > (partially taken from the examples) is working perfectly with the
>> function
>> > accepting filename and crashing with the one accepting FILE*. I have
>> tried
>> > both compiling the library myself and using the precompiled
>> > flac-1.2.1-devel-win. Can someone try if it is working for him (the
>> FILE*)
>> > version and if yes - send back the source code?
>> > I work in Windows 7 64bit, but I tried that also on a virtual Windows
>> XP
>> and
>> > it crashes there also.
>>
>> There is a whole bunch of weird stuff in windows, this is just another
>> instance.
>>
>> If what you want to do is read/write FLAC files with windows UCS-16
>> filenames,
>> one option is to use libsndfile:
>>
>>    http://www.mega-nerd.com/libsndfile/
>>
>> which with version 1.0.21 has added this function:
>>
>>    /* The function sf_wchar_open() is Windows Only!
>>    ** Open a file passing in a Windows Unicode filename. Otherwise, this
>> is
>>    ** the same as sf_open().
>>    **
>>    ** In order for this to work, you need to do the following:
>>    **
>>    **          #include <windows.h>
>>    **          #define ENABLE_SNDFILE_WINDOWS_PROTOTYPES 1
>>    **          #including <sndfile.h>
>>    */
>>    #if ENABLE_SNDFILE_WINDOWS_PROTOTYPES
>>    SNDFILE* sf_wchar_open (LPCWSTR wpath, int mode, SF_INFO *sfinfo) ;
>>    #endif
>>
>> There is a windows binary installer in the main web page (one for each
>> of
>> 32 and 64 bit windows).
>>
>> The only downside to this is that libsndfile does not expose the all of
>> the features of the FLAC API to the user.
>>
>> Erik
>> --
>> ----------------------------------------------------------------------
>> Erik de Castro Lopo
>> http://www.mega-nerd.com/
>> _______________________________________________
>> Flac-dev mailing list
>> Flac-dev at xiph.org
>> http://lists.xiph.org/mailman/listinfo/flac-dev
>>
> _______________________________________________
> Flac-dev mailing list
> Flac-dev at xiph.org
> http://lists.xiph.org/mailman/listinfo/flac-dev
>



More information about the Flac-dev mailing list