tnew media size from Lou Kamenov - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 9752950804975918aa299b8cd525961c1c2bae45
 (DIR) parent 43f16cfa921aabdddf07bc996d8690dd66c1f364
 (HTM) Author: rsc <devnull@localhost>
       Date:   Tue, 15 May 2007 13:10:51 +0000
       
       new media size from Lou Kamenov
       
       Diffstat:
         M src/lib9/_p9dir.c                   |      20 +++++++++++++++++---
       
       1 file changed, 17 insertions(+), 3 deletions(-)
       ---
 (DIR) diff --git a/src/lib9/_p9dir.c b/src/lib9/_p9dir.c
       t@@ -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 */
       t@@ -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;