aboutsummaryrefslogtreecommitdiff
path: root/clocks.c
diff options
context:
space:
mode:
authorDaniel Lezcano <daniel.lezcano@linaro.org>2011-06-08 23:30:00 +0200
committerDaniel Lezcano <daniel.lezcano@free.fr>2011-06-08 23:30:00 +0200
commit141c048b9016f85d17846c9423feeafc6ebd5428 (patch)
treee0468e8630d40050514abc9ace5142e1a92ef82a /clocks.c
parentc193b6018c016260a3ac51d51285a2c02512218f (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.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/clocks.c b/clocks.c
index 8a2dc97..848c52e 100644
--- a/clocks.c
+++ b/clocks.c
@@ -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;