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;