sys-filesystem 1.4.4 → 1.5.0
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGES.md +10 -0
- data/README.md +1 -1
- data/lib/sys/filesystem.rb +1 -1
- data/lib/sys/unix/sys/filesystem/constants.rb +2 -0
- data/lib/sys/unix/sys/filesystem/functions.rb +14 -24
- data/lib/sys/unix/sys/filesystem/structs.rb +54 -21
- data/lib/sys/unix/sys/filesystem.rb +64 -49
- data/spec/spec_helper.rb +1 -0
- data/spec/sys_filesystem_shared.rb +1 -1
- data/spec/sys_filesystem_unix_spec.rb +41 -21
- data/sys-filesystem.gemspec +1 -1
- data.tar.gz.sig +0 -0
- metadata +2 -2
- metadata.gz.sig +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e69ef4806a64a956dfd3b1eb629a17654d7b14a5a8ed8468113f8ee045287682
|
4
|
+
data.tar.gz: 54182b67d58e77fc0c4b0dc8c96aa7ab64f5c7759943e966abd77d1ba212bfb8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 496090ea1ac8ef0b3d3fe55489b3e3f7eeb39f0406135ebdc3dfc650c0ea16c2e010a8eafb8ffb47e837b4be79217311c1d0e7cd71bb0c3ee81d189a8b7e54ca
|
7
|
+
data.tar.gz: fa6242583cf58ea04fa2fc2581030fcc53e62c7871852ffd3105caa8e363685b1521a056ee0a292327a75c497720dd934c23bd7d58d9687157c8265eeac64833
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/CHANGES.md
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
## 1.5.0 - 8-Jun-2024
|
2
|
+
* Add support for DragonFlyBSD.
|
3
|
+
* Remove Solaris support. It's dead, Jim.
|
4
|
+
* Now assumes umount2 function is present on Linux systems, and some
|
5
|
+
corresponding refactoring of the umount method.
|
6
|
+
|
7
|
+
## 1.4.5 - 22-May-2024
|
8
|
+
* Handle the possibility that a statvs64 alias may not exist on some Linux
|
9
|
+
platforms. Thanks go to Antoine Martin for the report.
|
10
|
+
|
1
11
|
## 1.4.4 - 12-Sep-2023
|
2
12
|
* Yet another fix for 32-bit vs 64-bit linux, specifically for the Statvfs
|
3
13
|
struct. Thanks go to Josh Cooper for the spot and the patch.
|
data/README.md
CHANGED
data/lib/sys/filesystem.rb
CHANGED
@@ -16,7 +16,7 @@ module Sys
|
|
16
16
|
# return objects of other types. Do not instantiate.
|
17
17
|
class Filesystem
|
18
18
|
# The version of the sys-filesystem library
|
19
|
-
VERSION = '1.
|
19
|
+
VERSION = '1.5.0'
|
20
20
|
|
21
21
|
# Stat objects are returned by the Sys::Filesystem.stat method. Here
|
22
22
|
# we're adding universal methods.
|
@@ -25,6 +25,8 @@ module Sys
|
|
25
25
|
MNT_DEFWRITE = 0x02000000 # filesystem should defer writes
|
26
26
|
MNT_MULTILABEL = 0x04000000 # MAC support for individual labels
|
27
27
|
MNT_NOATIME = 0x10000000 # disable update of file access time
|
28
|
+
MNT_NOCLUSTERR = 0x40000000 # disable cluster read
|
29
|
+
MNT_NOCLUSTERW = 0x80000000 # disable cluster write
|
28
30
|
|
29
31
|
MNT_VISFLAGMASK = (
|
30
32
|
MNT_RDONLY | MNT_SYNCHRONOUS | MNT_NOEXEC |
|
@@ -20,14 +20,14 @@ module Sys
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
def self.solaris?
|
24
|
-
RbConfig::CONFIG['host_os'] =~ /sunos|solaris/i
|
25
|
-
end
|
26
|
-
|
27
23
|
private_class_method :linux64?
|
28
24
|
|
29
|
-
if linux64?
|
30
|
-
|
25
|
+
if linux64?
|
26
|
+
begin
|
27
|
+
attach_function(:statvfs, :statvfs64, %i[string pointer], :int)
|
28
|
+
rescue FFI::NotFoundError # Not every Linux distro has an alias
|
29
|
+
attach_function(:statvfs, %i[string pointer], :int)
|
30
|
+
end
|
31
31
|
else
|
32
32
|
attach_function(:statvfs, %i[string pointer], :int)
|
33
33
|
end
|
@@ -35,29 +35,19 @@ module Sys
|
|
35
35
|
attach_function(:strerror, [:int], :string)
|
36
36
|
attach_function(:mount_c, :mount, %i[string string string ulong string], :int)
|
37
37
|
|
38
|
-
|
39
|
-
attach_function(:umount_c, :
|
40
|
-
|
41
|
-
|
42
|
-
attach_function(:umount_c, :unmount, [:string], :int)
|
43
|
-
end
|
38
|
+
if RbConfig::CONFIG['host_os'] =~ /darwin|osx|mach|bsd|dragonfly/i
|
39
|
+
attach_function(:umount_c, :unmount, %i[string int], :int)
|
40
|
+
else
|
41
|
+
attach_function(:umount_c, :umount2, %i[string int], :int)
|
44
42
|
end
|
45
43
|
|
46
44
|
private_class_method :statvfs, :strerror, :mount_c, :umount_c
|
47
45
|
|
48
46
|
begin
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
private_class_method :fopen, :fclose, :getmntent
|
54
|
-
else
|
55
|
-
attach_function(:getmntent, [:pointer], :pointer)
|
56
|
-
attach_function(:setmntent, %i[string string], :pointer)
|
57
|
-
attach_function(:endmntent, [:pointer], :int)
|
58
|
-
attach_function(:umount2, %i[string int], :int)
|
59
|
-
private_class_method :getmntent, :setmntent, :endmntent, :umount2
|
60
|
-
end
|
47
|
+
attach_function(:getmntent, [:pointer], :pointer)
|
48
|
+
attach_function(:setmntent, %i[string string], :pointer)
|
49
|
+
attach_function(:endmntent, [:pointer], :int)
|
50
|
+
private_class_method :getmntent, :setmntent, :endmntent
|
61
51
|
rescue FFI::NotFoundError
|
62
52
|
if RbConfig::CONFIG['host_os'] =~ /darwin|osx|mach/i
|
63
53
|
begin
|
@@ -6,6 +6,20 @@ require 'rbconfig'
|
|
6
6
|
module Sys
|
7
7
|
class Filesystem
|
8
8
|
module Structs
|
9
|
+
# Used by DragonFlyBSD
|
10
|
+
class UUID < FFI::Struct
|
11
|
+
UUID_NODE_LEN = 6
|
12
|
+
|
13
|
+
layout(
|
14
|
+
:time_low, :uint32,
|
15
|
+
:time_mid, :uint16,
|
16
|
+
:time_hi_and_version, :uint16,
|
17
|
+
:clock_seq_hi_and_reserved, :uint8,
|
18
|
+
:clock_seq_low, :uint8,
|
19
|
+
:node, [:uint8, UUID_NODE_LEN]
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
9
23
|
# The Statfs struct is a subclass of FFI::Struct that corresponds to a struct statfs.
|
10
24
|
class Statfs < FFI::Struct
|
11
25
|
# Private method that will determine the layout of the struct on Linux.
|
@@ -86,6 +100,31 @@ module Sys
|
|
86
100
|
:f_spare, [:ulong, 4]
|
87
101
|
)
|
88
102
|
end
|
103
|
+
when /dragonfly/i
|
104
|
+
layout(
|
105
|
+
:f_spare2, :long,
|
106
|
+
:f_bsize, :long,
|
107
|
+
:f_iosize, :long,
|
108
|
+
:f_blocks, :long,
|
109
|
+
:f_bfree, :long,
|
110
|
+
:f_bavail, :long,
|
111
|
+
:f_files, :long,
|
112
|
+
:f_ffree, :long,
|
113
|
+
:f_fsid, [:int32_t, 2],
|
114
|
+
:f_owner, :uid_t,
|
115
|
+
:f_type, :int,
|
116
|
+
:f_flags, :int,
|
117
|
+
:f_syncwrites, :long,
|
118
|
+
:f_asyncwrites, :long,
|
119
|
+
:f_fstypename, [:char, 16],
|
120
|
+
:f_mntonname, [:char, 80],
|
121
|
+
:f_syncreads, :long,
|
122
|
+
:f_asyncreads, :long,
|
123
|
+
:f_spares1, :short,
|
124
|
+
:f_mntfromname, [:char, 80],
|
125
|
+
:f_spares2, :short,
|
126
|
+
:f_spare, [:long,2]
|
127
|
+
)
|
89
128
|
else
|
90
129
|
layout(
|
91
130
|
:f_bsize, :uint32,
|
@@ -148,22 +187,27 @@ module Sys
|
|
148
187
|
:f_fsid, :ulong,
|
149
188
|
:f_namemax, :ulong
|
150
189
|
)
|
151
|
-
elsif RbConfig::CONFIG['host'] =~ /
|
190
|
+
elsif RbConfig::CONFIG['host'] =~ /dragonfly/i
|
152
191
|
layout(
|
153
192
|
:f_bsize, :ulong,
|
154
193
|
:f_frsize, :ulong,
|
155
|
-
:f_blocks, :
|
156
|
-
:f_bfree, :
|
157
|
-
:f_bavail, :
|
158
|
-
:f_files, :
|
159
|
-
:f_ffree, :
|
160
|
-
:f_favail, :
|
194
|
+
:f_blocks, :uint64,
|
195
|
+
:f_bfree, :uint64,
|
196
|
+
:f_bavail, :uint64,
|
197
|
+
:f_files, :uint64,
|
198
|
+
:f_ffree, :uint64,
|
199
|
+
:f_favail, :uint64,
|
161
200
|
:f_fsid, :ulong,
|
162
|
-
:f_basetype, [:char, 16],
|
163
201
|
:f_flag, :ulong,
|
164
202
|
:f_namemax, :ulong,
|
165
|
-
:
|
166
|
-
:
|
203
|
+
:f_owner, :uid_t,
|
204
|
+
:f_type, :uint,
|
205
|
+
:f_syncreads, :uint64,
|
206
|
+
:f_syncwrites, :uint64,
|
207
|
+
:f_asyncreads, :uint64,
|
208
|
+
:f_asyncwrites, :uint64,
|
209
|
+
:f_fsid_uuid, UUID,
|
210
|
+
:f_uid_uuid, UUID
|
167
211
|
)
|
168
212
|
elsif !linux64?
|
169
213
|
layout(
|
@@ -199,17 +243,6 @@ module Sys
|
|
199
243
|
end
|
200
244
|
end
|
201
245
|
|
202
|
-
# The Mnttab struct represents struct mnnttab from sys/mnttab.h on Solaris.
|
203
|
-
class Mnttab < FFI::Struct
|
204
|
-
layout(
|
205
|
-
:mnt_special, :string,
|
206
|
-
:mnt_mountp, :string,
|
207
|
-
:mnt_fstype, :string,
|
208
|
-
:mnt_mntopts, :string,
|
209
|
-
:mnt_time, :string
|
210
|
-
)
|
211
|
-
end
|
212
|
-
|
213
246
|
# The Mntent struct represents struct mntent from sys/mount.h on Unix.
|
214
247
|
class Mntent < FFI::Struct
|
215
248
|
layout(
|
@@ -105,6 +105,27 @@ module Sys
|
|
105
105
|
# The filesystem type, e.g. UFS.
|
106
106
|
attr_accessor :base_type
|
107
107
|
|
108
|
+
# The filesystem ID
|
109
|
+
attr_accessor :filesystem_id
|
110
|
+
|
111
|
+
# The filesystem type
|
112
|
+
attr_accessor :filesystem_type
|
113
|
+
|
114
|
+
# The user that mounted the filesystem
|
115
|
+
attr_accessor :owner
|
116
|
+
|
117
|
+
# Count of sync reads since mount
|
118
|
+
attr_accessor :sync_reads
|
119
|
+
|
120
|
+
# Count of sync writes since mount
|
121
|
+
attr_accessor :sync_writes
|
122
|
+
|
123
|
+
# Count of async reads since mount
|
124
|
+
attr_accessor :async_reads
|
125
|
+
|
126
|
+
# Count of async writes since mount
|
127
|
+
attr_accessor :async_writes
|
128
|
+
|
108
129
|
alias inodes files
|
109
130
|
alias inodes_free files_free
|
110
131
|
alias inodes_available files_available
|
@@ -250,6 +271,16 @@ module Sys
|
|
250
271
|
obj.base_type = fs[:f_basetype].to_s
|
251
272
|
end
|
252
273
|
|
274
|
+
# DragonFlyBSD has additional struct members
|
275
|
+
if RbConfig::CONFIG['host_os'] =~ /dragonfly/i
|
276
|
+
obj.owner = fs[:f_owner]
|
277
|
+
obj.filesystem_type = fs[:f_type]
|
278
|
+
obj.sync_reads= fs[:f_syncreads]
|
279
|
+
obj.async_reads= fs[:f_asyncreads]
|
280
|
+
obj.sync_writes = fs[:f_syncwrites]
|
281
|
+
obj.async_writes = fs[:f_asyncwrites]
|
282
|
+
end
|
283
|
+
|
253
284
|
obj.freeze
|
254
285
|
end
|
255
286
|
|
@@ -325,41 +356,23 @@ module Sys
|
|
325
356
|
raise SystemCallError.new(method_name, FFI.errno)
|
326
357
|
end
|
327
358
|
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
while ptr = getmntent(fp)
|
346
|
-
break if ptr.null?
|
347
|
-
mt = Mntent.new(ptr)
|
348
|
-
|
349
|
-
obj = Sys::Filesystem::Mount.new
|
350
|
-
obj.name = mt[:mnt_fsname]
|
351
|
-
obj.mount_point = mt[:mnt_dir]
|
352
|
-
obj.mount_type = mt[:mnt_type]
|
353
|
-
obj.options = mt[:mnt_opts]
|
354
|
-
obj.mount_time = nil
|
355
|
-
obj.dump_frequency = mt[:mnt_freq]
|
356
|
-
obj.pass_number = mt[:mnt_passno]
|
357
|
-
|
358
|
-
if block_given?
|
359
|
-
yield obj.freeze
|
360
|
-
else
|
361
|
-
array << obj.freeze
|
362
|
-
end
|
359
|
+
while ptr = getmntent(fp)
|
360
|
+
break if ptr.null?
|
361
|
+
mt = Mntent.new(ptr)
|
362
|
+
|
363
|
+
obj = Sys::Filesystem::Mount.new
|
364
|
+
obj.name = mt[:mnt_fsname]
|
365
|
+
obj.mount_point = mt[:mnt_dir]
|
366
|
+
obj.mount_type = mt[:mnt_type]
|
367
|
+
obj.options = mt[:mnt_opts]
|
368
|
+
obj.mount_time = nil
|
369
|
+
obj.dump_frequency = mt[:mnt_freq]
|
370
|
+
obj.pass_number = mt[:mnt_passno]
|
371
|
+
|
372
|
+
if block_given?
|
373
|
+
yield obj.freeze
|
374
|
+
else
|
375
|
+
array << obj.freeze
|
363
376
|
end
|
364
377
|
end
|
365
378
|
ensure
|
@@ -426,22 +439,24 @@ module Sys
|
|
426
439
|
end
|
427
440
|
|
428
441
|
# Removes the attachment of the (topmost) filesystem mounted on target.
|
429
|
-
#
|
430
|
-
#
|
442
|
+
# You may also specify bitwise OR'd +flags+ to control the precise behavior.
|
443
|
+
# The possible flags on Linux are:
|
431
444
|
#
|
432
|
-
#
|
445
|
+
# * MNT_FORCE - Abort pending requests, may cause data loss.
|
446
|
+
# * MNT_DETACH - Lazy umount, waits until the mount point is no longer busy.
|
447
|
+
# * MNT_EXPIRE - Mark mount point as expired, but don't actually remove it until
|
448
|
+
# a second call MNT_EXPIRE call is made.
|
433
449
|
#
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
raise Error, "#{function} function failed: " + strerror(FFI.errno)
|
450
|
+
# * UMOUNT_NOFOLLOW - Don't dereference the target if it's a symbolic link.
|
451
|
+
#
|
452
|
+
# Note that BSD platforms may support different flags. Please see the man
|
453
|
+
# pages for details.
|
454
|
+
#
|
455
|
+
# Typically this method requires admin privileges.
|
456
|
+
#
|
457
|
+
def self.umount(target, flags = 0)
|
458
|
+
if umount_c(target, flags) != 0
|
459
|
+
raise Error, "umount function failed: #{strerror(FFI.errno)}"
|
445
460
|
end
|
446
461
|
|
447
462
|
self
|
data/spec/spec_helper.rb
CHANGED
@@ -7,4 +7,5 @@ RSpec.configure do |config|
|
|
7
7
|
config.include_context(Sys::Filesystem)
|
8
8
|
config.filter_run_excluding(:windows) unless Gem.win_platform?
|
9
9
|
config.filter_run_excluding(:unix) if Gem.win_platform?
|
10
|
+
config.filter_run_excluding(:dragonfly) unless RbConfig::CONFIG['host_os'] =~ /dragonfly/i
|
10
11
|
end
|
@@ -4,7 +4,7 @@ require 'sys-filesystem'
|
|
4
4
|
|
5
5
|
RSpec.shared_examples Sys::Filesystem do
|
6
6
|
example 'version number is set to the expected value' do
|
7
|
-
expect(Sys::Filesystem::VERSION).to eq('1.
|
7
|
+
expect(Sys::Filesystem::VERSION).to eq('1.5.0')
|
8
8
|
expect(Sys::Filesystem::VERSION).to be_frozen
|
9
9
|
end
|
10
10
|
|
@@ -11,9 +11,8 @@ require 'sys-filesystem'
|
|
11
11
|
require 'pathname'
|
12
12
|
|
13
13
|
RSpec.describe Sys::Filesystem, :unix => true do
|
14
|
-
let(:solaris) { RbConfig::CONFIG['host_os'] =~ /sunos|solaris/i }
|
15
14
|
let(:linux) { RbConfig::CONFIG['host_os'] =~ /linux/i }
|
16
|
-
let(:bsd) { RbConfig::CONFIG['host_os'] =~ /bsd/i }
|
15
|
+
let(:bsd) { RbConfig::CONFIG['host_os'] =~ /bsd|dragonfly/i }
|
17
16
|
let(:darwin) { RbConfig::CONFIG['host_os'] =~ /mac|darwin/i }
|
18
17
|
let(:root) { '/' }
|
19
18
|
|
@@ -39,7 +38,8 @@ RSpec.describe Sys::Filesystem, :unix => true do
|
|
39
38
|
|
40
39
|
example 'stat fragment_size is a plausible value' do
|
41
40
|
expect(@stat.fragment_size).to be >= 512
|
42
|
-
expect(@stat.fragment_size).to be <=
|
41
|
+
expect(@stat.fragment_size).to be <= 2**16
|
42
|
+
expect(@stat.fragment_size).to be <= @stat.block_size
|
43
43
|
end
|
44
44
|
|
45
45
|
example 'stat blocks works as expected' do
|
@@ -102,11 +102,36 @@ RSpec.describe Sys::Filesystem, :unix => true do
|
|
102
102
|
expect(@stat.name_max).to be_a(Numeric)
|
103
103
|
end
|
104
104
|
|
105
|
-
|
106
|
-
|
105
|
+
context 'dragonfly', :dragonfly do
|
106
|
+
example 'owner works as expected' do
|
107
|
+
expect(@stat).to respond_to(:owner)
|
108
|
+
expect(@stat.owner).to be_a(Numeric)
|
109
|
+
end
|
110
|
+
|
111
|
+
example 'filesystem_type works as expected' do
|
112
|
+
expect(@stat).to respond_to(:filesystem_type)
|
113
|
+
expect(@stat.filesystem_type).to be_a(Numeric)
|
114
|
+
end
|
115
|
+
|
116
|
+
example 'sync_reads works as expected' do
|
117
|
+
expect(@stat).to respond_to(:sync_reads)
|
118
|
+
expect(@stat.sync_reads).to be_a(Numeric)
|
119
|
+
end
|
120
|
+
|
121
|
+
example 'async_reads works as expected' do
|
122
|
+
expect(@stat).to respond_to(:async_reads)
|
123
|
+
expect(@stat.async_reads).to be_a(Numeric)
|
124
|
+
end
|
125
|
+
|
126
|
+
example 'sync_writes works as expected' do
|
127
|
+
expect(@stat).to respond_to(:sync_writes)
|
128
|
+
expect(@stat.sync_writes).to be_a(Numeric)
|
129
|
+
end
|
107
130
|
|
108
|
-
|
109
|
-
|
131
|
+
example 'async_writes works as expected' do
|
132
|
+
expect(@stat).to respond_to(:async_writes)
|
133
|
+
expect(@stat.async_writes).to be_a(Numeric)
|
134
|
+
end
|
110
135
|
end
|
111
136
|
|
112
137
|
example 'stat constants are defined' do
|
@@ -114,11 +139,6 @@ RSpec.describe Sys::Filesystem, :unix => true do
|
|
114
139
|
expect(Sys::Filesystem::Stat::NOSUID).not_to be_nil
|
115
140
|
end
|
116
141
|
|
117
|
-
example 'stat constants for solaris are defined' do
|
118
|
-
skip 'NOTRUNC test skipped except on Solaris' unless solaris
|
119
|
-
expect(Sys::Filesystem::Stat::NOTRUNC).not_to be_nil
|
120
|
-
end
|
121
|
-
|
122
142
|
example 'stat bytes_total works as expected' do
|
123
143
|
expect(@stat).to respond_to(:bytes_total)
|
124
144
|
expect(@stat.bytes_total).to be_a(Numeric)
|
@@ -423,15 +443,15 @@ RSpec.describe Sys::Filesystem, :unix => true do
|
|
423
443
|
expect(mount.method(:opts)).to eq(mount.method(:options))
|
424
444
|
end
|
425
445
|
|
446
|
+
# This method may be removed
|
426
447
|
example 'mount time works as expected' do
|
427
|
-
expected_class = solaris ? Time : NilClass
|
428
448
|
expect(mount).to respond_to(:mount_time)
|
429
|
-
expect(mount.mount_time).to
|
449
|
+
expect(mount.mount_time).to be_nil
|
430
450
|
end
|
431
451
|
|
432
452
|
example 'mount dump_frequency works as expected' do
|
433
453
|
msg = 'dump_frequency test skipped on this platform'
|
434
|
-
skip msg if
|
454
|
+
skip msg if bsd || darwin
|
435
455
|
expect(mount).to respond_to(:dump_frequency)
|
436
456
|
expect(mount.dump_frequency).to be_a(Numeric)
|
437
457
|
end
|
@@ -443,7 +463,7 @@ RSpec.describe Sys::Filesystem, :unix => true do
|
|
443
463
|
|
444
464
|
example 'mount pass_number works as expected' do
|
445
465
|
msg = 'pass_number test skipped on this platform'
|
446
|
-
skip msg if
|
466
|
+
skip msg if bsd || darwin
|
447
467
|
expect(mount).to respond_to(:pass_number)
|
448
468
|
expect(mount.pass_number).to be_a(Numeric)
|
449
469
|
end
|
@@ -489,11 +509,6 @@ RSpec.describe Sys::Filesystem, :unix => true do
|
|
489
509
|
expect(Sys::Filesystem::Structs::Statvfs.size).to eq(dummy.check_sizeof('struct statvfs', 'sys/statvfs.h'))
|
490
510
|
end
|
491
511
|
|
492
|
-
example 'mnttab struct is expected size' do
|
493
|
-
skip 'mnttab test skipped except on Solaris' unless solaris
|
494
|
-
expect(Sys::Filesystem::Structs::Mnttab.size).to eq(dummy.check_sizeof('struct mnttab', 'sys/mnttab.h'))
|
495
|
-
end
|
496
|
-
|
497
512
|
example 'mntent struct is expected size' do
|
498
513
|
skip 'mnttab test skipped except on Linux' unless linux
|
499
514
|
expect(Sys::Filesystem::Structs::Mntent.size).to eq(dummy.check_sizeof('struct mntent', 'mntent.h'))
|
@@ -503,5 +518,10 @@ RSpec.describe Sys::Filesystem, :unix => true do
|
|
503
518
|
msg = 'statvfs() function failed: No such file or directory'
|
504
519
|
expect{ described_class.stat('/whatever') }.to raise_error(Sys::Filesystem::Error, msg)
|
505
520
|
end
|
521
|
+
|
522
|
+
example 'statvfs alias is used for statvfs64' do
|
523
|
+
expect(Sys::Filesystem::Functions.attached_functions[:statvfs]).to be_a(FFI::Function)
|
524
|
+
expect(Sys::Filesystem::Functions.attached_functions[:statvfs64]).to be_nil
|
525
|
+
end
|
506
526
|
end
|
507
527
|
end
|
data/sys-filesystem.gemspec
CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = 'sys-filesystem'
|
5
|
-
spec.version = '1.
|
5
|
+
spec.version = '1.5.0'
|
6
6
|
spec.author = 'Daniel J. Berger'
|
7
7
|
spec.email = 'djberg96@gmail.com'
|
8
8
|
spec.homepage = 'https://github.com/djberg96/sys-filesystem'
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sys-filesystem
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel J. Berger
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
ORVCZpRuCPpmC8qmqxUnARDArzucjaclkxjLWvCVHeFa9UP7K3Nl9oTjJNv+7/jM
|
36
36
|
WZs4eecIcUc4tKdHxcAJ0MO/Dkqq7hGaiHpwKY76wQ1+8xAh
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date:
|
38
|
+
date: 2024-06-09 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: ffi
|
metadata.gz.sig
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
|
2
|
-
�
|
1
|
+
+?��%���_o�7��I��#�ekRb�X���*Q#�&����5�ĵ+��~L��|O&���g'�xu���ds~\4N�}N��Ը*M�b
|
2
|
+
i�^f V�W2 �;)�a���^�K� �=f�v�<��
|