[FFmpeg-devel] [PATCH] Fix pipes on OS/2

Måns Rullgård mans
Sun Jul 6 18:42:14 CEST 2008


Diego Biurrun <diego at biurrun.de> writes:

> On Sat, Jun 14, 2008 at 06:40:59PM -0700, Dave Yeo wrote:
>> On 06/07/08 04:37 pm, M?ns Rullg?rd wrote:
>>>
>>> I am slightly sceptical to randomly including headers with such
>>> generic names.  We don't know what effects that might have on another
>>> system.  Can't we somehow get rid of the setmode() call instead.  It's
>>> horribly non-portable.  So badly, in fact, that the function exists on
>>> many systems, but does entirely different things.
>>
>> Unluckily setmode() is used on most all DOSish compilers including all 4  
>> versions of GCC that FFmpeg supports. Since it is always declared in  
>> io.h perhaps this solution is best. This should also fix BEOS since it  
>> has O_BINARY and the BSD setmode().
>> --- configure	(revision 13773)
>> +++ configure	(working copy)
>> @@ -765,6 +765,7 @@
>>      roundf
>>      sdl
>>      sdl_video_size
>> +    setmode
>>      socklen_t
>>      soundcard_h
>>      poll_h
>> @@ -1602,6 +1603,7 @@
>>  check_func  inet_aton $network_extralibs
>>  check_func  memalign
>>  check_func  mkstemp
>> +check_func2 io.h setmode
>>  check_func2 windows.h GetProcessTimes
>>  
>>  check_header byteswap.h
>> --- libavformat/file.c	(revision 13773)
>> +++ libavformat/file.c	(working copy)
>> @@ -22,6 +22,9 @@
>>  #include "libavutil/avstring.h"
>>  #include "avformat.h"
>>  #include <fcntl.h>
>> +#ifdef HAVE_SETMODE
>> +#include <io.h>
>> +#endif
>>  #include <unistd.h>
>>  #include <sys/time.h>
>>  #include <stdlib.h>
>> @@ -104,7 +107,7 @@
>>              fd = 0;
>>          }
>>      }
>> -#ifdef O_BINARY
>> +#ifdef HAVE_SETMODE
>>      setmode(fd, O_BINARY);
>>  #endif
>>      h->priv_data = (void *)(size_t)fd;
>
> So is this version of the patch OK?  I will apply on Wednesday unless I
> hear objections...

This not really any better, only different.  With this patch, it
checks for an io.h header and the setmode() function, and calls
setmode() if both are found.  I'll be surprised if there is no system
where both conditions are true, yet setmode() does something entirely
different.

Is there really no proper way of doing this?

-- 
M?ns Rullg?rd
mans at mansr.com




More information about the ffmpeg-devel mailing list