int main(int argc, char *const argv[]) { if (argc < 2) { fprintf(stderr, "usage: %s filename1 [ filename2 ... ]\n", argv[0]); exit(EXIT_FAILURE); } for (int i = 1; i < argc; ++i) { print_tag_list(argv[i]); } return EXIT_SUCCESS; }
json_t *get_object(pv_json_t *var, pv_param_t *pvp, json_tag **tag, int get_prev_obj, int report_err) { json_name * id = (json_name *) pvp->pvn.u.dname; json_t * cur_obj, * last_obj = 0; json_tag * cur_tag, * last_tag = 0; int poz; cur_tag = id->tags; cur_obj = var->data; while( cur_tag ) { last_tag = cur_tag; last_obj = cur_obj; if( cur_tag->type & TAG_KEY ) { memcpy( buff, cur_tag->key.s, cur_tag->key.len ); buff[cur_tag->key.len] = 0; if( cur_obj == NULL || !json_object_is_type( cur_obj, json_type_object ) ) goto error; if (!json_object_object_get_ex( cur_obj,buff, &cur_obj ) && !get_prev_obj) goto error; } if( cur_tag->type & TAG_IDX ) { if( cur_obj == NULL || !json_object_is_type( cur_obj, json_type_array ) ) goto error; poz = cur_tag->idx; if( cur_tag->type & TAG_END ) { poz = json_object_array_length(cur_obj); } else { if( poz < 0 ) poz += json_object_array_length(cur_obj); } if( poz < 0 ) goto error; cur_obj = json_object_array_get_idx( cur_obj, poz ); if( cur_obj == NULL && !get_prev_obj) goto error; } cur_tag = cur_tag->next; } if (tag) *tag = last_tag; if (get_prev_obj) return last_obj; else return cur_obj; error: if( report_err) { LM_NOTICE("Trying to get a value from a json of incorrect type\n"); if(var->data) LM_NOTICE("Object is:\n%s\n", json_object_to_json_string(var->data)); else LM_NOTICE("Object is null\n"); print_tag_list( id->tags, cur_tag->next, 1); } return NULL; }
int notmuch_setup_command (notmuch_config_t *config, unused (int argc), unused (char *argv[])) { char *response = NULL; size_t response_size = 0; const char **old_other_emails; size_t old_other_emails_len; GPtrArray *other_emails; unsigned int i; const char **new_tags; size_t new_tags_len; const char **search_exclude_tags; size_t search_exclude_tags_len; #define prompt(format, ...) \ do { \ printf (format, ##__VA_ARGS__); \ fflush (stdout); \ if (getline (&response, &response_size, stdin) < 0) { \ printf ("Exiting.\n"); \ exit (EXIT_FAILURE); \ } \ chomp_newline (response); \ } while (0) if (notmuch_config_is_new (config)) welcome_message_pre_setup (); prompt ("Your full name [%s]: ", notmuch_config_get_user_name (config)); if (strlen (response)) notmuch_config_set_user_name (config, response); prompt ("Your primary email address [%s]: ", notmuch_config_get_user_primary_email (config)); if (strlen (response)) notmuch_config_set_user_primary_email (config, response); other_emails = g_ptr_array_new (); old_other_emails = notmuch_config_get_user_other_email (config, &old_other_emails_len); for (i = 0; i < old_other_emails_len; i++) { prompt ("Additional email address [%s]: ", old_other_emails[i]); if (strlen (response)) g_ptr_array_add (other_emails, talloc_strdup (config, response)); else g_ptr_array_add (other_emails, talloc_strdup (config, old_other_emails[i])); } do { prompt ("Additional email address [Press 'Enter' if none]: "); if (strlen (response)) g_ptr_array_add (other_emails, talloc_strdup (config, response)); } while (strlen (response)); if (other_emails->len) notmuch_config_set_user_other_email (config, (const char **) other_emails->pdata, other_emails->len); g_ptr_array_free (other_emails, TRUE); prompt ("Top-level directory of your email archive [%s]: ", notmuch_config_get_database_path (config)); if (strlen (response)) { const char *absolute_path; absolute_path = make_path_absolute (config, response); notmuch_config_set_database_path (config, absolute_path); } new_tags = notmuch_config_get_new_tags (config, &new_tags_len); printf ("Tags to apply to all new messages (separated by spaces) ["); print_tag_list (new_tags, new_tags_len); prompt ("]: "); if (strlen (response)) { GPtrArray *tags = parse_tag_list (config, response); notmuch_config_set_new_tags (config, (const char **) tags->pdata, tags->len); g_ptr_array_free (tags, TRUE); } search_exclude_tags = notmuch_config_get_search_exclude_tags (config, &search_exclude_tags_len); printf ("Tags to exclude when searching messages (separated by spaces) ["); print_tag_list (search_exclude_tags, search_exclude_tags_len); prompt ("]: "); if (strlen (response)) { GPtrArray *tags = parse_tag_list (config, response); notmuch_config_set_search_exclude_tags (config, (const char **) tags->pdata, tags->len); g_ptr_array_free (tags, TRUE); } if (notmuch_config_save (config)) return EXIT_FAILURE; if (notmuch_config_is_new (config)) welcome_message_post_setup (); return EXIT_SUCCESS; }