| 558 | } |
| 559 | |
| 560 | static cs_error_t set_key_bin(cmap_handle_t handle, const char *key_name, const char *fname) |
| 561 | { |
| 562 | FILE *f; |
| 563 | char *val; |
| 564 | char buf[4096]; |
| 565 | size_t size; |
| 566 | size_t readed; |
| 567 | size_t pos; |
| 568 | cs_error_t err; |
| 569 | |
| 570 | if (strcmp(fname, "-") == 0) { |
| 571 | f = stdin; |
| 572 | } else { |
| 573 | f = fopen(fname, "rb"); |
| 574 | if (f == NULL) { |
| 575 | perror("Can't open input file"); |
| 576 | exit(EXIT_FAILURE); |
| 577 | } |
| 578 | } |
| 579 | |
| 580 | val = NULL; |
| 581 | size = 0; |
| 582 | pos = 0; |
| 583 | |
| 584 | while ((readed = fread(buf, 1, sizeof(buf), f)) != 0) { |
| 585 | size += readed; |
| 586 | if ((val = realloc(val, size)) == NULL) { |
| 587 | fprintf(stderr, "Can't alloc memory\n"); |
| 588 | exit (EXIT_FAILURE); |
| 589 | } |
| 590 | memcpy(val + pos, buf, readed); |
| 591 | pos += readed; |
| 592 | } |
| 593 | |
| 594 | if (f != stdin) { |
| 595 | fclose(f); |
| 596 | } |
| 597 | |
| 598 | err = cmap_set(handle, key_name, val, size, CMAP_VALUETYPE_BINARY); |
| 599 | free(val); |
| 600 | |
| 601 | return (err); |
| 602 | } |
| 603 | |
| 604 | static void set_key(cmap_handle_t handle, const char *key_name, const char *key_type_s, const char *key_value_s) |
| 605 | { |