s4

annotate mpsplit.rb @ 905:5acef432b1de

TD-class delimiter changed to :::
author HIROSE Yuuji <yuuji@gentei.org>
date Sun, 03 Jan 2021 14:44:56 +0900
parents 3565d93c2fb1
children
rev   line source
yuuji@0 1 #!/usr/bin/env ruby21
yuuji@0 2 # coding: binary
yuuji@0 3 require 'nkf'
yuuji@0 4 Encoding.default_external = Encoding::BINARY
yuuji@0 5 Encoding.default_internal = Encoding::BINARY
yuuji@0 6
yuuji@0 7 boundary="--"+ARGV[0] # +"\r\n"
yuuji@8 8 tmpdir=(ARGV[1] || "tmp").dup
yuuji@8 9 tmpdir.untaint
yuuji@8 10 test(?d, tmpdir) or Dir.mkdir(tmpdir)
yuuji@0 11 stream=STDIN.readlines.join
yuuji@0 12 stream.split(boundary)[1..-2].each do |x|
yuuji@0 13 header = x.sub(/\r\n\r\n.*/, "")
yuuji@0 14 name = header.scan(/\bname=([\"']?)(.*?)\1/)[0][1]
yuuji@0 15 body = x.sub(/.*?\r\n\r\n/m, "").sub(/\r\n$/, "")
yuuji@0 16 STDERR.printf("body[%s]=[%s]\n", name, body.length)
yuuji@0 17 if /filename=(['\"]?)(.*?)\1/ =~ header && $2 > ""
yuuji@0 18 fn = $2
yuuji@8 19 fn.untaint if File.dirname(fn)=="."
yuuji@8 20 open(File.expand_path(fn, tmpdir).untaint, "w") do |out|
yuuji@0 21 out.write body
yuuji@0 22 end
yuuji@11 23 ## printf("%s:filename=%s\n", name, fn)
yuuji@11 24 printf("%s:filename=%s\n", name, fn.unpack("H*")[0])
yuuji@0 25 elsif /name=(['\"]?)(.*?)\1/ =~ header
yuuji@0 26 v=$2
yuuji@11 27 printf("%s=%s\n", v, body.unpack("H*")[0])
yuuji@0 28 end
yuuji@0 29 end