Example #1
0
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);
}
Example #2
0
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;
}
Example #3
0
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;
}
Example #4
0
//
// 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 );
}