265 value[r] = c; |
265 value[r] = c; |
266 r++; |
266 r++; |
267 } while ((c = fgetc(f)) > 0); |
267 } while ((c = fgetc(f)) > 0); |
268 value[r] = 0; |
268 value[r] = 0; |
269 while (value[--r] < 33) value[r] = 0; |
269 while (value[--r] < 33) value[r] = 0; |
270 value = realloc(value, r+2); |
270 |
|
271 if (decoder == NULL) { |
|
272 value = realloc(value, r+2); |
|
273 } else { |
|
274 void *decoded = decoder(value, decdata); |
|
275 free(value); |
|
276 value = decoded; |
|
277 } |
271 |
278 |
272 ucx_map_cstr_put(map, key, value); |
279 ucx_map_cstr_put(map, key, value); |
273 free(key); |
280 free(key); |
274 } |
281 } |
275 |
282 |
276 return 0; |
283 return 0; |
277 } |
284 } |
278 |
285 |
279 int ucx_map_store(UcxMap *map, FILE *f) { |
286 int ucx_map_store_enc(UcxMap *map, FILE *f, copy_func encoder, void *encdata) { |
280 UcxMapIterator iter = ucx_map_iterator(map); |
287 UcxMapIterator iter = ucx_map_iterator(map); |
281 char *k, *v; |
288 char *k, *v; |
282 sstr_t key, value; |
289 sstr_t key, value; |
283 int written; |
290 int written; |
284 |
291 |
285 UCX_MAP_FOREACH(v, iter) { |
292 UCX_MAP_FOREACH(v, iter) { |
286 k = (char*) iter.cur->key.data; |
293 k = (char*) iter.cur->key.data; |
287 key = sstr(k); value = sstr(v); |
294 key = sstr(k); |
|
295 if (encoder == NULL) { |
|
296 value = sstr(v); |
|
297 } else { |
|
298 value = sstr(encoder(v, encdata)); |
|
299 } |
288 |
300 |
289 written = 0; |
301 written = 0; |
290 written += fwrite(key.ptr, 1, key.length, f); |
302 written += fwrite(key.ptr, 1, key.length, f); |
291 written += fwrite(" = ", 1, 3, f); |
303 written += fwrite(" = ", 1, 3, f); |
292 written += fwrite(value.ptr, 1, value.length, f); |
304 written += fwrite(value.ptr, 1, value.length, f); |
293 written += fwrite("\n", 1, 1, f); |
305 written += fwrite("\n", 1, 1, f); |
294 |
306 |
|
307 if (encoder != NULL) { |
|
308 free(value.ptr); |
|
309 } |
|
310 |
295 if (written != key.length + value.length + 4) return 1; |
311 if (written != key.length + value.length + 4) return 1; |
296 } |
312 } |
297 |
313 |
298 return 0; |
314 return 0; |
299 } |
315 } |