static SYMID rpmsyck_parse_handler(SyckParser *p, SyckNode *n) { rpmsyck_node node = (rpmsyck_node) xcalloc(1, sizeof(*node)); switch (n->kind) { case syck_str_kind: node->type = T_STR; node->value.key = syck_strndup(n->data.str->ptr, n->data.str->len); break; case syck_seq_kind: { rpmsyck_node val; rpmsyck_node seq = (rpmsyck_node) xcalloc(n->data.list->idx + 1, sizeof(*node)); int i; node->type = T_SEQ; for (i = 0; i < n->data.list->idx; i++) { SYMID oid = syck_seq_read(n, i); syck_lookup_sym(p, oid, (char **)&val); seq[i] = val[0]; } seq[n->data.list->idx].type = T_END; node->value.seq = seq; } break; case syck_map_kind: { hashTable ht = htCreate(n->data.pairs->idx * 2, 0, 0, NULL, NULL); rpmsyck_node val; int i; node->type = T_MAP; for (i = 0; i < n->data.pairs->idx; i++) { char *key; SYMID oid = syck_map_read(n, map_key, i); syck_lookup_sym(p, oid, (char **)&val); key = val[0].value.key; oid = syck_map_read(n, map_value, i); syck_lookup_sym(p, oid, (char **)&val); htAddEntry(ht, key, val); } node->value.map = ht; } break; } node->tag = n->type_id ? syck_strndup(n->type_id, strlen(n->type_id)) : NULL; return syck_add_sym(p, (char *) node); }
enum st_retval ListAnchors( char *key, SyckNode *n, CuTest *tc ) { char *sd = syck_strndup( n->data.str->ptr, n->data.str->len ); CuAssertStrEquals( tc, "test", key ); CuAssertStrEquals( tc, "13", sd ); free( sd ); return ST_CONTINUE; }
static SyckNode * py_syck_node_alloc( enum syck_kind_tag kind, char *type_id, PyObject *value ) { SyckNode *self; self = PyObject_NEW( SyckNode, &SyckNodeType ); if ( self == NULL ) return NULL; self->kind = kind; self->type_id = syck_strndup( type_id, strlen( type_id ) ); self->id = 0; Py_XINCREF( value ); self->shortcut = (void *)value; return self; }
// // 1. Test the buffering -- read 4 bytes at a time // void TestSyckReadString( CuTest *tc ) { SyckParser *parser; char *tmp; int len = 0; parser = syck_new_parser(); syck_parser_str_auto( parser, "test: 1\nand: 2\nalso: 3", syck_io_str_read ); len = syck_parser_readlen( parser, 4 ); CuAssert( tc, "Wrong length, line 1.", 4 == len ); parser->token = parser->buffer + 4; tmp = syck_strndup( parser->buffer, len ); CuAssertStrEquals( tc, "test", tmp ); free( tmp ); len = syck_parser_readlen( parser, 4 ); CuAssert( tc, "Wrong length, line 2.", 4 == len ); parser->token = parser->buffer + 4; tmp = syck_strndup( parser->buffer, len ); CuAssertStrEquals( tc, ": 1\n", tmp ); free( tmp ); len = syck_parser_readlen( parser, 4 ); CuAssert( tc, "Wrong length, line 3.", 4 == len ); parser->token = parser->buffer + 4; tmp = syck_strndup( parser->buffer, len ); CuAssertStrEquals( tc, "and:", tmp ); free( tmp ); len = syck_parser_readlen( parser, 4 ); CuAssert( tc, "Wrong length, line 4.", 4 == len ); parser->token = parser->buffer + 4; tmp = syck_strndup( parser->buffer, len ); CuAssertStrEquals( tc, " 2\na", tmp ); free( tmp ); len = syck_parser_readlen( parser, 4 ); CuAssert( tc, "Wrong length, line 5.", 4 == len ); parser->token = parser->buffer + 4; tmp = syck_strndup( parser->buffer, len ); CuAssertStrEquals( tc, "lso:", tmp ); free( tmp ); len = syck_parser_readlen( parser, 4 ); CuAssert( tc, "Wrong length, line 6.", 2 == len ); parser->token = parser->buffer + 4; tmp = syck_strndup( parser->buffer, len ); CuAssertStrEquals( tc, " 3", tmp ); free( tmp ); free_any_io( parser ); syck_free_parser( parser ); }