Browse Source

* Updated statfs to FreeBSD5+ level. Used a statfs union to provide some backwards compat.

git-svn-id: trunk@17147 -
marco 14 years ago
parent
commit
3a12f018f4
2 changed files with 78 additions and 233 deletions
  1. 73 13
      rtl/freebsd/ptypes.inc
  2. 5 220
      rtl/freebsd/sysnr.inc

+ 73 - 13
rtl/freebsd/ptypes.inc

@@ -163,16 +163,75 @@ type
     _MUTEX_TYPE_MAX
   );
 
-
-Const
-     MNAMLEN   = 88-2*sizeof(clong); // slightly machine specific.
-     MFSNamLen = 16;	
 type
-  fsid_t  = array[0..1] of cint;
+  fsid_t  = array[0..1] of cint32;
 
-// Kernel statfs
-
-  TStatfs = packed record
+Const
+     MNAMELEN   = 88;
+     MFSNamELen = 16;	
+     STATFS_VERSION = $20030518;
+     OMNAMLEN   = 88-2*sizeof(clong); // slightly machine specific.
+     OMFSNamLen = 16;	
+
+// fieldnames start with f_ in headers. Probably 1.0.x simplification that somehow
+// managed to escape the unix rewrite. Make an union+ deprecate after newstatfs is stable.
+
+Type TStatFS =  {?} Record
+       case boolean of
+       0 : ( // current FreeBSD
+        version     : cuint32;        { structure version number }
+        ftype       : cuint32;        { type of filesystem }
+        fflags      : cuint64;        { copy of mount exported flags }
+        bsize       : cuint64;        { filesystem fragment size }
+        iosize      : cuint64;        { optimal transfer block size }
+        blocks      : cuint64;        { total data blocks in filesystem }
+        bfree       : cuint64;        { free blocks in filesystem }
+        bavail      : cint64;         { free blocks avail to non-superuser }
+        files       : cuint64;        { total file nodes in filesystem }
+        ffree       : cint64;         { free nodes avail to non-superuser }
+        fsyncwrites  : cuint64;        { count of sync writes since mount }
+        fasyncwrites : cuint64;        { count of async writes since mount }
+        fsyncreads   : cuint64;        { count of sync reads since mount }
+        fasyncreads  : cuint64;        { count of async reads since mount }
+        spare       : array[0..9] of cuint64;  { unused spare }
+        namemax     : cuint32;        { maximum filename length }
+        owner       : tuid;           { user that mounted the filesystem }
+        fsid        : fsid_t;                            { filesystem id }
+        charspare   : array[0..80-1] of ansichar;         { spare string space }
+        fstypename  : array[0..MFSNAMELEN-1] of ansichar; { filesystem type name }
+        mnfromname  : array[0..MNAMELEN-1]   of ansichar; { mounted filesystem }
+        mountpoint  : array[0..MNAMELEN-1]   of ansichar; { directory on which mounted }
+        );
+        1:( // union for old fieldname's sake.
+        f_version     : cuint32;        { structure version number }
+        f_type        : cuint32;        { type of filesystem }
+        f_flags       : cuint64;        { copy of mount exported flags }
+        f_bsize       : cuint64;        { filesystem fragment size }
+        f_iosize      : cuint64;        { optimal transfer block size }
+        f_blocks      : cuint64;        { total data blocks in filesystem }
+        f_bfree       : cuint64;        { free blocks in filesystem }
+        f_bavail      : cint64;         { free blocks avail to non-superuser }
+        f_files       : cuint64;        { total file nodes in filesystem }
+        f_ffree       : cint64;         { free nodes avail to non-superuser }
+        f_syncwrites  : cuint64;        { count of sync writes since mount }
+        f_asyncwrites : cuint64;        { count of async writes since mount }
+        f_syncreads   : cuint64;        { count of sync reads since mount }
+        f_asyncreads  : cuint64;        { count of async reads since mount }
+        f_spare       : array[0..9] of cuint64;  { unused spare }
+        f_namemax     : cuint32;        { maximum filename length }
+        f_owner       : tuid;           { user that mounted the filesystem }
+        f_fsid        : fsid_t;                            { filesystem id }
+        f_charspare   : array[0..80-1] of ansichar;         { spare string space }
+        f_fstypename  : array[0..MFSNAMELEN-1] of ansichar; { filesystem type name }
+        f_mntfromname : array[0..MNAMELEN-1]   of ansichar; { mounted filesystem }
+        f_mntonname   : array[0..MNAMELEN-1]   of ansichar; { directory on which mounted }
+          );
+	end;
+ 
+     PStatFS=^TStatFS;
+
+
+   TStatFS4 = packed record
     spare2,            { place holder}
     bsize,             { fundamental block size}
     iosize,            { optimal block size }
