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 |