mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-03-03 22:52:09 +01:00
Read the new glob2 format with case sensitive flags
This commit is contained in:
parent
5e4a895bb3
commit
ce239a010e
@ -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
|
||||||
|
@ -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)
|
if (colon == NULL)
|
||||||
continue;
|
continue;
|
||||||
*(colon++) = '\0';
|
*colon = 0;
|
||||||
colon[strlen (colon) -1] = '\0';
|
weight = atoi (p);
|
||||||
colon2 = strchr (colon, ':');
|
p = colon + 1;
|
||||||
if (colon2)
|
|
||||||
{
|
|
||||||
*(colon2++) = '\000';
|
|
||||||
weight = atoi (line);
|
|
||||||
mimetype = colon;
|
|
||||||
glob = colon2;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
weight = 50;
|
weight = 50;
|
||||||
mimetype = line;
|
|
||||||
glob = colon;
|
colon = strchr (p, ':');
|
||||||
|
if (colon == NULL)
|
||||||
|
continue;
|
||||||
|
*colon = 0;
|
||||||
|
|
||||||
|
mimetype = p;
|
||||||
|
p = colon + 1;
|
||||||
|
glob = p;
|
||||||
|
case_sensitive = FALSE;
|
||||||
|
|
||||||
|
colon = strchr (p, ':');
|
||||||
|
if (version_two && colon != NULL)
|
||||||
|
{
|
||||||
|
char *flag;
|
||||||
|
|
||||||
|
/* We got flags */
|
||||||
|
*colon = 0;
|
||||||
|
p = colon + 1;
|
||||||
|
|
||||||
|
/* 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);
|
|
||||||
|
_xdg_glob_hash_append_glob (glob_hash, glob, mimetype, weight, case_sensitive);
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose (glob_file);
|
fclose (glob_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);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user