rbmount 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/rbmount.rb +28 -0
- data/lib/rbmount/c.rb +399 -0
- data/lib/rbmount/cache.rb +76 -0
- data/lib/rbmount/context.rb +343 -0
- data/lib/rbmount/fs.rb +234 -0
- data/lib/rbmount/iterator.rb +48 -0
- data/lib/rbmount/lock.rb +51 -0
- data/lib/rbmount/mount.rb +103 -0
- data/lib/rbmount/string.rb +166 -0
- data/lib/rbmount/table.rb +188 -0
- data/lib/rbmount/update.rb +73 -0
- metadata +86 -0
@@ -0,0 +1,343 @@
|
|
1
|
+
#--
|
2
|
+
# Copyleft shura. [ shura1991@gmail.com ]
|
3
|
+
#
|
4
|
+
# This file is part of rbmount.
|
5
|
+
#
|
6
|
+
# rbmount is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU Affero General Public License as published
|
8
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# rbmount is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU Affero General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU Affero General Public License
|
17
|
+
# along with rbmount. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#++
|
19
|
+
|
20
|
+
require 'rbmount/c'
|
21
|
+
require 'rbmount/fs'
|
22
|
+
require 'rbmount/lock'
|
23
|
+
require 'rbmount/cache'
|
24
|
+
require 'rbmount/table'
|
25
|
+
|
26
|
+
module Mount
|
27
|
+
class Context
|
28
|
+
def finalize
|
29
|
+
Mount::C.mnt_free_context(@pointer)
|
30
|
+
end
|
31
|
+
|
32
|
+
def initialize
|
33
|
+
@pointer = Mount::C.mnt_new_context
|
34
|
+
raise if @pointer.null?
|
35
|
+
|
36
|
+
ObjectSpace.define_finalizer(self, method(:finalize))
|
37
|
+
end
|
38
|
+
|
39
|
+
def reset!
|
40
|
+
return false unless Mount::C.mnt_reset_context(@pointer)
|
41
|
+
self
|
42
|
+
end
|
43
|
+
|
44
|
+
def append_options (optstr)
|
45
|
+
Mount::C.mnt_context_append_options(@pointer, optstr)
|
46
|
+
end
|
47
|
+
|
48
|
+
def apply_fstab
|
49
|
+
Mount::C.mnt_context_apply_fstab(@pointer)
|
50
|
+
end
|
51
|
+
|
52
|
+
def canonicalize= (ok)
|
53
|
+
Mount::C.mnt_context_disable_canonicalize(@pointer, !ok)
|
54
|
+
end
|
55
|
+
|
56
|
+
def helpers= (ok)
|
57
|
+
Mount::C.mnt_context_disable_helpers(@pointer, !ok)
|
58
|
+
end
|
59
|
+
|
60
|
+
def mtab= (ok)
|
61
|
+
Mount::C.mnt_context_disable_mtab(@pointer, !ok)
|
62
|
+
end
|
63
|
+
|
64
|
+
def fake= (ok)
|
65
|
+
Mount::C.mnt_context_enable_fake(@pointer, !!ok)
|
66
|
+
end
|
67
|
+
|
68
|
+
def force= (ok)
|
69
|
+
Mount::C.mnt_context_enable_force(@pointer, !!ok)
|
70
|
+
end
|
71
|
+
|
72
|
+
def lazy= (ok)
|
73
|
+
Mount::C.mnt_context_enable_lazy(@pointer, !!ok)
|
74
|
+
end
|
75
|
+
|
76
|
+
def loopdel= (ok)
|
77
|
+
Mount::C.mnt_context_enable_loopdel(@pointer, !!ok)
|
78
|
+
end
|
79
|
+
|
80
|
+
def rdonly_umount= (ok)
|
81
|
+
Mount::C.mnt_context_enable_rdonly_umount(@pointer, !!ok)
|
82
|
+
end
|
83
|
+
|
84
|
+
def sloppy= (ok)
|
85
|
+
Mount::C.mnt_context_enable_sloppy(@pointer, !!ok)
|
86
|
+
end
|
87
|
+
|
88
|
+
def verbose= (ok)
|
89
|
+
Mount::C.mnt_context_enable_verbose(@pointer, !!ok)
|
90
|
+
end
|
91
|
+
|
92
|
+
def cache
|
93
|
+
Mount::Cache.new(Mount::C.mnt_context_get_cache(@pointer))
|
94
|
+
end
|
95
|
+
|
96
|
+
def fs
|
97
|
+
Mount::FS.new(Mount::C.mnt_context_get_fs(@pointer))
|
98
|
+
end
|
99
|
+
|
100
|
+
def fstab
|
101
|
+
Mount::Table.new.tap {|tab|
|
102
|
+
ptr = FFI::MemoryPointer.new(:pointer).write_pointer(tab.to_c)
|
103
|
+
raise unless Mount::C.mnt_context_get_fstab(@pointer, ptr)
|
104
|
+
}
|
105
|
+
end
|
106
|
+
|
107
|
+
def fstype
|
108
|
+
Mount::C.mnt_context_get_fstype(@pointer)
|
109
|
+
end
|
110
|
+
|
111
|
+
def lock
|
112
|
+
lk = Mount::C.mnt_context_get_lock(@pointer)
|
113
|
+
raise if lk.null?
|
114
|
+
|
115
|
+
Mount::Lock.allocate.tap {|lck|
|
116
|
+
lck.instance_eval {
|
117
|
+
@pointer = lk
|
118
|
+
|
119
|
+
ObjectSpace.define_finalizer(self, self.method(:finalize))
|
120
|
+
}
|
121
|
+
}
|
122
|
+
end
|
123
|
+
|
124
|
+
def mflags
|
125
|
+
ptr = FFI::MemoryPointer.new(:ulong)
|
126
|
+
raise unless Mount::C.mnt_context_get_mflags(@pointer, ptr)
|
127
|
+
|
128
|
+
ptr.read_ulong
|
129
|
+
end
|
130
|
+
|
131
|
+
def mtab
|
132
|
+
Mount::Table.new.tap {|tab|
|
133
|
+
ptr = FFI::MemoryPointer.new(:pointer).write_pointer(tab.to_c)
|
134
|
+
raise unless Mount::C.mnt_context_get_mtab(@pointer, ptr)
|
135
|
+
}
|
136
|
+
end
|
137
|
+
|
138
|
+
def optsmode
|
139
|
+
Mount::C.mnt_context_get_optsmode(@pointer)
|
140
|
+
end
|
141
|
+
|
142
|
+
def source
|
143
|
+
Mount::C.mnt_context_get_source(@pointer)
|
144
|
+
end
|
145
|
+
|
146
|
+
def status
|
147
|
+
Mount::C.mnt_context_get_status(@pointer)
|
148
|
+
end
|
149
|
+
|
150
|
+
def table (filename)
|
151
|
+
Mount::Table.new.tap {|tab|
|
152
|
+
ptr = FFI::MemoryPointer.new(:pointer).write_pointer(tab.to_c)
|
153
|
+
raise unless Mount::C.mnt_context_get_table(@pointer, filename, ptr)
|
154
|
+
}
|
155
|
+
end
|
156
|
+
|
157
|
+
def target
|
158
|
+
Mount::C.mnt_context_get_target(@pointer)
|
159
|
+
end
|
160
|
+
|
161
|
+
def user_mflags
|
162
|
+
ptr = FFI::MemoryPointer.new(:ulong)
|
163
|
+
raise unless Mount::C.mnt_context_get_user_mflags(@pointer, ptr)
|
164
|
+
|
165
|
+
ptr.read_ulong
|
166
|
+
end
|
167
|
+
|
168
|
+
def helper_setopt (c, arg)
|
169
|
+
Mount::C.mnt_context_helper_setopt(@pointer, c, arg)
|
170
|
+
end
|
171
|
+
|
172
|
+
def init_helper (action, flags=0)
|
173
|
+
Mount::C.mnt_context_init_helper(@pointer, action, flags)
|
174
|
+
end
|
175
|
+
|
176
|
+
def fake?
|
177
|
+
Mount::C.mnt_context_is_fake(@pointer)
|
178
|
+
end
|
179
|
+
|
180
|
+
def force?
|
181
|
+
Mount::C.mnt_context_is_force(@pointer)
|
182
|
+
end
|
183
|
+
|
184
|
+
def fs_mounted? (fs)
|
185
|
+
ptr = FFI::MemoryPointer.new(:int)
|
186
|
+
Mount::C.mnt_context_is_fs_mounted(@pointer, fs.to_c, ptr)
|
187
|
+
|
188
|
+
!ptr.read_int.zero?
|
189
|
+
end
|
190
|
+
|
191
|
+
def lazy?
|
192
|
+
Mount::C.mnt_context_is_lazy(@pointer)
|
193
|
+
end
|
194
|
+
|
195
|
+
def mtab?
|
196
|
+
!Mount::C.mnt_context_is_nomtab(@pointer)
|
197
|
+
end
|
198
|
+
|
199
|
+
def rdonly_umount?
|
200
|
+
Mount::C.mnt_context_is_rdonly_umount(@pointer)
|
201
|
+
end
|
202
|
+
|
203
|
+
def restricted?
|
204
|
+
Mount::C.mnt_context_is_restricted(@pointer)
|
205
|
+
end
|
206
|
+
|
207
|
+
def sloppy?
|
208
|
+
Mount::C.mnt_context_is_sloppy(@pointer)
|
209
|
+
end
|
210
|
+
|
211
|
+
def verbose?
|
212
|
+
Mount::C.mnt_context_is_verbose(@pointer)
|
213
|
+
end
|
214
|
+
|
215
|
+
def cache= (cache)
|
216
|
+
Mount::C.mnt_context_set_cache(@pointer, cache.to_c)
|
217
|
+
end
|
218
|
+
|
219
|
+
def fs= (fs)
|
220
|
+
Mount::C.mnt_context_set_fs(@pointer, fs.to_c)
|
221
|
+
end
|
222
|
+
|
223
|
+
def fstab= (tb)
|
224
|
+
Mount::C.mnt_context_set_fstab(@pointer, tb.to_c)
|
225
|
+
end
|
226
|
+
|
227
|
+
def fstype= (fstype)
|
228
|
+
Mount::C.mnt_context_set_fstype(@pointer, fstype)
|
229
|
+
end
|
230
|
+
|
231
|
+
def fstype_pattern= (pattern)
|
232
|
+
Mount::C.mnt_context_set_fstype_pattern(@pointer, pattern)
|
233
|
+
end
|
234
|
+
|
235
|
+
def mflags= (flags)
|
236
|
+
Mount::C.mnt_context_set_mflags(@pointer, flags)
|
237
|
+
end
|
238
|
+
|
239
|
+
def mountdata= (data)
|
240
|
+
Mount::C.mnt_context_set_mountdata(@pointer, data)
|
241
|
+
end
|
242
|
+
|
243
|
+
def options= (optstr)
|
244
|
+
Mount::C.mnt_context_set_options(@pointer, optstr)
|
245
|
+
end
|
246
|
+
|
247
|
+
def options_pattern= (pattern)
|
248
|
+
Mount::C.mnt_context_set_options_pattern(@pointer, pattern)
|
249
|
+
end
|
250
|
+
|
251
|
+
def optsmode= (mode)
|
252
|
+
Mount::C.mnt_context_set_optsmode(@pointer, mode)
|
253
|
+
end
|
254
|
+
|
255
|
+
def source= (src)
|
256
|
+
Mount::C.mnt_context_set_source(@pointer, src)
|
257
|
+
end
|
258
|
+
|
259
|
+
def syscall_status= (status)
|
260
|
+
Mount::C.mnt_context_set_syscall_status(@pointer, status)
|
261
|
+
end
|
262
|
+
|
263
|
+
def on_error (&blk)
|
264
|
+
if blk.arity == 3
|
265
|
+
Mount::C.mnt_context_set_tables_errcb(@pointer, blk)
|
266
|
+
true
|
267
|
+
else
|
268
|
+
false
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
272
|
+
def target= (target)
|
273
|
+
Mount::C.mnt_context_set_target(@pointer, target)
|
274
|
+
end
|
275
|
+
|
276
|
+
def user_mflags (flags)
|
277
|
+
Mount::C.mnt_context_set_user_mflags(@pointer, flags)
|
278
|
+
end
|
279
|
+
|
280
|
+
def strerror
|
281
|
+
''
|
282
|
+
end
|
283
|
+
|
284
|
+
def do_mount
|
285
|
+
Mount::C.mnt_context_do_mount(@pointer)
|
286
|
+
end
|
287
|
+
|
288
|
+
def finalize_mount
|
289
|
+
Mount::C.mnt_context_finalize_mount(@pointer)
|
290
|
+
end
|
291
|
+
|
292
|
+
def mount
|
293
|
+
Mount::C.mnt_context_mount(@pointer)
|
294
|
+
end
|
295
|
+
|
296
|
+
def next_mount (direction=:forward)
|
297
|
+
fs = Mount::FS.new
|
298
|
+
fsptr = FFI::MemoryPointer.new(:pointer).write_pointer(fs.to_c)
|
299
|
+
rcptr = FFI::MemoryPointer.new(:int)
|
300
|
+
iptr = FFI::MemoryPointer.new(:int)
|
301
|
+
|
302
|
+
res = Mount::C.mnt_context_next_mount(@pointer, Mount::Iterator.new(Mount::Table::DIRECTION[direction]).to_c,
|
303
|
+
fsptr, rcptr, iptr)
|
304
|
+
|
305
|
+
return nil if res == 1
|
306
|
+
raise unless res
|
307
|
+
|
308
|
+
[fs, rcptr.read_int, iptr.read_int]
|
309
|
+
end
|
310
|
+
|
311
|
+
def each_mount
|
312
|
+
Enumerator.new {|y|
|
313
|
+
loop {
|
314
|
+
res = next_mount
|
315
|
+
break unless res
|
316
|
+
y << res
|
317
|
+
}.each {|args|
|
318
|
+
yield *args if block_given?
|
319
|
+
}
|
320
|
+
}
|
321
|
+
end
|
322
|
+
|
323
|
+
def prepare_mount
|
324
|
+
Mount::C.mnt_context_prepare_mount(@pointer)
|
325
|
+
end
|
326
|
+
|
327
|
+
def do_umount
|
328
|
+
Mount::C.mnt_context_do_umount(@pointer)
|
329
|
+
end
|
330
|
+
|
331
|
+
def finalize_umount
|
332
|
+
Mount::C.mnt_context_finalize_umount(@pointer)
|
333
|
+
end
|
334
|
+
|
335
|
+
def prepare_umount
|
336
|
+
Mount::C.mnt_context_prepare_umount(@pointer)
|
337
|
+
end
|
338
|
+
|
339
|
+
def umount
|
340
|
+
Mount::C.mnt_context_umount(@pointer)
|
341
|
+
end
|
342
|
+
end
|
343
|
+
end
|
data/lib/rbmount/fs.rb
ADDED
@@ -0,0 +1,234 @@
|
|
1
|
+
#--
|
2
|
+
# Copyleft shura. [ shura1991@gmail.com ]
|
3
|
+
#
|
4
|
+
# This file is part of rbmount.
|
5
|
+
#
|
6
|
+
# rbmount is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU Affero General Public License as published
|
8
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# rbmount is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU Affero General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU Affero General Public License
|
17
|
+
# along with rbmount. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#++
|
19
|
+
|
20
|
+
require 'rbmount/c'
|
21
|
+
|
22
|
+
module Mount
|
23
|
+
class FS
|
24
|
+
def initialize (ptr=nil)
|
25
|
+
@pointer= ptr
|
26
|
+
@pointer = Mount::C.mnt_new_fs unless @pointer
|
27
|
+
raise if @pointer.null?
|
28
|
+
|
29
|
+
ObjectSpace.define_finalizer(self, method(:finalize))
|
30
|
+
end
|
31
|
+
|
32
|
+
def append_attributes (optstr)
|
33
|
+
Mount::C.mnt_fs_append_attributes(@pointer, optstr)
|
34
|
+
end
|
35
|
+
|
36
|
+
def append_options (optstr)
|
37
|
+
Mount::C.mnt_fs_append_options(@pointer, optstr)
|
38
|
+
end
|
39
|
+
|
40
|
+
def attribute (key)
|
41
|
+
ptr = FFI::MemoryPointer.new(:pointer).write_pointer(FFI::MemoryPointer.new(:string))
|
42
|
+
plen = FFI::MemoryPointer.new(:ulong)
|
43
|
+
|
44
|
+
raise unless Mount::C.mnt_fs_get_attribute(@pointer, key, ptr, plen)
|
45
|
+
ptr.read_pointer.read_string[0, plen.read_ulong]
|
46
|
+
end
|
47
|
+
|
48
|
+
def attributes
|
49
|
+
Mount::C.mnt_fs_get_attributes(@pointer)
|
50
|
+
end
|
51
|
+
|
52
|
+
def bindsrc
|
53
|
+
Mount::C.mnt_fs_get_bindsrc(@pointer)
|
54
|
+
end
|
55
|
+
|
56
|
+
def devno
|
57
|
+
Mount::C.mnt_fs_get_devno(@pointer)
|
58
|
+
end
|
59
|
+
|
60
|
+
def freq
|
61
|
+
Mount::C.mnt_fs_get_freq(@pointer)
|
62
|
+
end
|
63
|
+
|
64
|
+
def fs_options
|
65
|
+
Mount::C.mnt_fs_get_fs_options(@pointer)
|
66
|
+
end
|
67
|
+
|
68
|
+
def fstype
|
69
|
+
Mount::C.mnt_fs_get_fstype(@pointer)
|
70
|
+
end
|
71
|
+
|
72
|
+
def id
|
73
|
+
Mount::C.mnt_fs_get_id(@pointer)
|
74
|
+
end
|
75
|
+
|
76
|
+
def option (key)
|
77
|
+
ptr = FFI::MemoryPointer.new(:pointer).write_pointer(FFI::MemoryPointer.new(:string))
|
78
|
+
plen = FFI::MemoryPointer.new(:ulong)
|
79
|
+
|
80
|
+
raise unless Mount::C.mnt_fs_get_option(@pointer, key, ptr, plen)
|
81
|
+
ptr.read_pointer.read_string[0, plen.read_ulong]
|
82
|
+
end
|
83
|
+
|
84
|
+
def options
|
85
|
+
Mount::C.mnt_fs_get_options(@pointer)
|
86
|
+
end
|
87
|
+
|
88
|
+
def parent_id
|
89
|
+
Mount::C.mnt_fs_get_parent_id(@pointer)
|
90
|
+
end
|
91
|
+
|
92
|
+
def passno
|
93
|
+
Mount::C.mnt_fs_get_passno(@pointer)
|
94
|
+
end
|
95
|
+
|
96
|
+
def root
|
97
|
+
Mount::C.mnt_fs_get_root(@pointer)
|
98
|
+
end
|
99
|
+
|
100
|
+
def source
|
101
|
+
Mount::C.mnt_fs_get_source(@pointer)
|
102
|
+
end
|
103
|
+
|
104
|
+
def srcpath
|
105
|
+
Mount::C.mnt_fs_get_srcpath(@pointer)
|
106
|
+
end
|
107
|
+
|
108
|
+
def tag
|
109
|
+
name = FFI::MemoryPointer.new(:pointer).write_pointer(FFI::MemoryPointer.new(:string))
|
110
|
+
value = FFI::MemoryPointer.new(:pointer).write_pointer(FFI::MemoryPointer.new(:string))
|
111
|
+
|
112
|
+
raise unless Mount::C.mnt_fs_get_tag(@pointer, name, value)
|
113
|
+
[name.read_pointer.read_string, value.read_pointer.read_string]
|
114
|
+
end
|
115
|
+
|
116
|
+
def target
|
117
|
+
Mount::C.mnt_fs_get_target(@pointer)
|
118
|
+
end
|
119
|
+
|
120
|
+
def userdata
|
121
|
+
Mount::C.mnt_fs_get_userdata(@pointer)
|
122
|
+
end
|
123
|
+
|
124
|
+
def user_options
|
125
|
+
Mount::C.mnt_fs_get_user_options(@pointer)
|
126
|
+
end
|
127
|
+
|
128
|
+
def vfs_options
|
129
|
+
Mount::C.mnt_fs_get_vfs_options(@pointer)
|
130
|
+
end
|
131
|
+
|
132
|
+
def kernel?
|
133
|
+
Mount::C.mnt_fs_is_kernel(@pointer)
|
134
|
+
end
|
135
|
+
|
136
|
+
def match_fstype (types)
|
137
|
+
Mount::C.mnt_fs_match_fstype(@pointer, types)
|
138
|
+
end
|
139
|
+
|
140
|
+
def match_options (options)
|
141
|
+
Mount::C.mnt_fs_match_options(@pointer, options)
|
142
|
+
end
|
143
|
+
|
144
|
+
def match_source (source=nil, cache=nil)
|
145
|
+
Mount::C.mnt_fs_match_source(@pointer, source, (cache ? cache.to_c : cache))
|
146
|
+
end
|
147
|
+
|
148
|
+
def match_target (source=nil, cache=nil)
|
149
|
+
Mount::C.mnt_fs_match_target(@pointer, source, (cache ? cache.to_c : cache))
|
150
|
+
end
|
151
|
+
|
152
|
+
def prepend_attributes (optstr)
|
153
|
+
Mount::C.mnt_fs_prepend_attributes(@pointer, optstr)
|
154
|
+
end
|
155
|
+
|
156
|
+
def prepend_options (optstr)
|
157
|
+
Mount::C.mnt_fs_prepend_options(@pointer, optstr)
|
158
|
+
end
|
159
|
+
|
160
|
+
def print_debug (io)
|
161
|
+
Mount::C.mnt_fs_print_debug(@pointer, io)
|
162
|
+
end
|
163
|
+
|
164
|
+
def attributes= (optstr)
|
165
|
+
Mount::C.mnt_fs_set_attributes(@pointer, optstr)
|
166
|
+
end
|
167
|
+
|
168
|
+
def bindsrc= (src)
|
169
|
+
Mount::C.mnt_fs_set_bindsrc(@pointer, src)
|
170
|
+
end
|
171
|
+
|
172
|
+
def freq= (f)
|
173
|
+
Mount::C.mnt_fs_set_freq(@pointer, f)
|
174
|
+
end
|
175
|
+
|
176
|
+
def fstype= (type)
|
177
|
+
Mount::C.mnt_fs_set_fstype(@pointer, type)
|
178
|
+
end
|
179
|
+
|
180
|
+
def options= (optstr)
|
181
|
+
Mount::C.mnt_fs_set_options(@pointer, optstr)
|
182
|
+
end
|
183
|
+
|
184
|
+
def passno= (passn)
|
185
|
+
Mount::C.mnt_fs_set_passno(@pointer, passn)
|
186
|
+
end
|
187
|
+
|
188
|
+
def root= (path)
|
189
|
+
Mount::C.mnt_fs_set_root(@pointer, path)
|
190
|
+
end
|
191
|
+
|
192
|
+
def source= (src)
|
193
|
+
Mount::C.mnt_fs_set_source(@pointer, src)
|
194
|
+
end
|
195
|
+
|
196
|
+
def target= (targ)
|
197
|
+
Mount::C.mnt_fs_set_target(@pointer, targ)
|
198
|
+
end
|
199
|
+
|
200
|
+
def userdata= (data)
|
201
|
+
Mount::C.mnt_fs_set_userdata(@pointer, data)
|
202
|
+
end
|
203
|
+
|
204
|
+
def options_dup
|
205
|
+
Mount::C.mnt_fs_strdup_options(@pointer)
|
206
|
+
end
|
207
|
+
|
208
|
+
def to_mntent
|
209
|
+
ptr = FFI::MemoryPointer.new(:pointer).write_pointer(FFI::MemoryPointer.new(:pointer))
|
210
|
+
|
211
|
+
raise unless Mount::C.mnt_fs_to_mntent(@pointer, ptr)
|
212
|
+
|
213
|
+
Mount::C::MntEnt.new(ptr.read_pointer)
|
214
|
+
end
|
215
|
+
|
216
|
+
def reset!
|
217
|
+
Mount::C.mnt_reset_fs(@pointer)
|
218
|
+
end
|
219
|
+
|
220
|
+
def finalize
|
221
|
+
Mount::C.mnt_free_fs(@pointer)
|
222
|
+
end
|
223
|
+
|
224
|
+
def dup
|
225
|
+
Mount::FS.new.tap {|d|
|
226
|
+
Mount::C.mnt_copy_fs(d.to_c, self.to_c)
|
227
|
+
}
|
228
|
+
end
|
229
|
+
|
230
|
+
def to_c
|
231
|
+
@pointer
|
232
|
+
end
|
233
|
+
end
|
234
|
+
end
|