@@ -187,18 +246,19 @@ type
     fflags         : cint; {copy of mount flags}
     fsyncwrites,
     fasyncwrites   : clong;
-    fstypename     : array[0..MFSNamLen-1] of char;
-    mountpoint     : array[0..MNAMLEN-1] of char;
+    fstypename     : array[0..OMFSNamLen-1] of char;
+    mountpoint     : array[0..OMNAMLEN-1] of char;
     fsyncreads,            { count of sync reads since mount }
     fasyncreads    : clong;
     fspares1       : cshort;
-    mnfromname     : array[0..MNAMLEN-1] of char;
+    mnfromname     : array[0..OMNAMLEN-1] of char;
     fspares2       : cshort;
     fspare3        : array[0..1] of clong;
   end;
-  PStatFS=^TStatFS;
+ 
+  PStatFS4=^TStatFs4;
 
-    mbstate_t = record
+  mbstate_t = record
       case byte of
         0: (__mbstate8: array[0..127] of char);
         1: (_mbstateL: cint64); { for alignment }

+ 5 - 220
rtl/freebsd/sysnr.inc

@@ -13,225 +13,7 @@
  **********************************************************************}
 
 const
-{ Crude converted FreeBSD  6.1-release syscall.h. Copy and paste if you
- checked the function.
- syscall_nr_syscall                     =  0;
- syscall_nr_exit                        =  1;
- syscall_nr_fork                        =  2;
- syscall_nr_read                        =  3;
- syscall_nr_write                       =  4;
- syscall_nr_open                        =  5;
- syscall_nr_close                       =  6;
- syscall_nr_wait4                       =  7;
- syscall_nr_link                        =  9;
- syscall_nr_unlink                      = 10;
- syscall_nr_chdir                       = 12;
- syscall_nr_fchdir                      = 13;
- syscall_nr_mknod                       = 14;
- syscall_nr_chmod                       = 15;
- syscall_nr_chown                       = 16;
- syscall_nr_break                       = 17;
- syscall_nr_getfsstat                   = 18;
- syscall_nr_getpid                      = 20;
- syscall_nr_mount                       = 21;
- syscall_nr_unmount                     = 22;
- syscall_nr_getuid                      = 24;
- syscall_nr_geteuid                     = 25;
- syscall_nr_ptrace                      = 26;
- syscall_nr_recvmsg                     = 27;
- syscall_nr_sendmsg                     = 28;
- syscall_nr_getpeername                 = 31;
- syscall_nr_getsockname                 = 32;
- syscall_nr_access                      = 33;
- syscall_nr_chflags                     = 34;
- syscall_nr_fchflags                    = 35;
- syscall_nr_sync                        = 36;
- syscall_nr_kill                        = 37;
- syscall_nr_getppid                     = 39;
- syscall_nr_dup                         = 41;
- syscall_nr_pipe                        = 42;
- syscall_nr_getegid                     = 43;
- syscall_nr_profil                      = 44;
- syscall_nr_ktrace                      = 45;
- syscall_nr_getgid                      = 47;
- syscall_nr_getlogin                    = 49;
- syscall_nr_setlogin                    = 50;
- syscall_nr_acct                        = 51;
- syscall_nr_sigaltstack                 = 53;
- syscall_nr_ioctl                       = 54;
- syscall_nr_reboot                      = 55;
- syscall_nr_revoke                      = 56;
- syscall_nr_symlink                     = 57;
- syscall_nr_readlink                    = 58;
- syscall_nr_execve                      = 59;
- syscall_nr_umask                       = 60;
- syscall_nr_chroot                      = 61;
- syscall_nr_msync                       = 65;
- syscall_nr_vfork                       = 66;
- syscall_nr_sbrk                        = 69;
- syscall_nr_sstk                        = 70;
- syscall_nr_vadvise                     = 72;
- syscall_nr_mprotect                    = 74;
- syscall_nr_madvise                     = 75;
- syscall_nr_mincore                     = 78;
- syscall_nr_setgroups                   = 80;
- syscall_nr_setpgid                     = 82;
- syscall_nr_swapon                      = 85;
-
- syscall_nr_getdtablesize               = 89;
- syscall_nr_dup2                        = 90;
- syscall_nr_fcntl                       = 92;
- syscall_nr_select                      = 93;
- syscall_nr_fsync                       = 95;
- syscall_nr_setpriority                 = 96;
- syscall_nr_connect                     = 98;
- syscall_nr_getpriority                 =100;
- syscall_nr_setsockopt                  =105;
- syscall_nr_gettimeofday                =116;
-
- syscall_nr_fchown                      =123;
- syscall_nr_fchmod                      =124;
- syscall_nr_setreuid                    =126;
- syscall_nr_setregid                    =127;
- syscall_nr_rename                      =128;
- syscall_nr_flock                       =131;
- syscall_nr_mkdir                       =136;
- syscall_nr_rmdir                       =137;
- syscall_nr_utimes                      =138;
- syscall_nr_adjtime                     =140;
-
- syscall_nr_quotactl                    =148;
- syscall_nr_nfssvc                      =155;
- syscall_nr_statfs                      =157;
- syscall_nr_fstatfs                     =158;
- syscall_nr_getfh                       =161;
- syscall_nr_getdomainname               =162;
- syscall_nr_setdomainname               =163;
- syscall_nr_uname                       =164;
-
- syscall_nr_rtprio                      =166;
-
- syscall_nr_ntp_adjtime                 =176;
- syscall_nr_setegid                     =182;
- syscall_nr_seteuid                     =183;
- syscall_nr_stat                        =188;
- syscall_nr_fstat                       =189;
- syscall_nr_lstat                       =190;
- syscall_nr_pathconf                    =191;
- syscall_nr_fpathconf                   =192;
- syscall_nr_getrlimit                   =194;
- syscall_nr_setrlimit                   =195;
-syscall_nr_getdirentries                =196;
- syscall_nr_mmap                        =197;
- syscall_nr_lseek                       =199;
- syscall_nr_truncate                    =200;
- syscall_nr_ftruncate                   =201;
- syscall_nr___sysctl                    =202;
- syscall_nr_mlock                       =203;
- syscall_nr_munlock                     =204;
- syscall_nr_undelete                    =205;
- syscall_nr_futimes                     =206;
- syscall_nr_getpgid                     =207;
- syscall_nr___semctl                    =220;
- syscall_nr_semget                      =221;
- syscall_nr_semop                       =222;
- syscall_nr_semconfig                   =223;
- syscall_nr_msgctl                      =224;
- syscall_nr_msgget                      =225;
- syscall_nr_msgsnd                      =226;
- syscall_nr_msgrcv                      =227;
- syscall_nr_shmat                       =228;
- syscall_nr_shmctl                      =229;
- syscall_nr_shmdt                       =230;
- syscall_nr_shmget                      =231;
- syscall_nr_clock_gettime               =232;
- syscall_nr_clock_settime               =233;
- syscall_nr_clock_getres                =234;
- syscall_nr_nanosleep                   =240;
- syscall_nr_minherit                    =250;
- syscall_nr_openbsd_poll                =252;
- syscall_nr_issetugid                   =253;
- syscall_nr_lchown                      =254;
- syscall_nr_getdents                    =272;
- syscall_nr_lchmod                      =274;
- syscall_nr_netbsd_lchown               =275;
- syscall_nr_lutimes                     =276;
- syscall_nr_netbsd_msync                =277;
- syscall_nr_nstat                       =278;
- syscall_nr_nfstat                      =279;
- syscall_nr_nlstat                      =280;
- syscall_nr_fhstatfs                    =297;
- syscall_nr_fhopen                      =298;
- syscall_nr_fhstat                      =299;
- syscall_nr_modnext                     =300;
- syscall_nr_modstat                     =301;
- syscall_nr_modfnext                    =302;
- syscall_nr_modfind                     =303;
- syscall_nr_kldload                     =304;
- syscall_nr_kldunload                   =305;
- syscall_nr_kldfind                     =306;
- syscall_nr_kldnext                     =307;
- syscall_nr_kldstat                     =308;
- syscall_nr_kldfirstmod                 =309;
- syscall_nr_getsid                      =310;
- syscall_nr_setresuid                   =311;
- syscall_nr_setresgid                   =312;
- syscall_nr_aio_return                  =314;
- syscall_nr_aio_suspend                 =315;
- syscall_nr_aio_cancel                  =316;
- syscall_nr_aio_error                   =317;
- syscall_nr_aio_read                    =318;
- syscall_nr_aio_write                   =319;
- syscall_nr_lio_listio                  =320;
- syscall_nr_yield                       =321;
- syscall_nr_thr_sleep                   =322;
- syscall_nr_thr_wakeup                  =323;
- syscall_nr_mlockall                    =324;
- syscall_nr_munlockall                  =325;
- syscall_nr_sched_setparam              =327;
- syscall_nr_sched_getparam              =328;
- syscall_nr_sched_setscheduler          =329;
- syscall_nr_sched_getscheduler          =330;
- syscall_nr_sched_yield                 =331;
- syscall_nr_sched_get_priority_max      =332;
- syscall_nr_sched_get_priority_min      =333;
- syscall_nr_sched_rr_get_interval       =334;
- syscall_nr_utrace                      =335;
- syscall_nr_sendfile                    =336;
- syscall_nr_kldsym                      =337;
- syscall_nr_jail                        =338;
- syscall_nr_sigprocmask                 =340;
- syscall_nr_sigsuspend                  =341;
- syscall_nr_sigaction                   =342;
- syscall_nr_sigpending                  =343;
- syscall_nr_sigreturn                   =344;
- syscall_nr_sigtimedwait                =345;
- syscall_nr___acl_get_file              =347;
- syscall_nr___acl_set_file              =348;
- syscall_nr___acl_get_fd                =349;
- syscall_nr___acl_set_fd                =350;
- syscall_nr___acl_delete_file           =351;
- syscall_nr___acl_delete_fd             =352;
- syscall_nr___acl_aclcheck_file         =353;
- syscall_nr___acl_aclcheck_fd           =354;
- syscall_nr_extattrctl                  =355;
- syscall_nr_extattr_set_file            =356;
- syscall_nr_extattr_get_file            =357;
- syscall_nr_extattr_delete_file         =358;
- syscall_nr_aio_waitcomplete            =359;
- syscall_nr_getresuid                   =360;
- syscall_nr_getresgid                   =361;
- syscall_nr_kse_exit                    = 379;
- syscall_nr_kse_wakeup                  = 380;
- syscall_nr_kse_create                  = 381;
- syscall_nr_kse_thr_interrupt           = 382;
- syscall_nr_kse_release                 = 383;
- syscall_nr_kse_switchin                = 440;
-
-}
-
 {More or less checked/in use FreeBSD syscalls}
