Changeset 210


Ignore:
Timestamp:
07/21/06 14:29:00 (8 years ago)
Author:
xi
Message:

Fix some leaks, segfaults and warnings.

Location:
libyaml/trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • libyaml/trunk/src/api.c

    r208 r210  
    368368        case YAML_SCALAR_TOKEN: 
    369369            yaml_free(token->data.scalar.value); 
     370            break; 
     371 
     372        default: 
    370373            break; 
    371374    } 
     
    417420            yaml_free(event->data.mapping_start.tag); 
    418421            break; 
     422 
     423        default: 
     424            break; 
    419425    } 
    420426 
  • libyaml/trunk/src/parser.c

    r208 r210  
    364364            assert(1);      /* Invalid state. */ 
    365365    } 
     366 
     367    return 0; 
    366368} 
    367369 
     
    13591361        if (STACK_EMPTY(parser, tag_directives)) { 
    13601362            *tag_directives_start_ref = *tag_directives_end_ref = NULL; 
     1363            STACK_DEL(parser, tag_directives); 
    13611364        } 
    13621365        else { 
    13631366            *tag_directives_start_ref = tag_directives.start; 
    1364             *tag_directives_end_ref = tag_directives.end; 
    1365         } 
     1367            *tag_directives_end_ref = tag_directives.top; 
     1368        } 
     1369    } 
     1370    else { 
     1371        STACK_DEL(parser, tag_directives); 
    13661372    } 
    13671373 
     
    13851391    yaml_tag_directive_t *tag_directive; 
    13861392    yaml_tag_directive_t copy = { NULL, NULL }; 
    1387     int length; 
    13881393 
    13891394    for (tag_directive = parser->tag_directives.start; 
  • libyaml/trunk/src/reader.c

    r208 r210  
    187187        while (parser->raw_buffer.pointer != parser->raw_buffer.last) 
    188188        { 
    189             unsigned int value, value2; 
     189            unsigned int value = 0, value2 = 0; 
    190190            int incomplete = 0; 
    191191            unsigned char octet; 
    192             unsigned int width; 
     192            unsigned int width = 0; 
    193193            int k, low, high; 
    194194            int raw_unread = parser->raw_buffer.last - parser->raw_buffer.pointer; 
     
    367367                        /* Get the next character. */ 
    368368 
    369                         unsigned int value2 = parser->raw_buffer.pointer[low+2] 
     369                        value2 = parser->raw_buffer.pointer[low+2] 
    370370                            + (parser->raw_buffer.pointer[high+2] << 8); 
    371371 
     
    387387 
    388388                    break; 
     389 
     390                default: 
     391                    assert(1);      /* Impossible. */ 
    389392            } 
    390393 
  • libyaml/trunk/src/scanner.c

    r208 r210  
    36023602    if (!STRING_INIT(parser, whitespaces, INITIAL_STRING_SIZE)) goto error; 
    36033603 
    3604     start_mark = parser->mark; 
     3604    start_mark = end_mark = parser->mark; 
    36053605 
    36063606    /* Consume the content of the plain scalar. */ 
  • libyaml/trunk/tests/run-parser.c

    r208 r210  
    88main(int argc, char *argv[]) 
    99{ 
    10     FILE *file; 
    11     yaml_parser_t parser; 
    12     yaml_event_t event; 
    13     int done = 0; 
    14     int count = 0; 
     10    int number; 
    1511 
    16     if (argc != 2) { 
    17         printf("Usage: %s file.yaml\n", argv[0]); 
     12    if (argc < 2) { 
     13        printf("Usage: %s file1.yaml ...\n", argv[0]); 
    1814        return 0; 
    1915    } 
    20     file = fopen(argv[1], "rb"); 
    21     assert(file); 
    2216 
    23     assert(yaml_parser_initialize(&parser)); 
     17    for (number = 1; number < argc; number ++) 
     18    { 
     19        FILE *file; 
     20        yaml_parser_t parser; 
     21        yaml_event_t event; 
     22        int done = 0; 
     23        int count = 0; 
     24        int error = 0; 
    2425 
    25     yaml_parser_set_input_file(&parser, file); 
     26        printf("[%d] Parsing '%s': ", number, argv[number]); 
     27        fflush(stdout); 
    2628 
    27     while (!done) 
    28     { 
    29         assert(yaml_parser_parse(&parser, &event)); 
     29        file = fopen(argv[number], "rb"); 
     30        assert(file); 
    3031 
    31         done = (event.type == YAML_STREAM_END_EVENT); 
     32        assert(yaml_parser_initialize(&parser)); 
    3233 
    33         yaml_event_delete(&event); 
     34        yaml_parser_set_input_file(&parser, file); 
    3435 
    35         count ++; 
     36        while (!done) 
     37        { 
     38            if (!yaml_parser_parse(&parser, &event)) { 
     39                error = 1; 
     40                break; 
     41            } 
     42 
     43            done = (event.type == YAML_STREAM_END_EVENT); 
     44 
     45            yaml_event_delete(&event); 
     46 
     47            count ++; 
     48        } 
     49 
     50        yaml_parser_delete(&parser); 
     51 
     52        assert(!fclose(file)); 
     53 
     54        printf("%s (%d events)\n", (error ? "FAILURE" : "SUCCESS"), count); 
    3655    } 
    37  
    38     yaml_parser_delete(&parser); 
    39  
    40     fclose(file); 
    41  
    42     printf("Parsing the file '%s': %d events\n", argv[1], count); 
    4356 
    4457    return 0; 
  • libyaml/trunk/tests/run-scanner.c

    r208 r210  
    88main(int argc, char *argv[]) 
    99{ 
    10     FILE *file; 
    11     yaml_parser_t parser; 
    12     yaml_token_t token; 
    13     int done = 0; 
    14     int count = 0; 
     10    int number; 
    1511 
    16     if (argc != 2) { 
    17         printf("Usage: %s file.yaml\n", argv[0]); 
     12    if (argc < 2) { 
     13        printf("Usage: %s file1.yaml ...\n", argv[0]); 
    1814        return 0; 
    1915    } 
    20     file = fopen(argv[1], "rb"); 
    21     assert(file); 
    2216 
    23     assert(yaml_parser_initialize(&parser)); 
     17    for (number = 1; number < argc; number ++) 
     18    { 
     19        FILE *file; 
     20        yaml_parser_t parser; 
     21        yaml_token_t token; 
     22        int done = 0; 
     23        int count = 0; 
     24        int error = 0; 
    2425 
    25     yaml_parser_set_input_file(&parser, file); 
     26        printf("[%d] Scanning '%s': ", number, argv[number]); 
     27        fflush(stdout); 
    2628 
    27     while (!done) 
    28     { 
    29         assert(yaml_parser_scan(&parser, &token)); 
     29        file = fopen(argv[number], "rb"); 
     30        assert(file); 
    3031 
    31         done = (token.type == YAML_STREAM_END_TOKEN); 
     32        assert(yaml_parser_initialize(&parser)); 
    3233 
    33         yaml_token_delete(&token); 
     34        yaml_parser_set_input_file(&parser, file); 
    3435 
    35         count ++; 
     36        while (!done) 
     37        { 
     38            if (!yaml_parser_scan(&parser, &token)) { 
     39                error = 1; 
     40                break; 
     41            } 
     42 
     43            done = (token.type == YAML_STREAM_END_TOKEN); 
     44 
     45            yaml_token_delete(&token); 
     46 
     47            count ++; 
     48        } 
     49 
     50        yaml_parser_delete(&parser); 
     51 
     52        assert(!fclose(file)); 
     53 
     54        printf("%s (%d tokens)\n", (error ? "FAILURE" : "SUCCESS"), count); 
    3655    } 
    37  
    38     yaml_parser_delete(&parser); 
    39  
    40     fclose(file); 
    41  
    42     printf("Parsing the file '%s': %d tokens\n", argv[1], count); 
    4356 
    4457    return 0; 
Note: See TracChangeset for help on using the changeset viewer.