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