From: Theodore Ts'o Date: Thu, 3 May 2001 13:33:11 +0000 (+0000) Subject: ChangeLog, e2image.c: X-Git-Tag: E2FSPROGS-1_20~68 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=095b459dac77d532a4a1020acb57dfc0c681a9dc;p=thirdparty%2Fe2fsprogs.git ChangeLog, e2image.c: e2image.c (main): Fix format of e2image to be easier to be parse by ext2fs_open(). --- diff --git a/misc/ChangeLog b/misc/ChangeLog index a7935cbb2..e13655f57 100644 --- a/misc/ChangeLog +++ b/misc/ChangeLog @@ -1,3 +1,8 @@ +2001-05-03 Theodore Tso + + * e2image.c (main): Fix format of e2image to be easier to be parse + by ext2fs_open(). + 2001-05-01 Theodore Tso * fsck.c (device_already_active): If we're not able to determine diff --git a/misc/e2image.c b/misc/e2image.c index cae30a6e7..11881f107 100644 --- a/misc/e2image.c +++ b/misc/e2image.c @@ -49,30 +49,37 @@ static void usage(void) exit (1); } -static void write_header(int fd, struct ext2_image_hdr *hdr) +static void write_header(int fd, struct ext2_image_hdr *hdr, int blocksize) { - char header_buf[4096]; + char *header_buf; int actual; + header_buf = malloc(blocksize); + if (!header_buf) { + fprintf(stderr, _("Couldn't allocate header buffer\n")); + exit(1); + } + if (lseek(fd, 0, SEEK_SET) < 0) { perror("lseek while writing header"); exit(1); } - memset(header_buf, 0, sizeof(header_buf)); + memset(header_buf, 0, blocksize); if (hdr) memcpy(header_buf, hdr, sizeof(struct ext2_image_hdr)); - actual = write(fd, header_buf, sizeof(header_buf)); + actual = write(fd, header_buf, blocksize); if (actual < 0) { perror("write header"); exit(1); } - if (actual != sizeof(header_buf)) { + if (actual != blocksize) { fprintf(stderr, _("short write (only %d bytes) for" "writing image header"), actual); exit(1); } + free(header_buf); } @@ -125,7 +132,7 @@ int main (int argc, char ** argv) exit(1); } - write_header(fd, NULL); + write_header(fd, NULL, fs->blocksize); memset(&hdr, 0, sizeof(struct ext2_image_hdr)); hdr.offset_super = lseek(fd, 0, SEEK_CUR); @@ -159,7 +166,10 @@ int main (int argc, char ** argv) hdr.magic_number = EXT2_ET_MAGIC_E2IMAGE; strcpy(hdr.magic_descriptor, "Ext2 Image 1.0"); gethostname(hdr.fs_hostname, sizeof(hdr.fs_hostname)); - + strncat(hdr.fs_device_name, device_name, sizeof(hdr.fs_device_name)); + hdr.fs_device_name[sizeof(hdr.fs_device_name) - 1] = 0; + hdr.fs_blocksize = fs->blocksize; + if (stat(device_name, &st) == 0) hdr.fs_device = st.st_rdev; @@ -170,7 +180,7 @@ int main (int argc, char ** argv) memcpy(hdr.fs_uuid, fs->super->s_uuid, sizeof(hdr.fs_uuid)); hdr.image_time = time(0); - write_header(fd, &hdr); + write_header(fd, &hdr, fs->blocksize); ext2fs_close (fs); exit (0);