Allow CStructs to be created with nil members

This commit is contained in:
Brian Candler
2011-05-03 16:05:24 +01:00
parent 3f4c6c7235
commit 9d920ce4e8
2 changed files with 4 additions and 4 deletions

View File

@@ -96,7 +96,7 @@ class CStruct
if h.instance_of?(self.class) if h.instance_of?(self.class)
@attrs = h.to_hash.dup @attrs = h.to_hash.dup
else else
@attrs = self.class::DEFAULTS.dup @attrs = {}
h.each { |k,v| self[k] = v } if h h.each { |k,v| self[k] = v } if h
end end
end end
@@ -153,7 +153,7 @@ class CStruct
self::DEFAULTS[name] = default self::DEFAULTS[name] = default
define_method name do define_method name do
@attrs.fetch name @attrs[name]
end end
define_method "#{name}=" do |val| define_method "#{name}=" do |val|
@attrs.store name, val @attrs.store name, val
@@ -170,7 +170,7 @@ class CStruct
# Returns the packed binary representation of this structure # Returns the packed binary representation of this structure
def to_str def to_str
self.class::FIELDS.map { |key| self[key] }.pack(self.class::FORMAT) self.class::FIELDS.map { |key| self[key] || self.class::DEFAULTS[key] }.pack(self.class::FORMAT)
end end
def inspect def inspect

View File

@@ -40,7 +40,7 @@ module Netlink
end end
# Convert an interface index into name string, or nil if the # Convert an interface index into name string, or nil if the
# index is nil or empty string. Raises exception for unknown values. # index is nil or 0. Raises exception for unknown values.
# #
# nl = Netlink::Route::Socket.new # nl = Netlink::Route::Socket.new
# nl.routes(:family=>Socket::AF_INET) do |route| # nl.routes(:family=>Socket::AF_INET) do |route|