[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