xref: /inferno-os/emu/Linux/devfs.c (revision 1e1b493dfc048d301ef6b41377f0a3665ee7f3fc)
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