示例#1
0
文件: gmimex.c 项目: swerter/gmimex
static void part_extractor_foreach_callback(GMimeObject *parent, GMimeObject *part, gpointer user_data) {
  PartExtractorData *a_data = (PartExtractorData *) user_data;

  if (GMIME_IS_MESSAGE_PART(part)) {

    if (a_data->recursion_depth < RECURSION_LIMIT) {
      GMimeMessage *message = g_mime_message_part_get_message((GMimeMessagePart *) part); // transfer none
      if (message)
        g_mime_message_foreach(message, part_extractor_foreach_callback, a_data);

    } else {
      g_printerr("endless recursion detected: %d\r\n", a_data->recursion_depth);
      return;
    }

  } else if (GMIME_IS_MESSAGE_PARTIAL (part)) {
    // Save into an array ? Todo: Look into the specs
  } else if (GMIME_IS_MULTIPART (part)) {
    // Nothing special needed on multipart, let descend further
  } else if (GMIME_IS_PART (part)) {

    // We are interested only in the part 0 (counting down by same logic)
    if (a_data->part_id == 0)
      extract_part(part, a_data);

    a_data->part_id--;

  } else {
    g_assert_not_reached();
  }
}
示例#2
0
static void
test_empty_parts_are_skipped(void)
{
	char part_buf[64];
	assert_false(extract_part("::::abc", ':', part_buf) == NULL);
	assert_string_equal("abc", part_buf);
}
示例#3
0
static void
test_single_char_extracted_correctly(void)
{
	char part_buf[64];
	assert_false(extract_part("a:", ':', part_buf) == NULL);
	assert_string_equal("a", part_buf);
}
示例#4
0
static void
test_no_delimiters_extracted_correctly(void)
{
	char part_buf[64];
	assert_false(extract_part("abc", ':', part_buf) == NULL);
	assert_string_equal("abc", part_buf);
}
示例#5
0
char * _Locale_extract_numeric_name(char const *full, char *part)
{
  return extract_part(full, part, "LC_NUMERIC", 1);
}
示例#6
0
char * _Locale_extract_ctype_name(char const *full, char *part)
{
  return extract_part(full, part, "LC_CTYPE", 0);
}
示例#7
0
char * _Locale_extract_messages_name(char const *full, char *part)
{
  return extract_part(full, part, "LC_MESSAGES", 5);
}
示例#8
0
char * _Locale_extract_monetary_name(char const *full, char *part)
{
  return extract_part(full, part, "LC_MONETARY", 4);
}
示例#9
0
char * _Locale_extract_collate_name(char const *full, char *part)
{
  return extract_part(full, part, "LC_COLLATE", 3);
}
示例#10
0
char * _Locale_extract_time_name(char const *full, char *part)
{
  return extract_part(full, part, "LC_TIME", 2);
}
示例#11
0
static void
test_empty_line_returns_null(void)
{
	char part_buf[64];
	assert_string_equal(NULL, extract_part("", ':', part_buf));
}