Skip to content

Commit 05dca17

Browse files
committed
Add BSD support, fix return types
1 parent d025f52 commit 05dca17

1 file changed

Lines changed: 20 additions & 10 deletions

File tree

src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,10 @@
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
12451247
Java_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
13051313
Java_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

Comments
 (0)