def self.from_buffer( buffer )
flags = buffer.read_long
type = buffer.read_byte
size = buffer.read_int64 if ( flags & F_SIZE ) != 0
owner = buffer.read_string if ( flags & F_OWNERGROUP ) != 0
group = buffer.read_string if ( flags & F_OWNERGROUP ) != 0
permissions = buffer.read_long if ( flags & F_PERMISSIONS ) != 0
if ( flags & F_ACCESSTIME ) != 0
atime = buffer.read_int64
atime_nseconds = buffer.read_long if ( flags & F_SUBSECOND_TIMES ) != 0
end
if ( flags & F_CREATETIME ) != 0
ctime = buffer.read_int64
ctime_nseconds = buffer.read_long if ( flags & F_SUBSECOND_TIMES ) != 0
end
if ( flags & F_MODIFYTIME ) != 0
mtime = buffer.read_int64
mtime_nseconds = buffer.read_long if ( flags & F_SUBSECOND_TIMES ) != 0
end
if ( flags & F_ACL ) != 0
acl_buf = buffers.reader( buffer.read_string )
acl = []
acl_buf.read_long.times do
acl << ACL.new( acl_buf.read_long,
acl_buf.read_long,
acl_buf.read_long,
acl_buf.read_string )
end
end
if ( flags & F_EXTENDED ) != 0
extended = Hash.new
buffer.read_long.times do
extended[ buffer.read_string ] = buffer.read_string
end
end
new( type, size, owner, group, permissions, atime, atime_nseconds,
ctime, ctime_nseconds, mtime, mtime_nseconds, acl, extended )
end