comparison src/core/ngx_conf_file.c @ 157:70b36c805682

nginx-0.0.1-2003-10-23-19:54:19 import
author Igor Sysoev <igor@sysoev.ru>
date Thu, 23 Oct 2003 15:54:19 +0000
parents afc333135a6b
children d377ee423603
comparison
equal deleted inserted replaced
156:afc333135a6b 157:70b36c805682
17 NGX_CONF_TAKE5, 17 NGX_CONF_TAKE5,
18 NGX_CONF_TAKE6, 18 NGX_CONF_TAKE6,
19 NGX_CONF_TAKE7, 19 NGX_CONF_TAKE7,
20 NGX_CONF_TAKE8, 20 NGX_CONF_TAKE8,
21 NGX_CONF_TAKE9, 21 NGX_CONF_TAKE9,
22 NGX_CONF_TAKE10
23 }; 22 };
24 23
25 static int ngx_conf_read_token(ngx_conf_t *cf); 24 static int ngx_conf_read_token(ngx_conf_t *cf);
26 25
27 26
623 622
624 char *ngx_conf_set_size_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) 623 char *ngx_conf_set_size_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
625 { 624 {
626 char *p = conf; 625 char *p = conf;
627 626
628 int size, len, scale, *np; 627 int *np;
629 char last;
630 ngx_str_t *value; 628 ngx_str_t *value;
631 629
632 630
633 np = (int *) (p + cmd->offset); 631 np = (int *) (p + cmd->offset);
634
635 if (*np != NGX_CONF_UNSET) { 632 if (*np != NGX_CONF_UNSET) {
636 return "is duplicate"; 633 return "is duplicate";
637 } 634 }
638 635
639 value = (ngx_str_t *) cf->args->elts; 636 value = (ngx_str_t *) cf->args->elts;
640 637
641 len = value[1].len; 638 *np = ngx_parse_size(&value[1]);
642 last = value[1].data[len - 1]; 639 if (*np == NGX_ERROR) {
643
644 switch (last) {
645 case 'K':
646 case 'k':
647 len--;
648 scale = 1024;
649 break;
650
651 case 'M':
652 case 'm':
653 len--;
654 scale = 1024 * 1024;
655 break;
656
657 default:
658 scale = 1;
659 }
660
661 size = ngx_atoi(value[1].data, len);
662 if (size == NGX_ERROR) {
663 return "invalid value"; 640 return "invalid value";
664 } 641 }
665
666 size *= scale;
667 *np = size;
668 642
669 if (cmd->bounds) { 643 if (cmd->bounds) {
670 return cmd->bounds->check(cf, cmd->bounds, np); 644 return cmd->bounds->check(cf, cmd->bounds, np);
671 } 645 }
672 646
683 char last, *start; 657 char last, *start;
684 ngx_str_t *value; 658 ngx_str_t *value;
685 659
686 660
687 np = (int *) (p + cmd->offset); 661 np = (int *) (p + cmd->offset);
688
689 if (*np != NGX_CONF_UNSET) { 662 if (*np != NGX_CONF_UNSET) {
690 return "is duplicate"; 663 return "is duplicate";
691 } 664 }
692 665
693 value = (ngx_str_t *) cf->args->elts; 666 value = (ngx_str_t *) cf->args->elts;
694 start = value[1].data; 667
695 len = 0; 668 *np = ngx_parse_time(&value[1], 0);
696 total = 0; 669 if (*np == NGX_ERROR) {
697 670 return "invalid value";
698 for (i = 0; /* void */ ; i++) { 671 }
699 672
700 if (i < value[1].len) { 673 if (*np == NGX_PARSE_LARGE_TIME) {
701 if (value[1].data[i] != ' ') { 674 return "value must be less than 597 hours";
702 len++; 675 }
703 continue;
704 }
705
706 if (value[1].data[i] == ' ' && len == 0) {
707 start = &value[1].data[i + 1];
708 continue;
709 }
710 }
711
712 if (len == 0) {
713 break;
714 }
715
716 last = value[1].data[i - 1];
717
718 switch (last) {
719 case 'm':
720 len--;
721 max = 35791;
722 scale = 1000 * 60;
723 break;
724
725 case 'h':
726 len--;
727 max = 596;
728 scale = 1000 * 60 * 60;
729 break;
730
731 case 'd':
732 len--;
733 max = 24;
734 scale = 1000 * 60 * 60 * 24;
735 break;
736
737 case 's':
738 len--;
739 if (value[1].data[i - 2] == 'm') {
740 len--;
741 max = 2147483647;
742 scale = 1;
743 break;
744 }
745 /* fall thru */
746
747 default:
748 max = 2147483;
749 scale = 1000;
750 }
751
752 size = ngx_atoi(start, len);
753 if (size < 0) {
754 return "invalid value";
755 }
756
757 if ((u_int) size > max) {
758 return "value must be less than 597 hours";
759 }
760
761 total += size * scale;
762
763 if (i >= value[1].len) {
764 break;
765 }
766
767 len = 0;
768 start = &value[1].data[i + 1];
769 }
770
771 *np = total;
772 676
773 if (cmd->bounds) { 677 if (cmd->bounds) {
774 return cmd->bounds->check(cf, cmd->bounds, np); 678 return cmd->bounds->check(cf, cmd->bounds, np);
775 } 679 }
776 680
787 char last, *start; 691 char last, *start;
788 ngx_str_t *value; 692 ngx_str_t *value;
789 693
790 694
791 np = (int *) (p + cmd->offset); 695 np = (int *) (p + cmd->offset);
792
793 if (*np != NGX_CONF_UNSET) { 696 if (*np != NGX_CONF_UNSET) {
794 return "is duplicate"; 697 return "is duplicate";
795 } 698 }
796 699
797 value = (ngx_str_t *) cf->args->elts; 700 value = (ngx_str_t *) cf->args->elts;
798 start = value[1].data; 701
799 len = 0; 702 *np = ngx_parse_time(&value[1], 1);
800 total = 0; 703 if (*np == NGX_ERROR) {
801 704 return "invalid value";
802 for (i = 0; /* void */ ; i++) { 705 }
803 706
804 if (i < value[1].len) { 707 if (*np == NGX_PARSE_LARGE_TIME) {
805 if (value[1].data[i] != ' ') { 708 return "value must be less than 68 years";
806 len++; 709 }
807 continue;
808 }
809
810 if (value[1].data[i] == ' ' && len == 0) {
811 start = &value[1].data[i + 1];
812 continue;
813 }
814 }
815
816 if (len == 0) {
817 break;
818 }
819
820 last = value[1].data[i - 1];
821
822 switch (last) {
823 case 'm':
824 len--;
825 max = 35791394;
826 scale = 60;
827 break;
828
829 case 'h':
830 len--;
831 max = 596523;
832 scale = 60 * 60;
833 break;
834
835 case 'd':
836 len--;
837 max = 24855;
838 scale = 60 * 60 * 24;
839 break;
840
841 case 'w':
842 len--;
843 max = 3550;
844 scale = 60 * 60 * 24 * 7;
845 break;
846
847 case 'M':
848 len--;
849 max = 828;
850 scale = 60 * 60 * 24 * 30;
851 break;
852
853 case 'y':
854 len--;
855 max = 68;
856 scale = 60 * 60 * 24 * 365;
857 break;
858
859 case 's':
860 len--;
861 /* fall thru */
862
863 default:
864 max = 2147483647;
865 scale = 1;
866 }
867
868 size = ngx_atoi(start, len);
869 if (size < 0) {
870 return "invalid value";
871 }
872
873 if ((u_int) size > max) {
874 return "value must be less than 68 years";
875 }
876
877 total += size * scale;
878
879 if (i >= value[1].len) {
880 break;
881 }
882
883 len = 0;
884 start = &value[1].data[i + 1];
885 }
886
887 *np = total;
888 710
889 if (cmd->bounds) { 711 if (cmd->bounds) {
890 return cmd->bounds->check(cf, cmd->bounds, np); 712 return cmd->bounds->check(cf, cmd->bounds, np);
891 } 713 }
892 714
896 718
897 char *ngx_conf_set_bufs_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) 719 char *ngx_conf_set_bufs_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
898 { 720 {
899 char *p = conf; 721 char *p = conf;
900 722
901 int len, scale;
902 char last;
903 ngx_str_t *value; 723 ngx_str_t *value;
904 ngx_bufs_t *bufs; 724 ngx_bufs_t *bufs;
905 725
906 726
907 bufs = (ngx_bufs_t *) (p + cmd->offset); 727 bufs = (ngx_bufs_t *) (p + cmd->offset);
908
909 if (bufs->num) { 728 if (bufs->num) {
910 return "is duplicate"; 729 return "is duplicate";
911 } 730 }
912 731
913 value = (ngx_str_t *) cf->args->elts; 732 value = (ngx_str_t *) cf->args->elts;
915 bufs->num = ngx_atoi(value[1].data, value[1].len); 734 bufs->num = ngx_atoi(value[1].data, value[1].len);
916 if (bufs->num == NGX_ERROR || bufs->num == 0) { 735 if (bufs->num == NGX_ERROR || bufs->num == 0) {
917 return "invalid value"; 736 return "invalid value";
918 } 737 }
919 738
920 len = value[2].len; 739 bufs->size = ngx_parse_size(&value[2]);
921 last = value[2].data[len - 1];
922
923 switch (last) {
924 case 'K':
925 case 'k':
926 len--;
927 scale = 1024;
928 break;
929
930 case 'M':
931 case 'm':
932 len--;
933 scale = 1024 * 1024;
934 break;
935
936 default:
937 scale = 1;
938 }
939
940 bufs->size = ngx_atoi(value[2].data, len);
941 if (bufs->size == NGX_ERROR || bufs->size == 0) { 740 if (bufs->size == NGX_ERROR || bufs->size == 0) {
942 return "invalid value"; 741 return "invalid value";
943 } 742 }
944 743
945 bufs->size *= scale;
946
947 return NGX_CONF_OK; 744 return NGX_CONF_OK;
948 } 745 }
949 746
950 747
951 char *ngx_conf_unsupported(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) 748 char *ngx_conf_unsupported(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)