This is preparation for making the on-disk blk_header structure big endian. Signed-off-by: FUJITA Tomonori <fujita.tomonori@xxxxxxxxxxxxx> --- usr/bs_ssc.c | 36 +++++++++++++++--------------------- usr/dump_tape.c | 23 +++++++++-------------- usr/libssc.c | 22 ++++++++++++++++++++++ usr/libssc.h | 2 ++ usr/mktape.c | 10 +++++----- 5 files changed, 53 insertions(+), 40 deletions(-) diff --git a/usr/bs_ssc.c b/usr/bs_ssc.c index d9f7036..1adc02f 100644 --- a/usr/bs_ssc.c +++ b/usr/bs_ssc.c @@ -69,14 +69,10 @@ static int32_t be24_to_2comp(uint8_t *c) static int skip_next_header(struct scsi_lu *lu) { - ssize_t rd; struct ssc_info *ssc = dtype_priv(lu); struct blk_header *h = ssc->c_blk; - rd = pread(lu->fd, h, sizeof(struct blk_header), h->next); - if (rd != sizeof(struct blk_header)) - return 1; - return 0; + return ssc_read_blkhdr(lu->fd, h, h->next); } static int skip_prev_header(struct scsi_lu *lu) @@ -85,8 +81,8 @@ static int skip_prev_header(struct scsi_lu *lu) struct ssc_info *ssc = dtype_priv(lu); struct blk_header *h = ssc->c_blk; - rd = pread(lu->fd, h, sizeof(struct blk_header), h->prev); - if (rd != sizeof(struct blk_header)) + rd = ssc_read_blkhdr(lu->fd, h, h->prev); + if (rd) return 1; if (h->blk_type == BLK_BOT) return skip_next_header(lu); @@ -105,12 +101,11 @@ static int resp_rewind(struct scsi_lu *lu) eprintf("*** Backing store fd: %s %d %d ***\n", lu->path, lu->fd, fd); - rd = pread(fd, h, sizeof(struct blk_header), 0); - if (rd < 0) - eprintf("Could not read %d bytes:%m\n", - (int)sizeof(struct blk_header)); - if (rd != sizeof(struct blk_header)) + rd = ssc_read_blkhdr(fd, h, 0); + if (rd) { + eprintf("Could not read %Zd bytes:%m\n", sizeof(*h)); return 1; + } return skip_next_header(lu); } @@ -172,15 +167,15 @@ static int append_blk(struct scsi_cmd *cmd, uint8_t *data, eod->ondisk_sz); /* Rewrite previous header with updated positioning info */ - ret = pwrite(fd, curr, sizeof(struct blk_header), (off_t)curr->curr); - if (ret != sizeof(struct blk_header)) { + ret = ssc_write_blkhdr(fd, curr, curr->curr); + if (ret) { eprintf("Rewrite of blk header failed: %m\n"); sense_data_build(cmd, MEDIUM_ERROR, ASC_WRITE_ERROR); goto failed_write; } /* Write new EOD blk header */ - ret = pwrite(fd, eod, sizeof(struct blk_header), (off_t)eod->curr); - if (ret != sizeof(struct blk_header)) { + ret = ssc_write_blkhdr(fd, eod, eod->curr); + if (ret) { eprintf("Write of EOD blk header failed: %m\n"); sense_data_build(cmd, MEDIUM_ERROR, ASC_WRITE_ERROR); goto failed_write; @@ -630,8 +625,8 @@ static int bs_tape_open(struct scsi_lu *lu, char *path, int *fd, uint64_t *size) /* Can't call 'resp_rewind() at this point as lu data not * setup */ - rd = pread(*fd, ssc->c_blk, sizeof(struct blk_header), 0); - if (rd < sizeof(struct blk_header)) { + rd = ssc_read_blkhdr(*fd, ssc->c_blk, 0); + if (rd) { eprintf("Failed to read complete blk header: %d %m\n", (int)rd); goto read_failed; } @@ -642,9 +637,8 @@ static int bs_tape_open(struct scsi_lu *lu, char *path, int *fd, uint64_t *size) goto read_failed; } - rd = pread(*fd, ssc->c_blk, sizeof(struct blk_header), - ssc->c_blk->next); - if (rd < sizeof(struct blk_header)) { + rd = ssc_read_blkhdr(*fd, ssc->c_blk, ssc->c_blk->next); + if (rd) { eprintf("Failed to read complete blk header: %d %m\n", (int)rd); goto read_failed; } diff --git a/usr/dump_tape.c b/usr/dump_tape.c index ff2124d..1816f8d 100644 --- a/usr/dump_tape.c +++ b/usr/dump_tape.c @@ -84,19 +84,13 @@ void print_current_header(struct blk_header *pos) int skip_to_next_header(int fd, struct blk_header *pos) { - loff_t nread; + int ret; - nread = lseek64(fd, (uint64_t)pos->next, SEEK_SET); - if ((uint64_t)pos->next != nread) { - printf("Error while seeking to next header\n"); - return -1; - } - nread = read(fd, pos, sizeof(struct blk_header)); - if (nread < sizeof(struct blk_header)) { + ret = ssc_read_blkhdr(fd, pos, pos->next); + if (ret) printf("Could not read complete blk header - short read!!\n"); - return -1; - } - return 0; + + return ret; } int main(int argc, char *argv[]) @@ -147,8 +141,9 @@ int main(int argc, char *argv[]) perror("Could not open"); exit(1); } - nread = read(ofp, ¤t_position, sizeof(struct blk_header)); - if (nread < sizeof(current_position)) { + + nread = ssc_read_blkhdr(ofp, ¤t_position, 0); + if (nread) { perror("Could not read blk header"); exit(1); } @@ -203,7 +198,7 @@ int main(int argc, char *argv[]) print_current_header(¤t_position); while (current_position.blk_type != BLK_EOD) { nread = skip_to_next_header(ofp, ¤t_position); - if (nread == -1) + if (nread) break; print_current_header(¤t_position); } diff --git a/usr/libssc.c b/usr/libssc.c index 297867e..eba7b74 100644 --- a/usr/libssc.c +++ b/usr/libssc.c @@ -178,3 +178,25 @@ int ssc_write_mam_info(int fd, struct MAM_info *i) return 0; } + +int ssc_read_blkhdr(int fd, struct blk_header *h, off_t offset) +{ + size_t count; + + count = pread(fd, h, sizeof(*h), offset); + if (count != sizeof(*h)) + return 1; + + return 0; +} + +int ssc_write_blkhdr(int fd, struct blk_header *h, off_t offset) +{ + size_t count; + + count = pwrite(fd, h, sizeof(*h), offset); + if (count != sizeof(*h)) + return 1; + + return 0; +} diff --git a/usr/libssc.h b/usr/libssc.h index 891bb30..b278509 100644 --- a/usr/libssc.h +++ b/usr/libssc.h @@ -3,5 +3,7 @@ extern int ssc_read_mam_info(int fd, struct MAM_info *i); extern int ssc_write_mam_info(int fd, struct MAM_info *i); +extern int ssc_read_blkhdr(int fd, struct blk_header *h, off_t offset); +extern int ssc_write_blkhdr(int fd, struct blk_header *h, off_t offset); #endif diff --git a/usr/mktape.c b/usr/mktape.c index 8278317..20cb709 100644 --- a/usr/mktape.c +++ b/usr/mktape.c @@ -52,7 +52,6 @@ int main(int argc, char *argv[]) struct blk_header h; struct MAM_info mi; uint8_t current_media[1024]; - long nwrite; char *progname = argv[0]; char *barcode = NULL; char *media_type = NULL; @@ -165,8 +164,9 @@ int main(int argc, char *argv[]) perror("Failed creating file"); exit(2); } - nwrite = write(file, &h, sizeof(h)); - if (nwrite <= 0) { + + ret = ssc_write_blkhdr(file, &h, 0); + if (ret) { perror("Unable to write header"); exit(1); } @@ -185,8 +185,8 @@ int main(int argc, char *argv[]) h.next = lseek64(file, 0, SEEK_CUR); h.curr = h.next; - nwrite = write(file, &h, sizeof(h)); - if (nwrite <= 0) { + ret = ssc_write_blkhdr(file, &h, h.next); + if (ret) { perror("Unable to write header"); exit(1); } -- 1.5.6.5 -- To unsubscribe from this list: send the line "unsubscribe stgt" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html