xref: /inferno-os/emu/Linux/devfs.c (revision 7ef44d652ae9e5e1f5b3465d73684e4a54de73c0)
1 #include "devfs-posix.c"
2 
3 #include	<linux/hdreg.h>
4 #include	<linux/fs.h>
5 #include	<sys/ioctl.h>
6 
7 static vlong
8 osdisksize(int fd)
9 {
10 	uvlong u64;
11 	long l;
12 	struct hd_geometry geo;
13 
14 	memset(&geo, 0, sizeof geo);
15 	l = 0;
16 	u64 = 0;
17 #ifdef BLKGETSIZE64
18 	if(ioctl(fd, BLKGETSIZE64, &u64) >= 0)
19 		return u64;
20 #endif
21 	if(ioctl(fd, BLKGETSIZE, &l) >= 0)
22 		return l*512;
23 	if(ioctl(fd, HDIO_GETGEO, &geo) >= 0)
24 		return (vlong)geo.heads*geo.sectors*geo.cylinders*512;
25 	return 0;
26 }
27