Fixed erroneous matching MIME types when the filename contains a path

This commit is contained in:
Pierre Pronchery 2009-05-25 22:04:12 +00:00
parent 0ac4c042f5
commit 0ef533a70e

View File

@ -1,5 +1,5 @@
/* $Id$ */ /* $Id$ */
/* Copyright (c) 2008 Pierre Pronchery <khorben@defora.org> */ /* Copyright (c) 2009 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS Desktop Browser */ /* This file is part of DeforaOS Desktop Browser */
/* This program is free software: you can redistribute it and/or modify /* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -174,17 +174,20 @@ char const * mime_get_handler(Mime * mime, char const * type,
/* mime_type */ /* mime_type */
char const * mime_type(Mime * mime, char const * path) char const * mime_type(Mime * mime, char const * path)
{ {
char const * p;
unsigned int i; unsigned int i;
p = strrchr(path, '/');
p = (p != NULL) ? p + 1 : path;
for(i = 0; i < mime->types_cnt; i++) for(i = 0; i < mime->types_cnt; i++)
if(fnmatch(mime->types[i].glob, path, FNM_NOESCAPE) == 0) if(fnmatch(mime->types[i].glob, p, FNM_NOESCAPE) == 0)
break; break;
#ifdef FNM_CASEFOLD #ifdef FNM_CASEFOLD
if(i < mime->types_cnt) if(i < mime->types_cnt)
return mime->types[i].type; return mime->types[i].type;
for(i = 0; i < mime->types_cnt; i++) for(i = 0; i < mime->types_cnt; i++)
if(fnmatch(mime->types[i].glob, path, if(fnmatch(mime->types[i].glob, p, FNM_NOESCAPE | FNM_CASEFOLD)
FNM_NOESCAPE | FNM_CASEFOLD) == 0) == 0)
break; break;
#endif #endif
return i < mime->types_cnt ? mime->types[i].type : NULL; return i < mime->types_cnt ? mime->types[i].type : NULL;