def parse
return nil unless setup_parse
fast_forward_to_first_boundary
loop do
head, filename, content_type, name, body =
get_current_head_and_filename_and_content_type_and_name_and_body
if i = @buf.index(rx)
body << @buf.slice!(0, i)
@buf.slice!(0, @boundary_size+2)
@content_length = -1 if $1 == "--"
end
filename, data = get_data(filename, body, content_type, name, head)
Utils.normalize_params(@params, name, data) unless data.nil?
break if (@buf.empty? && $1 != EOL) || @content_length == -1
end
@io.rewind
@params
end