jdk/src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c
changeset 31145 af4093895e5f
parent 26209 f7860e8501d8
child 32846 5383225ebd0d
equal deleted inserted replaced
31144:8154c9d7bc32 31145:af4093895e5f
    33 #include <grp.h>
    33 #include <grp.h>
    34 #include <errno.h>
    34 #include <errno.h>
    35 #include <dlfcn.h>
    35 #include <dlfcn.h>
    36 #include <sys/types.h>
    36 #include <sys/types.h>
    37 #include <sys/stat.h>
    37 #include <sys/stat.h>
       
    38 #ifdef MACOSX
       
    39 #include <sys/param.h>
       
    40 #include <sys/mount.h>
       
    41 #else
    38 #include <sys/statvfs.h>
    42 #include <sys/statvfs.h>
       
    43 #endif
    39 #include <sys/time.h>
    44 #include <sys/time.h>
    40 
    45 
    41 #ifdef __solaris__
    46 #ifdef __solaris__
    42 #include <strings.h>
    47 #include <strings.h>
    43 #endif
    48 #endif
    48 
    53 
    49 #ifdef _ALLBSD_SOURCE
    54 #ifdef _ALLBSD_SOURCE
    50 #include <string.h>
    55 #include <string.h>
    51 
    56 
    52 #define stat64 stat
    57 #define stat64 stat
       
    58 #ifndef MACOSX
    53 #define statvfs64 statvfs
    59 #define statvfs64 statvfs
       
    60 #endif
    54 
    61 
    55 #define open64 open
    62 #define open64 open
    56 #define fstat64 fstat
    63 #define fstat64 fstat
    57 #define lstat64 lstat
    64 #define lstat64 lstat
    58 #define dirent64 dirent
    65 #define dirent64 dirent
   899 JNIEXPORT void JNICALL
   906 JNIEXPORT void JNICALL
   900 Java_sun_nio_fs_UnixNativeDispatcher_statvfs0(JNIEnv* env, jclass this,
   907 Java_sun_nio_fs_UnixNativeDispatcher_statvfs0(JNIEnv* env, jclass this,
   901     jlong pathAddress, jobject attrs)
   908     jlong pathAddress, jobject attrs)
   902 {
   909 {
   903     int err;
   910     int err;
       
   911 #ifdef MACOSX
       
   912     struct statfs buf;
       
   913 #else
   904     struct statvfs64 buf;
   914     struct statvfs64 buf;
   905     const char* path = (const char*)jlong_to_ptr(pathAddress);
   915 #endif
   906 
   916     const char* path = (const char*)jlong_to_ptr(pathAddress);
   907 
   917 
       
   918 #ifdef MACOSX
       
   919     RESTARTABLE(statfs(path, &buf), err);
       
   920 #else
   908     RESTARTABLE(statvfs64(path, &buf), err);
   921     RESTARTABLE(statvfs64(path, &buf), err);
       
   922 #endif
   909     if (err == -1) {
   923     if (err == -1) {
   910         throwUnixException(env, errno);
   924         throwUnixException(env, errno);
   911     } else {
   925     } else {
   912 #ifdef _AIX
   926 #ifdef _AIX
   913         /* AIX returns ULONG_MAX in buf.f_blocks for the /proc file system. */
   927         /* AIX returns ULONG_MAX in buf.f_blocks for the /proc file system. */
   919         if (buf.f_blocks == 0) {
   933         if (buf.f_blocks == 0) {
   920             buf.f_bfree = 0;
   934             buf.f_bfree = 0;
   921             buf.f_bavail = 0;
   935             buf.f_bavail = 0;
   922         }
   936         }
   923 #endif
   937 #endif
       
   938 #ifdef MACOSX
       
   939         (*env)->SetLongField(env, attrs, attrs_f_frsize, long_to_jlong(buf.f_bsize));
       
   940 #else
   924         (*env)->SetLongField(env, attrs, attrs_f_frsize, long_to_jlong(buf.f_frsize));
   941         (*env)->SetLongField(env, attrs, attrs_f_frsize, long_to_jlong(buf.f_frsize));
       
   942 #endif
   925         (*env)->SetLongField(env, attrs, attrs_f_blocks, long_to_jlong(buf.f_blocks));
   943         (*env)->SetLongField(env, attrs, attrs_f_blocks, long_to_jlong(buf.f_blocks));
   926         (*env)->SetLongField(env, attrs, attrs_f_bfree,  long_to_jlong(buf.f_bfree));
   944         (*env)->SetLongField(env, attrs, attrs_f_bfree,  long_to_jlong(buf.f_bfree));
   927         (*env)->SetLongField(env, attrs, attrs_f_bavail, long_to_jlong(buf.f_bavail));
   945         (*env)->SetLongField(env, attrs, attrs_f_bavail, long_to_jlong(buf.f_bavail));
   928     }
   946     }
   929 }
   947 }