Read the new glob2 format with case sensitive flags

This commit is contained in:
Alexander Larsson 2009-10-02 09:46:33 +02:00
parent 5e4a895bb3
commit ce239a010e
3 changed files with 66 additions and 27 deletions

View File

@ -165,7 +165,7 @@ xdg_mime_init_from_directory (const char *directory)
strcpy (file_name, directory); strcat (file_name, "/mime/globs2"); strcpy (file_name, directory); strcat (file_name, "/mime/globs2");
if (stat (file_name, &st) == 0) if (stat (file_name, &st) == 0)
{ {
_xdg_mime_glob_read_from_file (global_hash, file_name); _xdg_mime_glob_read_from_file (global_hash, file_name, TRUE);
xdg_dir_time_list_add (file_name, st.st_mtime); xdg_dir_time_list_add (file_name, st.st_mtime);
} }
else else
@ -175,7 +175,7 @@ xdg_mime_init_from_directory (const char *directory)
strcpy (file_name, directory); strcat (file_name, "/mime/globs"); strcpy (file_name, directory); strcat (file_name, "/mime/globs");
if (stat (file_name, &st) == 0) if (stat (file_name, &st) == 0)
{ {
_xdg_mime_glob_read_from_file (global_hash, file_name); _xdg_mime_glob_read_from_file (global_hash, file_name, FALSE);
xdg_dir_time_list_add (file_name, st.st_mtime); xdg_dir_time_list_add (file_name, st.st_mtime);
} }
else else

View File

@ -493,7 +493,8 @@ void
_xdg_glob_hash_append_glob (XdgGlobHash *glob_hash, _xdg_glob_hash_append_glob (XdgGlobHash *glob_hash,
const char *glob, const char *glob,
const char *mime_type, const char *mime_type,
int weight) int weight,
int case_sensitive)
{ {
XdgGlobType type; XdgGlobType type;
@ -555,10 +556,12 @@ _xdg_glob_hash_dump (XdgGlobHash *glob_hash)
void void
_xdg_mime_glob_read_from_file (XdgGlobHash *glob_hash, _xdg_mime_glob_read_from_file (XdgGlobHash *glob_hash,
const char *file_name) const char *file_name,
int version_two)
{ {
FILE *glob_file; FILE *glob_file;
char line[255]; char line[255];
char *p;
glob_file = fopen (file_name, "r"); glob_file = fopen (file_name, "r");
@ -569,33 +572,67 @@ _xdg_mime_glob_read_from_file (XdgGlobHash *glob_hash,
* Blah */ * Blah */
while (fgets (line, 255, glob_file) != NULL) while (fgets (line, 255, glob_file) != NULL)
{ {
char *colon, *colon2; char *colon;
char *mimetype, *glob; char *mimetype, *glob, *end;
int weight; int weight;
int case_sensitive;
if (line[0] == '#') if (line[0] == '#' || line[0] == 0)
continue; continue;
colon = strchr (line, ':'); end = line + strlen(line) - 1;
if (*end == '\n')
*end = 0;
p = line;
if (version_two)
{
colon = strchr (p, ':');
if (colon == NULL)
continue;
*colon = 0;
weight = atoi (p);
p = colon + 1;
}
else
weight = 50;
colon = strchr (p, ':');
if (colon == NULL) if (colon == NULL)
continue; continue;
*(colon++) = '\0'; *colon = 0;
colon[strlen (colon) -1] = '\0';
colon2 = strchr (colon, ':'); mimetype = p;
if (colon2) p = colon + 1;
{ glob = p;
*(colon2++) = '\000'; case_sensitive = FALSE;
weight = atoi (line);
mimetype = colon; colon = strchr (p, ':');
glob = colon2; if (version_two && colon != NULL)
} {
else char *flag;
{
weight = 50; /* We got flags */
mimetype = line; *colon = 0;
glob = colon; p = colon + 1;
}
_xdg_glob_hash_append_glob (glob_hash, glob, mimetype, weight); /* Flags end at next colon */
colon = strchr (p, ':');
if (colon != NULL)
*colon = 0;
flag = strstr (p, "cs");
if (flag != NULL &&
/* Start or after comma */
(flag == p ||
flag[-1] == ',') &&
/* ends with comma or end of string */
(flag[2] == 0 ||
flag[2] == ','))
case_sensitive = TRUE;
}
_xdg_glob_hash_append_glob (glob_hash, glob, mimetype, weight, case_sensitive);
} }
fclose (glob_file); fclose (glob_file);

View File

@ -51,7 +51,8 @@ typedef enum
#endif #endif
void _xdg_mime_glob_read_from_file (XdgGlobHash *glob_hash, void _xdg_mime_glob_read_from_file (XdgGlobHash *glob_hash,
const char *file_name); const char *file_name,
int version_two);
XdgGlobHash *_xdg_glob_hash_new (void); XdgGlobHash *_xdg_glob_hash_new (void);
void _xdg_glob_hash_free (XdgGlobHash *glob_hash); void _xdg_glob_hash_free (XdgGlobHash *glob_hash);
int _xdg_glob_hash_lookup_file_name (XdgGlobHash *glob_hash, int _xdg_glob_hash_lookup_file_name (XdgGlobHash *glob_hash,
@ -61,7 +62,8 @@ int _xdg_glob_hash_lookup_file_name (XdgGlobHash *glob_hash,
void _xdg_glob_hash_append_glob (XdgGlobHash *glob_hash, void _xdg_glob_hash_append_glob (XdgGlobHash *glob_hash,
const char *glob, const char *glob,
const char *mime_type, const char *mime_type,
int weight); int weight,
int case_sensitive);
XdgGlobType _xdg_glob_determine_type (const char *glob); XdgGlobType _xdg_glob_determine_type (const char *glob);
void _xdg_glob_hash_dump (XdgGlobHash *glob_hash); void _xdg_glob_hash_dump (XdgGlobHash *glob_hash);