[FFmpeg-devel] [PATCH] Set systems that should support DOS paths in configure

Måns Rullgård mans
Tue Oct 7 00:49:38 CEST 2008


"Ramiro Polla" <ramiro.polla at gmail.com> writes:

> Hi,
>
> On Mon, Oct 6, 2008 at 5:52 PM, M?ns Rullg?rd <mans at mansr.com> wrote:
>> "Ramiro Polla" <ramiro.polla at gmail.com> writes:
>>
>>> Hi,
>>>
>>> On Fri, Oct 3, 2008 at 7:58 PM, M?ns Rullg?rd <mans at mansr.com> wrote:
>>>> "Ramiro Polla" <ramiro.polla at gmail.com> writes:
>>>>> $subj
>>> [...]
>>>>> Index: libavformat/os_support.h
>>>>> ===================================================================
>>>>> --- libavformat/os_support.h  (revision 15464)
>>>>> +++ libavformat/os_support.h  (working copy)
>>>>> @@ -35,6 +35,12 @@
>>>>>  #  define lseek(f,p,w) _lseeki64((f), (p), (w))
>>>>>  #endif
>>>>>
>>>>> +#ifdef HAVE_DOS_PATHS
>>>>> +    #define is_dos_path(path) (path[1]==':')
>>>>
>>>> This allows anything as the "drive letter", though maybe that's
>>>> considered OK.
>>>
>>> According to [0], only letters are allowed for the drive letter
>>> (altough I've seen some program, fsdext2 IIRC, using numbers). Added
>>> isalpha() for path[0].
>>>
>>>>> +#else
>>>>> +    #define is_dos_path(path) (0)
>>>>
>>>> Useless ().
>>>
>>> Removed.
>>>
>>> Also changed from #define to static inline int like ff_network_init().
>>>
>>> Ramiro Polla
>>> [0] http://msdn.microsoft.com/en-us/library/cc232152.aspx
>>>
>>> Index: libavformat/os_support.h
>>> ===================================================================
>>> --- libavformat/os_support.h  (revision 15572)
>>> +++ libavformat/os_support.h  (working copy)
>>> @@ -32,6 +32,15 @@
>>>  #  define lseek(f,p,w) _lseeki64((f), (p), (w))
>>>  #endif
>>>
>>> +static inline int is_dos_path(const char *path)
>>> +{
>>> +#ifdef HAVE_DOS_PATHS
>>> +     if (isalpha(path[0]) && path[1] == ':')
>>> +             return 1;
>>
>> Weird indentation.
>
> I know... I sent another patch right afterwards which should have fixed this.

I noticed after I'd sent the reply.

>>> +#endif
>>> +    return 0;
>>> +}
>>> +
>>>  #ifdef __BEOS__
>>>  #  include <sys/socket.h>
>>>  #  include <netinet/in.h>
>>> Index: libavformat/avio.c
>>> ===================================================================
>>> --- libavformat/avio.c        (revision 15572)
>>> +++ libavformat/avio.c        (working copy)
>>> @@ -21,6 +21,7 @@
>>>
>>>  #include "libavutil/avstring.h"
>>>  #include "libavcodec/opt.h"
>>> +#include "os_support.h"
>>>  #include "avformat.h"
>>>
>>>  #if LIBAVFORMAT_VERSION_MAJOR >= 53
>>> @@ -115,7 +116,7 @@
>>>          p++;
>>>      }
>>>      /* if the protocol has length 1, we consider it is a dos drive */
>>> -    if (*p == '\0' || (q - proto_str) <= 1) {
>>> +    if (*p == '\0' || is_dos_path(filename)) {
>>
>> Not that I mind making the check stricter, but does this not cover
>> what you need?
>
> In Windows, yes, it does. The difference is that this was also being
> special-cased in all other systems. With this patch it becomes
> consistent. It will work the same way with and without the patch for
> DOS-based systems, and
> ffmpeg -i x:something
> will now fail the same way as
> ffmpeg -i xx:something
> in non-DOS-based systems.

Makes sense.

> Besides this adds the function so it can be used by presets as well.

Right, that's where all this started.

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




More information about the ffmpeg-devel mailing list