+ /* Calculate the size of the file or device for notification messages. */
+ uint64_t total, sent = 0;
+ if (!is_dev) {
+ struct stat statbuf;
+ if (fstat (fd, &statbuf) == -1) {
+ reply_with_perror ("%s", filename);
+ close (fd);
+ return -1;
+ }
+ total = statbuf.st_size;
+ } else {
+ int64_t size = do_blockdev_getsize64 (filename);
+ if (size == -1) {
+ /* do_blockdev_getsize64 has already sent a reply. */
+ close (fd);
+ return -1;
+ }
+ total = (uint64_t) size;
+ }
+