annotate mpsplit.rb @ 904:0352ff0fb37f
Suppress user.name update for unchanged values, which takes a lot time.
author |
HIROSE Yuuji <yuuji@gentei.org> |
date |
Sun, 03 Jan 2021 13:37:20 +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
|