Case insensitive mimetype matching edge case

Shaun McCance shaunm at gnome.org
Wed Aug 5 19:27:22 PDT 2009


On Wed, 2009-05-20 at 15:20 +0200, Alexander Larsson wrote:
> I got a bug report[1] recently about a problem with case insensitive
> globs.
> 
> The spec has this to say:
>  Applications MUST first try a case-sensitive match, then try again with
>  the filename converted to lower-case if that fails. This is so that 
>  main.C will be seen as a C++ file, but IMAGE.GIF will still use the
>  *.gif pattern. 
> 
> Now, take the case of foo.ps.gz, foo.PS.GZ, and foo.PS.gz.
> The first matches .ps.gz and .gz case sensitively, picking the longer
> match.The second one does the same, but case insensitively.
> The third one however, matches .gz case insensitively only, so picks
> that instead of trying an insensitive match...
> 
> Not sure how to handle this. Maybe we should always do the insensitive
> match and handle conflicts like we do multiple globs with the same
> extension?

Instead of doing the case-sensitive math first, couldn't
we do it last as a tie-breaker between matches of equal
length?

Round 1:
  lowercase(foo.C) matches lowercase(*.C)
  lowercase(foo.C) matches lowercase(*.c)

We have two matches of equal length, so

Round 2:
  foo.C matches *.C
  foo.C does not match *.c

So *.C wins.

This would require doing the case-insensitive match by
lowercasing both the filename and the pattern.  I don't
know if that causes any problems.

It would also mean that a match for *.ext.c would win
over a match for *.C.  But since *.C seems to be the
only use case we have, I'm not sure that's an issue.

--
Shaun





More information about the xdg mailing list