notmuch-index-message: Separate gen_terms_body into its own function

This one is complex enough to deserve its own treament.
This commit is contained in:
Carl Worth 2009-10-13 16:03:01 -07:00
parent f69215d41f
commit 9dbb1facfb

View file

@ -187,6 +187,46 @@ add_terms_address_addrs (Xapian::Document doc,
} }
} }
/* Generate terms for the body of a message, given the filename of the
* message and the offset at which the headers of the message end,
* (and hence the body begins). */
static void
gen_terms_body (Xapian::TermGenerator term_gen,
const char * filename,
gint64 body_offset)
{
GIOChannel *channel;
GIOStatus gio_status;
GError *error = NULL;
char *body_str;
channel = g_io_channel_new_file (filename, "r", &error);
if (channel == NULL) {
fprintf (stderr, "Error: %s\n", error->message);
exit (1);
}
gio_status = g_io_channel_seek_position (channel, body_offset,
G_SEEK_SET, &error);
if (gio_status != G_IO_STATUS_NORMAL) {
fprintf (stderr, "Error: %s\n", error->message);
exit (1);
}
gio_status = g_io_channel_read_to_end (channel, &body_str,
NULL, &error);
if (gio_status != G_IO_STATUS_NORMAL) {
fprintf (stderr, "Error: %s\n", error->message);
exit (1);
}
gen_terms (term_gen, "body", body_str);
g_free (body_str);
g_io_channel_close (channel);
}
int int
main (int argc, char **argv) main (int argc, char **argv)
{ {
@ -194,14 +234,9 @@ main (int argc, char **argv)
GMimeParser *parser; GMimeParser *parser;
GMimeMessage *message; GMimeMessage *message;
InternetAddressList *addresses; InternetAddressList *addresses;
GIOChannel *channel;
GIOStatus gio_status;
GError *error = NULL;
const char *database_path, *filename; const char *database_path, *filename;
FILE *file; FILE *file;
gint64 body_offset;
char *body_str;
const char *value, *from; const char *value, *from;
@ -261,31 +296,8 @@ main (int argc, char **argv)
gen_terms (term_gen, "subject", value); gen_terms (term_gen, "subject", value);
gen_terms (term_gen, "body", value); gen_terms (term_gen, "body", value);
body_offset = g_mime_parser_get_headers_end (parser); gen_terms_body (term_gen, filename,
channel = g_io_channel_new_file (filename, "r", &error); g_mime_parser_get_headers_end (parser));
if (channel == NULL) {
fprintf (stderr, "Error: %s\n", error->message);
exit (1);
}
gio_status = g_io_channel_seek_position (channel, body_offset,
G_SEEK_SET, &error);
if (gio_status != G_IO_STATUS_NORMAL) {
fprintf (stderr, "Error: %s\n", error->message);
exit (1);
}
gio_status = g_io_channel_read_to_end (channel, &body_str,
NULL, &error);
if (gio_status != G_IO_STATUS_NORMAL) {
fprintf (stderr, "Error: %s\n", error->message);
exit (1);
}
gen_terms (term_gen, "body", body_str);
g_free (body_str);
g_io_channel_close (channel);
from = g_mime_message_get_sender (message); from = g_mime_message_get_sender (message);
addresses = internet_address_list_parse_string (from); addresses = internet_address_list_parse_string (from);