| 755 | } |
| 756 | |
| 757 | txResult* fxReadConfiguration(txPool* pool, char* path) |
| 758 | { |
| 759 | txFeature** address = &(pool->firstFeature); |
| 760 | txFeature* feature = NULL; |
| 761 | txResult* result = NULL; |
| 762 | |
| 763 | FILE* input = fopen(path, "r"); |
| 764 | if (!input) { |
| 765 | fprintf(stderr, "### cannot open: %s\n", path); |
| 766 | c_exit(1); |
| 767 | } |
| 768 | yaml_parser_t _parser; |
| 769 | yaml_parser_t* parser = NULL; |
| 770 | yaml_event_t _event; |
| 771 | yaml_event_t* event = &_event; |
| 772 | if (!yaml_parser_initialize(&_parser)) goto bail; |
| 773 | parser = &_parser; |
| 774 | yaml_parser_set_input_file(parser, input); |
| 775 | yaml_parser_parse(parser, event); |
| 776 | yaml_event_delete(event); |
| 777 | yaml_parser_parse(parser, event); |
| 778 | yaml_event_delete(event); |
| 779 | |
| 780 | yaml_parser_parse(parser, event); |
| 781 | fxCheckEvent(event, YAML_MAPPING_START_EVENT, NULL); |
| 782 | yaml_event_delete(event); |
| 783 | |
| 784 | yaml_parser_parse(parser, event); |
| 785 | fxCheckEvent(event, YAML_SCALAR_EVENT, "mode"); |
| 786 | yaml_event_delete(event); |
| 787 | yaml_parser_parse(parser, event); |
| 788 | fxCheckEvent(event, YAML_SCALAR_EVENT, NULL); |
| 789 | if (!c_strcmp((char*)event->data.scalar.value, "lockdown")) |
| 790 | pool->flags |= XST_LOCKDOWN_FLAG; |
| 791 | else if (!c_strcmp((char*)event->data.scalar.value, "lockdown compartment")) |
| 792 | pool->flags |= XST_LOCKDOWN_FLAG | XST_COMPARTMENT_FLAG; |
| 793 | else if (c_strcmp((char*)event->data.scalar.value, "default")) |
| 794 | fprintf(stderr, "### invalid kind: %s\n", (char*)event->data.scalar.value); |
| 795 | yaml_event_delete(event); |
| 796 | |
| 797 | yaml_parser_parse(parser, event); |
| 798 | fxCheckEvent(event, YAML_SCALAR_EVENT, "skip"); |
| 799 | yaml_event_delete(event); |
| 800 | yaml_parser_parse(parser, event); |
| 801 | fxCheckEvent(event, YAML_SEQUENCE_START_EVENT, NULL); |
| 802 | yaml_event_delete(event); |
| 803 | yaml_parser_parse(parser, event); |
| 804 | while (event->type != YAML_SEQUENCE_END_EVENT) { |
| 805 | fxCheckEvent(event, YAML_SCALAR_EVENT, NULL); |
| 806 | *address = feature = fxNewFeature((char*)event->data.scalar.value); |
| 807 | address = &(feature->next); |
| 808 | yaml_event_delete(event); |
| 809 | yaml_parser_parse(parser, event); |
| 810 | } |
| 811 | yaml_event_delete(event); |
| 812 | |
| 813 | yaml_parser_parse(parser, event); |
| 814 | fxCheckEvent(event, YAML_SCALAR_EVENT, "fail"); |
no test coverage detected