equal
deleted
inserted
replaced
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 } |