]> git.plutz.net Git - cgilite/blobdiff - file.sh
minor optimisation
[cgilite] / file.sh
diff --git a/file.sh b/file.sh
index 90e8f9c91d4b339aba048542c3c7ea453955c94d..82eefae0af0298b09a64261913947d0622752aba 100755 (executable)
--- a/file.sh
+++ b/file.sh
@@ -1,4 +1,4 @@
-#!/bin/zsh
+#!/bin/sh
 
 # Copyright 2016 - 2018 Paul Hänsch
 #
@@ -17,6 +17,9 @@
 # You should have received a copy of the GNU Affero General Public License
 # along with cgilite.  If not, see <http://www.gnu.org/licenses/>. 
 
+[ -n "$include_fileserve" ] && return 0
+include_fileserve="$0"
+
 file_type(){
   case ${1##*.} in
     html|html) printf 'text/html';;
@@ -37,14 +40,14 @@ file_type(){
 }
 
 FILE(){
-  unset range file_size file_date http_date cachedate
+  local file file_size file_date http_date cachedate range
   file="$1"
 
   if ! [ -f "$file" ]; then
-    printf 'Status: 404 Not Found\r\n\r\n'
+    printf 'Content-Length: 0\r\nStatus: 404 Not Found\r\n\r\n'
     exit 0
   elif ! [ -r "$file" ]; then
-    printf 'Status: 403 Forbidden\r\n\r\n'
+    printf 'Content-Length: 0\r\nStatus: 403 Forbidden\r\n\r\n'
     exit 0
   fi
 
@@ -63,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;')"
@@ -79,6 +82,7 @@ FILE(){
   if [ "$file_date" -lt "$cachedate" ] 2>&-; then
     printf '%s: %s\r\n' \
       Status '304 Not Modified' \
+      Content-Length 0 \
       Last-Modified "$http_date"
     printf '\r\n'
   
@@ -105,11 +109,12 @@ FILE(){
   
     [ "$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' \
       Status "216 Range Not Satisfiable" \
+      Content-Length 0 \
       Content-Range \*/${file_size}
     printf '\r\n'
   fi