]> git.sesse.net Git - nageru/commitdiff
Unbreak compilation with libmicrohttpd 0.9.71.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Wed, 8 Jul 2020 18:49:21 +0000 (20:49 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Wed, 8 Jul 2020 18:49:21 +0000 (20:49 +0200)
shared/httpd.cpp
shared/httpd.h

index 74d0c26d72b1252ae1485490ab2daef41725211c..006ba6599cf7fc7af46a36c4203c19ac1649a5b2 100644 (file)
@@ -85,19 +85,19 @@ void HTTPD::add_data_locked(StreamID stream_id, const char *buf, size_t size, St
        }
 }
 
-int HTTPD::answer_to_connection_thunk(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)
+HTTPD::MHD_Result HTTPD::answer_to_connection_thunk(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)
 {
        HTTPD *httpd = (HTTPD *)cls;
        return httpd->answer_to_connection(connection, url, method, version, upload_data, upload_data_size, con_cls);
 }
 
-int HTTPD::answer_to_connection(MHD_Connection *connection,
-                                const char *url, const char *method,
-                                const char *version, const char *upload_data,
-                                size_t *upload_data_size, void **con_cls)
+HTTPD::MHD_Result HTTPD::answer_to_connection(MHD_Connection *connection,
+                                              const char *url, const char *method,
+                                              const char *version, const char *upload_data,
+                                              size_t *upload_data_size, void **con_cls)
 {
        // See if the URL ends in “.metacube”.
        HTTPD::Stream::Framing framing;
@@ -123,7 +123,7 @@ int HTTPD::answer_to_connection(MHD_Connection *connection,
                MHD_Response *response = MHD_create_response_from_buffer(
                        contents.size(), &contents[0], MHD_RESPMEM_MUST_COPY);
                MHD_add_response_header(response, "Content-type", "text/plain");
-               int ret = MHD_queue_response(connection, MHD_HTTP_OK, response);
+               MHD_Result ret = MHD_queue_response(connection, MHD_HTTP_OK, response);
                MHD_destroy_response(response);  // Only decreases the refcount; actual free is after the request is done.
                return ret;
        }
@@ -135,7 +135,7 @@ int HTTPD::answer_to_connection(MHD_Connection *connection,
                if (endpoints[url].cors_policy == ALLOW_ALL_ORIGINS) {
                        MHD_add_response_header(response, "Access-Control-Allow-Origin", "*");
                }
-               int ret = MHD_queue_response(connection, MHD_HTTP_OK, response);
+               MHD_Result ret = MHD_queue_response(connection, MHD_HTTP_OK, response);
                MHD_destroy_response(response);  // Only decreases the refcount; actual free is after the request is done.
                return ret;
        }
@@ -146,7 +146,7 @@ int HTTPD::answer_to_connection(MHD_Connection *connection,
                MHD_Response *response = MHD_create_response_from_buffer(
                        contents.size(), &contents[0], MHD_RESPMEM_MUST_COPY);
                MHD_add_response_header(response, "Content-type", "text/plain");
-               int ret = MHD_queue_response(connection, MHD_HTTP_NOT_FOUND, response);
+               MHD_Result ret = MHD_queue_response(connection, MHD_HTTP_NOT_FOUND, response);
                MHD_destroy_response(response);  // Only decreases the refcount; actual free is after the request is done.
                return ret;
        }
@@ -175,7 +175,7 @@ int HTTPD::answer_to_connection(MHD_Connection *connection,
                MHD_add_response_header(response, "Content-encoding", "metacube");
        }
 
-       int ret = MHD_queue_response(connection, MHD_HTTP_OK, response);
+       MHD_Result ret = MHD_queue_response(connection, MHD_HTTP_OK, response);
        MHD_destroy_response(response);  // Only decreases the refcount; actual free is after the request is done.
 
        return ret;
index dae5cad627b7e056e41fe3f1901a51201f4fc066..8d2a05eb1df89f56e8577234ed8a00b460d8d620 100644 (file)
@@ -22,6 +22,8 @@ extern "C" {
 #include <libavutil/rational.h>
 }
 
+#include <microhttpd.h>
+
 #include "shared/shared_defs.h"
 
 struct MHD_Connection;
@@ -81,15 +83,23 @@ public:
        }
 
 private:
-       static int answer_to_connection_thunk(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);
-
-       int answer_to_connection(MHD_Connection *connection,
-                                const char *url, const char *method,
-                                const char *version, const char *upload_data,
-                                size_t *upload_data_size, void **con_cls);
+       // libmicrohttpd 0.9.71 broke the type of MHD_YES/MHD_NO, causing
+       // compilation errors for C++ and undefined behavior for C.
+#if MHD_VERSION >= 0x00097002
+       using MHD_Result = ::MHD_Result;
+#else
+       using MHD_Result = int;
+#endif
+
+       static MHD_Result answer_to_connection_thunk(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);
+
+       MHD_Result answer_to_connection(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 void free_stream(void *cls);