Mercurial > hg > nginx
comparison src/http/ngx_http_core_module.c @ 3395:4e15548b29d4
fix building by gcc 4.4 with -O2/3/s:
dereferencing pointer 'sin' does break strict-aliasing rules
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 22 Dec 2009 15:15:45 +0000 |
parents | 8854f4eb2839 |
children | 9e7926763f87 |
comparison
equal
deleted
inserted
replaced
3394:11965c62b92c | 3395:4e15548b29d4 |
---|---|
2848 prev->underscores_in_headers, 0); | 2848 prev->underscores_in_headers, 0); |
2849 | 2849 |
2850 if (!conf->listen) { | 2850 if (!conf->listen) { |
2851 ngx_memzero(&lsopt, sizeof(ngx_http_listen_opt_t)); | 2851 ngx_memzero(&lsopt, sizeof(ngx_http_listen_opt_t)); |
2852 | 2852 |
2853 sin = (struct sockaddr_in *) &lsopt.sockaddr; | 2853 sin = &lsopt.u.sockaddr_in; |
2854 | 2854 |
2855 sin->sin_family = AF_INET; | 2855 sin->sin_family = AF_INET; |
2856 #if (NGX_WIN32) | 2856 #if (NGX_WIN32) |
2857 sin->sin_port = htons(80); | 2857 sin->sin_port = htons(80); |
2858 #else | 2858 #else |
2865 lsopt.backlog = NGX_LISTEN_BACKLOG; | 2865 lsopt.backlog = NGX_LISTEN_BACKLOG; |
2866 lsopt.rcvbuf = -1; | 2866 lsopt.rcvbuf = -1; |
2867 lsopt.sndbuf = -1; | 2867 lsopt.sndbuf = -1; |
2868 lsopt.wildcard = 1; | 2868 lsopt.wildcard = 1; |
2869 | 2869 |
2870 (void) ngx_sock_ntop((struct sockaddr *) &lsopt.sockaddr, lsopt.addr, | 2870 (void) ngx_sock_ntop(&lsopt.u.sockaddr, lsopt.addr, |
2871 NGX_SOCKADDR_STRLEN, 1); | 2871 NGX_SOCKADDR_STRLEN, 1); |
2872 | 2872 |
2873 if (ngx_http_add_listen(cf, conf, &lsopt) == NGX_OK) { | 2873 if (ngx_http_add_listen(cf, conf, &lsopt) == NGX_OK) { |
2874 return NGX_CONF_OK; | 2874 return NGX_CONF_OK; |
2875 } | 2875 } |
3273 return NGX_CONF_ERROR; | 3273 return NGX_CONF_ERROR; |
3274 } | 3274 } |
3275 | 3275 |
3276 ngx_memzero(&lsopt, sizeof(ngx_http_listen_opt_t)); | 3276 ngx_memzero(&lsopt, sizeof(ngx_http_listen_opt_t)); |
3277 | 3277 |
3278 ngx_memcpy(lsopt.sockaddr, u.sockaddr, u.socklen); | 3278 ngx_memcpy(&lsopt.u.sockaddr, u.sockaddr, u.socklen); |
3279 | 3279 |
3280 lsopt.socklen = u.socklen; | 3280 lsopt.socklen = u.socklen; |
3281 lsopt.backlog = NGX_LISTEN_BACKLOG; | 3281 lsopt.backlog = NGX_LISTEN_BACKLOG; |
3282 lsopt.rcvbuf = -1; | 3282 lsopt.rcvbuf = -1; |
3283 lsopt.sndbuf = -1; | 3283 lsopt.sndbuf = -1; |
3284 lsopt.wildcard = u.wildcard; | 3284 lsopt.wildcard = u.wildcard; |
3285 | 3285 |
3286 (void) ngx_sock_ntop((struct sockaddr *) &lsopt.sockaddr, lsopt.addr, | 3286 (void) ngx_sock_ntop(&lsopt.u.sockaddr, lsopt.addr, |
3287 NGX_SOCKADDR_STRLEN, 1); | 3287 NGX_SOCKADDR_STRLEN, 1); |
3288 | 3288 |
3289 for (n = 2; n < cf->args->nelts; n++) { | 3289 for (n = 2; n < cf->args->nelts; n++) { |
3290 | 3290 |
3291 if (ngx_strcmp(value[n].data, "default_server") == 0 | 3291 if (ngx_strcmp(value[n].data, "default_server") == 0 |
3378 | 3378 |
3379 if (ngx_strncmp(value[n].data, "ipv6only=o", 10) == 0) { | 3379 if (ngx_strncmp(value[n].data, "ipv6only=o", 10) == 0) { |
3380 #if (NGX_HAVE_INET6 && defined IPV6_V6ONLY) | 3380 #if (NGX_HAVE_INET6 && defined IPV6_V6ONLY) |
3381 struct sockaddr *sa; | 3381 struct sockaddr *sa; |
3382 | 3382 |
3383 sa = (struct sockaddr *) lsopt.sockaddr; | 3383 sa = &lsopt.u.sockaddr; |
3384 | 3384 |
3385 if (sa->sa_family == AF_INET6) { | 3385 if (sa->sa_family == AF_INET6) { |
3386 | 3386 |
3387 if (ngx_strcmp(&value[n].data[10], "n") == 0) { | 3387 if (ngx_strcmp(&value[n].data[10], "n") == 0) { |
3388 lsopt.ipv6only = 1; | 3388 lsopt.ipv6only = 1; |