# io.c Input/output functions for c-md mapping files. --- ## Includes ```c #include #include "map.h" #include "internal/map_internal.h" ``` --- ## Forward Declarations ```c static int8_t write_header(FILE *f, const char *source, const char *target); static int8_t write_ranges(FILE *f, t_map *map); ``` --- ## Function Descriptions ### `map_write` Writes a c-md mapping file to the specified path. #### Parameters - `map`: Pointer to the mapping structure. - `path`: Pointer to the output file path string. - `source`: Pointer to the source file name string. - `target`: Pointer to the target file name string. #### Return Value Return 0 on success, or 1 on failure. ##### Implementation ```c int8_t map_write(t_map *map, const char *path, const char *source, const char *target) { FILE *f; int8_t ret; f = fopen(path, "w"); if (NULL == f) { perror(path); return (1); } ret = write_header(f, source, target); if (0 == ret) ret = write_ranges(f, map); fclose(f); return (ret); } ``` ### `write_header` Writes the header of a c-md mapping file. (v1 format) #### Parameters - `f`: Pointer to the output file. - `source`: Pointer to the source file name string. - `target`: Pointer to the target file name string. #### Return Value Return 0 on success, or 1 on failure. #### Implementation ```c int8_t write_header(FILE *f, const char *source, const char *target) { if (0 > fprintf(f, "C-MD MAP v1\n")) return (1); if (0 > fprintf(f, "source: %s\n", source)) return (1); if (0 > fprintf(f, "target: %s\n", target)) return (1); if (0 > fprintf(f, "---\n")) return (1); return (0); } ``` ### `write_ranges` Writes the ranges of a c-md mapping file. #### Parameters - `f`: Pointer to the output file. - `map`: Pointer to the mapping structure. #### Return Value Return 0 on success, or 1 on failure. #### Implementation ```c int8_t write_ranges(FILE *f, t_map *map) { size_t i; t_range *r; i = 0; while (i < map->count) { r = &map->ranges[i]; if (0 > fprintf(f, "%u-%u:%u-%u\n", r->src_start, r->src_end, r->dst_start, r->dst_end)) return (1); i++; } return (0); } ```