- awk "
- /--$1/ {st=1};
- st==2 {print \$0};
- /$1--/ {st=0};
- /^\\r$/ && st==1 {st=2};
- " | head -c -2 | head -c $((128*1024))
- # Remove trailing ^M's that come with CGI
- # Limit size to 128K
+ bnd="${CONTENT_TYPE/*boundary\=/}"
+ awk -v "want=$1" -v "bnd=$bnd" '
+ BEGIN { RS="\r\n" }
+
+ # reset based on boundaries
+ $0 == "--"bnd"" { st=1; next; }
+ $0 == "--"bnd"--" { st=0; next; }
+ $0 == "--"bnd"--\r" { st=0; next; }
+
+ # search for wanted file
+ st == 1 && $0 ~ "^Content-Disposition:.* name=\""want"\"" { st=2; next; }
+ st == 1 && $0 == "" { st=9; next; }
+
+ # wait for newline, then start printing
+ st == 2 && $0 == "" { st=3; next; }
+ st == 3 { print $0 }
+ ' | head -c $((128*1024)) # Limit size to 128K