int add_error_report(json_t *target, baton_error_t *error) { if (error->code != 0) { add_error_value(target, error); } return error->code; }
int do_list_paths(FILE *input, print_flags pflags) { int path_count = 0; int error_count = 0; rodsEnv env; rcComm_t *conn = rods_login(&env); if (!conn) goto error; size_t jflags = JSON_DISABLE_EOF_CHECK | JSON_REJECT_DUPLICATES; while (!feof(input)) { json_error_t load_error; json_t *target = json_loadf(input, jflags, &load_error); if (!target) { if (!feof(input)) { log(ERROR, "JSON error at line %d, column %d: %s", load_error.line, load_error.column, load_error.text); } continue; } baton_error_t path_error; char *path = json_to_path(target, &path_error); path_count++; if (path_error.code != 0) { error_count++; add_error_value(target, &path_error); print_json(target); } else { rodsPath_t rods_path; int status = resolve_rods_path(conn, &env, &rods_path, path); if (status < 0) { error_count++; set_baton_error(&path_error, status, "Failed to resolve path '%s'", path); add_error_value(target, &path_error); print_json(target); } else { baton_error_t error; json_t *results = list_path(conn, &rods_path, pflags, &error); if (error.code != 0) { error_count++; add_error_value(target, &error); print_json(target); } else { print_json(results); json_decref(results); } } if (rods_path.rodsObjStat) free(rods_path.rodsObjStat); } if (unbuffered_flag) fflush(stdout); json_decref(target); free(path); } // while rcDisconnect(conn); log(DEBUG, "Processed %d paths with %d errors", path_count, error_count); return error_count; error: if (conn) rcDisconnect(conn); log(ERROR, "Processed %d paths with %d errors", path_count, error_count); return 1; }