X-Git-Url: http://git.archive.openwrt.org/?p=project%2Ffstools.git;a=blobdiff_plain;f=snapshot.c;h=df555e2d7d798c66f4528fea315db34437c99fef;hp=e817e699938060bafcef283e6eaad38c24de71dd;hb=HEAD;hpb=a1f48fc0444f5c3c44ee6ef1005cd8da65decefd diff --git a/snapshot.c b/snapshot.c index e817e69..df555e2 100644 --- a/snapshot.c +++ b/snapshot.c @@ -25,10 +25,12 @@ #include #include #include +#include #include #include #include +#include #include "libfstools/libfstools.h" #include "libfstools/volume.h" @@ -43,6 +45,7 @@ config_write(int argc, char **argv) if (!v) return -1; + volume_init(v); ret = volatile_write(v, 0); if (!ret) ret = sentinel_write(v, 0); @@ -61,6 +64,7 @@ config_read(int argc, char **argv) if (!v) return -1; + volume_init(v); block = config_find(v, &conf, &sentinel); next = snapshot_next_free(v, &seq); if (is_config(&conf) && conf.seq == seq) @@ -72,7 +76,7 @@ config_read(int argc, char **argv) ret = snapshot_read_file(v, block, "/tmp/config.tar.gz", CONF); if (ret < 1) - fprintf(stderr, "failed to read /tmp/config.tar.gz\n"); + ULOG_ERR("failed to read /tmp/config.tar.gz\n"); return ret; } @@ -87,15 +91,16 @@ snapshot_write(int argc, char **argv) if (!v) return -1; + volume_init(v); block = snapshot_next_free(v, &seq); if (block < 0) block = 0; ret = snapshot_write_file(v, block, "/tmp/snapshot.tar.gz", seq + 1, DATA); if (ret) - fprintf(stderr, "failed to write /tmp/snapshot.tar.gz\n"); + ULOG_ERR("failed to write /tmp/snapshot.tar.gz\n"); else - fprintf(stderr, "wrote /tmp/snapshot.tar.gz\n"); + ULOG_INFO("wrote /tmp/snapshot.tar.gz\n"); return ret; } @@ -108,20 +113,22 @@ snapshot_mark(int argc, char **argv) size_t sz; int fd; - fprintf(stderr, "This will remove all snapshot data stored on the system. Are you sure? [N/y]\n"); + ULOG_WARN("This will remove all snapshot data stored on the system. Are you sure? [N/y]\n"); if (getchar() != 'y') return -1; v = volume_find("rootfs_data"); if (!v) { - fprintf(stderr, "no rootfs_data was found\n"); + ULOG_ERR("MTD partition 'rootfs_data' not found\n"); return -1; } + volume_init(v); + fd = open(v->blk, O_WRONLY); - fprintf(stderr, "%s - marking with 0x%08x\n", v->blk, owrt); + ULOG_INFO("%s - marking with 0x%08x\n", v->blk, owrt); if (fd < 0) { - fprintf(stderr, "opening %s failed\n", v->blk); + ULOG_ERR("opening %s failed\n", v->blk); return -1; } @@ -129,7 +136,7 @@ snapshot_mark(int argc, char **argv) close(fd); if (sz != 1) { - fprintf(stderr, "writing %s failed: %s\n", v->blk, strerror(errno)); + ULOG_ERR("writing %s failed: %m\n", v->blk); return -1; } @@ -146,10 +153,12 @@ snapshot_read(int argc, char **argv) if (!v) return -1; + volume_init(v); if (argc > 2) { block = atoi(argv[2]); if (block >= (v->size / v->block_size)) { - fprintf(stderr, "invalid block %d > %llu\n", block, v->size / v->block_size); + ULOG_ERR("invalid block %d > %" PRIu64 "\n", + block, (uint64_t) v->size / v->block_size); goto out; } snprintf(file, sizeof(file), "/tmp/snapshot/block%d.tar.gz", block); @@ -177,10 +186,12 @@ snapshot_info(void) if (!v) return -1; - fprintf(stderr, "sectors:\t%llu, block_size:\t%dK\n", v->size / v->block_size, v->block_size / 1024); + volume_init(v); + ULOG_INFO("sectors:\t%" PRIu64 ", block_size:\t%dK\n", + (uint64_t) v->size / v->block_size, v->block_size / 1024); do { if (volume_read(v, &hdr, block * v->block_size, sizeof(struct file_header))) { - fprintf(stderr, "scanning for next free block failed\n"); + ULOG_ERR("scanning for next free block failed\n"); return 0; } @@ -190,16 +201,16 @@ snapshot_info(void) break; if (hdr.type == DATA) - fprintf(stderr, "block %d:\tsnapshot entry, size: %d, sectors: %d, sequence: %d\n", block, hdr.length, pad_file_size(v, hdr.length) / v->block_size, hdr.seq); + ULOG_INFO("block %d:\tsnapshot entry, size: %d, sectors: %d, sequence: %d\n", block, hdr.length, pad_file_size(v, hdr.length) / v->block_size, hdr.seq); else if (hdr.type == CONF) - fprintf(stderr, "block %d:\tvolatile entry, size: %d, sectors: %d, sequence: %d\n", block, hdr.length, pad_file_size(v, hdr.length) / v->block_size, hdr.seq); + ULOG_INFO("block %d:\tvolatile entry, size: %d, sectors: %d, sequence: %d\n", block, hdr.length, pad_file_size(v, hdr.length) / v->block_size, hdr.seq); if (hdr.type == DATA && !valid_file_size(hdr.length)) block += pad_file_size(v, hdr.length) / v->block_size; } while (hdr.type == DATA); block = config_find(v, &conf, &hdr); if (block > 0) - fprintf(stderr, "block %d:\tsentinel entry, size: %d, sectors: %d, sequence: %d\n", block, hdr.length, pad_file_size(v, hdr.length) / v->block_size, hdr.seq); + ULOG_INFO("block %d:\tsentinel entry, size: %d, sectors: %d, sequence: %d\n", block, hdr.length, pad_file_size(v, hdr.length) / v->block_size, hdr.seq); return 0; }