summaryrefslogtreecommitdiff
path: root/emu/Linux/devfs.c
blob: d697d7b4fda16f96e8ecd9470edcbbcc7395ad2c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include "devfs-posix.c"

#include	<linux/hdreg.h>
#include	<linux/fs.h>
#include	<sys/ioctl.h>

static vlong
osdisksize(int fd)
{
	uvlong u64;
	long l;
	struct hd_geometry geo;
	
	memset(&geo, 0, sizeof geo);
	l = 0;
	u64 = 0;
#ifdef BLKGETSIZE64
	if(ioctl(fd, BLKGETSIZE64, &u64) >= 0)
		return u64;
#endif
	if(ioctl(fd, BLKGETSIZE, &l) >= 0)
		return l*512;
	if(ioctl(fd, HDIO_GETGEO, &geo) >= 0)
		return (vlong)geo.heads*geo.sectors*geo.cylinders*512;
	return 0;
}