fixed a couple of issues that I encountered when testing our xattr support

(in libgnu.so) with my current rsync port:
* Node now opens its fd with O_RDONLY, as otherwise BFS will refuse to open
  (the attributes of) directories
* Node::Get() and Node::Set() now make use of the encoded attribute type,
  as otherwise all created attributes would have the type 'XATR' (instead
  of the encoded haiku-specific type)
* minor cleanup with respect to the line width limit 


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34904 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Oliver Tappe
2010-01-05 15:43:42 +00:00
parent fbb3d94f46
commit 6ed5e0d208
+7 -6
View File
@@ -109,7 +109,7 @@ private:
struct Node { struct Node {
Node(const char* path, bool traverseSymlinks) Node(const char* path, bool traverseSymlinks)
{ {
fFileFD = open(path, O_RDWR | (traverseSymlinks ? 0 : O_NOTRAVERSE)); fFileFD = open(path, O_RDONLY | (traverseSymlinks ? 0 : O_NOTRAVERSE));
fOwnsFileFD = true; fOwnsFileFD = true;
} }
@@ -146,7 +146,7 @@ struct Node {
attributeName.Init(attribute); attributeName.Init(attribute);
int attributeFD = fs_fopen_attr(fFileFD, attributeName.name, int attributeFD = fs_fopen_attr(fFileFD, attributeName.name,
B_XATTR_TYPE, openMode); attributeName.type, openMode);
if (attributeFD < 0) { if (attributeFD < 0) {
// translate B_ENTRY_NOT_FOUND to ENOATTR // translate B_ENTRY_NOT_FOUND to ENOATTR
if (errno == B_ENTRY_NOT_FOUND) if (errno == B_ENTRY_NOT_FOUND)
@@ -195,7 +195,7 @@ struct Node {
} }
ssize_t bytesRead = fs_read_attr(fFileFD, attributeName.name, ssize_t bytesRead = fs_read_attr(fFileFD, attributeName.name,
B_XATTR_TYPE, 0, buffer, info.size); info.type, 0, buffer, info.size);
// translate B_ENTRY_NOT_FOUND to ENOATTR // translate B_ENTRY_NOT_FOUND to ENOATTR
if (bytesRead < 0 && errno == B_ENTRY_NOT_FOUND) if (bytesRead < 0 && errno == B_ENTRY_NOT_FOUND)
@@ -308,15 +308,16 @@ setxattr(const char* path, const char* attribute, const void* buffer,
int int
lsetxattr(const char* path, const char* attribute, const void* buffer, size_t size, lsetxattr(const char* path, const char* attribute, const void* buffer,
int flags) size_t size, int flags)
{ {
return Node(path, false).Set(attribute, flags, buffer, size); return Node(path, false).Set(attribute, flags, buffer, size);
} }
int int
fsetxattr(int fd, const char* attribute, const void* buffer, size_t size, int flags) fsetxattr(int fd, const char* attribute, const void* buffer, size_t size,
int flags)
{ {
return Node(fd).Set(attribute, flags, buffer, size); return Node(fd).Set(attribute, flags, buffer, size);
} }