4141#endif
4242#include <sys/time.h>
4343
44- #if defined(__linux__ ) || defined(_ALLBSD_SOURCE )
44+ #if defined(__linux__ ) || defined(MACOSX )
4545#include <sys/xattr.h>
46+ #elif defined(__FreeBSD__ ) || defined(__NetBSD__ )
47+ #include <sys/extattr.h>
4648#endif
4749
4850/* For POSIX-compliant getpwuid_r */
@@ -1245,19 +1247,21 @@ JNIEXPORT jint JNICALL
12451247Java_sun_nio_fs_UnixNativeDispatcher_fgetxattr0 (JNIEnv * env , jclass clazz ,
12461248 jint fd , jlong nameAddress , jlong valueAddress , jint valueLen )
12471249{
1248- size_t res = -1 ;
1250+ ssize_t res = -1 ;
12491251 const char * name = jlong_to_ptr (nameAddress );
12501252 void * value = jlong_to_ptr (valueAddress );
12511253
12521254#ifdef __linux__
12531255 res = fgetxattr (fd , name , value , valueLen );
1254- #elif _ALLBSD_SOURCE
1256+ #elif MACOSX
12551257 res = fgetxattr (fd , name , value , valueLen , 0 , 0 );
1258+ #elif defined(__FreeBSD__ ) || defined(__NetBSD__ )
1259+ res = extattr_get_fd (fd , EXTATTR_NAMESPACE_USER , name , value , (size_t )valueLen );
12561260#else
12571261 throwUnixException (env , ENOTSUP );
12581262#endif
12591263
1260- if (res == (size_t )-1 )
1264+ if (res == (ssize_t )-1 )
12611265 throwUnixException (env , errno );
12621266 return (jint )res ;
12631267}
@@ -1272,8 +1276,10 @@ Java_sun_nio_fs_UnixNativeDispatcher_fsetxattr0(JNIEnv* env, jclass clazz,
12721276
12731277#ifdef __linux__
12741278 res = fsetxattr (fd , name , value , valueLen , 0 );
1275- #elif _ALLBSD_SOURCE
1279+ #elif MACOSX
12761280 res = fsetxattr (fd , name , value , valueLen , 0 , 0 );
1281+ #elif defined(__FreeBSD__ ) || defined(__NetBSD__ )
1282+ res = extattr_set_fd (fd , EXTATTR_NAMESPACE_USER , name , value , (size_t )valueLen );
12771283#else
12781284 throwUnixException (env , ENOTSUP );
12791285#endif
@@ -1291,8 +1297,10 @@ Java_sun_nio_fs_UnixNativeDispatcher_fremovexattr0(JNIEnv* env, jclass clazz,
12911297
12921298#ifdef __linux__
12931299 res = fremovexattr (fd , name );
1294- #elif _ALLBSD_SOURCE
1300+ #elif MACOSX
12951301 res = fremovexattr (fd , name , 0 );
1302+ #elif defined(__FreeBSD__ ) || defined(__NetBSD__ )
1303+ res = extattr_delete_fd (fd , EXTATTR_NAMESPACE_USER , name );
12961304#else
12971305 throwUnixException (env , ENOTSUP );
12981306#endif
@@ -1305,18 +1313,20 @@ JNIEXPORT jint JNICALL
13051313Java_sun_nio_fs_UnixNativeDispatcher_flistxattr (JNIEnv * env , jclass clazz ,
13061314 jint fd , jlong listAddress , jint size )
13071315{
1308- size_t res = -1 ;
1316+ ssize_t res = -1 ;
13091317 char * list = jlong_to_ptr (listAddress );
13101318
13111319#ifdef __linux__
13121320 res = flistxattr (fd , list , (size_t )size );
1313- #elif _ALLBSD_SOURCE
1321+ #elif MACOSX
13141322 res = flistxattr (fd , list , (size_t )size , 0 );
1323+ #elif defined(__FreeBSD__ ) || defined(__NetBSD__ )
1324+ res = extattr_list_fd (fd , EXTATTR_NAMESPACE_USER , list , (size_t )size );
13151325#else
13161326 throwUnixException (env , ENOTSUP );
13171327#endif
13181328
1319- if (res == (size_t )-1 )
1329+ if (res == (ssize_t )-1 )
13201330 throwUnixException (env , errno );
13211331 return (jint )res ;
1322- }
1332+ }
0 commit comments