size_t FileSystem::dir_size(fs_dir_t dir) { off_t off = dir_tell(dir); size_t size = 0; struct dirent *ent = new struct dirent; dir_rewind(dir); while (true) { int res = dir_read(dir, ent); if (res <= 0) { break; } size += 1; } dir_seek(dir, off); delete ent; return size; }
void FileSystem::dir_rewind(fs_dir_t dir) { // Note, the may not satisfy rewind on all filesystems dir_seek(dir, 0); }
/* * call-seq: * dir.pos( integer ) => integer * * Synonym for <code>Dir#seek</code>, but returns the position * parameter. * * d = Dir.new("testdir") #=> #<Dir:0x401b3c40> * d.read #=> "." * i = d.pos #=> 12 * d.read #=> ".." * d.pos = i #=> 12 * d.read #=> ".." */ static VALUE dir_set_pos(VALUE dir, VALUE pos) { dir_seek(dir, pos); return pos; }