Browse Source

Add container_of

pull/988/head
Max Lv 8 years ago
parent
commit
a63a33861f
6 changed files with 17 additions and 10 deletions
  1. 4
      src/local.c
  2. 5
      src/redir.c
  3. 4
      src/server.c
  4. 5
      src/tunnel.c
  5. 4
      src/udprelay.c
  6. 5
      src/utils.h

4
src/local.c

@ -744,8 +744,8 @@ stat_update_cb()
static void static void
remote_timeout_cb(EV_P_ ev_timer *watcher, int revents) remote_timeout_cb(EV_P_ ev_timer *watcher, int revents)
{ {
remote_ctx_t *remote_ctx = (remote_ctx_t *)(((char *)watcher)
- sizeof(ev_io));
remote_ctx_t *remote_ctx
= (remote_ctx_t *)container_of(watcher, remote_ctx_t, watcher);
remote_t *remote = remote_ctx->remote; remote_t *remote = remote_ctx->remote;
server_t *server = remote->server; server_t *server = remote->server;

5
src/redir.c

@ -328,8 +328,9 @@ server_send_cb(EV_P_ ev_io *w, int revents)
static void static void
remote_timeout_cb(EV_P_ ev_timer *watcher, int revents) remote_timeout_cb(EV_P_ ev_timer *watcher, int revents)
{ {
remote_ctx_t *remote_ctx = (remote_ctx_t *)(((char *)watcher)
- sizeof(ev_io));
remote_ctx_t *remote_ctx
= (remote_ctx_t *)container_of(watcher, remote_ctx_t, watcher);
remote_t *remote = remote_ctx->remote; remote_t *remote = remote_ctx->remote;
server_t *server = remote->server; server_t *server = remote->server;

4
src/server.c

@ -1049,8 +1049,8 @@ block_list_clear_cb(EV_P_ ev_timer *watcher, int revents)
static void static void
server_timeout_cb(EV_P_ ev_timer *watcher, int revents) server_timeout_cb(EV_P_ ev_timer *watcher, int revents)
{ {
server_ctx_t *server_ctx = (server_ctx_t *)(((char *)watcher)
- sizeof(ev_io));
server_ctx_t *server_ctx
= (server_ctx_t *)container_of(watcher, server_ctx_t, watcher);
server_t *server = server_ctx->server; server_t *server = server_ctx->server;
remote_t *remote = server->remote; remote_t *remote = server->remote;

5
src/tunnel.c

@ -284,8 +284,9 @@ server_send_cb(EV_P_ ev_io *w, int revents)
static void static void
remote_timeout_cb(EV_P_ ev_timer *watcher, int revents) remote_timeout_cb(EV_P_ ev_timer *watcher, int revents)
{ {
remote_ctx_t *remote_ctx = (remote_ctx_t *)(((char *)watcher)
- sizeof(ev_io));
remote_ctx_t *remote_ctx
= (remote_ctx_t *)container_of(watcher, remote_ctx_t, watcher);
remote_t *remote = remote_ctx->remote; remote_t *remote = remote_ctx->remote;
server_t *server = remote->server; server_t *server = remote->server;

4
src/udprelay.c

@ -549,8 +549,8 @@ close_and_free_remote(EV_P_ remote_ctx_t *ctx)
static void static void
remote_timeout_cb(EV_P_ ev_timer *watcher, int revents) remote_timeout_cb(EV_P_ ev_timer *watcher, int revents)
{ {
remote_ctx_t *remote_ctx = (remote_ctx_t *)(((char *)watcher)
- sizeof(ev_io));
remote_ctx_t *remote_ctx
= (remote_ctx_t *)container_of(watcher, remote_ctx_t, watcher);
if (verbose) { if (verbose) {
LOGI("[udp] connection timeout"); LOGI("[udp] connection timeout");

5
src/utils.h

@ -228,4 +228,9 @@ void *ss_realloc(void *ptr, size_t new_size);
ptr = NULL; \ ptr = NULL; \
} while (0) } while (0)
#ifndef container_of
#define container_of(ptr, type, member) \
((type *) ((char *)(ptr) - offsetof(type, member)))
#endif
#endif // _UTILS_H #endif // _UTILS_H
Loading…
Cancel
Save