* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with this program. If not, see http://www.gnu.org/licenses/ .
+ * along with this program. If not, see https://www.gnu.org/licenses/ .
*
* Author: Keith Packard <keithp@keithp.com>
*/
EXCLUDE_FALSE,
};
-static unsigned int
+/* Return the number of files matching the query, or -1 for an error */
+static int
count_files (notmuch_query_t *query)
{
notmuch_messages_t *messages;
notmuch_message_t *message;
notmuch_filenames_t *filenames;
- unsigned int count = 0;
+ notmuch_status_t status;
+ int count = 0;
- messages = notmuch_query_search_messages (query);
- if (messages == NULL)
- return 0;
+ status = notmuch_query_search_messages (query, &messages);
+ if (print_status_query ("notmuch count", query, status))
+ return -1;
for (;
notmuch_messages_valid (messages);
return count;
}
+/* return 0 on success, -1 on failure */
static int
print_count (notmuch_database_t *notmuch, const char *query_str,
const char **exclude_tags, size_t exclude_tags_length, int output, int print_lastmod)
{
notmuch_query_t *query;
size_t i;
+ int count;
+ unsigned int ucount;
unsigned long revision;
const char *uuid;
int ret = 0;
+ notmuch_status_t status;
query = notmuch_query_create (notmuch, query_str);
if (query == NULL) {
fprintf (stderr, "Out of memory\n");
- return 1;
+ return -1;
}
- for (i = 0; i < exclude_tags_length; i++)
- notmuch_query_add_tag_exclude (query, exclude_tags[i]);
+ for (i = 0; i < exclude_tags_length; i++) {
+ status = notmuch_query_add_tag_exclude (query, exclude_tags[i]);
+ if (status && status != NOTMUCH_STATUS_IGNORED) {
+ print_status_query ("notmuch count", query, status);
+ return -1;
+ }
+ }
switch (output) {
case OUTPUT_MESSAGES:
- printf ("%u", notmuch_query_count_messages (query));
+ status = notmuch_query_count_messages (query, &ucount);
+ if (print_status_query ("notmuch count", query, status))
+ return -1;
+ printf ("%u", ucount);
break;
case OUTPUT_THREADS:
- printf ("%u", notmuch_query_count_threads (query));
+ status = notmuch_query_count_threads (query, &ucount);
+ if (print_status_query ("notmuch count", query, status))
+ return -1;
+ printf ("%u", ucount);
break;
case OUTPUT_FILES:
- printf ("%u", count_files (query));
+ count = count_files (query);
+ if (count >= 0) {
+ printf ("%d", count);
+ } else {
+ ret = -1;
+ goto DONE;
+ }
break;
}
fputs ("\n", stdout);
}
+ DONE:
notmuch_query_destroy (query);
return ret;
size_t line_size;
int ret = 0;
- while (!ret && (line_len = getline (&line, &line_size, input)) != -1) {
+ while (! ret && (line_len = getline (&line, &line_size, input)) != -1) {
chomp_newline (line);
ret = print_count (notmuch, line, exclude_tags, exclude_tags_length,
output, print_lastmod);
notmuch_exit_if_unmatched_db_uuid (notmuch);
- query_str = query_string_from_args (config, argc-opt_index, argv+opt_index);
+ query_str = query_string_from_args (config, argc - opt_index, argv + opt_index);
if (query_str == NULL) {
fprintf (stderr, "Out of memory.\n");
return EXIT_FAILURE;