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
