use lseek to get size of block devices

This commit is contained in:
Dietmar Maurer 2012-02-08 06:42:14 +01:00
parent a9a94d59f3
commit 15fa30e3ec

20
vmtar.c
View File

@ -531,15 +531,19 @@ main (int argc, char **argv)
struct sp_array *ma = sparray_new(); struct sp_array *ma = sparray_new();
if (sparse) { if (sparse) {
if (!scan_sparse_file (fd, ma)) { if (!scan_sparse_file (fd, ma)) {
fprintf (stderr, "scanning '%s' failed\n", source); fprintf (stderr, "scanning '%s' failed\n", source);
exit (-1); exit (-1);
} }
} else { } else {
off_t file_size = fs.st_size; off_t file_size = lseek(fd, 0, SEEK_END);
sparray_add (ma, 0, file_size); if (file_size < 0) {
ma->real_size = file_size; fprintf (stderr, "unable to get file size of '%s'\n", source);
ma->effective_size = file_size; exit (-1);
}
sparray_add (ma, 0, file_size);
ma->real_size = file_size;
ma->effective_size = file_size;
} }
dump_header (wbuf, archivename, ctime, ma); dump_header (wbuf, archivename, ctime, ma);