10 buffer.header.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION;
11 buffer.header.errorOffset = -1;
12 buffer.header.fcntlReserved = 0;
16 auto result = gpfs_fcntl(fd, &
buffer);
18 if (errno == ENOSYS) {
21 switch (
buffer.header.errorOffset) {
23 throwcall::good0(result,
"can't fcntl ", path,
", is not on a gpfs file system");
28 ", wrong version number ",
buffer.header.fcntlVersion);
33 while (o <
buffer.header.errorOffset) {
34 std::cerr << o <<
"\n";
35 o += *
reinterpret_cast<const int*
>(&
buffer.justCharsProvidingSpace[o]);
39 ", wrong parameter in hint ", i,
40 " at offset ",
buffer.header.errorOffset);
46 std::cerr <<
"dump of fcntl struct at " << (
void*)
this <<
"\n";
47 for (
int i = 0; i <
buffer.header.totalLength; i +=
sizeof(int)) {
48 std::cerr << *reinterpret_cast<const int*>(&
buffer.justCharsProvidingSpace[i]) <<
"\n";
54 buffer.acl.acl_level = GPFS_ACL_LEVEL_BASE;
55 buffer.acl.acl_version = 0;
56 buffer.acl.acl_type = GPFS_ACL_TYPE_NFS4;
59 buffer.acl.acl_len =
reinterpret_cast<char*
>(&
buffer.acl.ace_v4[nEntries])
60 -
reinterpret_cast<char*
>(&
buffer.acl.acl_len);
62 throw std::runtime_error(
"to many entries for gpfs acl");
64 buffer.acl.acl_level = GPFS_ACL_LEVEL_BASE;
65 buffer.acl.acl_version = GPFS_ACL_VERSION_NFS4;
66 buffer.acl.acl_type = GPFS_ACL_TYPE_NFS4;
67 buffer.acl.acl_nace = nEntries;
71 if (
buffer.acl.acl_version == GPFS_ACL_VERSION_NFS4) {
72 return &
buffer.acl.ace_v4[0];
74 return &
buffer.acl.v4Level1.ace_v4[0];
78 if (
buffer.acl.acl_version == GPFS_ACL_VERSION_NFS4) {
85 if (
buffer.acl.acl_version == GPFS_ACL_VERSION_NFS4) {
86 return &
buffer.acl.ace_v4[0];
88 return &
buffer.acl.v4Level1.ace_v4[0];
92 if (
buffer.acl.acl_version == GPFS_ACL_VERSION_NFS4) {
101 #ifdef LWE_DATA_LWESEND
107 "can't get acl for ", path);
115 "can't get acl for ", path);
117 if (
buffer.acl.acl_version != GPFS_ACL_VERSION_NFS4 &&
118 buffer.acl.acl_version != GPFS_ACL_VERSION_NFS4F) {
119 throw std::runtime_error(
"wrong acl version on " + path);
124 #ifdef LWE_DATA_LWESEND
130 "can't set acl for ", path);
138 "can't set acl for ", path);