2.1 KiB
2.1 KiB
io.c
Input/output functions for c-md mapping files.
Includes
#include <stdio.h>
#include "map.h"
#include "internal/map_internal.h"
Forward Declarations
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
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
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
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);
}