comparison src/core/ngx_conf_file.c @ 84:fab4cb00fe5b

nginx-0.0.1-2003-05-06-21:03:16 import
author Igor Sysoev <igor@sysoev.ru>
date Tue, 06 May 2003 17:03:16 +0000
parents a7e45c45a95c
children 674d333f4296
comparison
equal deleted inserted replaced
83:a7e45c45a95c 84:fab4cb00fe5b
439 value = (ngx_str_t *) cf->args->elts; 439 value = (ngx_str_t *) cf->args->elts;
440 440
441 len = value[1].len; 441 len = value[1].len;
442 last = value[1].data[len - 1]; 442 last = value[1].data[len - 1];
443 443
444 if (last == 'K' || last == 'k') { 444 switch (last) {
445 case 'K':
446 case 'k':
445 len--; 447 len--;
446 scale = 1024; 448 scale = 1024;
447 449 break;
448 } else if (last == 'M' || last == 'm') { 450
451 case 'M':
452 case 'm':
449 len--; 453 len--;
450 scale = 1024 * 1024; 454 scale = 1024 * 1024;
451 455 break;
452 } else { 456
457 default:
453 scale = 1; 458 scale = 1;
454 } 459 }
455 460
456 size = ngx_atoi(value[1].data, len); 461 size = ngx_atoi(value[1].data, len);
457 if (size == NGX_ERROR) { 462 if (size == NGX_ERROR) {
458 return "value must be greater or equal to zero"; 463 return "invalid value";
459 } 464 }
460 465
461 size *= scale; 466 size *= scale;
462 467
463 *(int *) (conf + cmd->offset) = size; 468 *(int *) (conf + cmd->offset) = size;
464 469
465 return NGX_CONF_OK; 470 return NGX_CONF_OK;
466 } 471 }
467 472
468 473
469 char *ngx_conf_set_time_slot(ngx_conf_t *cf, ngx_command_t *cmd, char *conf) 474 char *ngx_conf_set_msec_slot(ngx_conf_t *cf, ngx_command_t *cmd, char *conf)
470 { 475 {
471 int size, len, scale; 476 int size, total, len, scale, i;
472 char last; 477 u_int max;
478 char last, *start;
473 ngx_str_t *value; 479 ngx_str_t *value;
474 480
475 value = (ngx_str_t *) cf->args->elts; 481 value = (ngx_str_t *) cf->args->elts;
476 482 start = value[1].data;
477 len = value[1].len; 483 len = 0;
478 last = value[1].data[len - 1]; 484 total = 0;
479 485
480 if (last == 'm') { 486 for (i = 0; /* void */ ; i++) {
481 len--; 487
482 scale = 1000 * 60; 488 if (i < value[1].len) {
483 489 if (value[1].data[i] != ' ') {
484 } else if (last == 'h') { 490 len++;
485 len--; 491 continue;
486 scale = 1000 * 60 * 60; 492 }
487 493
488 } else if (last == 'd') { 494 if (value[1].data[i] == ' ' && len == 0) {
489 len--; 495 start = &value[1].data[i + 1];
490 scale = 1000 * 60 * 60 * 24; 496 continue;
491 497 }
492 } else if (last == 'w') { 498 }
493 len--; 499
494 scale = 1000 * 60 * 60 * 24 * 7; 500 if (len == 0) {
495 501 break;
496 #if 0 /* overflow */ 502 }
497 503
498 } else if (last == 'M') { 504 last = value[1].data[i - 1];
499 len--; 505
500 scale = 1000 * 60 * 60 * 24 * 30; 506 switch (last) {
501 507 case 'm':
502 } else if (last == 'y') { 508 len--;
503 len--; 509 max = 35791;
504 scale = 1000 * 60 * 60 * 24 * 365; 510 scale = 1000 * 60;
505 511 break;
506 #endif 512
507 513 case 'h':
508 } else if (last == 's') { 514 len--;
509 len--; 515 max = 596;
510 if (value[1].data[len - 1] == 'm') { 516 scale = 1000 * 60 * 60;
511 len--; 517 break;
518
519 case 'd':
520 len--;
521 max = 24;
522 scale = 1000 * 60 * 60 * 24;
523 break;
524
525 case 's':
526 len--;
527 if (value[1].data[i - 2] == 'm') {
528 len--;
529 max = 2147483647;
530 scale = 1;
531 break;
532 }
533 /* fall thru */
534
535 default:
536 max = 2147483;
537 scale = 1000;
538 }
539
540 size = ngx_atoi(start, len);
541 if (size < 0) {
542 return "invalid value";
543 }
544
545 if ((u_int) size > max) {
546 return "value must be less than 597 hours";
547 }
548
549 total += size * scale;
550
551 if (i >= value[1].len) {
552 break;
553 }
554
555 len = 0;
556 start = &value[1].data[i + 1];
557 }
558
559 *(int *) (conf + cmd->offset) = total;
560
561 return NGX_CONF_OK;
562 }
563
564
565 char *ngx_conf_set_sec_slot(ngx_conf_t *cf, ngx_command_t *cmd, char *conf)
566 {
567 int size, total, len, scale, i;
568 u_int max;
569 char last, *start;
570 ngx_str_t *value;
571
572 value = (ngx_str_t *) cf->args->elts;
573 start = value[1].data;
574 len = 0;
575 total = 0;
576
577 for (i = 0; /* void */ ; i++) {
578
579 if (i < value[1].len) {
580 if (value[1].data[i] != ' ') {
581 len++;
582 continue;
583 }
584
585 if (value[1].data[i] == ' ' && len == 0) {
586 start = &value[1].data[i + 1];
587 continue;
588 }
589 }
590
591 if (len == 0) {
592 break;
593 }
594
595 last = value[1].data[i - 1];
596
597 switch (last) {
598 case 'm':
599 len--;
600 max = 35791394;
601 scale = 60;
602 break;
603
604 case 'h':
605 len--;
606 max = 596523;
607 scale = 60 * 60;
608 break;
609
610 case 'd':
611 len--;
612 max = 24855;
613 scale = 60 * 60 * 24;
614 break;
615
616 case 'w':
617 len--;
618 max = 3550;
619 scale = 60 * 60 * 24 * 7;
620 break;
621
622 case 'M':
623 len--;
624 max = 828;
625 scale = 60 * 60 * 24 * 30;
626 break;
627
628 case 'y':
629 len--;
630 max = 68;
631 scale = 60 * 60 * 24 * 365;
632 break;
633
634 case 's':
635 len--;
636 /* fall thru */
637
638 default:
639 max = 2147483647;
512 scale = 1; 640 scale = 1;
513 641 }
514 } else { 642
515 scale = 1000; 643 size = ngx_atoi(start, len);
516 } 644 if (size < 0) {
517 645 return "invalid value";
518 } else { 646 }
519 scale = 1000; 647
520 } 648 if ((u_int) size > max) {
521 649 return "value must be less than 68 years";
522 size = ngx_atoi(value[1].data, len); 650 }
523 if (size < 0) { 651
524 return "value must be greater or equal to zero"; 652 total += size * scale;
525 } 653
526 654 if (i >= value[1].len) {
527 size *= scale; 655 break;
528 656 }
529 *(int *) (conf + cmd->offset) = size; 657
658 len = 0;
659 start = &value[1].data[i + 1];
660 }
661
662 *(int *) (conf + cmd->offset) = total;
530 663
531 return NGX_CONF_OK; 664 return NGX_CONF_OK;
532 } 665 }
533 666
667
534 char *ngx_conf_unsupported(ngx_conf_t *cf, ngx_command_t *cmd, char *conf) 668 char *ngx_conf_unsupported(ngx_conf_t *cf, ngx_command_t *cmd, char *conf)
535 { 669 {
536 return "unsupported on this platform"; 670 return "unsupported on this platform";
537 } 671 }