Exemplo n.º 1
0
int  search_for_filename(struct direntv6 filenames[], int validFiles, const char *name, struct direntv6 *dirEnt)
{
  int check = 0;
  for (int j = 0; j < validFiles; j++)
  {
	if (compare_two_strings(name, filenames[j].d_name)) 
	{	
		dirEnt->d_inumber = filenames[j].d_inumber;
		copy_two_strings (dirEnt->d_name, filenames[j].d_name);
		check = 1;
	}
	if(check) break;
  }
  return check;
}
Exemplo n.º 2
0
/**
 * compare_two_strings wrapper.
 * Reads a string from a current field of a current
 * record and compares it with a passed value.
 *
 * @param key compare key
 * @param case_sensitive case sensivity flag
 * @param cond internal ID of comparision mode
 * @return 1 if strings are equal (for the given mode)
 */
static int compare_string(const pcsl_string* search_key, 
                        jsr211_boolean case_sensitive, find_condition cond) {
  pcsl_string string = PCSL_STRING_NULL_INITIALIZER;
  int compare_result;
  int exact_result, first_result;
  int equal_count, string_len;

  read_string(&string);

  string_len = pcsl_string_utf16_length(&string);
  compare_result = cond != find_last ? 
                   compare_two_strings(&string, search_key, case_sensitive):
                   pcsl_string_ends_with(search_key, &string);

  pcsl_string_free(&string);
  exact_result = compare_result == 0;
  
  if (cond == find_last) {
    return compare_result;
  }

  if (cond == find_exact) {
    return exact_result;
  }

  equal_count = compare_result - 1;
  first_result = (equal_count == string_len) || exact_result;

  if (cond == find_first) {
    return first_result;
  }

  if (cond == find_test) {
    return first_result || equal_count == pcsl_string_utf16_length(search_key);
  }
  return 0;
}