X-Git-Url: http://git.plutz.net/?p=cgilite;a=blobdiff_plain;f=file.sh;h=b6118f522d8b31d4fa0b19ec42226ab263b705cf;hp=06f28d02f5640abfbfd560641348e8c8e8cd6e22;hb=e63a06bdd89bd5c3cb7232f3a5b6bf4a1f51493b;hpb=595fbc514d410ccdd46a81b8736d3711ac1ca7fe diff --git a/file.sh b/file.sh index 06f28d0..b6118f5 100755 --- a/file.sh +++ b/file.sh @@ -1,4 +1,4 @@ -#!/bin/zsh +#!/bin/sh # Copyright 2016 - 2018 Paul Hänsch # @@ -40,8 +40,8 @@ file_type(){ } FILE(){ - unset range file_size file_date http_date cachedate - file="$1" + local file file_size file_date http_date cachedate range mime + file="$1" mime="$2" if ! [ -f "$file" ]; then printf 'Content-Length: 0\r\nStatus: 404 Not Found\r\n\r\n' @@ -66,7 +66,7 @@ FILE(){ s;^[^ ]+ (...) ([0-9]) (..:..:..) ([0-9]{4})$;\4-\1-\2 \3;; s;Jan;01;; s;Feb;02;; s;Mar;03;; s;Apr;04;; s;May;05;; s;Jun;06;; s;Jul;07;; s;Aug;08;; s;Sep;09;; s;Oct;10;; s;Nov;11;; s;Dec;12;;' \ - | xargs -0 date +%s -ud 2>&- + | xargs -r0 date +%s -ud 2>&- )" range="$(HEADER Range |sed -nr 's;^bytes=([0-9]+-[0-9]*|-[0-9]+)$;\1;p;q;')" @@ -91,7 +91,7 @@ FILE(){ Status "200 OK" \ Accept-Ranges bytes \ Last-Modified "$http_date" \ - Content-Type $(file_type "$file") \ + Content-Type "${mime:-$(file_type "$file")}" \ Content-Length $file_size printf '\r\n' @@ -102,14 +102,14 @@ FILE(){ Status "206 Partial Content" \ Accept-Ranges bytes \ Last-Modified "$http_date" \ - Content-Type $(file_type "$file") \ + Content-Type "${mime:-$(file_type "$file")}" \ Content-Range "bytes ${range}/${file_size}" \ Content-Length "$((${range#*-} - ${range%-*} + 1))" printf '\r\n' [ "$REQUEST_METHOD" != HEAD ] \ && tail -c+$((${range%-*} + 1)) "$file" \ - | head -c "$((${range#*-} - ${range%-*} + 1))" + | head -c "$((${range#*-} - ${range%-*} + 1))" elif [ "${range%-*}" -gt "${range#*-}" ]; then printf '%s: %s\r\n' \