X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=extras%2Fvolume_id%2Fvol_id.c;h=889bd3483da174b13f8dac46b55a2cb332720bea;hp=a50560c097a8b8de03d068f21d1695fe2470a4f7;hb=5d89ef7bf94d8a708a1159be22eb1cf458a1d101;hpb=4dfe61c9668a0f6528de14ec413fce06be0b575c diff --git a/extras/volume_id/vol_id.c b/extras/volume_id/vol_id.c index a50560c09..889bd3483 100644 --- a/extras/volume_id/vol_id.c +++ b/extras/volume_id/vol_id.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include @@ -214,9 +215,17 @@ int main(int argc, char *argv[]) } if (size == 0) { - if (ioctl(fd, BLKGETSIZE64, &size) != 0) - size = 0; - info(udev_ctx, "BLKGETSIZE64=%" PRIu64 " (%" PRIu64 "GB)\n", size, size >> 30); + if (ioctl(fd, BLKGETSIZE64, &size) == 0) { + info(udev_ctx, "BLKGETSIZE64=%" PRIu64 " (%" PRIu64 "GB)\n", size, size >> 30); + } else { + struct stat statbuf; + + if (fstat(fd, &statbuf) == 0 && S_ISREG(statbuf.st_mode)) + size = statbuf.st_size; + else + size = 0; + info(udev_ctx, "stat=%" PRIu64 " (%" PRIu64 "GB)\n", size, size >> 30); + } } /* try to drop all privileges before reading disk content */