Mercurial > hg > nginx-vendor-0-8
comparison src/core/ngx_string.c @ 286:5bef04fc3fd5 NGINX_0_5_13
nginx 0.5.13
*) Feature: the COPY and MOVE methods.
*) Bugfix: the ngx_http_realip_module set garbage for requests passed
via keep-alive connection.
*) Bugfix: nginx did not work on big-endian 64-bit Linux.
Thanks to Andrei Nigmatulin.
*) Bugfix: now when IMAP/POP3 proxy receives too long command it closes
the connection right away, but not after timeout.
*) Bugfix: if the "epoll" method was used and a client closed a
connection prematurely, then nginx closed the connection after a
send timeout only.
*) Bugfix: nginx could not be built on platforms different from i386,
amd64, sparc and ppc; bug appeared in 0.5.8.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Mon, 19 Feb 2007 00:00:00 +0300 |
parents | 052a7b1d40e5 |
children | 9b7db0df50f0 |
comparison
equal
deleted
inserted
replaced
285:0e505c8b6528 | 286:5bef04fc3fd5 |
---|---|
426 | 426 |
427 return buf; | 427 return buf; |
428 } | 428 } |
429 | 429 |
430 | 430 |
431 /* | |
432 * We use ngx_strcasecmp()/ngx_strncasecmp() for 7-bit ASCII string only, | |
433 * and implement our own ngx_strcasecmp()/ngx_strncasecmp() | |
434 * to avoid libc locale overhead. Besides, we use the ngx_uint_t's | |
435 * instead of the u_char's, because they are slightly faster. | |
436 */ | |
437 | |
438 ngx_int_t | |
439 ngx_strcasecmp(u_char *s1, u_char *s2) | |
440 { | |
441 ngx_uint_t c1, c2; | |
442 | |
443 for ( ;; ) { | |
444 c1 = (ngx_uint_t) *s1++; | |
445 c2 = (ngx_uint_t) *s2++; | |
446 | |
447 c1 = (c1 >= 'A' && c1 <= 'Z') ? (c1 | 0x20) : c1; | |
448 c2 = (c2 >= 'A' && c2 <= 'Z') ? (c2 | 0x20) : c2; | |
449 | |
450 if (c1 == c2) { | |
451 | |
452 if (c1) { | |
453 continue; | |
454 } | |
455 | |
456 return 0; | |
457 } | |
458 | |
459 return c1 - c2; | |
460 } | |
461 } | |
462 | |
463 | |
464 ngx_int_t | |
465 ngx_strncasecmp(u_char *s1, u_char *s2, size_t n) | |
466 { | |
467 ngx_uint_t c1, c2; | |
468 | |
469 while (n) { | |
470 c1 = (ngx_uint_t) *s1++; | |
471 c2 = (ngx_uint_t) *s2++; | |
472 | |
473 c1 = (c1 >= 'A' && c1 <= 'Z') ? (c1 | 0x20) : c1; | |
474 c2 = (c2 >= 'A' && c2 <= 'Z') ? (c2 | 0x20) : c2; | |
475 | |
476 if (c1 == c2) { | |
477 | |
478 if (c1) { | |
479 n--; | |
480 continue; | |
481 } | |
482 | |
483 return 0; | |
484 } | |
485 | |
486 return c1 - c2; | |
487 } | |
488 | |
489 return 0; | |
490 } | |
491 | |
492 | |
431 ngx_int_t | 493 ngx_int_t |
432 ngx_rstrncmp(u_char *s1, u_char *s2, size_t n) | 494 ngx_rstrncmp(u_char *s1, u_char *s2, size_t n) |
433 { | 495 { |
434 if (n == 0) { | 496 if (n == 0) { |
435 return 0; | 497 return 0; |