X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=notmuch-restore.c;fp=notmuch-restore.c;h=cf26a423705fad8aee399e070416fbfb6c28425e;hp=fc5d1fb89f6b11191c41a982d711c8bf4bc8cf2a;hb=425e2bc81263230df301c67d93c64ff9685ff840;hpb=d08c714b6a172cf0018bee4f60aff069d5508d4e diff --git a/notmuch-restore.c b/notmuch-restore.c index fc5d1fb8..cf26a423 100644 --- a/notmuch-restore.c +++ b/notmuch-restore.c @@ -221,7 +221,7 @@ notmuch_restore_command (unused (void *ctx), int argc, char *argv[]) INTERNAL_ERROR ("compile time constant regex failed."); do { - char *query_string; + char *query_string, *prefix, *term; if (line_ctx != NULL) talloc_free (line_ctx); @@ -234,19 +234,22 @@ notmuch_restore_command (unused (void *ctx), int argc, char *argv[]) &query_string, tag_ops); if (ret == 0) { - if (strncmp ("id:", query_string, 3) != 0) { - fprintf (stderr, "Warning: unsupported query: %s\n", query_string); + ret = parse_boolean_term (line_ctx, query_string, + &prefix, &term); + if (ret && errno == EINVAL) { + fprintf (stderr, "Warning: cannot parse query: %s (skipping)\n", query_string); + continue; + } else if (ret) { + /* This is more fatal (e.g., out of memory) */ + fprintf (stderr, "Error parsing query: %s\n", + strerror (errno)); + ret = 1; + break; + } else if (strcmp ("id", prefix) != 0) { + fprintf (stderr, "Warning: not an id query: %s (skipping)\n", query_string); continue; } - /* delete id: from front of string; tag_message - * expects a raw message-id. - * - * XXX: Note that query string id:foo and bar will be - * interpreted as a message id "foo and bar". This - * should eventually be fixed to give a better error - * message. - */ - query_string = query_string + 3; + query_string = term; } }