supplement 1.6
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
|