Commit 3a9a9c7a authored by Marko Mikulicic's avatar Marko Mikulicic Committed by Sergey Lyubka

Enable printf format warnings for mg_printf

    PUBLISHED_FROM=61a52651a2542cb89b155623781a5fcbf64779f3
parent 13238b1a
...@@ -4448,20 +4448,23 @@ static void mg_send_http_file2(struct mg_connection *nc, const char *path, ...@@ -4448,20 +4448,23 @@ static void mg_send_http_file2(struct mg_connection *nc, const char *path,
gmt_time_string(last_modified, sizeof(last_modified), &st->st_mtime); gmt_time_string(last_modified, sizeof(last_modified), &st->st_mtime);
mime_type = get_mime_type(path, "text/plain", opts); mime_type = get_mime_type(path, "text/plain", opts);
/* /*
* breaking up printing in three separate mg_printf invocations * Content length casted to size_t because:
* otherwise crashes inside newlib on ESP8266. * 1) that's the maximum buffer size anyway
* Not a big performance penalty on desktop. * 2) ESP8266 RTOS SDK newlib vprintf cannot contain a 64bit arg at non-last
* position
* TODO(mkm): fix ESP8266 RTOS SDK
*/ */
mg_printf(nc, mg_printf(nc,
"HTTP/1.1 %d %s\r\n" "HTTP/1.1 %d %s\r\n"
"Date: %s\r\n" "Date: %s\r\n"
"Last-Modified: %s\r\n" "Last-Modified: %s\r\n"
"Accept-Ranges: bytes\r\n" "Accept-Ranges: bytes\r\n"
"Content-Type: %.*s\r\n", "Content-Type: %.*s\r\n"
"Content-Length: %" SIZE_T_FMT
"\r\n"
"%sEtag: %s\r\n\r\n",
status_code, status_message, current_time, last_modified, status_code, status_message, current_time, last_modified,
(int) mime_type.len, mime_type.p); (int) mime_type.len, mime_type.p, (size_t) cl, range, etag);
mg_printf(nc, "Content-Length: %" INT64_FMT "\r\n", cl);
mg_printf(nc, "%sEtag: %s\r\n\r\n", range, etag);
nc->proto_data = (void *) dp; nc->proto_data = (void *) dp;
dp->cl = cl; dp->cl = cl;
...@@ -5816,8 +5819,8 @@ struct mg_connection *mg_connect_http(struct mg_mgr *mgr, ...@@ -5816,8 +5819,8 @@ struct mg_connection *mg_connect_http(struct mg_mgr *mgr,
/* Do not add port. See https://github.com/cesanta/mongoose/pull/304 */ /* Do not add port. See https://github.com/cesanta/mongoose/pull/304 */
addr[addr_len] = '\0'; addr[addr_len] = '\0';
} }
mg_printf(nc, mg_printf(nc, "%s /%s HTTP/1.1\r\nHost: %s\r\nContent-Length: %" SIZE_T_FMT
"%s /%s HTTP/1.1\r\nHost: %s\r\nContent-Length: %lu\r\n%s\r\n%s", "\r\n%s\r\n%s",
post_data == NULL ? "GET" : "POST", path, addr, post_data == NULL ? "GET" : "POST", path, addr,
post_data == NULL ? 0 : strlen(post_data), post_data == NULL ? 0 : strlen(post_data),
extra_headers == NULL ? "" : extra_headers, extra_headers == NULL ? "" : extra_headers,
......
...@@ -233,7 +233,11 @@ struct dirent *readdir(DIR *dir); ...@@ -233,7 +233,11 @@ struct dirent *readdir(DIR *dir);
#define INVALID_SOCKET (-1) #define INVALID_SOCKET (-1)
#define INT64_FMT PRId64 #define INT64_FMT PRId64
#if defined(ESP8266) || defined(MG_ESP8266)
#define SIZE_T_FMT "u"
#else
#define SIZE_T_FMT "zu" #define SIZE_T_FMT "zu"
#endif
#define to64(x) strtoll(x, NULL, 10) #define to64(x) strtoll(x, NULL, 10)
typedef int sock_t; typedef int sock_t;
typedef struct stat cs_stat_t; typedef struct stat cs_stat_t;
...@@ -905,6 +909,12 @@ const char *mg_set_ssl(struct mg_connection *nc, const char *cert, ...@@ -905,6 +909,12 @@ const char *mg_set_ssl(struct mg_connection *nc, const char *cert,
*/ */
int mg_send(struct mg_connection *, const void *buf, int len); int mg_send(struct mg_connection *, const void *buf, int len);
/* Enables format string warnings for mg_printf */
#if defined(__GNUC__)
__attribute__((format(printf, 2, 3)))
#endif
/* don't separate from mg_printf declaration */
/* /*
* Send `printf`-style formatted data to the connection. * Send `printf`-style formatted data to the connection.
* *
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment