From bff7b558eb08605c26269ed376f726d02698ae6c Mon Sep 17 00:00:00 2001 From: Michael Ring Date: Sat, 4 Apr 2015 18:52:35 +0100 Subject: [PATCH] mraa.c: Add _contains helper functions Signed-off-by: Michael Ring Signed-off-by: Brendan Le Foll --- include/mraa_internal.h | 19 ++++++++++++ src/mraa.c | 66 ++++++++++++++++++++++++++++++++++++----- 2 files changed, 78 insertions(+), 7 deletions(-) diff --git a/include/mraa_internal.h b/include/mraa_internal.h index def678b..c9eaa7b 100644 --- a/include/mraa_internal.h +++ b/include/mraa_internal.h @@ -76,6 +76,25 @@ mraa_boolean_t mraa_file_exist(const char* filename); */ char* mraa_file_unglob(const char* filename); +/** + * helper function to check if file contains a given text + * + * @param filename to check + * @param content to check in file + * @return mraa_boolean_t boolean result. + */ +mraa_boolean_t mraa_file_contains(const char* filename, const char* content); + +/** + * helper function to check if file contains a given text + * + * @param filename to check + * @param content to check in file + * @param content2 to check in same line of file + * @return mraa_boolean_t boolean result. + */ +mraa_boolean_t mraa_file_contains_both(const char* filename, const char* content, const char* content2); + /** * helper function to find out if file that is targeted by a softlink * (partially) matches the given name diff --git a/src/mraa.c b/src/mraa.c index 532eb17..e4f5f74 100644 --- a/src/mraa.c +++ b/src/mraa.c @@ -311,6 +311,17 @@ mraa_get_pin_count() return plat->phy_pin_count; } +char* +mraa_get_pin_name(int pin) +{ + if (plat == NULL) { + return NULL; + } + if (pin > (plat->phy_pin_count - 1) || pin < 0) + return NULL; + return (char*) plat->pins[pin].name; +} + mraa_boolean_t mraa_file_exist(const char* filename) { @@ -322,15 +333,56 @@ mraa_file_exist(const char* filename) return file_found; } -char* -mraa_get_pin_name(int pin) +mraa_boolean_t +mraa_file_contains(const char* filename, const char* content) { - if (plat == NULL) { - return NULL; + mraa_boolean_t found = 0; + if ((filename == NULL) || (content == NULL)) { + return 0; } - if (pin > (plat->phy_pin_count - 1) || pin < 0) - return NULL; - return (char*) plat->pins[pin].name; + + char* file = mraa_file_unglob(filename); + if (file != NULL) { + size_t len = 1024; + char* line = malloc(len); + FILE* fh = fopen(file, "r"); + while ((getline(&line, &len, fh) != -1) && (found == 0)) { + if (strstr(line, content)) { + found = 1; + break; + } + } + fclose(fh); + free(file); + free(line); + } + return found; +} + +mraa_boolean_t +mraa_file_contains_both(const char* filename, const char* content, const char* content2) +{ + mraa_boolean_t found = 0; + if ((filename == NULL) || (content == NULL)) { + return 0; + } + + char* file = mraa_file_unglob(filename); + if (file != NULL) { + size_t len = 1024; + char* line = malloc(len); + FILE* fh = fopen(file, "r"); + while ((getline(&line, &len, fh) != -1) && (found == 0)) { + if (strstr(line, content) && strstr(line, content2)) { + found = 1; + break; + } + } + fclose(fh); + free(file); + free(line); + } + return found; } char*