sys-filesystem 0.3.3 → 0.3.4
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +6 -0
- data/README +51 -50
- data/Rakefile +34 -46
- data/ext/sys/filesystem.c +119 -117
- data/sys-filesystem.gemspec +16 -16
- data/test/test_sys_filesystem.rb +2 -2
- data/test/test_sys_filesystem_unix.rb +1 -1
- data/test/test_sys_filesystem_windows.rb +1 -1
- metadata +15 -10
data/CHANGES
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
== 0.3.4 - 19-Nov-2010
|
2
|
+
* Fixed a bug where negative block counts were happening on very large
|
3
|
+
hard drives. Thanks go to Jonas Pfenniger for the spot.
|
4
|
+
* Refactored the clean task in the Rakefile.
|
5
|
+
* Some cosmetic source code changes.
|
6
|
+
|
1
7
|
== 0.3.3 - 21-May-2010
|
2
8
|
* Added a workaround for the Sys::Filesystem#block_size member to deal with
|
3
9
|
a bug in OS X. Thanks go to Josh Pasqualetto for the spot.
|
data/README
CHANGED
@@ -1,82 +1,83 @@
|
|
1
1
|
= Description
|
2
|
-
|
3
|
-
|
4
|
-
= Prerequisites
|
5
|
-
=== MS Windows
|
6
|
-
* windows-pr, 0.9.8 or later.
|
2
|
+
A Ruby interface for getting file system information.
|
7
3
|
|
8
4
|
= Installation
|
9
|
-
|
10
|
-
|
5
|
+
gem install sys-filesystem
|
6
|
+
|
7
|
+
== Windows
|
8
|
+
If the installation command above doesn't work try this:
|
9
|
+
|
10
|
+
gem install sys-filesystem --platform x86-mingw32
|
11
11
|
|
12
12
|
= Synopsis
|
13
|
-
|
14
|
-
|
13
|
+
require 'sys/filesystem'
|
14
|
+
include Sys
|
15
15
|
|
16
|
-
|
17
|
-
|
16
|
+
# Display information about a particular filesystem.
|
17
|
+
p Filesystem.stat('/')
|
18
18
|
|
19
|
-
|
19
|
+
# Sample output
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
21
|
+
#<Sys::Filesystem::Stat:0x517440
|
22
|
+
@base_type = "ufs",
|
23
|
+
@flags = 4,
|
24
|
+
@files_available = 3817457,
|
25
|
+
@block_size = 8192,
|
26
|
+
@blocks_available = 19957633,
|
27
|
+
@blocks = 34349612,
|
28
|
+
@name_max = 255,
|
29
|
+
@path = "/",
|
30
|
+
@filesystem_id = 35651592,
|
31
|
+
@files = 4135040,
|
32
|
+
@fragment_size = 1024,
|
33
|
+
@files_free = 3817457,
|
34
|
+
@blocks_free = 20301129
|
35
|
+
>
|
36
36
|
|
37
|
-
|
38
|
-
|
37
|
+
# Describe all mount points on the system
|
38
|
+
Filesystem.mounts{ |mount| p mount }
|
39
39
|
|
40
|
-
|
41
|
-
|
40
|
+
# Find the mount point of any particular file
|
41
|
+
puts Filesystem.mount_point('/home/djberge/some_file.txt') => '/home'
|
42
42
|
|
43
43
|
= Notes
|
44
44
|
=== MS Windows
|
45
|
-
|
46
|
-
|
45
|
+
This is a pure Ruby implementation using the windows-pr library, which in
|
46
|
+
turn wraps native Windows functions.
|
47
|
+
|
47
48
|
=== UNIX
|
48
|
-
|
49
|
+
This is a C extension that wraps statvfs, etc.
|
49
50
|
|
50
51
|
= Sample code
|
51
|
-
|
52
|
-
|
52
|
+
Run 'rake example' if you want to see a basic sample run. The actual code
|
53
|
+
is 'example_stat.rb' in the 'examples' directory. Modify it as you see fit.
|
53
54
|
|
54
55
|
= Known Bugs
|
55
|
-
|
56
|
-
|
56
|
+
None that I'm aware of. Please report bugs on the project page at
|
57
|
+
http://www.rubyforge.org/projects/sysutils.
|
57
58
|
|
58
59
|
= Future Plans
|
59
|
-
|
60
|
+
Suggestions welcome.
|
60
61
|
|
61
62
|
= Acknowledgements
|
62
|
-
|
63
|
-
|
63
|
+
Mike Hall, for ideas and code that I borrowed from his 'filesystem'
|
64
|
+
library.
|
64
65
|
|
65
|
-
|
66
|
+
Park Heesob, for implementation and API ideas for the MS Windows version.
|
66
67
|
|
67
|
-
|
68
|
+
Nobuyoshi Miyokawa, for adding FreeBSD and OS X support.
|
68
69
|
|
69
70
|
= License
|
70
|
-
|
71
|
+
Artistic 2.0
|
71
72
|
|
72
73
|
= Copyright
|
73
|
-
|
74
|
-
|
74
|
+
(C) 2003-2010 Daniel J. Berger
|
75
|
+
All Rights Reserved
|
75
76
|
|
76
77
|
= Warranty
|
77
|
-
|
78
|
-
|
79
|
-
|
78
|
+
This library is provided "as is" and without any express or
|
79
|
+
implied warranties, including, without limitation, the implied
|
80
|
+
warranties of merchantability and fitness for a particular purpose.
|
80
81
|
|
81
82
|
= Author
|
82
|
-
|
83
|
+
Daniel J. Berger
|
data/Rakefile
CHANGED
@@ -3,25 +3,19 @@ require 'rake/clean'
|
|
3
3
|
require 'rake/testtask'
|
4
4
|
include Config
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
sh 'make distclean' rescue nil
|
16
|
-
rm file if File.exists?(file)
|
17
|
-
rm_rf 'conftest.dSYM' if File.exists?('conftest.dSYM') # OS X weirdness
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
6
|
+
CLEAN.include(
|
7
|
+
'**/*.gem', # Gem files
|
8
|
+
'**/*.rbc', # Rubinius
|
9
|
+
'**/*.o', # C object file
|
10
|
+
'**/*.log', # Ruby extension build log
|
11
|
+
'**/Makefile', # C Makefile
|
12
|
+
'**/conftest.dSYM', # OS X build directory
|
13
|
+
"**/*.#{CONFIG['DLEXT']}" # C shared object
|
14
|
+
)
|
21
15
|
|
22
16
|
desc "Build the sys-filesystem library on UNIX systems (but don't install it)"
|
23
17
|
task :build => [:clean] do
|
24
|
-
unless
|
18
|
+
unless CONFIG['host_os'] =~ /mswin32|mingw|cygwin|windows|dos/i
|
25
19
|
file = 'filesystem.' + CONFIG['DLEXT']
|
26
20
|
Dir.chdir('ext') do
|
27
21
|
ruby 'extconf.rb'
|
@@ -31,23 +25,9 @@ task :build => [:clean] do
|
|
31
25
|
end
|
32
26
|
end
|
33
27
|
|
34
|
-
desc "Install the sys-filesystem library"
|
35
|
-
task :install do
|
36
|
-
unless Config::CONFIG['host_os'] =~ /mswin32|mingw|cygwin|windows|dos/i
|
37
|
-
install_dir = File.join(CONFIG['sitelibdir'], 'sys')
|
38
|
-
Dir.mkdir(install_dir) unless File.exists?(install_dir)
|
39
|
-
FileUtils.cp('lib/sys/filesystem.rb', install_dir, :verbose => true)
|
40
|
-
else
|
41
|
-
task :install => :build
|
42
|
-
Dir.chdir('ext') do
|
43
|
-
sh 'make install'
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
28
|
desc "Run the test suite"
|
49
29
|
Rake::TestTask.new("test") do |t|
|
50
|
-
unless
|
30
|
+
unless CONFIG['host_os'] =~ /mswin32|mingw|cygwin|windows|dos/i
|
51
31
|
task :test => :build
|
52
32
|
t.libs << 'ext'
|
53
33
|
t.libs.delete('lib')
|
@@ -68,28 +48,36 @@ task :example => [:build] do |t|
|
|
68
48
|
Dir.mkdir('sys') unless File.exists?('sys')
|
69
49
|
end
|
70
50
|
|
71
|
-
FileUtils.cp('ext/sys/filesystem.' +
|
51
|
+
FileUtils.cp('ext/sys/filesystem.' + CONFIG['DLEXT'], 'examples/sys')
|
72
52
|
|
73
53
|
Dir.chdir('examples') do
|
74
54
|
ruby 'example_stat.rb'
|
75
55
|
end
|
76
56
|
end
|
77
57
|
|
78
|
-
|
79
|
-
|
80
|
-
|
58
|
+
namespace :gem do
|
59
|
+
desc "Build the sys-filesystem gem"
|
60
|
+
task :create => [:clean] do |t|
|
61
|
+
spec = eval(IO.read('sys-filesystem.gemspec'))
|
81
62
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
63
|
+
if Config::CONFIG['host_os'] =~ /mswin32|mingw|cygwin|windows|dos/i
|
64
|
+
spec.files -= Dir['ext/**/*']
|
65
|
+
spec.platform = Gem::Platform::CURRENT
|
66
|
+
spec.add_dependency('windows-pr', '>= 1.0.5')
|
67
|
+
else
|
68
|
+
spec.extensions = ['ext/extconf.rb']
|
69
|
+
spec.files -= Dir['lib/**/*']
|
70
|
+
spec.extra_rdoc_files << 'ext/sys/filesystem.c'
|
71
|
+
end
|
72
|
+
|
73
|
+
Gem::Builder.new(spec).build
|
92
74
|
end
|
93
75
|
|
94
|
-
|
76
|
+
desc "Install the sys-filesystem gem"
|
77
|
+
task :install => [:create] do
|
78
|
+
file = Dir['*.gem'].first
|
79
|
+
sh "gem install #{file}"
|
80
|
+
end
|
95
81
|
end
|
82
|
+
|
83
|
+
task :default => :test
|
data/ext/sys/filesystem.c
CHANGED
@@ -8,15 +8,15 @@
|
|
8
8
|
|
9
9
|
#include <sys/types.h>
|
10
10
|
|
11
|
-
#ifdef HAVE_SYS_STATVFS_H
|
11
|
+
#ifdef HAVE_SYS_STATVFS_H // Most flavors of UNIX
|
12
12
|
#include <sys/statvfs.h>
|
13
|
-
#else
|
13
|
+
#else // FreeBSD 4.x
|
14
14
|
#include <sys/param.h>
|
15
15
|
#include <sys/mount.h>
|
16
16
|
#include <sys/vnode.h>
|
17
17
|
#endif
|
18
18
|
|
19
|
-
#ifdef HAVE_SYS_MNTTAB_H
|
19
|
+
#ifdef HAVE_SYS_MNTTAB_H // Solaris
|
20
20
|
|
21
21
|
#include <sys/mnttab.h>
|
22
22
|
#define MNTENT mnttab
|
@@ -25,7 +25,7 @@
|
|
25
25
|
#define END_MNT(F) fclose(F)
|
26
26
|
#define MOUNTFILE "/etc/mnttab"
|
27
27
|
|
28
|
-
|
28
|
+
// Ruby 1.9.x compatibility
|
29
29
|
#ifndef RSTRING_PTR
|
30
30
|
#define RSTRING_PTR(v) (RSTRING(v)->ptr)
|
31
31
|
#define RSTRING_LEN(v) (RSTRING(v)->len)
|
@@ -54,7 +54,7 @@ struct _ment {
|
|
54
54
|
#define END_MNT(F) end_mnt(F)
|
55
55
|
#define MOUNTFILE "getmntinfo"
|
56
56
|
|
57
|
-
#else
|
57
|
+
#else // Most flavors of UNIX
|
58
58
|
|
59
59
|
#ifdef HAVE_MNTENT_H
|
60
60
|
#include <mntent.h>
|
@@ -69,7 +69,7 @@ struct _ment {
|
|
69
69
|
|
70
70
|
#ifdef HAVE_GETMNTINFO
|
71
71
|
|
72
|
-
|
72
|
+
// This table comes from FreeBSD mount.c@1.105
|
73
73
|
static struct opt {
|
74
74
|
int o_opt;
|
75
75
|
const char *o_name;
|
@@ -102,7 +102,7 @@ static struct opt {
|
|
102
102
|
|
103
103
|
static FILE* start_mnt(const char *filename, const char *type)
|
104
104
|
{
|
105
|
-
return (FILE*)!0;
|
105
|
+
return (FILE*)!0; // Do nothing
|
106
106
|
}
|
107
107
|
|
108
108
|
static struct _ment* get_mnt(struct _ment* m)
|
@@ -111,7 +111,7 @@ static struct _ment* get_mnt(struct _ment* m)
|
|
111
111
|
|
112
112
|
if (m->max == 0) {
|
113
113
|
if ((m->max = getmntinfo(&(m->mntbufp), MNT_NOWAIT)) == 0) {
|
114
|
-
return NULL;
|
114
|
+
return NULL;
|
115
115
|
}
|
116
116
|
m->current = 0;
|
117
117
|
}
|
@@ -126,7 +126,7 @@ static struct _ment* get_mnt(struct _ment* m)
|
|
126
126
|
|
127
127
|
static void end_mnt(FILE* fp)
|
128
128
|
{
|
129
|
-
|
129
|
+
// Do nothing
|
130
130
|
}
|
131
131
|
|
132
132
|
#endif
|
@@ -143,50 +143,50 @@ static VALUE create_mount_object(struct MNTENT*);
|
|
143
143
|
* file system.
|
144
144
|
*/
|
145
145
|
static VALUE fs_stat(VALUE klass, VALUE v_path){
|
146
|
-
|
147
|
-
|
146
|
+
VALUE v_stat;
|
147
|
+
char* path = StringValuePtr(v_path);
|
148
148
|
|
149
149
|
#ifdef HAVE_STATVFS
|
150
|
-
|
150
|
+
struct statvfs fs;
|
151
151
|
|
152
|
-
|
153
|
-
|
152
|
+
if(statvfs(path, &fs) < 0)
|
153
|
+
rb_sys_fail("statvfs");
|
154
154
|
#else
|
155
|
-
|
156
|
-
|
157
|
-
|
155
|
+
struct mount mp;
|
156
|
+
struct statfs fs;
|
157
|
+
struct proc p;
|
158
158
|
|
159
|
-
|
160
|
-
|
159
|
+
if(VFS_STATFS(&mp, &fs, &p) < 0)
|
160
|
+
rb_sys_fail("VFS_STATFS");
|
161
161
|
#endif
|
162
162
|
|
163
|
-
|
163
|
+
v_stat = rb_funcall(cStat, rb_intern("new"), 0, 0);
|
164
164
|
|
165
|
-
|
165
|
+
rb_iv_set(v_stat, "@path", v_path);
|
166
166
|
|
167
167
|
// You gotta love OS X, right?
|
168
168
|
#ifdef __MACH__
|
169
|
-
|
169
|
+
rb_iv_set(v_stat, "@block_size", ULONG2NUM(fs.f_bsize/256));
|
170
170
|
#else
|
171
|
-
|
171
|
+
rb_iv_set(v_stat, "@block_size", ULONG2NUM(fs.f_bsize));
|
172
172
|
#endif
|
173
173
|
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
174
|
+
rb_iv_set(v_stat, "@fragment_size", ULONG2NUM(fs.f_frsize));
|
175
|
+
rb_iv_set(v_stat, "@blocks", ULONG2NUM(fs.f_blocks));
|
176
|
+
rb_iv_set(v_stat, "@blocks_free", ULONG2NUM(fs.f_bfree));
|
177
|
+
rb_iv_set(v_stat, "@blocks_available", ULONG2NUM(fs.f_bavail));
|
178
|
+
rb_iv_set(v_stat, "@files", ULONG2NUM(fs.f_files));
|
179
|
+
rb_iv_set(v_stat, "@files_free", ULONG2NUM(fs.f_ffree));
|
180
|
+
rb_iv_set(v_stat, "@files_available", ULONG2NUM(fs.f_favail));
|
181
|
+
rb_iv_set(v_stat, "@filesystem_id", ULONG2NUM(fs.f_fsid));
|
182
|
+
rb_iv_set(v_stat, "@flags", ULONG2NUM(fs.f_flag));
|
183
|
+
rb_iv_set(v_stat, "@name_max", ULONG2NUM(fs.f_namemax));
|
184
184
|
|
185
185
|
#ifdef HAVE_ST_F_BASETYPE
|
186
|
-
|
186
|
+
rb_iv_set(v_stat, "@base_type", rb_str_new2(fs.f_basetype));
|
187
187
|
#endif
|
188
188
|
|
189
|
-
|
189
|
+
return rb_obj_freeze(v_stat);
|
190
190
|
}
|
191
191
|
|
192
192
|
/* Convenient methods for converting bytes to kilobytes, megabytes or
|
@@ -200,7 +200,7 @@ static VALUE fs_stat(VALUE klass, VALUE v_path){
|
|
200
200
|
* Returns +fix+ in terms of kilobytes.
|
201
201
|
*/
|
202
202
|
static VALUE fixnum_to_kb(VALUE self){
|
203
|
-
|
203
|
+
return ULL2NUM(NUM2ULONG(self) / 1024);
|
204
204
|
}
|
205
205
|
|
206
206
|
/*
|
@@ -210,7 +210,7 @@ static VALUE fixnum_to_kb(VALUE self){
|
|
210
210
|
* Returns +fix+ in terms of megabytes.
|
211
211
|
*/
|
212
212
|
static VALUE fixnum_to_mb(VALUE self){
|
213
|
-
|
213
|
+
return ULL2NUM(NUM2ULONG(self) / 1048576);
|
214
214
|
}
|
215
215
|
|
216
216
|
/*
|
@@ -220,7 +220,7 @@ static VALUE fixnum_to_mb(VALUE self){
|
|
220
220
|
* Returns +fix+ in terms of gigabytes.
|
221
221
|
*/
|
222
222
|
static VALUE fixnum_to_gb(VALUE self){
|
223
|
-
|
223
|
+
return ULL2NUM(NUM2ULONG(self) / 1073741824);
|
224
224
|
}
|
225
225
|
|
226
226
|
/*
|
@@ -371,120 +371,122 @@ static VALUE fs_mount_point(VALUE klass, VALUE v_file){
|
|
371
371
|
}
|
372
372
|
|
373
373
|
void Init_filesystem(){
|
374
|
-
|
375
|
-
|
374
|
+
/* The toplevel namespace */
|
375
|
+
mSys = rb_define_module("Sys");
|
376
376
|
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
377
|
+
/* The Filesystem class serves an abstract base class. It's methods return
|
378
|
+
* objects of other types. Do not instantiate.
|
379
|
+
*/
|
380
|
+
cFilesys = rb_define_class_under(mSys, "Filesystem", rb_cObject);
|
381
381
|
|
382
|
-
|
383
|
-
|
382
|
+
/* Instances of this class are returned by the Filesystem.mount method */
|
383
|
+
cMount = rb_define_class_under(cFilesys, "Mount", rb_cObject);
|
384
384
|
|
385
|
-
|
386
|
-
|
385
|
+
/* Instances of this class are returned by the Filesystem.stat method */
|
386
|
+
cStat = rb_define_class_under(cFilesys, "Stat", rb_cObject);
|
387
387
|
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
388
|
+
/* Singleton methods */
|
389
|
+
rb_define_singleton_method(cFilesys, "mount_point", fs_mount_point, 1);
|
390
|
+
rb_define_singleton_method(cFilesys, "mounts", fs_mounts, 0);
|
391
|
+
rb_define_singleton_method(cFilesys, "stat", fs_stat, 1);
|
392
392
|
|
393
|
-
|
393
|
+
/* Filesystem::Mount accessors */
|
394
394
|
|
395
|
-
|
396
|
-
|
395
|
+
/* The name of the mounted resource */
|
396
|
+
rb_define_attr(cMount, "name", 1, 0);
|
397
397
|
|
398
|
-
|
399
|
-
|
398
|
+
/* The mount point/directory */
|
399
|
+
rb_define_attr(cMount, "mount_point", 1, 0);
|
400
400
|
|
401
|
-
|
402
|
-
|
401
|
+
/* The type of the file system mount, e.g. 'ufs', 'nfs', etc */
|
402
|
+
rb_define_attr(cMount, "mount_type", 1, 0);
|
403
403
|
|
404
|
-
|
405
|
-
|
404
|
+
/* A list of comma separated options for the mount, e.g. 'rw', etc */
|
405
|
+
rb_define_attr(cMount, "options", 1, 0);
|
406
406
|
|
407
|
-
|
408
|
-
|
407
|
+
/* The time the file system was mounted or nil if not supported */
|
408
|
+
rb_define_attr(cMount, "mount_time", 1, 0);
|
409
409
|
|
410
|
-
|
411
|
-
|
410
|
+
/* The dump frequency in days (or nil if not supported) */
|
411
|
+
rb_define_attr(cMount, "dump_frequency", 1, 0);
|
412
412
|
|
413
|
-
|
414
|
-
|
413
|
+
/* The pass number of the file system check or nil if not supported */
|
414
|
+
rb_define_attr(cMount, "pass_number", 1, 0);
|
415
415
|
|
416
|
-
|
416
|
+
/* Filesystem::Mount Aliases */
|
417
417
|
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
418
|
+
rb_define_alias(cMount, "fsname", "name");
|
419
|
+
rb_define_alias(cMount, "dir", "mount_point");
|
420
|
+
rb_define_alias(cMount, "opts", "options");
|
421
|
+
rb_define_alias(cMount, "passno", "pass_number");
|
422
|
+
rb_define_alias(cMount, "freq", "dump_frequency");
|
423
423
|
|
424
|
-
|
424
|
+
/* Filesystem::Stat accessors */
|
425
425
|
|
426
|
-
|
427
|
-
|
426
|
+
/* The path of the file system */
|
427
|
+
rb_define_attr(cStat, "path", 1, 0);
|
428
428
|
|
429
|
-
|
430
|
-
|
429
|
+
/* The preferred system block size */
|
430
|
+
rb_define_attr(cStat, "block_size", 1, 0);
|
431
431
|
|
432
|
-
|
433
|
-
|
432
|
+
/* The fragment size, i.e. fundamental file system block size */
|
433
|
+
rb_define_attr(cStat, "fragment_size", 1, 0);
|
434
434
|
|
435
|
-
|
436
|
-
|
435
|
+
/* The total number of +fragment_size+ blocks in the file system */
|
436
|
+
rb_define_attr(cStat, "blocks", 1, 0);
|
437
437
|
|
438
|
-
|
439
|
-
|
438
|
+
/* The total number of free blocks in the file system */
|
439
|
+
rb_define_attr(cStat, "blocks_free", 1, 0);
|
440
440
|
|
441
|
-
|
442
|
-
|
441
|
+
/* The number of free blocks available to unprivileged processes */
|
442
|
+
rb_define_attr(cStat, "blocks_available", 1, 0);
|
443
443
|
|
444
|
-
|
445
|
-
|
444
|
+
/* The total number of files/inodes that can be created */
|
445
|
+
rb_define_attr(cStat, "files", 1, 0);
|
446
446
|
|
447
|
-
|
448
|
-
|
447
|
+
/* The total number of free files/inodes on the file system */
|
448
|
+
rb_define_attr(cStat, "files_free", 1, 0);
|
449
449
|
|
450
|
-
|
451
|
-
|
450
|
+
/* The number of free files/inodes available to unprivileged processes */
|
451
|
+
rb_define_attr(cStat, "files_available", 1, 0);
|
452
452
|
|
453
|
-
|
454
|
-
|
453
|
+
/* The file system identifier */
|
454
|
+
rb_define_attr(cStat, "filesystem_id", 1, 0);
|
455
455
|
|
456
|
-
|
457
|
-
|
456
|
+
/* The file system type, e.g. UFS */
|
457
|
+
rb_define_attr(cStat, "base_type", 1, 0);
|
458
458
|
|
459
|
-
|
460
|
-
|
459
|
+
/* A bit mask of flags. See the <tt>Constants</tt> for a list of flags */
|
460
|
+
rb_define_attr(cStat, "flags", 1, 0);
|
461
461
|
|
462
|
-
|
463
|
-
|
462
|
+
/* The maximum length of a file name permitted on the file system */
|
463
|
+
rb_define_attr(cStat, "name_max", 1, 0);
|
464
464
|
|
465
|
-
|
465
|
+
// Constants
|
466
466
|
|
467
|
-
|
468
|
-
|
467
|
+
/* 0.3.4: The version of this library (a String) */
|
468
|
+
rb_define_const(cFilesys, "VERSION", rb_str_new2("0.3.4"));
|
469
469
|
|
470
|
-
|
471
|
-
|
470
|
+
/* 0x00000001: Read only file system */
|
471
|
+
rb_define_const(cStat, "RDONLY", INT2FIX(ST_RDONLY));
|
472
472
|
|
473
|
-
|
474
|
-
|
473
|
+
/* 0x00000002: File system does not support suid or sgid semantics */
|
474
|
+
rb_define_const(cStat, "NOSUID", INT2FIX(ST_NOSUID));
|
475
475
|
|
476
476
|
#ifdef ST_NOTRUNC
|
477
|
-
|
478
|
-
|
477
|
+
/* 0x00000003: File system does not truncate file names longer than +name_max+ */
|
478
|
+
rb_define_const(cStat, "NOTRUNC", INT2FIX(ST_NOTRUNC));
|
479
479
|
#endif
|
480
480
|
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
481
|
+
// Aliases
|
482
|
+
|
483
|
+
rb_define_alias(cStat, "inodes", "files");
|
484
|
+
rb_define_alias(cStat, "inodes_free", "files_free");
|
485
|
+
rb_define_alias(cStat, "inodes_available", "files_available");
|
486
|
+
|
487
|
+
// Convenient methods for Fixnum
|
485
488
|
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
rb_define_method(rb_cFixnum, "to_gb", fixnum_to_gb, 0);
|
489
|
+
rb_define_method(rb_cFixnum, "to_kb", fixnum_to_kb, 0);
|
490
|
+
rb_define_method(rb_cFixnum, "to_mb", fixnum_to_mb, 0);
|
491
|
+
rb_define_method(rb_cFixnum, "to_gb", fixnum_to_gb, 0);
|
490
492
|
}
|
data/sys-filesystem.gemspec
CHANGED
@@ -1,24 +1,24 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
3
|
+
Gem::Specification.new do |spec|
|
4
|
+
spec.name = 'sys-filesystem'
|
5
|
+
spec.version = '0.3.4'
|
6
|
+
spec.author = 'Daniel J. Berger'
|
7
|
+
spec.email = 'djberg96@gmail.com'
|
8
|
+
spec.homepage = 'http://www.rubyforge.org/projects/sysutils'
|
9
|
+
spec.platform = Gem::Platform::RUBY
|
10
|
+
spec.summary = 'A Ruby interface for getting file system information.'
|
11
|
+
spec.test_file = 'test/test_sys_filesystem.rb'
|
12
|
+
spec.has_rdoc = true
|
13
|
+
spec.files = Dir['**/*'].reject{ |f| f.include?('git') }
|
14
|
+
spec.license = 'Artistic 2.0'
|
15
15
|
|
16
|
-
|
17
|
-
|
16
|
+
spec.extra_rdoc_files = ['CHANGES', 'README', 'MANIFEST']
|
17
|
+
spec.rubyforge_project = 'sysutils'
|
18
18
|
|
19
|
-
|
19
|
+
spec.add_development_dependency('test-unit', '>= 2.1.1')
|
20
20
|
|
21
|
-
|
21
|
+
spec.description = <<-EOF
|
22
22
|
The sys-filesystem library provides an interface for gathering filesystem
|
23
23
|
information, such as disk space and mount point data.
|
24
24
|
EOF
|
data/test/test_sys_filesystem.rb
CHANGED
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift File.dirname(File.expand_path(__FILE__))
|
|
3
3
|
require 'rbconfig'
|
4
4
|
|
5
5
|
if Config::CONFIG['host_os'] =~ /mswin32|mingw|cygwin|windows|dos/i
|
6
|
-
|
6
|
+
require 'test_sys_filesystem_windows'
|
7
7
|
else
|
8
|
-
|
8
|
+
require 'test_sys_filesystem_unix'
|
9
9
|
end
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sys-filesystem
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 0
|
7
8
|
- 3
|
8
|
-
-
|
9
|
-
version: 0.3.
|
9
|
+
- 4
|
10
|
+
version: 0.3.4
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Daniel J. Berger
|
@@ -14,21 +15,23 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2010-
|
18
|
+
date: 2010-11-18 00:00:00 -07:00
|
18
19
|
default_executable:
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
22
|
name: test-unit
|
22
23
|
prerelease: false
|
23
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
24
26
|
requirements:
|
25
27
|
- - ">="
|
26
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 9
|
27
30
|
segments:
|
28
31
|
- 2
|
29
|
-
-
|
30
|
-
-
|
31
|
-
version: 2.
|
32
|
+
- 1
|
33
|
+
- 1
|
34
|
+
version: 2.1.1
|
32
35
|
type: :development
|
33
36
|
version_requirements: *id001
|
34
37
|
description: " The sys-filesystem library provides an interface for gathering filesystem\n information, such as disk space and mount point data.\n"
|
@@ -64,25 +67,27 @@ rdoc_options: []
|
|
64
67
|
require_paths:
|
65
68
|
- lib
|
66
69
|
required_ruby_version: !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
67
71
|
requirements:
|
68
72
|
- - ">="
|
69
73
|
- !ruby/object:Gem::Version
|
74
|
+
hash: 3
|
70
75
|
segments:
|
71
|
-
- 1
|
72
|
-
- 8
|
73
76
|
- 0
|
74
|
-
version:
|
77
|
+
version: "0"
|
75
78
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
|
+
none: false
|
76
80
|
requirements:
|
77
81
|
- - ">="
|
78
82
|
- !ruby/object:Gem::Version
|
83
|
+
hash: 3
|
79
84
|
segments:
|
80
85
|
- 0
|
81
86
|
version: "0"
|
82
87
|
requirements: []
|
83
88
|
|
84
89
|
rubyforge_project: sysutils
|
85
|
-
rubygems_version: 1.3.
|
90
|
+
rubygems_version: 1.3.7
|
86
91
|
signing_key:
|
87
92
|
specification_version: 3
|
88
93
|
summary: A Ruby interface for getting file system information.
|