src/url_test.c
author Tero Marttila <terom@fixme.fi>
Thu, 09 Oct 2008 00:49:32 +0300
changeset 17 0a024b29b16d
parent 16 74fb62022fb3
child 18 b12e78767248
permissions -rw-r--r--
more tests and tweaks
15
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
#include <stdlib.h>
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
#include <stdio.h>
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
#include <string.h>
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
#include "lib/url.h"
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
16
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
     8
#define FAIL(...) do { printf("FAIL: "); printf(__VA_ARGS__); printf("\n"); return -1; } while (0)
15
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
17
0a024b29b16d more tests and tweaks
Tero Marttila <terom@fixme.fi>
parents: 16
diff changeset
    10
struct url_schema
0a024b29b16d more tests and tweaks
Tero Marttila <terom@fixme.fi>
parents: 16
diff changeset
    11
    basic_http = { 1, { "http" } },
0a024b29b16d more tests and tweaks
Tero Marttila <terom@fixme.fi>
parents: 16
diff changeset
    12
    svn_ssh = { 2, { "svn", "ssh" } };
15
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
struct url_test {
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
    const char *url;
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
    const struct url expected;
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
} url_tests[] = {
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
    {   "localhost:http",   {
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
        NULL, NULL, NULL, "localhost", "http", NULL, NULL
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
    } },
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
16
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
    22
    {   "http://example.com/path",  {
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
    23
        &basic_http, NULL, NULL, "example.com", NULL, "path", NULL 
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
    24
    } },
17
0a024b29b16d more tests and tweaks
Tero Marttila <terom@fixme.fi>
parents: 16
diff changeset
    25
0a024b29b16d more tests and tweaks
Tero Marttila <terom@fixme.fi>
parents: 16
diff changeset
    26
    {   "svn+ssh://user:passwd@someplace:someport/something",   {
0a024b29b16d more tests and tweaks
Tero Marttila <terom@fixme.fi>
parents: 16
diff changeset
    27
        &svn_ssh, "user", "passwd", "someplace", "someport", "something"
0a024b29b16d more tests and tweaks
Tero Marttila <terom@fixme.fi>
parents: 16
diff changeset
    28
    } },
0a024b29b16d more tests and tweaks
Tero Marttila <terom@fixme.fi>
parents: 16
diff changeset
    29
0a024b29b16d more tests and tweaks
Tero Marttila <terom@fixme.fi>
parents: 16
diff changeset
    30
    {   "user@:service/",   {
0a024b29b16d more tests and tweaks
Tero Marttila <terom@fixme.fi>
parents: 16
diff changeset
    31
        NULL, "user", NULL, NULL, "service", NULL
0a024b29b16d more tests and tweaks
Tero Marttila <terom@fixme.fi>
parents: 16
diff changeset
    32
    } },
15
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
    
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
    {   NULL,               {   } },
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
};
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
int cmp_url_str (const char *field, const char *test, const char *real) {
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
    if (!test) {
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
        if (real)
16
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
    40
            FAIL("%s shouldn't be present", field);
15
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
    } else if (!real) {
16
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
    43
        FAIL("%s is missing", field);
15
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
    } else {
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
        if (strcmp(test, real) != 0)
16
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
    47
            FAIL("%s differs: %s -> %s", field, test, real);
15
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
    }
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
    // ok
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
    return 0;
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
}
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
int cmp_url (const struct url *test, const struct url *real) {
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
    int i;
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
    // test schema
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
    if (!test->schema) {
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
        if (real->schema)
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
            FAIL("test has no schema, but real does");
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
    } else if (!real->schema) {
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
        FAIL("test has a schema, but real doesn't");
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
    } else {
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
        if (test->schema->count != test->schema->count)
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
            FAIL("inconsistent scheme count");
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
        
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
        for (i = 0; i < test->schema->count; i++) {
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
            if (strcmp(test->schema->list[i], real->schema->list[i]) != 0)
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
                FAIL("differing scheme #%d", i);
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
        }
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    73
    }
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
    
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
    // test username
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    76
    if (cmp_url_str("username", test->username, real->username))
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    77
        goto error;
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    78
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    79
    // test password
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    80
    if (cmp_url_str("password", test->password, real->password))
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
        goto error;
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
    // test hostname
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    84
    if (cmp_url_str("hostname", test->hostname, real->hostname))
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    85
        goto error;
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
    // test service
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    88
    if (cmp_url_str("service", test->service, real->service))
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    89
        goto error;
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    90
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    91
    // test path
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    92
    if (cmp_url_str("path", test->path, real->path))
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    93
        goto error;
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    94
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    95
    // test query
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    96
    if (!test->opts) {
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    97
        if (real->opts)
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    98
            FAIL("test has no opts, but real does");
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    99
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   100
    } else if (!real->opts) {
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   101
        FAIL("test has opts, but real doesn't");
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   102
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   103
    } else {
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   104
        if (test->opts->count != test->opts->count)
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   105
            FAIL("inconsistent opts count");
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   106
        
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   107
        for (i = 0; i < test->opts->count; i++) {
16
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   108
            if (strcmp(test->opts->list[i].key, real->opts->list[i].key) != 0)
15
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   109
                FAIL("differing scheme key #%d", i);
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   110
            
16
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   111
            if (strcmp(test->opts->list[i].value, real->opts->list[i].value) != 0)
15
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   112
                FAIL("differing scheme value #%d", i);
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   113
        }
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   114
    }
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   115
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   116
    // ok
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   117
    return 0;
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   118
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   119
error:
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   120
    return -1;
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   121
}
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   122
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   123
void usage (const char *exec_name) {
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   124
    printf("Usage: %s\n\n\tNo arguments are accepted\n", exec_name);
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   125
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   126
    exit(EXIT_FAILURE);
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   127
}
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   128
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   129
int main (int argc, char **argv) {
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   130
    const struct url_test *test;
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   131
    struct url url;
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   132
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   133
    if (argc > 1)
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   134
        usage(argv[0]);
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   135
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   136
    // run the tests
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   137
    for (test = url_tests; test->url; test++) {
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   138
        // first output the URL we are handling...
16
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   139
        printf("%-80s - ", test->url);
15
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   140
        fflush(stdout);
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   141
        
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   142
        // parse the URL
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   143
        memset(&url, 0, sizeof(url));
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   144
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   145
        if (url_parse(&url, test->url)) {
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   146
            printf("FATAL: url_parse failed\n");
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   147
            return EXIT_FAILURE;
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   148
        }
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   149
        
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   150
        // compare it
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   151
        if (cmp_url(&test->expected, &url)) {
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   152
            printf("\texpected: ");
16
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   153
            url_dump(&test->expected, stdout);
15
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   154
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   155
            printf("\tresult:   ");
16
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   156
            url_dump(&url, stdout);
15
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   157
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   158
        } else {
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   159
            printf("OK\n\t");
16
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   160
            url_dump(&url, stdout);
15
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   161
        }
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   162
    }
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   163
}
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   164