Mercurial > hg > nginx
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) |