From fe67aae4f466cfda7c458d71c4597271c7b6492b Mon Sep 17 00:00:00 2001
From: Doug Coleman <doug.coleman@gmail.com>
Date: Mon, 20 Oct 2008 02:05:15 -0500
Subject: [PATCH 1/6] add netbsd statvfs struct

---
 basis/unix/stat/netbsd/netbsd.factor  | 32 ++++++++++++++++++++++++++-
 basis/unix/types/netbsd/netbsd.factor |  8 +++++++
 2 files changed, 39 insertions(+), 1 deletion(-)

diff --git a/basis/unix/stat/netbsd/netbsd.factor b/basis/unix/stat/netbsd/netbsd.factor
index 8057e5939b..f71e9f63d2 100644
--- a/basis/unix/stat/netbsd/netbsd.factor
+++ b/basis/unix/stat/netbsd/netbsd.factor
@@ -1,7 +1,37 @@
-USING: layouts combinators vocabs.loader ;
+USING: layouts combinators vocabs.loader alien.syntax ;
 IN: unix.stat
 
 cell-bits {
     { 32 [ "unix.stat.netbsd.32" require ] }
     { 64 [ "unix.stat.netbsd.64" require ] }
 } case
+
+: _VFS_NAMELEN    32   ; inline
+: _VFS_MNAMELEN   1024 ; inline
+
+C-STRUCT: statvfs
+    { "ulong"   "f_flag" }   
+    { "ulong"   "f_bsize" }
+    { "ulong"   "f_frsize" }  
+    { "ulong"   "f_iosize" }  
+    { "fsblkcnt_t" "f_blocks" }       
+    { "fsblkcnt_t" "f_bfree" } 
+    { "fsblkcnt_t" "f_bavail" }       
+    { "fsblkcnt_t" "f_bresvd" }       
+    { "fsfilcnt_t" "f_files" }
+    { "fsfilcnt_t" "f_ffree" }
+    { "fsfilcnt_t" "f_favail" }       
+    { "fsfilcnt_t" "f_fresvd" }       
+    { "uint64_t"   "f_syncreads" }    
+    { "uint64_t"   "f_syncwrites" }   
+    { "uint64_t"   "f_asyncreads" }   
+    { "uint64_t"   "f_asyncwrites" }  
+    { "fsid_t"    "f_fsidx" }
+    { "ulong"   "f_fsid" }
+    { "ulong"   "f_namemax" }      
+    { "uid_t""   "f_owner" }
+    { { "uint32_t" 4 } "f_spare" }     
+    { { "char" _VFS_NAMELEN } "f_fstypename" }
+    { { "char" _VFS_NAMELEN } "f_mntonname" }
+    { { "char" _VFS_NAMELEN } "f_mntfromname" } ;
+
diff --git a/basis/unix/types/netbsd/netbsd.factor b/basis/unix/types/netbsd/netbsd.factor
index 3982d1e9f9..27b8966eda 100644
--- a/basis/unix/types/netbsd/netbsd.factor
+++ b/basis/unix/types/netbsd/netbsd.factor
@@ -8,6 +8,7 @@ TYPEDEF: __uint32_t     dev_t
 TYPEDEF: __uint32_t     mode_t
 TYPEDEF: __uint32_t     nlink_t
 TYPEDEF: __uint32_t     uid_t
+TYPEDEF: __uint32_t     __uid_t
 TYPEDEF: __uint32_t     gid_t
 TYPEDEF: __int64_t      off_t
 TYPEDEF: __int64_t      blkcnt_t
@@ -16,6 +17,13 @@ TYPEDEF: long           ssize_t
 TYPEDEF: int            pid_t
 TYPEDEF: int            time_t
 
+
+TYPEDEF: __uint64_t    fsblkcnt_t
+TYPEDEF: fsblkcnt_t      __fsblkcnt_t    
+
+TYPEDEF: __uint64_t    fsfilcnt_t
+TYPEDEF: fsfilcnt_t     __fsfilcnt_t
+
 cell-bits {
     { 32 [ "unix.types.netbsd.32" require ] }
     { 64 [ "unix.types.netbsd.64" require ] }

From 70fb131e82dd681eb0a94528e5ec864f4da705f1 Mon Sep 17 00:00:00 2001
From: Doug Coleman <doug.coleman@gmail.com>
Date: Mon, 20 Oct 2008 02:27:09 -0500
Subject: [PATCH 2/6] add netbsd

---
 basis/unix/statfs/netbsd/authors.txt         | 1 +
 basis/unix/statfs/netbsd/netbsd-tests.factor | 4 ++++
 basis/unix/statfs/netbsd/netbsd.factor       | 7 +++++++
 3 files changed, 12 insertions(+)
 create mode 100644 basis/unix/statfs/netbsd/authors.txt
 create mode 100644 basis/unix/statfs/netbsd/netbsd-tests.factor
 create mode 100644 basis/unix/statfs/netbsd/netbsd.factor

diff --git a/basis/unix/statfs/netbsd/authors.txt b/basis/unix/statfs/netbsd/authors.txt
new file mode 100644
index 0000000000..b4bd0e7b35
--- /dev/null
+++ b/basis/unix/statfs/netbsd/authors.txt
@@ -0,0 +1 @@
+Doug Coleman
\ No newline at end of file
diff --git a/basis/unix/statfs/netbsd/netbsd-tests.factor b/basis/unix/statfs/netbsd/netbsd-tests.factor
new file mode 100644
index 0000000000..be100c1cb6
--- /dev/null
+++ b/basis/unix/statfs/netbsd/netbsd-tests.factor
@@ -0,0 +1,4 @@
+! Copyright (C) 2008 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: tools.test unix.statfs.netbsd ;
+IN: unix.statfs.netbsd.tests
diff --git a/basis/unix/statfs/netbsd/netbsd.factor b/basis/unix/statfs/netbsd/netbsd.factor
new file mode 100644
index 0000000000..f9c86e117f
--- /dev/null
+++ b/basis/unix/statfs/netbsd/netbsd.factor
@@ -0,0 +1,7 @@
+! Copyright (C) 2008 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: alien.syntax kernel ;
+IN: unix.statfs.netbsd
+
+
+

From ff918546c1cfaa5c19c57c02333ea10a19d5370f Mon Sep 17 00:00:00 2001
From: Doug Coleman <doug.coleman@gmail.com>
Date: Mon, 20 Oct 2008 02:08:33 -0500
Subject: [PATCH 3/6] ffi work

---
 basis/unix/stat/linux/linux.factor   | 6 ------
 basis/unix/stat/netbsd/netbsd.factor | 2 +-
 basis/unix/stat/stat.factor          | 6 ++++++
 3 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/basis/unix/stat/linux/linux.factor b/basis/unix/stat/linux/linux.factor
index 4bcab0b477..f1c931617e 100644
--- a/basis/unix/stat/linux/linux.factor
+++ b/basis/unix/stat/linux/linux.factor
@@ -1,12 +1,6 @@
 USING: alien.syntax layouts combinators vocabs.loader ;
 IN: unix.stat
 
-C-STRUCT: fsid
-    { { "int" 2 } "__val" } ;
-
-TYPEDEF: fsid __fsid_t
-TYPEDEF: fsid fsid_t
-
 cell-bits
 {
     { 32 [ "unix.stat.linux.32" require ] }
diff --git a/basis/unix/stat/netbsd/netbsd.factor b/basis/unix/stat/netbsd/netbsd.factor
index f71e9f63d2..aefa9fd2cf 100644
--- a/basis/unix/stat/netbsd/netbsd.factor
+++ b/basis/unix/stat/netbsd/netbsd.factor
@@ -29,7 +29,7 @@ C-STRUCT: statvfs
     { "fsid_t"    "f_fsidx" }
     { "ulong"   "f_fsid" }
     { "ulong"   "f_namemax" }      
-    { "uid_t""   "f_owner" }
+    { "uid_t"   "f_owner" }
     { { "uint32_t" 4 } "f_spare" }     
     { { "char" _VFS_NAMELEN } "f_fstypename" }
     { { "char" _VFS_NAMELEN } "f_mntonname" }
diff --git a/basis/unix/stat/stat.factor b/basis/unix/stat/stat.factor
index f8ad74c213..17d6604fc0 100644
--- a/basis/unix/stat/stat.factor
+++ b/basis/unix/stat/stat.factor
@@ -18,6 +18,12 @@ FUNCTION: int chmod ( char* path, mode_t mode ) ;
 FUNCTION: int fchmod ( int fd, mode_t mode ) ;
 FUNCTION: int mkdir ( char* path, mode_t mode ) ;
 
+C-STRUCT: fsid
+    { { "int" 2 } "__val" } ;
+
+    TYPEDEF: fsid __fsid_t
+    TYPEDEF: fsid fsid_t
+
 << os {
     { linux   [ "unix.stat.linux"   require ] }
     { macosx  [ "unix.stat.macosx"  require ] }

From d686ea1293b88d50f5b241dab51465724e5cc5ea Mon Sep 17 00:00:00 2001
From: Doug Coleman <doug.coleman@gmail.com>
Date: Mon, 20 Oct 2008 03:01:44 -0500
Subject: [PATCH 4/6] netbsd work

---
 basis/unix/statfs/netbsd/netbsd.factor | 43 +++++++++++++++++++++++++-
 1 file changed, 42 insertions(+), 1 deletion(-)

diff --git a/basis/unix/statfs/netbsd/netbsd.factor b/basis/unix/statfs/netbsd/netbsd.factor
index f9c86e117f..f72eb7da27 100644
--- a/basis/unix/statfs/netbsd/netbsd.factor
+++ b/basis/unix/statfs/netbsd/netbsd.factor
@@ -1,7 +1,48 @@
 ! Copyright (C) 2008 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: alien.syntax kernel ;
+USING: alien.syntax kernel io.files unix.stat math unix
+combinators system io.backend accessors alien.c-types
+io.encodings.utf8 alien.strings ;
 IN: unix.statfs.netbsd
 
+TUPLE: netbsd-file-system-info < file-system-info
+flag bsize frsize io-size
+blocks blocks-free blocks-available blocks-reserved
+files ffree
+sync-reads sync-writes async-reads async-writes
+fsidx fsid namemax owner spare fstype mnotonname mntfromname
+file-system-type-name mount-from ;
 
+: statvfs>file-system-info ( byte-array -- netbsd-file-system-info )
+    [ \ netbsd-file-system-info new ] dip
+    {
+        [
+            [ statvfs-f_bsize ]
+            [ statvfs-f_bavail ] bi * >>free-space
+        ]
+        [ statvfs-f_flag >>flag ]
+        [ statvfs-f_bsize >>bsize ]
+        [ statvfs-f_frsize >>frsize ]
+        [ statvfs-f_iosize >>io-size ]
+        [ statvfs-f_blocks >>blocks ]
+        [ statvfs-f_bfree >>blocks-free ]
+        [ statvfs-f_favail >>flag ]
+        [ statvfs-f_fresvd >>flag ]
+        [ statvfs-f_files >>files ]
+        [ statvfs-f_ffree >>ffree ]
+        [ statvfs-f_syncreads >>sync-reads ]
+        [ statvfs-f_syncwrites >>sync-writes ]
+        [ statvfs-f_asyncreads >>async-writes ]
+        [ statvfs-f_asyncwrites >>async-writes ]
+        [ statvfs-f_fsidx >>fsidx ]
+        [ statvfs-f_namemax >>namemax ]
+        [ statvfs-f_owner >>owner ]
+        [ statvfs-f_spare >>spare ]
+        [ statvfs-f_fstypename utf8 alien>string >>file-system-type-name ]
+        [ statvfs-f_mntonname utf8 alien>string >>mount-on ]
+        [ statvfs-f_mntfromname utf8 alien>string >>mount-from ]
+    } cleave ;
 
+M: netbsd file-system-info
+    normalize-path "statvfs" <c-object> tuck statvfs io-error 
+    statvfs>file-system-info ;

From 74dab4f90a7b3efe2250c0ddce6df5849b425d61 Mon Sep 17 00:00:00 2001
From: Doug Coleman <doug.coleman@gmail.com>
Date: Mon, 20 Oct 2008 04:30:01 -0500
Subject: [PATCH 5/6] netbsd work

---
 basis/unix/stat/netbsd/netbsd.factor   | 30 ------------------------
 basis/unix/statfs/netbsd/netbsd.factor | 32 ++++++++++++++++++++++++--
 basis/unix/statfs/netbsd/tags.txt      |  1 +
 basis/unix/types/netbsd/netbsd.factor  |  1 -
 4 files changed, 31 insertions(+), 33 deletions(-)
 create mode 100644 basis/unix/statfs/netbsd/tags.txt

diff --git a/basis/unix/stat/netbsd/netbsd.factor b/basis/unix/stat/netbsd/netbsd.factor
index aefa9fd2cf..6fccd570e3 100644
--- a/basis/unix/stat/netbsd/netbsd.factor
+++ b/basis/unix/stat/netbsd/netbsd.factor
@@ -5,33 +5,3 @@ cell-bits {
     { 32 [ "unix.stat.netbsd.32" require ] }
     { 64 [ "unix.stat.netbsd.64" require ] }
 } case
-
-: _VFS_NAMELEN    32   ; inline
-: _VFS_MNAMELEN   1024 ; inline
-
-C-STRUCT: statvfs
-    { "ulong"   "f_flag" }   
-    { "ulong"   "f_bsize" }
-    { "ulong"   "f_frsize" }  
-    { "ulong"   "f_iosize" }  
-    { "fsblkcnt_t" "f_blocks" }       
-    { "fsblkcnt_t" "f_bfree" } 
-    { "fsblkcnt_t" "f_bavail" }       
-    { "fsblkcnt_t" "f_bresvd" }       
-    { "fsfilcnt_t" "f_files" }
-    { "fsfilcnt_t" "f_ffree" }
-    { "fsfilcnt_t" "f_favail" }       
-    { "fsfilcnt_t" "f_fresvd" }       
-    { "uint64_t"   "f_syncreads" }    
-    { "uint64_t"   "f_syncwrites" }   
-    { "uint64_t"   "f_asyncreads" }   
-    { "uint64_t"   "f_asyncwrites" }  
-    { "fsid_t"    "f_fsidx" }
-    { "ulong"   "f_fsid" }
-    { "ulong"   "f_namemax" }      
-    { "uid_t"   "f_owner" }
-    { { "uint32_t" 4 } "f_spare" }     
-    { { "char" _VFS_NAMELEN } "f_fstypename" }
-    { { "char" _VFS_NAMELEN } "f_mntonname" }
-    { { "char" _VFS_NAMELEN } "f_mntfromname" } ;
-
diff --git a/basis/unix/statfs/netbsd/netbsd.factor b/basis/unix/statfs/netbsd/netbsd.factor
index f72eb7da27..042cd79ada 100644
--- a/basis/unix/statfs/netbsd/netbsd.factor
+++ b/basis/unix/statfs/netbsd/netbsd.factor
@@ -5,11 +5,39 @@ combinators system io.backend accessors alien.c-types
 io.encodings.utf8 alien.strings ;
 IN: unix.statfs.netbsd
 
+: _VFS_NAMELEN    32   ; inline
+: _VFS_MNAMELEN   1024 ; inline
+
+C-STRUCT: statvfs
+    { "ulong"   "f_flag" }   
+    { "ulong"   "f_bsize" }
+    { "ulong"   "f_frsize" }  
+    { "ulong"   "f_iosize" }  
+    { "fsblkcnt_t" "f_blocks" }       
+    { "fsblkcnt_t" "f_bfree" } 
+    { "fsblkcnt_t" "f_bavail" }       
+    { "fsblkcnt_t" "f_bresvd" }       
+    { "fsfilcnt_t" "f_files" }
+    { "fsfilcnt_t" "f_ffree" }
+    { "fsfilcnt_t" "f_favail" }       
+    { "fsfilcnt_t" "f_fresvd" }       
+    { "uint64_t"   "f_syncreads" }    
+    { "uint64_t"   "f_syncwrites" }   
+    { "uint64_t"   "f_asyncreads" }   
+    { "uint64_t"   "f_asyncwrites" }  
+    { "fsid_t"    "f_fsidx" }
+    { "ulong"   "f_fsid" }
+    { "ulong"   "f_namemax" }      
+    { "uid_t"   "f_owner" }
+    { { "uint32_t" 4 } "f_spare" }     
+    { { "char" _VFS_NAMELEN } "f_fstypename" }
+    { { "char" _VFS_NAMELEN } "f_mntonname" }
+    { { "char" _VFS_NAMELEN } "f_mntfromname" } ;
+
 TUPLE: netbsd-file-system-info < file-system-info
 flag bsize frsize io-size
 blocks blocks-free blocks-available blocks-reserved
-files ffree
-sync-reads sync-writes async-reads async-writes
+files ffree sync-reads sync-writes async-reads async-writes
 fsidx fsid namemax owner spare fstype mnotonname mntfromname
 file-system-type-name mount-from ;
 
diff --git a/basis/unix/statfs/netbsd/tags.txt b/basis/unix/statfs/netbsd/tags.txt
new file mode 100644
index 0000000000..6bf68304bb
--- /dev/null
+++ b/basis/unix/statfs/netbsd/tags.txt
@@ -0,0 +1 @@
+unportable
diff --git a/basis/unix/types/netbsd/netbsd.factor b/basis/unix/types/netbsd/netbsd.factor
index 27b8966eda..d69d498704 100644
--- a/basis/unix/types/netbsd/netbsd.factor
+++ b/basis/unix/types/netbsd/netbsd.factor
@@ -17,7 +17,6 @@ TYPEDEF: long           ssize_t
 TYPEDEF: int            pid_t
 TYPEDEF: int            time_t
 
-
 TYPEDEF: __uint64_t    fsblkcnt_t
 TYPEDEF: fsblkcnt_t      __fsblkcnt_t    
 

From 1b03aaf63e931cc69ff3dcb5487073fd303fee10 Mon Sep 17 00:00:00 2001
From: Doug Coleman <doug.coleman@gmail.com>
Date: Mon, 20 Oct 2008 04:35:15 -0500
Subject: [PATCH 6/6] typos

---
 basis/unix/statfs/netbsd/netbsd.factor | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/basis/unix/statfs/netbsd/netbsd.factor b/basis/unix/statfs/netbsd/netbsd.factor
index 042cd79ada..c58d6e1a0d 100644
--- a/basis/unix/statfs/netbsd/netbsd.factor
+++ b/basis/unix/statfs/netbsd/netbsd.factor
@@ -54,13 +54,13 @@ file-system-type-name mount-from ;
         [ statvfs-f_iosize >>io-size ]
         [ statvfs-f_blocks >>blocks ]
         [ statvfs-f_bfree >>blocks-free ]
-        [ statvfs-f_favail >>flag ]
-        [ statvfs-f_fresvd >>flag ]
+        [ statvfs-f_favail >>blocks-available ]
+        [ statvfs-f_fresvd >>blocks-reserved ]
         [ statvfs-f_files >>files ]
         [ statvfs-f_ffree >>ffree ]
         [ statvfs-f_syncreads >>sync-reads ]
         [ statvfs-f_syncwrites >>sync-writes ]
-        [ statvfs-f_asyncreads >>async-writes ]
+        [ statvfs-f_asyncreads >>async-reads ]
         [ statvfs-f_asyncwrites >>async-writes ]
         [ statvfs-f_fsidx >>fsidx ]
         [ statvfs-f_namemax >>namemax ]