void state_dry(struct snapraid_state* state, block_off_t blockstart, block_off_t blockcount) { block_off_t blockmax; int ret; struct snapraid_parity_handle parity_handle[LEV_MAX]; unsigned error; unsigned l; msg_progress("Drying...\n"); blockmax = parity_allocated_size(state); if (blockstart > blockmax) { /* LCOV_EXCL_START */ log_fatal("Error in the specified starting block %u. It's bigger than the parity size %u.\n", blockstart, blockmax); exit(EXIT_FAILURE); /* LCOV_EXCL_STOP */ } /* adjust the number of block to process */ if (blockcount != 0 && blockstart + blockcount < blockmax) { blockmax = blockstart + blockcount; } /* open the file for reading */ /* it may fail if the file doesn't exist, in this case we continue to dry the files */ for (l = 0; l < state->level; ++l) { ret = parity_open(&parity_handle[l], l, state->parity[l].path, state->file_mode); if (ret == -1) { /* LCOV_EXCL_START */ log_fatal("WARNING! Without an accessible %s file, it isn't possible to dry.\n", lev_name(l)); exit(EXIT_FAILURE); /* LCOV_EXCL_STOP */ } } error = 0; /* skip degenerated cases of empty parity, or skipping all */ if (blockstart < blockmax) { ret = state_dry_process(state, parity_handle, blockstart, blockmax); if (ret == -1) { /* LCOV_EXCL_START */ ++error; /* continue, as we are already exiting */ /* LCOV_EXCL_STOP */ } } /* try to close only if opened */ for (l = 0; l < state->level; ++l) { ret = parity_close(&parity_handle[l]); if (ret == -1) { /* LCOV_EXCL_START */ ++error; /* continue, as we are already exiting */ /* LCOV_EXCL_STOP */ } } /* abort if required */ if (error != 0) { /* LCOV_EXCL_START */ exit(EXIT_FAILURE); /* LCOV_EXCL_STOP */ } }
void state_dry(struct snapraid_state* state, block_off_t blockstart, block_off_t blockcount) { block_off_t blockmax; int ret; struct snapraid_parity parity[LEV_MAX]; struct snapraid_parity* parity_ptr[LEV_MAX]; unsigned error; unsigned l; printf("Drying...\n"); blockmax = parity_size(state); if (blockstart > blockmax) { /* LCOV_EXCL_START */ fprintf(stderr, "Error in the specified starting block %u. It's bigger than the parity size %u.\n", blockstart, blockmax); exit(EXIT_FAILURE); /* LCOV_EXCL_STOP */ } /* adjust the number of block to process */ if (blockcount != 0 && blockstart + blockcount < blockmax) { blockmax = blockstart + blockcount; } /* open the file for reading */ /* it may fail if the file doesn't exist, in this case we continue to dry the files */ for(l=0;l<state->level;++l) { parity_ptr[l] = &parity[l]; ret = parity_open(parity_ptr[l], state->parity_path[l], state->opt.skip_sequential); if (ret == -1) { printf("No accessible %s file.\n", lev_name(l)); /* continue anyway */ parity_ptr[l] = 0; } } error = 0; /* skip degenerated cases of empty parity, or skipping all */ if (blockstart < blockmax) { ret = state_dry_process(state, parity_ptr, blockstart, blockmax); if (ret == -1) { /* LCOV_EXCL_START */ ++error; /* continue, as we are already exiting */ /* LCOV_EXCL_STOP */ } } /* try to close only if opened */ for(l=0;l<state->level;++l) { if (parity_ptr[l]) { ret = parity_close(parity_ptr[l]); if (ret == -1) { /* LCOV_EXCL_START */ ++error; /* continue, as we are already exiting */ /* LCOV_EXCL_STOP */ } } } /* abort if required */ if (error != 0) { /* LCOV_EXCL_START */ exit(EXIT_FAILURE); /* LCOV_EXCL_STOP */ } }
void state_dry(struct snapraid_state* state, block_off_t blockstart, block_off_t blockcount) { block_off_t blockmax; int ret; struct snapraid_parity_handle parity[LEV_MAX]; /* the following initialization is to avoid clang warnings about */ /* potential state->level change, that never happens */ struct snapraid_parity_handle* parity_ptr[LEV_MAX] = { 0 }; unsigned error; unsigned l; msg_progress("Drying...\n"); blockmax = parity_allocated_size(state); if (blockstart > blockmax) { /* LCOV_EXCL_START */ msg_error("Error in the specified starting block %u. It's bigger than the parity size %u.\n", blockstart, blockmax); exit(EXIT_FAILURE); /* LCOV_EXCL_STOP */ } /* adjust the number of block to process */ if (blockcount != 0 && blockstart + blockcount < blockmax) { blockmax = blockstart + blockcount; } /* open the file for reading */ /* it may fail if the file doesn't exist, in this case we continue to dry the files */ for (l = 0; l < state->level; ++l) { parity_ptr[l] = &parity[l]; ret = parity_open(parity_ptr[l], state->parity[l].path, state->file_mode); if (ret == -1) { msg_status("No accessible %s file.\n", lev_name(l)); /* continue anyway */ parity_ptr[l] = 0; } } error = 0; /* skip degenerated cases of empty parity, or skipping all */ if (blockstart < blockmax) { ret = state_dry_process(state, parity_ptr, blockstart, blockmax); if (ret == -1) { /* LCOV_EXCL_START */ ++error; /* continue, as we are already exiting */ /* LCOV_EXCL_STOP */ } } /* try to close only if opened */ for (l = 0; l < state->level; ++l) { if (parity_ptr[l]) { ret = parity_close(parity_ptr[l]); if (ret == -1) { /* LCOV_EXCL_START */ ++error; /* continue, as we are already exiting */ /* LCOV_EXCL_STOP */ } } } /* abort if required */ if (error != 0) { /* LCOV_EXCL_START */ exit(EXIT_FAILURE); /* LCOV_EXCL_STOP */ } }