[13/28] function helper to read the files

Message ID 1308256197-29155-13-git-send-email-daniel.lezcano@linaro.org
State Accepted
Headers show

Commit Message

Daniel Lezcano June 16, 2011, 8:29 p.m.
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
 clocks.c |   40 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 40 insertions(+), 0 deletions(-)

Patch

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;