#define _GNU_SOURCE #include #undef _GNU_SOURCE #include #include "utils.h" int write_int(const char *path, int val) { FILE *f; f = fopen(path, "w"); if (!f) { fprintf(stderr, "failed to open '%s': %m\n", path); return -1; } fprintf(f, "%d", val); fclose(f); return 0; } int read_int(const char *path, int *val) { FILE *f; f = fopen(path, "r"); if (!f) { fprintf(stderr, "failed to open '%s': %m\n", path); return -1; } fscanf(f, "%d", val); fclose(f); return 0; } int store_line(const char *line, void *data) { FILE *f = data; /* ignore comment line */ if (line[0] == '#') return 0; fprintf(f, "%s", line); return 0; } /* * This functions is a helper to read a specific file content and store * the content inside a variable pointer passed as parameter, the format * parameter gives the variable type to be read from the file. * * @path : directory path containing the file * @name : name of the file to be read * @format : the format of the format * @value : a pointer to a variable to store the content of the file * Returns 0 on success, -1 otherwise */ int file_read_value(const char *path, const char *name, const char *format, void *value) { FILE *file; char *rpath; int ret; ret = asprintf(&rpath, "%s/%s", path, name); if (ret < 0) return ret; file = fopen(rpath, "r"); if (!file) { ret = -1; goto out_free; } ret = fscanf(file, format, value) == EOF ? -1 : 0; fclose(file); out_free: free(rpath); return ret; }