/* * check_pool -- check if remote pool contains specified random sequence */ static int check_pool(const struct test_case *tc, int argc, char *argv[]) { if (argc < 3) UT_FATAL("usage: fill_pool <pool set> <seed> <size>"); char *pool_set = argv[0]; srand(atoi(argv[1])); int ret; size_t size; ret = util_parse_size(argv[2], &size); struct pool_set *set; ret = util_pool_open_nocheck(&set, pool_set, 0); UT_ASSERTeq(ret, 0); uint8_t *data = set->replica[0]->part[0].addr; for (size_t i = 0; i < size; i++) { uint8_t r = rand(); UT_ASSERTeq(data[POOL_HDR_SIZE + i], r); } util_poolset_close(set, 0); return 3; }
/* * pocli_args_size -- parse size */ static enum pocli_ret pocli_args_size(struct pocli_args *args, int arg, size_t *sizep) { assert(args != NULL); assert(arg >= 0 && arg < args->argc); assert(sizep != NULL); if (util_parse_size(args->argv[arg], sizep)) return POCLI_ERR_PARS; return POCLI_RET_OK; }
/* * init_pool -- map local pool file or allocate memory region */ static void init_pool(struct pool_entry *pool, const char *pool_path, const char *pool_size) { int ret = util_parse_size(pool_size, &pool->size); UT_ASSERTeq(ret, 0); if (strcmp(pool_path, "mem") == 0) { pool->pool = MALLOC(pool->size); pool->is_mem = 1; } else { pool->pool = pmem_map_file(pool_path, pool->size, PMEM_FILE_CREATE | PMEM_FILE_EXCL, 0666, &pool->size, NULL); UT_ASSERTne(pool->pool, NULL); pool->is_mem = 0; unlink(pool_path); } }
/* * parser_read_line -- (internal) read line and validate size and path * from a pool set file */ static enum parser_codes parser_read_line(char *line, size_t *size, char **path) { int ret; char *size_str; char *path_str; char *saveptr; size_str = strtok_r(line, " \t", &saveptr); path_str = strtok_r(NULL, " \t", &saveptr); if (!size_str || !path_str) return PARSER_SIZE_PATH_EXPECTED; LOG(10, "size '%s' path '%s'", size_str, path_str); /* * A format of the size is checked in detail. As regards the path, * it is checked only if the read path is an absolute path. * The rest should be checked during creating/opening the file. */ /* check if the read path is an absolute path */ if (!util_is_absolute_path(path_str)) return PARSER_ABSOLUTE_PATH_EXPECTED; ret = util_parse_size(size_str, size); if (ret != 0 || *size == 0) { return PARSER_WRONG_SIZE; } *path = Strdup(path_str); if (!(*path)) { ERR("!Strdup"); return PARSER_OUT_OF_MEMORY; } return PARSER_CONTINUE; }