static int cache_glob_lookup_file_name (const char *file_name, const char *mime_types[], int n_mime_types) { int n; MimeWeight mimes[10]; int n_mimes = 10; int i; int len; char *lower_case; assert (file_name != NULL && n_mime_types > 0); /* First, check the literals */ lower_case = ascii_tolower (file_name); n = cache_glob_lookup_literal (lower_case, mime_types, n_mime_types, FALSE); if (n > 0) { free (lower_case); return n; } n = cache_glob_lookup_literal (file_name, mime_types, n_mime_types, TRUE); if (n > 0) { free (lower_case); return n; } len = strlen (file_name); n = cache_glob_lookup_suffix (lower_case, len, FALSE, mimes, n_mimes); if (n < 2) n += cache_glob_lookup_suffix (file_name, len, TRUE, mimes + n, n_mimes - n); free (lower_case); /* Last, try fnmatch */ if (n < 2) n += cache_glob_lookup_fnmatch (file_name, mimes + n, n_mimes - n); n = filter_out_dupes (mimes, n); qsort (mimes, n, sizeof (MimeWeight), compare_mime_weight); if (n_mime_types < n) n = n_mime_types; for (i = 0; i < n; i++) mime_types[i] = mimes[i].mime; return n; }
static int cache_glob_lookup_file_name (const char *file_name, const char *mime_types[], int n_mime_types) { int n; MimeWeight mimes[10]; int n_mimes = 10; int i; xdg_unichar_t *ucs4; int len; assert (file_name != NULL && n_mime_types > 0); /* First, check the literals */ n = cache_glob_lookup_literal (file_name, mime_types, n_mime_types); if (n > 0) return n; ucs4 = _xdg_convert_to_ucs4 (file_name, &len); n = cache_glob_lookup_suffix (ucs4, len, FALSE, mimes, n_mimes); if (n == 0) n = cache_glob_lookup_suffix (ucs4, len, TRUE, mimes, n_mimes); free(ucs4); /* Last, try fnmatch */ if (n == 0) n = cache_glob_lookup_fnmatch (file_name, mimes, n_mimes); qsort (mimes, n, sizeof (MimeWeight), compare_mime_weight); if (n_mime_types < n) n = n_mime_types; for (i = 0; i < n; i++) mime_types[i] = mimes[i].mime; return n; }
static int cache_glob_lookup_file_name (const char *file_name, const char *mime_types[], int n_mime_types) { const char *ptr; char stopchars[128]; int n; assert (file_name != NULL); /* First, check the literals */ n = cache_glob_lookup_literal (file_name, mime_types, n_mime_types); if (n > 0) return n; find_stopchars (stopchars); /* Next, check suffixes */ ptr = strpbrk (file_name, stopchars); while (ptr) { n = cache_glob_lookup_suffix (ptr, FALSE, mime_types, n_mime_types); if (n > 0) return n; n = cache_glob_lookup_suffix (ptr, TRUE, mime_types, n_mime_types); if (n > 0) return n; ptr = strpbrk (ptr + 1, stopchars); } /* Last, try fnmatch */ return cache_glob_lookup_fnmatch (file_name, mime_types, n_mime_types); }