mirror of
https://git.freebsd.org/ports.git
synced 2025-06-06 13:20:32 -04:00
45 lines
1.2 KiB
C
45 lines
1.2 KiB
C
--- ./src/disku.c.orig 2001-02-07 20:04:07.000000000 +0100
|
|
+++ ./src/disku.c 2011-03-17 01:15:54.000000000 +0100
|
|
@@ -28,7 +28,9 @@
|
|
|
|
#if defined(__FreeBSD__)
|
|
#include <errno.h>
|
|
+#include <sys/param.h>
|
|
#include <sys/disklabel.h>
|
|
+#include <sys/disk.h>
|
|
#endif
|
|
|
|
|
|
@@ -61,12 +63,26 @@
|
|
#endif
|
|
|
|
#if defined(__FreeBSD__)
|
|
- struct disklabel dl;
|
|
- if (ioctl(d->d_fd,DIOCGDINFO,&dl) == -1)
|
|
- pr(FATAL,EM_IOCTLFAILED,"DIOCGDINFO",strerror(errno));
|
|
- g.d_c = dl.d_ncylinders;
|
|
- g.d_h = dl.d_ntracks;
|
|
- g.d_s = dl.d_nsectors;
|
|
+ struct disklabel loclab;
|
|
+ u_int u;
|
|
+ off_t o; /* total disk size */
|
|
+
|
|
+ if (ioctl(d->d_fd, DIOCGFWSECTORS, &u) == 0)
|
|
+ g.d_s = u;
|
|
+ else
|
|
+ pr(FATAL, EM_IOCTLFAILED, "DIOCGFWSECTORS", strerror(errno));
|
|
+ // loclab.d_nsectors = 63;
|
|
+ if (ioctl(d->d_fd, DIOCGFWHEADS, &u) == 0)
|
|
+ g.d_h = u;
|
|
+ else
|
|
+ pr(FATAL, EM_IOCTLFAILED, "DIOCGFWHEADS", strerror(errno));
|
|
+ if (ioctl(d->d_fd, DIOCGSECTORSIZE, &u) == 0)
|
|
+ if (u != 512)
|
|
+ pr(FATAL, "sector size not a multiple of 512");
|
|
+ if (ioctl(d->d_fd, DIOCGMEDIASIZE, &o))
|
|
+ pr(FATAL, EM_IOCTLFAILED, "DIOCGMEDIASIZE", strerror(errno));
|
|
+
|
|
+ g.d_c = o / u / g.d_h / g.d_s;
|
|
#endif
|
|
|
|
return (&g);
|