Signed-off-by: Daniel Lezcano <daniel.lezc...@linaro.org>
---
 clocks.c |   40 ++++++++++++++++++++++++++++++++++++++++
 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;
-- 
1.7.1


_______________________________________________
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev

Reply via email to