plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

commit 9752950804975918aa299b8cd525961c1c2bae45
parent 43f16cfa921aabdddf07bc996d8690dd66c1f364
Author: rsc <devnull@localhost>
Date:   Tue, 15 May 2007 13:10:51 +0000

new media size from Lou Kamenov

Diffstat:
Msrc/lib9/_p9dir.c | 20+++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/src/lib9/_p9dir.c b/src/lib9/_p9dir.c @@ -7,13 +7,16 @@ #include <pwd.h> #include <grp.h> -#if defined(__FreeBSD__) || defined(__OpenBSD__) +#if defined(__FreeBSD__) +#include <sys/disk.h> #include <sys/disklabel.h> #include <sys/ioctl.h> -#define _HAVEDISKLABEL #endif #if defined(__OpenBSD__) +#include <sys/disklabel.h> +#include <sys/ioctl.h> +#define _HAVEDISKLABEL static int diskdev[] = { 151, /* aacd */ 116, /* ad */ @@ -249,7 +252,18 @@ _p9dir(struct stat *lst, struct stat *st, char *name, Dir *d, char **str, char * close(fd); } #endif -#ifdef _HAVEDISKLABEL +#if defined(__FreeBSD__) + if(isdisk(st)){ + int fd; + off_t mediasize; + + if((fd = open(name, O_RDONLY)) >= 0){ + if(ioctl(fd, DIOCGMEDIASIZE, &mediasize) >= 0) + d->length = mediasize; + close(fd); + } + } +#elif defined(_HAVEDISKLABEL) if(isdisk(st)){ int fd, n; struct disklabel lab;