// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2004 Silicon Graphics, Inc. * All Rights Reserved. */ /* * Test program that uses the same interfaces as mkfs.xfs for * Linux, dumps out just the device size values from a driver. */ #include #include #include #include #include #include #ifndef BLKGETSIZE64 # define BLKGETSIZE64 _IOR(0x12,114,size_t) #endif int main(int argc, char **argv) { uint64_t size; long long sz = -1; int error, fd; if (argc != 2) { fputs("insufficient arguments\n", stderr); return 1; } fd = open(argv[1], O_RDONLY); if (!fd) { perror(argv[1]); return 1; } error = ioctl(fd, BLKGETSIZE64, &size); if (error >= 0) { /* BLKGETSIZE64 returns size in bytes not 512-byte blocks */ sz = (long long)(size >> 9); printf("%lld 512 byte blocks (BLKGETSIZE64)\n", sz); } else { /* If BLKGETSIZE64 fails, try BLKGETSIZE */ unsigned long tmpsize; error = ioctl(fd, BLKGETSIZE, &tmpsize); if (error < 0) { fprintf(stderr, "can't determine device size"); return 1; } sz = (long long)tmpsize; printf("%lld 512 byte blocks (BLKGETSIZE)\n", sz); } return 0; }