Module: Xtendr
- Included in:
- XtendrProxy
- Defined in:
- lib/xtendr.rb
Defined Under Namespace
Modules: FFI
Instance Method Summary collapse
-
#getx(attribute, *opts) { ... } ⇒ String?
Get the value of an extended attribute for the current object.
-
#getx!(attribute, *opts) ⇒ String
Get the value of an extended attribute, raising an error if the attribute is not found.
-
#listx ⇒ Array<String>
List all of the extended attribute for the object.
-
#remove_allx ⇒ Object
Remove all extended file attributes from the object.
-
#removex(attribute) ⇒ nil
Removes the given extended attribute from the filesystem object.
-
#setx(attribute, value, *opts) ⇒ nil
Set an extended attribute on a filesystem object.
Instance Method Details
#getx(attribute, *opts) { ... } ⇒ String?
Get the value of an extended attribute for the current object. Calls
#to_s on self to get the path to the file the attribute is set on.
22 23 24 25 26 |
# File 'lib/xtendr.rb', line 22 def getx(attribute, *opts) getx! attribute, *opts rescue Errno::ENOATTR block_given? ? yield : nil end |
#getx!(attribute, *opts) ⇒ String
Get the value of an extended attribute, raising an error if the attribute is not found.
The bang version of getx works the the same way as getx, exept that when
the attribute is not found. In that case, rather than returning nil, an
ENOATTR error is raised.
38 39 40 41 42 43 44 45 |
# File 'lib/xtendr.rb', line 38 def getx!(attribute, *opts) = opts.include?(:no_follow) ? 1 : 0 len = FFI.getxattr(self.to_s, attribute, nil, 0, 0, ) raise_error(attribute, ::FFI::LastError::error) if len < 0 buffer = ::FFI::Buffer.alloc_out(len) FFI.getxattr(self.to_s, attribute, buffer, buffer.size, 0, ) buffer.get_string(0, buffer.size) end |
#listx ⇒ Array<String>
List all of the extended attribute for the object.
78 79 80 81 82 83 |
# File 'lib/xtendr.rb', line 78 def listx len = FFI.listxattr(self.to_s, nil, 0, 0) buffer = ::FFI::Buffer.alloc_out(len) FFI.listxattr(self.to_s, buffer, buffer.size, 0) buffer.get_bytes(0, buffer.size).split("\0") end |
#remove_allx ⇒ Object
Remove all extended file attributes from the object
94 95 96 97 98 |
# File 'lib/xtendr.rb', line 94 def remove_allx listx.each do |attribute| removex(attribute) end end |
#removex(attribute) ⇒ nil
Removes the given extended attribute from the filesystem object.
89 90 91 |
# File 'lib/xtendr.rb', line 89 def removex(attribute) FFI.removexattr(self.to_s, attribute, 0) end |
#setx(attribute, value, *opts) ⇒ nil
Set an extended attribute on a filesystem object. :create:: Raises an error if the attribute already exists.
56 57 58 59 |
# File 'lib/xtendr.rb', line 56 def setx(attribute, value, *opts) retval = FFI.setxattr(self.to_s, attribute, value, value.size, 0, (*opts)) raise_error(nil, ::FFI::LastError::error) if retval < 0 end |