From: nobu.nokada@... Date: 2002-04-17T11:56:55+09:00 Subject: Re: Help wanted for statvfs extension Hi, At Wed, 17 Apr 2002 11:31:05 +0900, nobu.nokada@softhome.net wrote: > [2 ruby-statvfs.tar.bz2 ] Sorry, some mistakes. --- statvfs.c- Wed Apr 17 11:24:17 2002 +++ statvfs.c Wed Apr 17 11:46:53 2002 @@ -57,5 +57,5 @@ file_s_statvfs(self, path) SafeStringValue(path); - if (statvfs(RSTRING(path)->ptr, &buf)) rb_sys_fail("statvfs"); + if (statvfs(RSTRING(path)->ptr, &buf)) rb_sys_fail(RSTRING(path)->ptr); return statvfs_new(&buf); } @@ -69,5 +69,5 @@ file_fstatvfs(self) GetOpenFile(self, fptr); - if (fstatvfs(fileno(fptr->f), &buf)) rb_sys_fail("fstatvfs"); + if (fstatvfs(fileno(fptr->f), &buf)) rb_sys_fail(fptr->path); return statvfs_new(&buf); } @@ -180,26 +180,32 @@ statvfs_inspect(self) struct statvfs *p = get_statvfs(self); static VALUE format; - VALUE s, args[13]; + VALUE flags = Qnil, args[14]; int i = 0; if (!format) { format = rb_str_new2("#<%s: bsize=%d frsize=%d \ -blocks=%d bfree=%d bavail=%d files=%d ffree=%d favail=%d fsid=%x flag=%x>"); +blocks=%d bfree=%d bavail=%d files=%d ffree=%d favail=%d \ +fsid=%#x flag=%#x%s namemax=%d>"); } args[i++] = format; args[i++] = rb_class_path(CLASS_OF(self)); - args[i++] = ULONG2NUM(get_statvfs(self)->f_bsize); - args[i++] = ULONG2NUM(get_statvfs(self)->f_frsize); - args[i++] = OFFT2NUM(get_statvfs(self)->f_blocks); - args[i++] = OFFT2NUM(get_statvfs(self)->f_bfree); - args[i++] = OFFT2NUM(get_statvfs(self)->f_bavail); - args[i++] = OFFT2NUM(get_statvfs(self)->f_files); - args[i++] = OFFT2NUM(get_statvfs(self)->f_ffree); - args[i++] = OFFT2NUM(get_statvfs(self)->f_favail); - args[i++] = ULONG2NUM(get_statvfs(self)->f_fsid); - args[i++] = ULONG2NUM(get_statvfs(self)->f_flag); - args[i++] = ULONG2NUM(get_statvfs(self)->f_namemax); - s = rb_f_sprintf(i, args); - return s; + args[i++] = ULONG2NUM(p->f_bsize); + args[i++] = ULONG2NUM(p->f_frsize); + args[i++] = OFFT2NUM(p->f_blocks); + args[i++] = OFFT2NUM(p->f_bfree); + args[i++] = OFFT2NUM(p->f_bavail); + args[i++] = OFFT2NUM(p->f_files); + args[i++] = OFFT2NUM(p->f_ffree); + args[i++] = OFFT2NUM(p->f_favail); + args[i++] = ULONG2NUM(p->f_fsid); + args[i++] = ULONG2NUM(p->f_flag); +#define addflagstr(str) \ + rb_str_cat2((NIL_P(flags) ? flags = rb_str_new2("(") : rb_str_cat2(flags, ",")), str) + if (p->f_flag & ST_RDONLY) addflagstr("RDONLY"); + if (p->f_flag & ST_NOSUID) addflagstr("NOSUID"); + if (!NIL_P(flags)) rb_str_cat2(flags, ")"); + args[i++] = flags; + args[i++] = ULONG2NUM(p->f_namemax); + return rb_f_sprintf(i, args); } -- Nobu Nakada