Mercurial > hg > nginx
comparison src/core/ngx_conf_file.c @ 98:c9b243802a17
nginx-0.0.1-2003-05-30-18:27:59 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 30 May 2003 14:27:59 +0000 |
parents | a23d010f356d |
children | a059e1aa65d4 |
comparison
equal
deleted
inserted
replaced
97:70d2345a903f | 98:c9b243802a17 |
---|---|
18 static int ngx_conf_read_token(ngx_conf_t *cf); | 18 static int ngx_conf_read_token(ngx_conf_t *cf); |
19 | 19 |
20 | 20 |
21 char *ngx_conf_parse(ngx_conf_t *cf, ngx_str_t *filename) | 21 char *ngx_conf_parse(ngx_conf_t *cf, ngx_str_t *filename) |
22 { | 22 { |
23 int m, rc, found; | 23 int m, rc, found, valid; |
24 char *rv; | 24 char *rv; |
25 void *conf, **confp; | 25 void *conf, **confp; |
26 ngx_str_t *name; | 26 ngx_str_t *name; |
27 ngx_fd_t fd; | 27 ngx_fd_t fd; |
28 ngx_conf_file_t *prev; | 28 ngx_conf_file_t *prev; |
137 return NGX_CONF_ERROR; | 137 return NGX_CONF_ERROR; |
138 } | 138 } |
139 | 139 |
140 /* is the directive's argument count right ? */ | 140 /* is the directive's argument count right ? */ |
141 | 141 |
142 if (!(cmd->type & NGX_CONF_ANY) | 142 if (cmd->type & argument_number[cf->args->nelts - 1]) { |
143 && ((cmd->type & NGX_CONF_FLAG && cf->args->nelts != 2) | 143 valid = 1; |
144 || (!(cmd->type & NGX_CONF_FLAG) | 144 |
145 && !(cmd->type | 145 } else if (cmd->type & NGX_CONF_ANY1) { |
146 & argument_number[cf->args->nelts - 1]) | 146 |
147 ) | 147 if (cf->args->nelts != 1) { |
148 ) | 148 valid = 1; |
149 ) | 149 } else { |
150 { | 150 valid = 0; |
151 } | |
152 | |
153 } else if (cmd->type & NGX_CONF_FLAG) { | |
154 | |
155 if (cf->args->nelts == 2) { | |
156 valid = 1; | |
157 } else { | |
158 valid = 0; | |
159 } | |
160 | |
161 } else if (cmd->type & NGX_CONF_ANY) { | |
162 valid = 1; | |
163 | |
164 } else { | |
165 valid = 0; | |
166 } | |
167 | |
168 if (!valid) { | |
151 ngx_log_error(NGX_LOG_EMERG, cf->log, 0, | 169 ngx_log_error(NGX_LOG_EMERG, cf->log, 0, |
152 "invalid number arguments in " | 170 "invalid number arguments in " |
153 "directive \"%s\" in %s:%d", | 171 "directive \"%s\" in %s:%d", |
154 name->data, | 172 name->data, |
155 cf->conf_file->file.name.data, | 173 cf->conf_file->file.name.data, |
439 } | 457 } |
440 | 458 |
441 | 459 |
442 char *ngx_conf_set_flag_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) | 460 char *ngx_conf_set_flag_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) |
443 { | 461 { |
462 char *p = conf; | |
463 | |
444 int flag; | 464 int flag; |
445 ngx_str_t *value; | 465 ngx_str_t *value; |
446 | 466 |
447 if (*(int *) (conf + cmd->offset) != NGX_CONF_UNSET) { | 467 if (*(int *) (p + cmd->offset) != NGX_CONF_UNSET) { |
448 return "is duplicate"; | 468 return "is duplicate"; |
449 } | 469 } |
450 | 470 |
451 value = (ngx_str_t *) cf->args->elts; | 471 value = (ngx_str_t *) cf->args->elts; |
452 | 472 |
455 | 475 |
456 } else if (ngx_strcasecmp(value[1].data, "off") == 0) { | 476 } else if (ngx_strcasecmp(value[1].data, "off") == 0) { |
457 flag = 0; | 477 flag = 0; |
458 | 478 |
459 } else { | 479 } else { |
460 return "must be \"on\" or \"off\""; | 480 ngx_snprintf(ngx_conf_errstr, sizeof(ngx_conf_errstr) - 1, |
461 } | 481 "invalid value \"%s\", it must be \"on\" or \"off\"", |
462 | 482 value[1].data); |
463 *(int *) (conf + cmd->offset) = flag; | 483 return ngx_conf_errstr; |
484 } | |
485 | |
486 *(int *) (p + cmd->offset) = flag; | |
464 | 487 |
465 return NGX_CONF_OK; | 488 return NGX_CONF_OK; |
466 } | 489 } |
467 | 490 |
468 | 491 |
469 char *ngx_conf_set_str_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) | 492 char *ngx_conf_set_str_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) |
470 { | 493 { |
494 char *p = conf; | |
495 | |
471 ngx_str_t *field, *value; | 496 ngx_str_t *field, *value; |
472 | 497 |
473 field = (ngx_str_t *) (conf + cmd->offset); | 498 field = (ngx_str_t *) (p + cmd->offset); |
474 | 499 |
475 if (field->data) { | 500 if (field->data) { |
476 return "is duplicate"; | 501 return "is duplicate"; |
477 } | 502 } |
478 | 503 |
485 } | 510 } |
486 | 511 |
487 | 512 |
488 char *ngx_conf_set_num_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) | 513 char *ngx_conf_set_num_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) |
489 { | 514 { |
515 char *p = conf; | |
516 | |
490 int num, len; | 517 int num, len; |
491 ngx_str_t *value; | 518 ngx_str_t *value; |
492 | 519 |
493 if (*(int *) (conf + cmd->offset) != NGX_CONF_UNSET) { | 520 if (*(int *) (p + cmd->offset) != NGX_CONF_UNSET) { |
494 return "is duplicate"; | 521 return "is duplicate"; |
495 } | 522 } |
496 | 523 |
497 value = (ngx_str_t *) cf->args->elts; | 524 value = (ngx_str_t *) cf->args->elts; |
498 | 525 |
499 len = value[1].len; | 526 len = value[1].len; |
500 | 527 |
501 num = ngx_atoi(value[1].data, len); | 528 num = ngx_atoi(value[1].data, len); |
502 if (num == NGX_ERROR) { | 529 if (num == NGX_ERROR) { |
503 return "invalid value"; | 530 return "invalid number"; |
504 } | 531 } |
505 | 532 |
506 *(int *) (conf + cmd->offset) = num; | 533 *(int *) (p + cmd->offset) = num; |
507 | 534 |
508 return NGX_CONF_OK; | 535 return NGX_CONF_OK; |
509 } | 536 } |
510 | 537 |
511 | 538 |
512 char *ngx_conf_set_size_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) | 539 char *ngx_conf_set_size_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) |
513 { | 540 { |
541 char *p = conf; | |
542 | |
514 int size, len, scale; | 543 int size, len, scale; |
515 char last; | 544 char last; |
516 ngx_str_t *value; | 545 ngx_str_t *value; |
517 | 546 |
518 if (*(int *) (conf + cmd->offset) != NGX_CONF_UNSET) { | 547 if (*(int *) (p + cmd->offset) != NGX_CONF_UNSET) { |
519 return "is duplicate"; | 548 return "is duplicate"; |
520 } | 549 } |
521 | 550 |
522 value = (ngx_str_t *) cf->args->elts; | 551 value = (ngx_str_t *) cf->args->elts; |
523 | 552 |
546 return "invalid value"; | 575 return "invalid value"; |
547 } | 576 } |
548 | 577 |
549 size *= scale; | 578 size *= scale; |
550 | 579 |
551 *(int *) (conf + cmd->offset) = size; | 580 *(int *) (p + cmd->offset) = size; |
552 | 581 |
553 return NGX_CONF_OK; | 582 return NGX_CONF_OK; |
554 } | 583 } |
555 | 584 |
556 | 585 |
557 char *ngx_conf_set_msec_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) | 586 char *ngx_conf_set_msec_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) |
558 { | 587 { |
588 char *p = conf; | |
589 | |
559 int size, total, len, scale; | 590 int size, total, len, scale; |
560 u_int max, i; | 591 u_int max, i; |
561 char last, *start; | 592 char last, *start; |
562 ngx_str_t *value; | 593 ngx_str_t *value; |
563 | 594 |
564 if (*(int *) (conf + cmd->offset) != NGX_CONF_UNSET) { | 595 if (*(int *) (p + cmd->offset) != NGX_CONF_UNSET) { |
565 return "is duplicate"; | 596 return "is duplicate"; |
566 } | 597 } |
567 | 598 |
568 value = (ngx_str_t *) cf->args->elts; | 599 value = (ngx_str_t *) cf->args->elts; |
569 start = value[1].data; | 600 start = value[1].data; |
641 | 672 |
642 len = 0; | 673 len = 0; |
643 start = &value[1].data[i + 1]; | 674 start = &value[1].data[i + 1]; |
644 } | 675 } |
645 | 676 |
646 *(int *) (conf + cmd->offset) = total; | 677 *(int *) (p + cmd->offset) = total; |
647 | 678 |
648 return NGX_CONF_OK; | 679 return NGX_CONF_OK; |
649 } | 680 } |
650 | 681 |
651 | 682 |
652 char *ngx_conf_set_sec_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) | 683 char *ngx_conf_set_sec_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) |
653 { | 684 { |
685 char *p = conf; | |
686 | |
654 int size, total, len, scale; | 687 int size, total, len, scale; |
655 u_int max, i; | 688 u_int max, i; |
656 char last, *start; | 689 char last, *start; |
657 ngx_str_t *value; | 690 ngx_str_t *value; |
658 | 691 |
659 if (*(int *) (conf + cmd->offset) != NGX_CONF_UNSET) { | 692 if (*(int *) (p + cmd->offset) != NGX_CONF_UNSET) { |
660 return "is duplicate"; | 693 return "is duplicate"; |
661 } | 694 } |
662 | 695 |
663 value = (ngx_str_t *) cf->args->elts; | 696 value = (ngx_str_t *) cf->args->elts; |
664 start = value[1].data; | 697 start = value[1].data; |
748 | 781 |
749 len = 0; | 782 len = 0; |
750 start = &value[1].data[i + 1]; | 783 start = &value[1].data[i + 1]; |
751 } | 784 } |
752 | 785 |
753 *(int *) (conf + cmd->offset) = total; | 786 *(int *) (p + cmd->offset) = total; |
754 | 787 |
755 return NGX_CONF_OK; | 788 return NGX_CONF_OK; |
756 } | 789 } |
757 | 790 |
758 | 791 |