comparison src/core/ngx_string.c @ 1107:db7c468c447d

ngx_strcasecmp()/ngx_strncasecmp()
author Igor Sysoev <igor@sysoev.ru>
date Wed, 14 Feb 2007 18:51:19 +0000
parents ce08bc4cb97b
children 5eae5751507f
comparison
equal deleted inserted replaced
1106:2c7fed12fab7 1107:db7c468c447d
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;