Beispiel #1
0
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;
}
Beispiel #2
0
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;
}
Beispiel #3
0
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);
}