X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=notmuch-index-message.cc;h=a0faf442dbf9ef1c04910046e3560c90df50f7a8;hp=79b3bf3845c14ca1a1de487db68312daaad2f43e;hb=c0da89a8e02190f172e6f53073827bbdf91d60eb;hpb=3253954233c378a0176eb9695fa7908c1ca21c2e diff --git a/notmuch-index-message.cc b/notmuch-index-message.cc index 79b3bf38..a0faf442 100644 --- a/notmuch-index-message.cc +++ b/notmuch-index-message.cc @@ -215,6 +215,9 @@ add_terms_references (Xapian::Document doc, refs = g_mime_object_get_header (GMIME_OBJECT (message), "references"); + if (refs == NULL) + return; + while (*refs) { while (*refs && isspace (*refs)) refs++; @@ -419,19 +422,30 @@ index_file (Xapian::WritableDatabase db, g_object_unref (stream); } +static void +usage (const char *argv0) +{ + fprintf (stderr, "Usage: %s \n", argv0); + fprintf (stderr, "\n"); + fprintf (stderr, "Messages to be indexed are read from stdnin as absolute filenames\n"); + fprintf (stderr, "one file per line."); +} + int main (int argc, char **argv) { - const char *database_path, *filename; + const char *database_path; + char *filename; + GIOChannel *channel; + GIOStatus gio_status; + GError *error = NULL; - if (argc < 3) { - fprintf (stderr, "Usage: %s \n", - argv[0]); + if (argc < 2) { + usage (argv[0]); exit (1); } database_path = argv[1]; - filename = argv[2]; g_mime_init (0); @@ -444,7 +458,24 @@ main (int argc, char **argv) term_gen = Xapian::TermGenerator (); - index_file (db, term_gen, filename); + channel = g_io_channel_unix_new (fileno (stdin)); + + while (1) { + gio_status = g_io_channel_read_line (channel, &filename, + NULL, NULL, &error); + if (gio_status == G_IO_STATUS_EOF) + break; + if (gio_status != G_IO_STATUS_NORMAL) { + fprintf (stderr, "An error occurred reading from stdin: %s\n", + error->message); + exit (1); + } + + g_strchomp (filename); + index_file (db, term_gen, filename); + + g_free (filename); + } } catch (const Xapian::Error &error) { cerr << "A Xapian exception occurred: " << error.get_msg () << endl;