ext/generate_structs.rb in pkcs11-0.2.7 vs ext/generate_structs.rb in pkcs11-0.3.0
- old
+ new
@@ -109,36 +109,47 @@
attr.mark = true
end
end
# find string attributes belonging together
struct.attrs.select{|attr| ['CK_BYTE_PTR', 'CK_VOID_PTR', 'CK_UTF8CHAR_PTR', 'CK_CHAR_PTR'].include?(attr.type) }.each do |attr|
+ enco = case attr.type
+ when 'CK_UTF8CHAR_PTR' then 'utf8'
+ when 'CK_CHAR_PTR' then 'usascii'
+ when 'CK_BYTE_PTR', 'CK_VOID_PTR' then 'ascii8bit'
+ else raise "unexpected type #{attr.type.inspect}"
+ end
if len_attr=struct.attr_by_sign("CK_ULONG #{attr.name.gsub(/^p([A-Z])/){ "ul"+$1 }}Len")
- fd_impl.puts "PKCS11_IMPLEMENT_STRING_PTR_LEN_ACCESSOR(#{struct.name}, #{attr.name}, #{len_attr.name});"
+ fd_impl.puts "PKCS11_IMPLEMENT_STRING_PTR_LEN_ACCESSOR(#{struct.name}, #{attr.name}, #{len_attr.name}, #{enco});"
fd_def.puts "PKCS11_DEFINE_MEMBER(#{struct.name}, #{attr.name});"
- fd_doc.puts"# @return [String, nil] accessor for #{attr.name} and #{len_attr.name}\nattr_accessor :#{attr.name}"
+ fd_doc.puts"# @return [#{enco.upcase}-String, nil] accessor for #{attr.name} and #{len_attr.name}\nattr_accessor :#{attr.name}"
len_attr.mark = true
elsif attr.name=='pData' && (len_attr = struct.attr_by_sign("CK_ULONG length") || struct.attr_by_sign("CK_ULONG ulLen"))
- fd_impl.puts "PKCS11_IMPLEMENT_STRING_PTR_LEN_ACCESSOR(#{struct.name}, #{attr.name}, #{len_attr.name});"
+ fd_impl.puts "PKCS11_IMPLEMENT_STRING_PTR_LEN_ACCESSOR(#{struct.name}, #{attr.name}, #{len_attr.name}, #{enco});"
fd_def.puts "PKCS11_DEFINE_MEMBER(#{struct.name}, #{attr.name});"
- fd_doc.puts"# @return [String, nil] accessor for #{attr.name} and #{len_attr.name}\nattr_accessor :#{attr.name}"
+ fd_doc.puts"# @return [#{enco.upcase}-String, nil] accessor for #{attr.name} and #{len_attr.name}\nattr_accessor :#{attr.name}"
len_attr.mark = true
else
- fd_impl.puts "PKCS11_IMPLEMENT_STRING_PTR_ACCESSOR(#{struct.name}, #{attr.name});"
+ fd_impl.puts "PKCS11_IMPLEMENT_STRING_PTR_ACCESSOR(#{struct.name}, #{attr.name}, #{enco});"
fd_def.puts "PKCS11_DEFINE_MEMBER(#{struct.name}, #{attr.name});"
- fd_doc.puts"# @return [String, nil] accessor for #{attr.name}\nattr_accessor :#{attr.name}"
+ fd_doc.puts"# @return [#{enco.upcase}-String, nil] accessor for #{attr.name}\nattr_accessor :#{attr.name}"
end
attr.mark = true
end
# standalone attributes
struct.attrs.reject{|a| a.mark }.each do |attr|
if attr.qual
# Attributes with qualifier
+ enco = case attr.type
+ when 'CK_BYTE' then 'ascii8bit'
+ when 'CK_UTF8CHAR' then 'utf8'
+ when 'CK_CHAR' then 'usascii'
+ end
case attr.type
when 'CK_BYTE', 'CK_UTF8CHAR', 'CK_CHAR'
- fd_impl.puts "PKCS11_IMPLEMENT_STRING_ACCESSOR(#{struct.name}, #{attr.name});"
+ fd_impl.puts "PKCS11_IMPLEMENT_STRING_ACCESSOR(#{struct.name}, #{attr.name}, #{enco});"
fd_def.puts "PKCS11_DEFINE_MEMBER(#{struct.name}, #{attr.name});"
- fd_doc.puts"# @return [String] accessor for #{attr.name} (max #{attr.qual} bytes)\nattr_accessor :#{attr.name}"
+ fd_doc.puts"# @return [#{enco.upcase}-String] accessor for #{attr.name} (max #{attr.qual} bytes)\nattr_accessor :#{attr.name}"
else
fd_impl.puts "/* unimplemented attr #{attr.type} #{attr.name} #{attr.qual} */"
fd_def.puts "/* unimplemented attr #{attr.type} #{attr.name} #{attr.qual} */"
end
else