void test_is_readable(void) { const char *readable_file_path = LAGOPUS_LOAD_CMD_TEST_FILE; const char *unreadable_file_path = LAGOPUS_LOAD_CMD_TEST_FILE; lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES; (void)remove_file(LAGOPUS_LOAD_CMD_TEST_FILE); (void)create_file(LAGOPUS_LOAD_CMD_TEST_FILE); ret = s_is_readable(readable_file_path); (void)remove_file(LAGOPUS_LOAD_CMD_TEST_FILE); TEST_ASSERT_EQUAL(LAGOPUS_RESULT_OK, ret); (void)create_file(LAGOPUS_LOAD_CMD_TEST_FILE); (void)chmod(LAGOPUS_LOAD_CMD_TEST_FILE, 0); ret = s_is_readable(unreadable_file_path); (void)remove_file(LAGOPUS_LOAD_CMD_TEST_FILE); TEST_ASSERT_EQUAL(LAGOPUS_RESULT_INVALID_ARGS, ret); }
static inline lagopus_result_t s_parse_load(datastore_interp_t *iptr, datastore_interp_state_t state, size_t argc, const char *const argv[], lagopus_hashmap_t *hptr, datastore_update_proc_t u_proc, datastore_enable_proc_t e_proc, datastore_serialize_proc_t s_proc, datastore_destroy_proc_t d_proc, lagopus_dstring_t *result) { lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES; size_t i; const char *cname = NULL; char *filepath = NULL; (void)state; (void)argc; (void)hptr; (void)u_proc; (void)e_proc; (void)s_proc; (void)d_proc; for (i = 0; i < argc; i++) { lagopus_msg_debug(1, "argv[" PFSZS(4, u) "]:\t'%s'\n", i, argv[i]); } argv++; if (IS_VALID_STRING(*argv) == false) { ret = datastore_json_result_set(result, LAGOPUS_RESULT_OK, NULL); } else { if (IS_VALID_STRING(*argv) == true) { if ((ret = lagopus_str_unescape(*argv, "\"'", &filepath)) > 0) { if (s_is_readable(filepath) == LAGOPUS_RESULT_OK) { ret = datastore_interp_get_current_configurater(iptr, &cname); if (ret == LAGOPUS_RESULT_OK && IS_VALID_STRING(cname) == true) { ret = datastore_interp_load_file(iptr, cname, filepath, result); if (ret == LAGOPUS_RESULT_OK) { ret = datastore_json_result_set(result, ret, NULL); } } else { ret = datastore_json_result_string_setf(result, ret, CMD_ERR_MSG_LOAD_FAILED, "internal error."); } } else { ret = datastore_json_result_string_setf(result, LAGOPUS_RESULT_INVALID_ARGS, CMD_ERR_MSG_UNREADABLE, filepath); } } else { ret = datastore_json_result_string_setf(result, LAGOPUS_RESULT_INVALID_ARGS, CMD_ERR_MSG_INVALID_OPT_VALUE, *argv); } } else { ret = datastore_json_result_string_setf(result, LAGOPUS_RESULT_INVALID_ARGS, CMD_ERR_MSG_INVALID_OPT, *argv); } } free((void *) filepath); return ret; }