supplement 1.6
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 +15 -0
- data/LICENSE +34 -0
- data/README +50 -0
- data/examples/teatimer +87 -0
- data/lib/Rakefile +32 -0
- data/lib/mkrf_conf +41 -0
- data/lib/supplement.c +1657 -0
- data/lib/supplement.h +83 -0
- data/lib/supplement/date.rb +53 -0
- data/lib/supplement/filesys.c +395 -0
- data/lib/supplement/filesys.h +35 -0
- data/lib/supplement/itimer.c +126 -0
- data/lib/supplement/itimer.h +17 -0
- data/lib/supplement/terminal.c +144 -0
- data/lib/supplement/terminal.h +21 -0
- data/lib/sync.c +34 -0
- data/lib/sync.h +13 -0
- metadata +78 -0
data/lib/supplement.h
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
/*
|
2
|
+
* supplement.h -- Simple Ruby Extensions
|
3
|
+
*/
|
4
|
+
|
5
|
+
|
6
|
+
#ifndef __SUPPELEMENT_H__
|
7
|
+
#define __SUPPELEMENT_H__
|
8
|
+
|
9
|
+
#if HAVE_HEADER_RUBY_H
|
10
|
+
#include <ruby.h>
|
11
|
+
#elif HAVE_HEADER_RUBY_RUBY_H
|
12
|
+
#include <ruby/ruby.h>
|
13
|
+
#endif
|
14
|
+
|
15
|
+
|
16
|
+
extern VALUE rb_obj_new_string( VALUE);
|
17
|
+
extern VALUE rb_obj_nil_if( VALUE, VALUE);
|
18
|
+
extern VALUE rb_krn_tap( VALUE);
|
19
|
+
extern VALUE rb_krn_tap_bang( VALUE);
|
20
|
+
|
21
|
+
extern VALUE rb_nil_notempty_p( VALUE);
|
22
|
+
extern VALUE rb_nil_each_line( VALUE);
|
23
|
+
|
24
|
+
extern VALUE rb_str_new_string( VALUE);
|
25
|
+
extern VALUE rb_str_notempty_p( VALUE);
|
26
|
+
extern VALUE rb_str_eat( int, VALUE *, VALUE);
|
27
|
+
extern VALUE rb_str_cut_bang( VALUE, VALUE);
|
28
|
+
#ifdef FEATURE_STRING_CLEAR
|
29
|
+
extern VALUE rb_str_clear( VALUE);
|
30
|
+
#endif
|
31
|
+
extern VALUE rb_str_head( int, VALUE *, VALUE);
|
32
|
+
extern VALUE rb_str_rest( int, VALUE *, VALUE);
|
33
|
+
extern VALUE rb_str_tail( int, VALUE *, VALUE);
|
34
|
+
#ifdef FEATURE_STRING_START_WITH
|
35
|
+
extern VALUE rb_str_start_with_p( VALUE, VALUE);
|
36
|
+
extern VALUE rb_str_end_with_p( VALUE, VALUE);
|
37
|
+
#endif
|
38
|
+
extern VALUE rb_str_starts_with_p( VALUE, VALUE);
|
39
|
+
extern VALUE rb_str_ends_with_p( VALUE, VALUE);
|
40
|
+
#ifdef FEATURE_STRING_ORD
|
41
|
+
extern VALUE rb_str_ord( VALUE);
|
42
|
+
#endif
|
43
|
+
extern VALUE rb_str_axe( int, VALUE *, VALUE);
|
44
|
+
|
45
|
+
extern VALUE rb_ary_notempty_p( VALUE);
|
46
|
+
extern VALUE rb_ary_indexes( VALUE);
|
47
|
+
extern VALUE rb_ary_pick( VALUE);
|
48
|
+
extern VALUE rb_ary_rpick( VALUE);
|
49
|
+
#ifdef FEATURE_ARRAY_INDEX_WITH_BLOCK
|
50
|
+
extern VALUE rb_ary_index( int, VALUE *, VALUE);
|
51
|
+
extern VALUE rb_ary_rindex( int, VALUE *, VALUE);
|
52
|
+
#endif
|
53
|
+
#ifdef FEATURE_ARRAY_SELECT_BANG
|
54
|
+
extern VALUE rb_ary_select_bang( VALUE);
|
55
|
+
#endif
|
56
|
+
|
57
|
+
extern VALUE rb_num_pos_p( VALUE);
|
58
|
+
extern VALUE rb_num_neg_p( VALUE);
|
59
|
+
extern VALUE rb_num_grammatical( VALUE, VALUE, VALUE);
|
60
|
+
extern VALUE rb_num_sqrt( VALUE);
|
61
|
+
extern VALUE rb_num_cbrt( VALUE);
|
62
|
+
|
63
|
+
extern VALUE rb_hash_notempty_p( VALUE);
|
64
|
+
|
65
|
+
extern VALUE rb_file_size( VALUE);
|
66
|
+
extern VALUE rb_file_flockb( int, VALUE *, VALUE);
|
67
|
+
extern VALUE rb_file_s_umask( int, VALUE *);
|
68
|
+
extern VALUE rb_dir_s_current( VALUE);
|
69
|
+
extern VALUE rb_dir_s_mkdir_bang( int, VALUE *);
|
70
|
+
extern VALUE rb_dir_entries_bang( VALUE);
|
71
|
+
extern VALUE rb_dir_chdir( VALUE);
|
72
|
+
|
73
|
+
extern VALUE rb_match_begin( int, VALUE *, VALUE);
|
74
|
+
extern VALUE rb_match_end( int, VALUE *, VALUE);
|
75
|
+
|
76
|
+
#ifdef FEATURE_THREAD_EXCLUSIVE
|
77
|
+
extern VALUE rb_thread_exclusive( void);
|
78
|
+
#endif
|
79
|
+
|
80
|
+
extern void Init_supplement( void);
|
81
|
+
|
82
|
+
#endif
|
83
|
+
|
@@ -0,0 +1,53 @@
|
|
1
|
+
#
|
2
|
+
# supplement/date.rb -- More Date methods
|
3
|
+
#
|
4
|
+
|
5
|
+
require "date"
|
6
|
+
|
7
|
+
class Date
|
8
|
+
|
9
|
+
def y ; year ; end
|
10
|
+
def m ; month ; end
|
11
|
+
def d ; day ; end
|
12
|
+
|
13
|
+
def to_a ; [ year, month, day ] ; end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
unless DateTime.method_defined? :to_time then
|
18
|
+
|
19
|
+
class Time
|
20
|
+
def to_time ; self ; end
|
21
|
+
def to_date
|
22
|
+
jd = Date.civil_to_jd year, mon, mday, Date::ITALY
|
23
|
+
hd = Date.jd_to_ajd jd, 0, 0
|
24
|
+
Date.new! hd, 0, Date::ITALY
|
25
|
+
end
|
26
|
+
def to_datetime
|
27
|
+
jd = DateTime.civil_to_jd year, mon, mday, DateTime::ITALY
|
28
|
+
fr = DateTime.time_to_day_fraction hour, min, [sec, 59].min
|
29
|
+
fr += (Rational usec, 86400*1000000000)
|
30
|
+
of = (Rational utc_offset, 86400)
|
31
|
+
hd = DateTime.jd_to_ajd jd, fr, of
|
32
|
+
DateTime.new! hd, of, DateTime::ITALY
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
class Date
|
37
|
+
def to_time ; Time.local year, mon, mday ; end
|
38
|
+
def to_date ; self ; end
|
39
|
+
def to_datetime ; DateTime.new! Date.jd_to_ajd(jd,0,0), @of, @sg ; end
|
40
|
+
end
|
41
|
+
|
42
|
+
class DateTime < Date
|
43
|
+
def to_time
|
44
|
+
(new_offset 0).instance_eval do
|
45
|
+
Time.utc year, mon, mday, hour, min, sec + sec_fraction
|
46
|
+
end.getlocal
|
47
|
+
end
|
48
|
+
def to_date ; Date.new! Date.jd_to_ajd(jd,0,0), 0, @sg ; end
|
49
|
+
def to_datetime ; self ; end
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
@@ -0,0 +1,395 @@
|
|
1
|
+
/*
|
2
|
+
* supplement/filesys.c -- File system tools
|
3
|
+
*/
|
4
|
+
|
5
|
+
#include "filesys.h"
|
6
|
+
|
7
|
+
#include <stdlib.h>
|
8
|
+
#ifdef __FSID_T_TYPE
|
9
|
+
/* Linux */
|
10
|
+
#include <sys/vfs.h>
|
11
|
+
#else
|
12
|
+
#include <sys/param.h>
|
13
|
+
#include <sys/mount.h>
|
14
|
+
#endif
|
15
|
+
|
16
|
+
|
17
|
+
|
18
|
+
static struct statfs *get_statfs( VALUE);
|
19
|
+
|
20
|
+
static ID id_mul;
|
21
|
+
|
22
|
+
/*
|
23
|
+
* Document-class: Filesys
|
24
|
+
*
|
25
|
+
* File systems. Mount and umount commands are on the TODO list.
|
26
|
+
*/
|
27
|
+
|
28
|
+
/*
|
29
|
+
* Document-class: Filesys::Stat
|
30
|
+
*
|
31
|
+
* Objects of class <code>Filesys::Stat</code> encapsulate common status
|
32
|
+
* information for <code>Filesys</code> objects. The information is
|
33
|
+
* recorded at the moment the <code>Filesys::Stat</code> object is
|
34
|
+
* created; changes made to the file after that point will not be
|
35
|
+
* reflected.
|
36
|
+
*
|
37
|
+
* Many of its attributes contain platform-specific values, and not all
|
38
|
+
* values are meaningful on all systems.
|
39
|
+
*/
|
40
|
+
|
41
|
+
VALUE
|
42
|
+
rb_fsstat_s_alloc( VALUE klass)
|
43
|
+
{
|
44
|
+
return Data_Wrap_Struct( klass, NULL, &free, (struct statfs *) NULL);
|
45
|
+
}
|
46
|
+
|
47
|
+
/*
|
48
|
+
* call-seq:
|
49
|
+
*
|
50
|
+
* Filesys::Stat.new( dir_name) => stat
|
51
|
+
*
|
52
|
+
* Create a Filesys::Stat object for the given file system.
|
53
|
+
*/
|
54
|
+
|
55
|
+
VALUE
|
56
|
+
rb_fsstat_init( VALUE obj, VALUE dname)
|
57
|
+
{
|
58
|
+
struct statfs st, *nst;
|
59
|
+
|
60
|
+
SafeStringValue( dname);
|
61
|
+
|
62
|
+
if (statfs( StringValueCStr( dname), &st) == -1)
|
63
|
+
rb_sys_fail( RSTRING_PTR(dname));
|
64
|
+
if (DATA_PTR(obj)) {
|
65
|
+
free( DATA_PTR(obj));
|
66
|
+
DATA_PTR(obj) = NULL;
|
67
|
+
}
|
68
|
+
nst = ALLOC(struct statfs);
|
69
|
+
*nst = st;
|
70
|
+
DATA_PTR(obj) = nst;
|
71
|
+
|
72
|
+
return Qnil;
|
73
|
+
}
|
74
|
+
|
75
|
+
/* :nodoc: */
|
76
|
+
VALUE
|
77
|
+
rb_fsstat_init_copy( VALUE copy, VALUE orig)
|
78
|
+
{
|
79
|
+
struct statfs *nst;
|
80
|
+
|
81
|
+
if (copy == orig)
|
82
|
+
return orig;
|
83
|
+
|
84
|
+
rb_check_frozen( copy);
|
85
|
+
if (!rb_obj_is_instance_of( orig, rb_obj_class( copy)))
|
86
|
+
rb_raise(rb_eTypeError, "wrong argument class");
|
87
|
+
if (DATA_PTR(copy)) {
|
88
|
+
free( DATA_PTR(copy));
|
89
|
+
DATA_PTR(copy) = NULL;
|
90
|
+
}
|
91
|
+
if (DATA_PTR(orig)) {
|
92
|
+
nst = ALLOC(struct statfs);
|
93
|
+
*nst = *(struct statfs *) DATA_PTR(orig);
|
94
|
+
DATA_PTR(copy) = nst;
|
95
|
+
}
|
96
|
+
|
97
|
+
return copy;
|
98
|
+
}
|
99
|
+
|
100
|
+
/* :nodoc: */
|
101
|
+
struct statfs *
|
102
|
+
get_statfs( VALUE self)
|
103
|
+
{
|
104
|
+
struct statfs *st;
|
105
|
+
Data_Get_Struct(self, struct statfs, st);
|
106
|
+
if (!st)
|
107
|
+
rb_raise( rb_eTypeError, "uninitialized Filesys::Stat");
|
108
|
+
return st;
|
109
|
+
}
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
/*
|
114
|
+
* call-seq:
|
115
|
+
* stat.type => fixnum
|
116
|
+
*
|
117
|
+
* Type of filesystem.
|
118
|
+
*/
|
119
|
+
|
120
|
+
VALUE
|
121
|
+
rb_fsstat_type( VALUE self)
|
122
|
+
{
|
123
|
+
return INT2NUM(get_statfs(self)->f_type);
|
124
|
+
}
|
125
|
+
|
126
|
+
/*
|
127
|
+
* call-seq:
|
128
|
+
* stat.bsize => fixnum
|
129
|
+
*
|
130
|
+
* Filesystem fragment size.
|
131
|
+
*/
|
132
|
+
|
133
|
+
VALUE
|
134
|
+
rb_fsstat_bsize( VALUE self)
|
135
|
+
{
|
136
|
+
return INT2NUM(get_statfs(self)->f_bsize);
|
137
|
+
}
|
138
|
+
|
139
|
+
/*
|
140
|
+
* call-seq:
|
141
|
+
* stat.blocks => fixnum
|
142
|
+
*
|
143
|
+
* Total data blocks in filesystem.
|
144
|
+
*/
|
145
|
+
|
146
|
+
VALUE
|
147
|
+
rb_fsstat_blocks( VALUE self)
|
148
|
+
{
|
149
|
+
return INT2NUM(get_statfs(self)->f_blocks);
|
150
|
+
}
|
151
|
+
|
152
|
+
/*
|
153
|
+
* call-seq:
|
154
|
+
* stat.bfree => fixnum
|
155
|
+
*
|
156
|
+
* Free blocks in filesystem.
|
157
|
+
*/
|
158
|
+
|
159
|
+
VALUE
|
160
|
+
rb_fsstat_bfree( VALUE self)
|
161
|
+
{
|
162
|
+
return INT2NUM(get_statfs(self)->f_bfree);
|
163
|
+
}
|
164
|
+
|
165
|
+
/*
|
166
|
+
* call-seq:
|
167
|
+
* stat.bavail => fixnum
|
168
|
+
*
|
169
|
+
* Free blocks avail to non-superuser.
|
170
|
+
*/
|
171
|
+
|
172
|
+
VALUE
|
173
|
+
rb_fsstat_bavail( VALUE self)
|
174
|
+
{
|
175
|
+
return INT2NUM(get_statfs(self)->f_bavail);
|
176
|
+
}
|
177
|
+
|
178
|
+
/*
|
179
|
+
* call-seq:
|
180
|
+
* stat.files => fixnum
|
181
|
+
*
|
182
|
+
* Total file nodes in filesystem.
|
183
|
+
*/
|
184
|
+
|
185
|
+
VALUE
|
186
|
+
rb_fsstat_files( VALUE self)
|
187
|
+
{
|
188
|
+
return INT2NUM(get_statfs(self)->f_files);
|
189
|
+
}
|
190
|
+
|
191
|
+
/*
|
192
|
+
* call-seq:
|
193
|
+
* stat.ffree => fixnum
|
194
|
+
*
|
195
|
+
* Free nodes avail to non-superuser.
|
196
|
+
*/
|
197
|
+
|
198
|
+
VALUE
|
199
|
+
rb_fsstat_ffree( VALUE self)
|
200
|
+
{
|
201
|
+
return INT2NUM(get_statfs(self)->f_ffree);
|
202
|
+
}
|
203
|
+
|
204
|
+
|
205
|
+
/*
|
206
|
+
* call-seq:
|
207
|
+
* stat.fsid => ary
|
208
|
+
*
|
209
|
+
* Filesystem id; array of 2 integers.
|
210
|
+
*/
|
211
|
+
|
212
|
+
#ifdef __FSID_T_TYPE
|
213
|
+
/* Linux */
|
214
|
+
#define FSID_val __val
|
215
|
+
#else
|
216
|
+
#define FSID_val val
|
217
|
+
#endif
|
218
|
+
|
219
|
+
VALUE
|
220
|
+
rb_fsstat_fsid( VALUE self)
|
221
|
+
{
|
222
|
+
struct statfs *s;
|
223
|
+
VALUE r;
|
224
|
+
|
225
|
+
s = get_statfs( self);
|
226
|
+
r = rb_ary_new3( 2,
|
227
|
+
INT2NUM(s->f_fsid.FSID_val[0]),
|
228
|
+
INT2NUM(s->f_fsid.FSID_val[1]));
|
229
|
+
return r;
|
230
|
+
}
|
231
|
+
|
232
|
+
|
233
|
+
/*
|
234
|
+
* call-seq:
|
235
|
+
* stat.bytes => fixnum
|
236
|
+
*
|
237
|
+
* Total data bytes in filesystem.
|
238
|
+
*/
|
239
|
+
|
240
|
+
VALUE
|
241
|
+
rb_fsstat_bytes( VALUE self)
|
242
|
+
{
|
243
|
+
struct statfs *s;
|
244
|
+
|
245
|
+
s = get_statfs( self);
|
246
|
+
return rb_funcall( INT2NUM(s->f_blocks), id_mul, 1, INT2NUM(s->f_bsize));
|
247
|
+
}
|
248
|
+
|
249
|
+
/*
|
250
|
+
* call-seq:
|
251
|
+
* stat.free => num
|
252
|
+
*
|
253
|
+
* Free bytes in filesystem.
|
254
|
+
*/
|
255
|
+
|
256
|
+
VALUE
|
257
|
+
rb_fsstat_free( VALUE self)
|
258
|
+
{
|
259
|
+
struct statfs *s;
|
260
|
+
|
261
|
+
s = get_statfs( self);
|
262
|
+
return rb_funcall( INT2NUM(s->f_bfree), id_mul, 1, INT2NUM(s->f_bsize));
|
263
|
+
}
|
264
|
+
|
265
|
+
/*
|
266
|
+
* call-seq:
|
267
|
+
* stat.avail => num
|
268
|
+
*
|
269
|
+
* Free bytes avail to non-superuser.
|
270
|
+
*/
|
271
|
+
|
272
|
+
VALUE
|
273
|
+
rb_fsstat_avail( VALUE self)
|
274
|
+
{
|
275
|
+
struct statfs *s;
|
276
|
+
|
277
|
+
s = get_statfs( self);
|
278
|
+
return rb_funcall( INT2NUM(s->f_bavail), id_mul, 1, INT2NUM(s->f_bsize));
|
279
|
+
}
|
280
|
+
|
281
|
+
|
282
|
+
/*
|
283
|
+
* call-seq:
|
284
|
+
* stat.pfree => fixnum
|
285
|
+
*
|
286
|
+
* Free percentage in filesystem.
|
287
|
+
*/
|
288
|
+
|
289
|
+
VALUE
|
290
|
+
rb_fsstat_pfree( VALUE self)
|
291
|
+
{
|
292
|
+
struct statfs *s;
|
293
|
+
|
294
|
+
s = get_statfs( self);
|
295
|
+
return rb_float_new( 100.0 * s->f_bfree / s->f_blocks);
|
296
|
+
}
|
297
|
+
|
298
|
+
/*
|
299
|
+
* call-seq:
|
300
|
+
* stat.pavail => fixnum
|
301
|
+
*
|
302
|
+
* Free percentage avail to non-superuser.
|
303
|
+
*/
|
304
|
+
|
305
|
+
VALUE
|
306
|
+
rb_fsstat_pavail( VALUE self)
|
307
|
+
{
|
308
|
+
struct statfs *s;
|
309
|
+
|
310
|
+
s = get_statfs( self);
|
311
|
+
return rb_float_new( 100.0 * s->f_bavail / s->f_blocks);
|
312
|
+
}
|
313
|
+
|
314
|
+
|
315
|
+
/*
|
316
|
+
* call-seq:
|
317
|
+
* stat.inspect => string
|
318
|
+
*
|
319
|
+
* Produce a nicely formatted description of <i>stat</i> with all available
|
320
|
+
* information.
|
321
|
+
*/
|
322
|
+
|
323
|
+
VALUE
|
324
|
+
rb_fsstat_inspect( VALUE self)
|
325
|
+
{
|
326
|
+
VALUE str;
|
327
|
+
int i, m;
|
328
|
+
static const struct {
|
329
|
+
const char *name;
|
330
|
+
VALUE (*func)(VALUE);
|
331
|
+
} member[] = {
|
332
|
+
{ "type", &rb_fsstat_type },
|
333
|
+
{ "bsize", &rb_fsstat_bsize },
|
334
|
+
{ "blocks", &rb_fsstat_blocks},
|
335
|
+
{ "bfree", &rb_fsstat_bfree },
|
336
|
+
{ "bavail", &rb_fsstat_bavail},
|
337
|
+
{ "files", &rb_fsstat_files },
|
338
|
+
{ "ffree", &rb_fsstat_ffree },
|
339
|
+
{ "fsid", &rb_fsstat_fsid }
|
340
|
+
};
|
341
|
+
|
342
|
+
str = rb_str_buf_new2("#<");
|
343
|
+
rb_str_buf_cat2(str, rb_obj_classname( self));
|
344
|
+
rb_str_buf_cat2(str, " ");
|
345
|
+
|
346
|
+
m = sizeof(member) / sizeof(member[0]);
|
347
|
+
for (i = 0; i < m; i++) {
|
348
|
+
VALUE v;
|
349
|
+
|
350
|
+
if (i > 0)
|
351
|
+
rb_str_buf_cat2( str, ", ");
|
352
|
+
rb_str_buf_cat2( str, member[i].name);
|
353
|
+
rb_str_buf_cat2( str, "=");
|
354
|
+
rb_str_append( str, rb_inspect( (*member[i].func)( self)));
|
355
|
+
}
|
356
|
+
rb_str_buf_cat2( str, ">");
|
357
|
+
OBJ_INFECT( str, self);
|
358
|
+
|
359
|
+
return str;
|
360
|
+
}
|
361
|
+
|
362
|
+
|
363
|
+
|
364
|
+
void Init_filesys( void)
|
365
|
+
{
|
366
|
+
VALUE rb_cFilesys;
|
367
|
+
VALUE rb_cFilesysStat;
|
368
|
+
|
369
|
+
rb_cFilesys = rb_define_class( "Filesys", rb_cObject);
|
370
|
+
|
371
|
+
rb_cFilesysStat = rb_define_class_under( rb_cFilesys, "Stat", rb_cObject);
|
372
|
+
rb_define_alloc_func( rb_cFilesysStat, rb_fsstat_s_alloc);
|
373
|
+
rb_define_method( rb_cFilesysStat, "initialize", rb_fsstat_init, 1);
|
374
|
+
rb_define_method( rb_cFilesysStat, "initialize_copy", rb_fsstat_init_copy, 1);
|
375
|
+
|
376
|
+
rb_define_method( rb_cFilesysStat, "type", rb_fsstat_type , 0);
|
377
|
+
rb_define_method( rb_cFilesysStat, "bsize", rb_fsstat_bsize , 0);
|
378
|
+
rb_define_method( rb_cFilesysStat, "blocks", rb_fsstat_blocks, 0);
|
379
|
+
rb_define_method( rb_cFilesysStat, "bfree", rb_fsstat_bfree , 0);
|
380
|
+
rb_define_method( rb_cFilesysStat, "bavail", rb_fsstat_bavail, 0);
|
381
|
+
rb_define_method( rb_cFilesysStat, "files", rb_fsstat_files , 0);
|
382
|
+
rb_define_method( rb_cFilesysStat, "ffree", rb_fsstat_ffree , 0);
|
383
|
+
rb_define_method( rb_cFilesysStat, "fsid", rb_fsstat_fsid , 0);
|
384
|
+
|
385
|
+
rb_define_method( rb_cFilesysStat, "bytes", rb_fsstat_bytes, 0);
|
386
|
+
rb_define_method( rb_cFilesysStat, "free", rb_fsstat_free , 0);
|
387
|
+
rb_define_method( rb_cFilesysStat, "avail", rb_fsstat_avail, 0);
|
388
|
+
rb_define_method( rb_cFilesysStat, "pfree", rb_fsstat_pfree , 0);
|
389
|
+
rb_define_method( rb_cFilesysStat, "pavail", rb_fsstat_pavail, 0);
|
390
|
+
|
391
|
+
rb_define_method( rb_cFilesysStat, "inspect", rb_fsstat_inspect, 0);
|
392
|
+
|
393
|
+
id_mul = rb_intern( "*");
|
394
|
+
}
|
395
|
+
|