diff options
author | Daniel Lezcano <daniel.lezcano@linaro.org> | 2011-06-08 23:30:00 +0200 |
---|---|---|
committer | Daniel Lezcano <daniel.lezcano@free.fr> | 2011-06-08 23:30:00 +0200 |
commit | 141c048b9016f85d17846c9423feeafc6ebd5428 (patch) | |
tree | e0468e8630d40050514abc9ace5142e1a92ef82a /clocks.c | |
parent | c193b6018c016260a3ac51d51285a2c02512218f (diff) |
function helper to read the files
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Diffstat (limited to 'clocks.c')
-rw-r--r-- | clocks.c | 40 |
1 files changed, 40 insertions, 0 deletions
@@ -13,7 +13,11 @@ * - initial API and implementation *******************************************************************************/ +#ifndef _GNU_SOURCE +#define _GNU_SOURCE #include <stdio.h> +#undef _GNU_SOURCE +#endif #include <mntent.h> #include <sys/stat.h> @@ -83,6 +87,42 @@ int clock_init(void) return access(clk_dir_path, F_OK); } +/* + * 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; +} + static int file_read_from_format(char *file, int *value, const char *format) { FILE *f; |