The date_str variable used for formatting both Date and Last-Modified headers.
Now it only used for Date header and Last-Modified is stored in 
globals.last_mod_date near to ETag

Signed-off-by: Sergey Ponomarev <[email protected]>
---
 networking/httpd.c | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/networking/httpd.c b/networking/httpd.c
index 3cad28921..5a3de2043 100644
--- a/networking/httpd.c
+++ b/networking/httpd.c
@@ -314,6 +314,9 @@ static const char DEFAULT_PATH_HTTPD_CONF[] ALIGN1 = "/etc";
 static const char HTTPD_CONF[] ALIGN1 = "httpd.conf";
 static const char HTTP_200[] ALIGN1 = "HTTP/1.1 200 OK\r\n";
 static const char index_html[] ALIGN1 = "index.html";
+#if ENABLE_FEATURE_HTTPD_DATE || ENABLE_FEATURE_HTTPD_LAST_MODIFIED
+       static const char RFC1123FMT[] ALIGN1 = "%a, %d %b %Y %H:%M:%S GMT";
+#endif
 
 typedef struct has_next_ptr {
        struct has_next_ptr *next;
@@ -492,6 +495,11 @@ struct globals {
 #if ENABLE_FEATURE_HTTPD_ETAG
        char etag[sizeof("'%llx-%llx'") + 2 * sizeof(long long)*3];
 #endif
+#if ENABLE_FEATURE_HTTPD_LAST_MODIFIED
+       /* Last-Modified header.
+        * Fixed size 29-byte string. Example: Sun, 06 Nov 1994 08:49:37 GMT */
+       char last_mod_date[40]; /* using a bit larger buffer to paranoia 
reasons */
+#endif
 #if ENABLE_FEATURE_HTTPD_ERROR_PAGES
        const char *http_error_page[ARRAY_SIZE(http_response_type)];
 #endif
@@ -1070,8 +1078,7 @@ static void log_and_exit(void)
  */
 static void send_headers(unsigned responseNum)
 {
-#if ENABLE_FEATURE_HTTPD_DATE || ENABLE_FEATURE_HTTPD_LAST_MODIFIED
-       static const char RFC1123FMT[] ALIGN1 = "%a, %d %b %Y %H:%M:%S GMT";
+#if ENABLE_FEATURE_HTTPD_DATE
        /* Fixed size 29-byte string. Example: Sun, 06 Nov 1994 08:49:37 GMT */
        char date_str[40]; /* using a bit larger buffer to paranoia reasons */
        struct tm tm;
@@ -1172,9 +1179,6 @@ static void send_headers(unsigned responseNum)
 #endif
 
        if (file_size != -1) {    /* file */
-#if ENABLE_FEATURE_HTTPD_LAST_MODIFIED
-               strftime(date_str, sizeof(date_str), RFC1123FMT, 
gmtime_r(&last_mod, &tm));
-#endif
 #if ENABLE_FEATURE_HTTPD_RANGES
                if (responseNum == HTTP_PARTIAL_CONTENT) {
                        len += sprintf(iobuf + len,
@@ -1234,7 +1238,7 @@ static void send_headers(unsigned responseNum)
         */
                        "Content-Length: %"OFF_FMT"u\r\n",
 #if ENABLE_FEATURE_HTTPD_LAST_MODIFIED
-                               date_str,
+                               G.last_mod_date,
 #endif
 #if ENABLE_FEATURE_HTTPD_ETAG
                                G.etag,
@@ -1734,6 +1738,9 @@ static NOINLINE void send_file_and_exit(const char *url, 
int what)
        char *suffix;
        int fd;
        ssize_t count;
+#if ENABLE_FEATURE_HTTPD_LAST_MODIFIED
+       struct tm tm;
+#endif
 
        if (content_gzip) {
                /* does <url>.gz exist? Then use it instead */
@@ -1763,6 +1770,10 @@ static NOINLINE void send_file_and_exit(const char *url, 
int what)
                        send_headers_and_exit(HTTP_NOT_FOUND);
                log_and_exit();
        }
+#if ENABLE_FEATURE_HTTPD_LAST_MODIFIED
+       /* Generate Last-Modified header */
+       strftime(G.last_mod_date, sizeof(G.last_mod_date), RFC1123FMT, 
gmtime_r(&last_mod, &tm));
+#endif
 #if ENABLE_FEATURE_HTTPD_ETAG
        /* ETag is "hex(last_mod)-hex(file_size)" e.g. "5e132e20-417" */
        sprintf(G.etag, "\"%llx-%llx\"", (unsigned long long)last_mod, 
(unsigned long long)file_size);
-- 
2.27.0

_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to