浏览代码

Remove union in struct mg_request_handler_in

This seems to be better for some compilers (see #106), and may make
the code more readable.
bel 10 年之前
父节点
当前提交
cad094cacc
共有 1 个文件被更改,包括 15 次插入12 次删除
  1. 15 12
      src/civetweb.c

+ 15 - 12
src/civetweb.c

@@ -821,24 +821,27 @@ static struct mg_option config_options[] = {
 };
 
 struct mg_request_handler_info {
+
+    /* Name/Pattern of the URI. */
     char *uri;
     size_t uri_len;
 
+    /* URI type: ws/wss (websocket) or http/https (web page). */
     int is_websocket_handler;
 
-    union {
-        struct {
-            mg_request_handler handler;
-        };
-        struct {
-            mg_websocket_connect_handler connect_handler;
-            mg_websocket_ready_handler ready_handler;
-            mg_websocket_data_handler data_handler;
-            mg_websocket_close_handler close_handler;
-        };
-    };
+    /* Handler for http/https requests. */
+    mg_request_handler handler;
 
+    /* Handler for ws/wss (websocket) requests. */
+    mg_websocket_connect_handler connect_handler;
+    mg_websocket_ready_handler ready_handler;
+    mg_websocket_data_handler data_handler;
+    mg_websocket_close_handler close_handler;
+
+    /* User supplied argument for the handler function. */
     void *cbdata;
+
+    /* next request handler in a linked list */
     struct mg_request_handler_info *next;
 };
 
@@ -6407,7 +6410,7 @@ static void mg_set_request_handler_type(struct mg_context *ctx,
         return;
     }
 
-    tmp_rh = (struct mg_request_handler_info *)mg_malloc(sizeof(struct mg_request_handler_info));
+    tmp_rh = (struct mg_request_handler_info *)mg_calloc(sizeof(struct mg_request_handler_info), 1);
     if (tmp_rh == NULL) {
         mg_unlock_context(ctx);
         mg_cry(fc(ctx), "%s", "Cannot create new request handler struct, OOM");