Exemplo n.º 1
0
int
fatso_configuration_parse(struct fatso_configuration* e, struct yaml_document_s* doc, struct yaml_node_s* node, char** out_error_message) {
  int r = 0;

  yaml_node_t* dependencies = fatso_yaml_mapping_lookup(doc, node, "dependencies");
  if (dependencies && dependencies->type == YAML_SEQUENCE_NODE) {
    size_t len = fatso_yaml_sequence_length(dependencies);
    if (len != 0) {
      e->dependencies.size = len;
      e->dependencies.data = fatso_calloc(len, sizeof(struct fatso_dependency));
      for (size_t i = 0; i < len; ++i) {
        r = fatso_dependency_parse(&e->dependencies.data[i], doc, fatso_yaml_sequence_lookup(doc, dependencies, i), out_error_message);
        if (r != 0)
          goto out;
      }
    }
  }

  yaml_node_t* defines = fatso_yaml_mapping_lookup(doc, node, "defines");
  if (defines && defines->type == YAML_MAPPING_NODE) {
    size_t len = fatso_yaml_mapping_length(defines);
    if (len != 0) {
      e->defines.size = len;
      e->defines.data = fatso_calloc(len, sizeof(struct fatso_define));
      for (size_t i = 0; i < len; ++i) {
        yaml_node_pair_t* pair = &defines->data.mapping.pairs.start[i];
        yaml_node_t* key = yaml_document_get_node(doc, pair->key);
        yaml_node_t* value = yaml_document_get_node(doc, pair->value);
        e->defines.data[i].key = fatso_yaml_scalar_strdup(key);
        e->defines.data[i].value = fatso_yaml_scalar_strdup(value);
      }
    }
  }

out:
  return r;
}
Exemplo n.º 2
0
yaml_node_t*
fatso_yaml_traverse(yaml_document_t* doc, yaml_node_t* node, const char *keys[], size_t num_keys) {
  yaml_node_t* p = node;
  for (size_t i = 0; i < num_keys; ++i) {
    if (p->type == YAML_MAPPING_NODE) {
      p = fatso_yaml_mapping_lookup(doc, p, keys[i]);
      if (p == NULL) {
        break;
      }
    } else {
      return NULL;
    }
  }
  return p;
}