- syscall_nr_getfsstat                   = 18;
  syscall_nr_readv                       = 120;
  syscall_nr_writev                      = 121;
  syscall_nr_pread                       = 173;
@@ -267,7 +49,11 @@ syscall_nr_getdirentries                =196;
  syscall_nr_flock                       = 131;
  syscall_nr_fork                        =   2;
  syscall_nr_fstat                       = 189;
- syscall_nr_fstatfs                     = 158;  // COMPAT4x
+ syscall_nr_statfs4                     = 157;  // COMPAT4x
+ syscall_nr_fstatfs4                    = 158;  // COMPAT4x
+ syscall_nr_getfsstat                   = 395;  
+ syscall_nr_statfs                      = 396;  
+ syscall_nr_fstatfs                     = 397;  
  syscall_nr_fsync                       =  95;
  syscall_nr_ftruncate                   = 201;
  syscall_nr_getdents                    = 272;
@@ -311,7 +97,6 @@ syscall_nr_getdirentries                =196;
  syscall_nr_socket                      =  97;
  syscall_nr_socketpair                  = 135;
  syscall_nr_stat                        = 188;
- syscall_nr_statfs                      = 157;  // COMPAT4x
  syscall_nr_symlink                     =  57;
  syscall_nr_umask                       =  60;
  syscall_nr_unlink                      =  10;