From 672a68219a786157df2b8e2b7ab9310b12115c9f Mon Sep 17 00:00:00 2001 From: Marko Mikulicic <mkm@cesanta.com> Date: Thu, 3 Mar 2016 14:49:01 +0000 Subject: [PATCH] Fix a few build issues on OSX PUBLISHED_FROM=d6e7ab0b45c960a4ca0bcb56cbc26bc05d641374 --- mongoose.c | 54 +++++++++++++++++++++++++++--------------------------- mongoose.h | 24 ++++++++++++++++++++---- 2 files changed, 47 insertions(+), 31 deletions(-) diff --git a/mongoose.c b/mongoose.c index ab0541af8..eb02306d7 100644 --- a/mongoose.c +++ b/mongoose.c @@ -1,6 +1,6 @@ #include "mongoose.h" #ifdef MG_MODULE_LINES -#line 0 "./src/internal.h" +#line 1 "./src/internal.h" #endif /* * Copyright (c) 2014 Cesanta Software Limited @@ -124,7 +124,7 @@ extern void *(*test_calloc)(size_t count, size_t size); #endif /* MG_INTERNAL_HEADER_INCLUDED */ #ifdef MG_MODULE_LINES -#line 0 "./src/../../common/base64.c" +#line 1 "./src/../../common/base64.c" #endif /* * Copyright (c) 2014 Cesanta Software Limited @@ -327,7 +327,7 @@ int cs_base64_decode(const unsigned char *s, int len, char *dst) { #endif /* EXCLUDE_COMMON */ #ifdef MG_MODULE_LINES -#line 0 "./src/../../common/cs_dbg.c" +#line 1 "./src/../../common/cs_dbg.c" #endif /* * Copyright (c) 2014-2016 Cesanta Software Limited @@ -377,7 +377,7 @@ void cs_log_set_level(enum cs_log_level level) { #endif } #ifdef MG_MODULE_LINES -#line 0 "./src/../../common/cs_dirent.c" +#line 1 "./src/../../common/cs_dirent.c" #endif /* * Copyright (c) 2015 Cesanta Software Limited @@ -515,7 +515,7 @@ int mkdir(const char *path, mode_t mode) { /* ISO C requires a translation unit to contain at least one declaration */ typedef int cs_dirent_dummy; #ifdef MG_MODULE_LINES -#line 0 "./src/../../common/cs_time.c" +#line 1 "./src/../../common/cs_time.c" #endif /* * Copyright (c) 2014-2016 Cesanta Software Limited @@ -543,7 +543,7 @@ double cs_time() { return now; } #ifdef MG_MODULE_LINES -#line 0 "./src/../deps/frozen/frozen.c" +#line 1 "./src/../deps/frozen/frozen.c" #endif /* * Copyright (c) 2004-2013 Sergey Lyubka <valenok@gmail.com> @@ -1138,7 +1138,7 @@ int json_emit(char *buf, int buf_len, const char *fmt, ...) { return len; } #ifdef MG_MODULE_LINES -#line 0 "./src/../../common/md5.c" +#line 1 "./src/../../common/md5.c" #endif /* * This code implements the MD5 message-digest algorithm. @@ -1385,7 +1385,7 @@ char *cs_md5(char buf[33], ...) { #endif /* EXCLUDE_COMMON */ #ifdef MG_MODULE_LINES -#line 0 "./src/../../common/mbuf.c" +#line 1 "./src/../../common/mbuf.c" #endif /* * Copyright (c) 2014 Cesanta Software Limited @@ -1482,7 +1482,7 @@ void mbuf_remove(struct mbuf *mb, size_t n) { #endif /* EXCLUDE_COMMON */ #ifdef MG_MODULE_LINES -#line 0 "./src/../../common/sha1.c" +#line 1 "./src/../../common/sha1.c" #endif /* Copyright(c) By Steve Reid <steve@edmweb.com> */ /* 100% Public Domain */ @@ -1736,7 +1736,7 @@ void cs_hmac_sha1(const unsigned char *key, size_t keylen, #endif /* EXCLUDE_COMMON */ #ifdef MG_MODULE_LINES -#line 0 "./src/../../common/str_util.c" +#line 1 "./src/../../common/str_util.c" #endif /* * Copyright (c) 2015 Cesanta Software Limited @@ -2007,7 +2007,7 @@ const char *c_strnstr(const char *s, const char *find, size_t slen) { #endif /* EXCLUDE_COMMON */ #ifdef MG_MODULE_LINES -#line 0 "./src/net.c" +#line 1 "./src/net.c" #endif /* * Copyright (c) 2014 Cesanta Software Limited @@ -3025,7 +3025,7 @@ double mg_time() { return cs_time(); } #ifdef MG_MODULE_LINES -#line 0 "./src/net_if_socket.c" +#line 1 "./src/net_if_socket.c" #endif /* * Copyright (c) 2014-2016 Cesanta Software Limited @@ -3863,7 +3863,7 @@ void mg_if_get_conn_addr(struct mg_connection *nc, int remote, #endif /* !MG_DISABLE_SOCKET_IF */ #ifdef MG_MODULE_LINES -#line 0 "./src/multithreading.c" +#line 1 "./src/multithreading.c" #endif /* * Copyright (c) 2014 Cesanta Software Limited @@ -3932,7 +3932,7 @@ static void spawn_handling_thread(struct mg_connection *nc) { mg_socketpair(sp, SOCK_STREAM); memset(&dummy, 0, sizeof(dummy)); c[0] = mg_add_sock(&dummy, sp[0], forwarder_ev_handler); - c[1] = mg_add_sock(&dummy, sp[1], (mg_event_handler_t) nc->listener->priv_1); + c[1] = mg_add_sock(&dummy, sp[1], nc->listener->priv_1.f); /* Interlink client connection with c[0] */ link_conns(c[0], nc); @@ -3965,12 +3965,12 @@ static void multithreaded_ev_handler(struct mg_connection *c, int ev, void *p) { void mg_enable_multithreading(struct mg_connection *nc) { /* Wrap user event handler into our multithreaded_ev_handler */ - nc->priv_1 = (void *) nc->handler; + nc->priv_1.f = nc->handler; nc->handler = multithreaded_ev_handler; } #endif #ifdef MG_MODULE_LINES -#line 0 "./src/uri.c" +#line 1 "./src/uri.c" #endif /* * Copyright (c) 2014 Cesanta Software Limited @@ -4147,7 +4147,7 @@ int mg_normalize_uri_path(const struct mg_str *in, struct mg_str *out) { return 1; } #ifdef MG_MODULE_LINES -#line 0 "./src/http.c" +#line 1 "./src/http.c" #endif /* * Copyright (c) 2014 Cesanta Software Limited @@ -7436,7 +7436,7 @@ void mg_register_http_endpoint(struct mg_connection *nc, const char *uri_path, #endif /* MG_DISABLE_HTTP */ #ifdef MG_MODULE_LINES -#line 0 "./src/util.c" +#line 1 "./src/util.c" #endif /* * Copyright (c) 2014 Cesanta Software Limited @@ -7705,7 +7705,7 @@ void mg_hexdump_connection(struct mg_connection *nc, const char *path, MG_SOCK_STRINGIFY_PORT | MG_SOCK_STRINGIFY_REMOTE); fprintf( - fp, "%lu %p %s %s %s %d\n", (unsigned long) time(NULL), nc, src, + fp, "%lu %p %s %s %s %d\n", (unsigned long) time(NULL), (void *) nc, src, ev == MG_EV_RECV ? "<-" : ev == MG_EV_SEND ? "->" : ev == MG_EV_ACCEPT @@ -7815,7 +7815,7 @@ struct mg_str mg_mk_str(const char *s) { return ret; } #ifdef MG_MODULE_LINES -#line 0 "./src/json-rpc.c" +#line 1 "./src/json-rpc.c" #endif /* Copyright (c) 2014 Cesanta Software Limited */ /* All rights reserved */ @@ -7976,7 +7976,7 @@ int mg_rpc_parse_reply(const char *buf, int len, struct json_token *toks, #endif /* MG_DISABLE_JSON_RPC */ #ifdef MG_MODULE_LINES -#line 0 "./src/mqtt.c" +#line 1 "./src/mqtt.c" #endif /* * Copyright (c) 2014 Cesanta Software Limited @@ -8277,7 +8277,7 @@ void mg_mqtt_disconnect(struct mg_connection *nc) { #endif /* MG_DISABLE_MQTT */ #ifdef MG_MODULE_LINES -#line 0 "./src/mqtt-broker.c" +#line 1 "./src/mqtt-broker.c" #endif /* * Copyright (c) 2014 Cesanta Software Limited @@ -8450,7 +8450,7 @@ struct mg_mqtt_session *mg_mqtt_next(struct mg_mqtt_broker *brk, #endif /* MG_ENABLE_MQTT_BROKER */ #ifdef MG_MODULE_LINES -#line 0 "./src/dns.c" +#line 1 "./src/dns.c" #endif /* * Copyright (c) 2014 Cesanta Software Limited @@ -8810,7 +8810,7 @@ void mg_set_protocol_dns(struct mg_connection *nc) { #endif /* MG_DISABLE_DNS */ #ifdef MG_MODULE_LINES -#line 0 "./src/dns-server.c" +#line 1 "./src/dns-server.c" #endif /* * Copyright (c) 2014 Cesanta Software Limited @@ -8884,7 +8884,7 @@ int mg_dns_reply_record(struct mg_dns_reply *reply, #endif /* MG_ENABLE_DNS_SERVER */ #ifdef MG_MODULE_LINES -#line 0 "./src/resolv.c" +#line 1 "./src/resolv.c" #endif /* * Copyright (c) 2014 Cesanta Software Limited @@ -9143,7 +9143,7 @@ int mg_resolve_async_opt(struct mg_mgr *mgr, const char *name, int query, #endif /* MG_DISABLE_RESOLVE */ #ifdef MG_MODULE_LINES -#line 0 "./src/coap.c" +#line 1 "./src/coap.c" #endif /* * Copyright (c) 2015 Cesanta Software Limited @@ -9655,7 +9655,7 @@ uint32_t mg_coap_compose(struct mg_coap_message *cm, struct mbuf *io) { } if (cm->payload.len != 0) { - *ptr = 0xFF; + *ptr = -1; ptr++; memcpy(ptr, cm->payload.p, cm->payload.len); } diff --git a/mongoose.h b/mongoose.h index ae04cba25..ce45389ba 100644 --- a/mongoose.h +++ b/mongoose.h @@ -286,6 +286,15 @@ struct dirent *readdir(DIR *dir); #include <sys/types.h> #include <unistd.h> +/* + * osx correctly avoids defining strtoll when compiling in strict ansi mode. + * We require strtoll, and if your embedded pre-c99 compiler lacks one, please + * implement a shim. + */ +#if !(defined(__DARWIN_C_LEVEL) && __DARWIN_C_LEVEL >= 200809L) +long long strtoll(const char *, char **, int); +#endif + typedef int sock_t; #define INVALID_SOCKET (-1) #define SIZE_T_FMT "zu" @@ -1068,10 +1077,17 @@ struct mg_connection { void *proto_data; /* Protocol-specific data */ mg_event_handler_t handler; /* Event handler function */ void *user_data; /* User-specific data */ - void *priv_1; /* Used by mg_enable_multithreading() */ - void *priv_2; /* Used by mg_enable_multithreading() */ - struct mbuf endpoints; /* Used by mg_register_http_endpoint */ - void *mgr_data; /* Implementation-specific event manager's data. */ + union { + void *v; + /* + * the C standard is fussy about fitting function pointers into + * void pointers, since some archs might have fat pointers for functions. + */ + mg_event_handler_t f; + } priv_1; /* Used by mg_enable_multithreading() */ + void *priv_2; /* Used by mg_enable_multithreading() */ + struct mbuf endpoints; /* Used by mg_register_http_endpoint */ + void *mgr_data; /* Implementation-specific event manager's data. */ #ifdef MG_ENABLE_HTTP_STREAMING_MULTIPART struct mbuf strm_state; /* Used by multi-part streaming */ #endif -- GitLab