ucx/map.c

changeset 112
6384016df2a3
parent 111
c8c59d7f4536
child 116
234920008754
     1.1 --- a/ucx/map.c	Mon Jul 15 14:25:50 2013 +0200
     1.2 +++ b/ucx/map.c	Mon Jul 15 15:43:18 2013 +0200
     1.3 @@ -71,7 +71,7 @@
     1.4              do {
     1.5                  UcxMapElement *next = elem->next;
     1.6                  map->allocator->free(map->allocator->pool, elem->key.data);
     1.7 -                free(elem);
     1.8 +                map->allocator->free(map->allocator->pool, elem);
     1.9                  elem = next;
    1.10              } while (elem != NULL);
    1.11          }
    1.12 @@ -313,122 +313,3 @@
    1.13      return 1;
    1.14  }
    1.15  
    1.16 -int ucx_map_load_enc(UcxMap *map, FILE *f, UcxAllocator allocator,
    1.17 -        ucx_map_coder decoder, void* decdata) {
    1.18 -
    1.19 -    int c; int r, n;
    1.20 -
    1.21 -    char *key, *value;
    1.22 -
    1.23 -    while ((c = fgetc(f)) > 0) {
    1.24 -        /* Discard leading spaces and comments */
    1.25 -        if (c < 33) continue;
    1.26 -        if (c == '#' || c == '!') {
    1.27 -            while ((c = (char) fgetc(f)) > 0) {
    1.28 -                if (c == '\n') break;
    1.29 -            }
    1.30 -            continue;
    1.31 -        }
    1.32 -
    1.33 -        /* read into key buffer */
    1.34 -        n = 16;
    1.35 -        key = (char*) malloc(n);
    1.36 -        r = 0;
    1.37 -        do {
    1.38 -            if (c == '=') break;
    1.39 -            if (r > n - 2) {
    1.40 -                n *= 2;
    1.41 -                key = (char*) realloc(key, n);
    1.42 -            }
    1.43 -            key[r] = c;
    1.44 -            r++;
    1.45 -        } while ((c = fgetc(f)) > 0);
    1.46 -        if (c <= 0) {
    1.47 -            free(key);
    1.48 -            return 1;
    1.49 -        }
    1.50 -        key[r] = 0;
    1.51 -        while (key[--r] == ' ') key[r] = 0;
    1.52 -
    1.53 -        /* skip whitespaces */
    1.54 -        while ((c = fgetc(f)) > 0) {
    1.55 -            if (c > 32) break;
    1.56 -        }
    1.57 -        if (c <= 0) {
    1.58 -            free(key);
    1.59 -            return 1;
    1.60 -        }
    1.61 -
    1.62 -        /* read into value buffer */
    1.63 -        n = 64;
    1.64 -        value = (char*) malloc(n);
    1.65 -        r = 0;
    1.66 -        do {
    1.67 -            if (c == '\n') break;
    1.68 -            if (r > n - 2) {
    1.69 -                n *= 2;
    1.70 -                value = (char*) realloc(value, n);
    1.71 -            }
    1.72 -            value[r] = c;
    1.73 -            r++;
    1.74 -        } while ((c = fgetc(f)) > 0);
    1.75 -        value[r] = 0;
    1.76 -        while (value[--r] < 33) value[r] = 0;
    1.77 -
    1.78 -        if (decoder) {
    1.79 -            size_t decodedSize;
    1.80 -            void *decoded = decoder(value, decdata, &decodedSize);
    1.81 -            free(value);
    1.82 -            value = (char*) decoded;
    1.83 -            r = decodedSize;
    1.84 -        } else {
    1.85 -            r += 2;
    1.86 -            value = (char*) realloc(value, r);
    1.87 -        }
    1.88 -
    1.89 -        if (allocator.pool) {
    1.90 -            void *pooledValue = allocator.malloc(allocator.pool, r);
    1.91 -            memcpy(pooledValue, value, r);
    1.92 -            free(value);
    1.93 -            value = (char*) pooledValue;
    1.94 -        }
    1.95 -
    1.96 -        ucx_map_cstr_put(map, key, value);
    1.97 -        free(key);
    1.98 -    }
    1.99 -
   1.100 -    return 0;
   1.101 -}
   1.102 -
   1.103 -int ucx_map_store_enc(UcxMap *map, FILE *f,
   1.104 -        ucx_map_coder encoder, void *encdata) {
   1.105 -    UcxMapIterator iter = ucx_map_iterator(map);
   1.106 -    char *v;
   1.107 -    sstr_t key, value;
   1.108 -    size_t written;
   1.109 -
   1.110 -    UCX_MAP_FOREACH(k, v, iter) {
   1.111 -        key = sstrn(k.data, k.len);
   1.112 -        if (encoder) {
   1.113 -            size_t encodedSize;
   1.114 -            void *encoded = encoder(v, encdata, &encodedSize);
   1.115 -            value = sstrn((char*) encoded,encodedSize - 1);
   1.116 -        } else {
   1.117 -            value = sstr(v);
   1.118 -        }
   1.119 -
   1.120 -        written = 0;
   1.121 -        written += fwrite(key.ptr, 1, key.length, f);
   1.122 -        written += fwrite(" = ", 1, 3, f);
   1.123 -        written += fwrite(value.ptr, 1, value.length, f);
   1.124 -        written += fwrite("\n", 1, 1, f);
   1.125 -
   1.126 -        if (encoder) {
   1.127 -            free(value.ptr);
   1.128 -        }
   1.129 -
   1.130 -        if (written != key.length + value.length + 4) return 1;
   1.131 -    }
   1.132 -
   1.133 -    return 0;
   1.134 -}

mercurial