[Buildroot] [git commit branch/2020.05.x] package/libhttpserver: backport an upstream patch to fix compatibility with libmicrohttpd 0.9.71

Peter Korsgaard peter at korsgaard.com
Mon Jul 20 07:15:33 UTC 2020


commit: https://git.buildroot.net/buildroot/commit/?id=f4757c72357fa12c78cae30efcf498c3a8e547f5
branch: https://git.buildroot.net/buildroot/commit/?id=refs/heads/2020.05.x

Upstream patch:
https://github.com/etr/libhttpserver/commit/51b343c6b05dd13cbde0db04984fbf392e9f6df6

Signed-off-by: Peter Korsgaard <peter at korsgaard.com>
---
 ...mpatibility-with-libmicrohttpd-0.9.71-199.patch | 254 +++++++++++++++++++++
 1 file changed, 254 insertions(+)

diff --git a/package/libhttpserver/0002-Compatibility-with-libmicrohttpd-0.9.71-199.patch b/package/libhttpserver/0002-Compatibility-with-libmicrohttpd-0.9.71-199.patch
new file mode 100644
index 0000000000..118b3df398
--- /dev/null
+++ b/package/libhttpserver/0002-Compatibility-with-libmicrohttpd-0.9.71-199.patch
@@ -0,0 +1,254 @@
+From 056df008ecb8ab354191b7515199267eb6b84124 Mon Sep 17 00:00:00 2001
+From: bkuhls <bkuhls at users.noreply.github.com>
+Date: Mon, 6 Jul 2020 04:23:21 +0200
+Subject: [PATCH] Compatibility with libmicrohttpd 0.9.71 (#199)
+
+From the libmicrohttpd 0.9.71 release notes:
+
+The release introduces an 'enum MHD_Result' instead of
+for certain API misuse bugs by providing better types (not everything is
+an 'int').  While this does NOT change the binary API, this change
+_will_ cause compiler warnings for all legacy code -- until 'int' is
+replaced with 'enum MHD_Result'.
+
+(cherry picked from commit 51b343c6b05dd13cbde0db04984fbf392e9f6df6)
+[Peter: backported to 0.17.5]
+Signed-off-by: Peter Korsgaard <peter at korsgaard.com>
+---
+ src/http_request.cpp            |  6 +++---
+ src/httpserver/http_request.hpp |  6 +++---
+ src/httpserver/http_utils.hpp   |  4 ++++
+ src/httpserver/webserver.hpp    | 16 ++++++++--------
+ src/webserver.cpp               | 24 ++++++++++++++----------
+ 5 files changed, 32 insertions(+), 24 deletions(-)
+
+diff --git a/src/http_request.cpp b/src/http_request.cpp
+index 973ab33..37035b2 100644
+--- a/src/http_request.cpp
++++ b/src/http_request.cpp
+@@ -86,7 +86,7 @@ const std::string http_request::get_connection_value(const std::string& key, enu
+     return header_c;
+ }
+ 
+-int http_request::build_request_header(
++MHD_Result http_request::build_request_header(
+         void *cls,
+         enum MHD_ValueKind kind,
+         const char *key,
+@@ -187,7 +187,7 @@ const std::string http_request::get_querystring() const
+     return querystring;
+ }
+ 
+-int http_request::build_request_args(
++MHD_Result http_request::build_request_args(
+         void *cls,
+         enum MHD_ValueKind kind,
+         const char *key,
+@@ -202,7 +202,7 @@ int http_request::build_request_args(
+     return MHD_YES;
+ }
+ 
+-int http_request::build_request_querystring(
++MHD_Result http_request::build_request_querystring(
+         void *cls,
+         enum MHD_ValueKind kind,
+         const char *key,
+diff --git a/src/httpserver/http_request.hpp b/src/httpserver/http_request.hpp
+index 21f2176..6bd371c 100644
+--- a/src/httpserver/http_request.hpp
++++ b/src/httpserver/http_request.hpp
+@@ -304,15 +304,15 @@ class http_request
+ 
+         unescaper_ptr unescaper;
+ 
+-        static int build_request_header(void *cls, enum MHD_ValueKind kind,
++        static MHD_Result build_request_header(void *cls, enum MHD_ValueKind kind,
+                 const char *key, const char *value
+         );
+ 
+-        static int build_request_args(void *cls, enum MHD_ValueKind kind,
++        static MHD_Result build_request_args(void *cls, enum MHD_ValueKind kind,
+                 const char *key, const char *value
+         );
+ 
+-        static int build_request_querystring(void *cls, enum MHD_ValueKind kind,
++        static MHD_Result build_request_querystring(void *cls, enum MHD_ValueKind kind,
+                 const char *key, const char *value
+         );
+ 
+diff --git a/src/httpserver/http_utils.hpp b/src/httpserver/http_utils.hpp
+index bd3df17..cf18360 100644
+--- a/src/httpserver/http_utils.hpp
++++ b/src/httpserver/http_utils.hpp
+@@ -39,6 +39,10 @@
+ 
+ #define DEFAULT_MASK_VALUE 0xFFFF
+ 
++#if MHD_VERSION < 0x00097002
++typedef int MHD_Result;
++#endif
++
+ namespace httpserver {
+ 
+ typedef void(*unescaper_ptr)(std::string&);
+diff --git a/src/httpserver/webserver.hpp b/src/httpserver/webserver.hpp
+index 2660c70..3c915a1 100644
+--- a/src/httpserver/webserver.hpp
++++ b/src/httpserver/webserver.hpp
+@@ -201,14 +201,14 @@ class webserver
+                 enum MHD_RequestTerminationCode toe
+         );
+ 
+-        static int answer_to_connection
++        static MHD_Result answer_to_connection
+         (
+             void* cls, MHD_Connection* connection,
+             const char* url, const char* method,
+             const char* version, const char* upload_data,
+             size_t* upload_data_size, void** con_cls
+         );
+-        static int post_iterator
++        static MHD_Result post_iterator
+         (
+             void *cls,
+             enum MHD_ValueKind kind,
+@@ -225,30 +225,30 @@ class webserver
+             void **con_cls, int upgrade_socket
+         );
+ 
+-        int bodyless_requests_answer(MHD_Connection* connection,
++        MHD_Result bodyless_requests_answer(MHD_Connection* connection,
+             const char* method, const char* version,
+             struct details::modded_request* mr
+         );
+ 
+-        int bodyfull_requests_answer_first_step(MHD_Connection* connection,
++        MHD_Result bodyfull_requests_answer_first_step(MHD_Connection* connection,
+                 struct details::modded_request* mr
+         );
+ 
+-        int bodyfull_requests_answer_second_step(MHD_Connection* connection,
++        MHD_Result bodyfull_requests_answer_second_step(MHD_Connection* connection,
+             const char* method, const char* version, const char* upload_data,
+             size_t* upload_data_size, struct details::modded_request* mr
+         );
+ 
+-        int finalize_answer(MHD_Connection* connection,
++        MHD_Result finalize_answer(MHD_Connection* connection,
+                 struct details::modded_request* mr, const char* method
+         );
+ 
+-        int complete_request(MHD_Connection* connection,
++        MHD_Result complete_request(MHD_Connection* connection,
+                 struct details::modded_request* mr,
+                 const char* version, const char* method
+         );
+ 
+-        friend int policy_callback (void *cls,
++        friend MHD_Result policy_callback (void *cls,
+                 const struct sockaddr* addr, socklen_t addrlen
+         );
+         friend void error_log(void* cls, const char* fmt, va_list ap);
+diff --git a/src/webserver.cpp b/src/webserver.cpp
+index e71c364..ab6b530 100644
+--- a/src/webserver.cpp
++++ b/src/webserver.cpp
+@@ -61,6 +61,10 @@
+ #define SOCK_CLOEXEC 02000000
+ #endif
+ 
++#if MHD_VERSION < 0x00097002
++typedef int MHD_Result;
++#endif
++
+ using namespace std;
+ 
+ namespace httpserver
+@@ -68,7 +72,7 @@ namespace httpserver
+ 
+ using namespace http;
+ 
+-int policy_callback (void *, const struct sockaddr*, socklen_t);
++MHD_Result policy_callback (void *, const struct sockaddr*, socklen_t);
+ void error_log(void*, const char*, va_list);
+ void* uri_log(void*, const char*);
+ void access_log(webserver*, string);
+@@ -408,7 +412,7 @@ void webserver::disallow_ip(const string& ip)
+     this->allowances.erase(ip);
+ }
+ 
+-int policy_callback (void *cls, const struct sockaddr* addr, socklen_t addrlen)
++MHD_Result policy_callback (void *cls, const struct sockaddr* addr, socklen_t addrlen)
+ {
+     if(!(static_cast<webserver*>(cls))->ban_system_enabled) return MHD_YES;
+ 
+@@ -455,7 +459,7 @@ size_t unescaper_func(void * cls, struct MHD_Connection *c, char *s)
+     return std::string(s).size();
+ }
+ 
+-int webserver::post_iterator (void *cls, enum MHD_ValueKind kind,
++MHD_Result webserver::post_iterator (void *cls, enum MHD_ValueKind kind,
+     const char *key,
+     const char *filename,
+     const char *content_type,
+@@ -509,7 +513,7 @@ const std::shared_ptr<http_response> webserver::internal_error_page(details::mod
+     }
+ }
+ 
+-int webserver::bodyless_requests_answer(
++MHD_Result webserver::bodyless_requests_answer(
+     MHD_Connection* connection, const char* method,
+     const char* version, struct details::modded_request* mr
+     )
+@@ -519,7 +523,7 @@ int webserver::bodyless_requests_answer(
+     return complete_request(connection, mr, version, method);
+ }
+ 
+-int webserver::bodyfull_requests_answer_first_step(
++MHD_Result webserver::bodyfull_requests_answer_first_step(
+         MHD_Connection* connection,
+         struct details::modded_request* mr
+ )
+@@ -565,7 +569,7 @@ int webserver::bodyfull_requests_answer_first_step(
+     return MHD_YES;
+ }
+ 
+-int webserver::bodyfull_requests_answer_second_step(
++MHD_Result webserver::bodyfull_requests_answer_second_step(
+     MHD_Connection* connection, const char* method,
+     const char* version, const char* upload_data,
+     size_t* upload_data_size, struct details::modded_request* mr
+@@ -583,7 +587,7 @@ int webserver::bodyfull_requests_answer_second_step(
+     return MHD_YES;
+ }
+ 
+-int webserver::finalize_answer(
++MHD_Result webserver::finalize_answer(
+         MHD_Connection* connection,
+         struct details::modded_request* mr,
+         const char* method
+@@ -717,10 +721,10 @@ int webserver::finalize_answer(
+     mr->dhrs->decorate_response(raw_response);
+     to_ret = mr->dhrs->enqueue_response(connection, raw_response);
+     MHD_destroy_response(raw_response);
+-    return to_ret;
++    return (MHD_Result) to_ret;
+ }
+ 
+-int webserver::complete_request(
++MHD_Result webserver::complete_request(
+         MHD_Connection* connection,
+         struct details::modded_request* mr,
+         const char* version,
+@@ -736,7 +740,7 @@ int webserver::complete_request(
+     return finalize_answer(connection, mr, method);
+ }
+ 
+-int webserver::answer_to_connection(void* cls, MHD_Connection* connection,
++MHD_Result webserver::answer_to_connection(void* cls, MHD_Connection* connection,
+     const char* url, const char* method,
+     const char* version, const char* upload_data,
+     size_t* upload_data_size, void** con_cls
+-- 
+2.20.1
+


More information about the buildroot mailing list