Private
Public Access
2
0

mraa.c added internal helper functions to support globbing and link analysis

Signed-off-by: Michael Ring <mail@michael-ring.org>
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
This commit is contained in:
Michael Ring
2015-02-15 12:47:11 +01:00
committed by Brendan Le Foll
parent 2965665fee
commit 8e305a1032
2 changed files with 79 additions and 0 deletions

View File

@@ -59,6 +59,31 @@ mraa_platform_t mraa_x86_platform();
*/ */
mraa_platform_t mraa_arm_platform(); mraa_platform_t mraa_arm_platform();
/**
* helper function to check if file exists
*
* @param filename to check
* @return mraa_boolean_t boolean result.
*/
mraa_boolean_t mraa_file_exist(char *filename);
/**
* helper function to unglob filenames
*
* @param filename to unglob
* @return char * with the existing filename matching the pattern of input. NULL if there is no match. Caller must free result
*/
char * mraa_file_unglob(char *filename);
/**
* helper function to find out if file that is targeted by a softlink (partially) matches the given name
*
* @param filename of the softlink
* @param (partial) filename that is matched with the filename of the link-targeted file
* @return mraa_boolean_t true when targetname (partially) matches
*/
mraa_boolean_t mraa_link_targets(char *filename,char *targetname);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@@ -28,6 +28,8 @@
#include <sched.h> #include <sched.h>
#include <string.h> #include <string.h>
#include <pwd.h> #include <pwd.h>
#include <glob.h>
#include "mraa_internal.h" #include "mraa_internal.h"
#include "gpio.h" #include "gpio.h"
@@ -310,3 +312,55 @@ mraa_get_pin_count()
} }
return plat->phy_pin_count; return plat->phy_pin_count;
} }
mraa_boolean_t
mraa_file_exist(char *filename) {
glob_t results;
results.gl_pathc = 0;
glob(filename, 0, NULL, &results);
int file_found = results.gl_pathc == 1;
globfree(&results);
return file_found;
}
char*
mraa_file_unglob(char *filename) {
glob_t results;
char *res = NULL;
results.gl_pathc = 0;
glob(filename, 0, NULL, &results);
if (results.gl_pathc == 1)
res = strdup(results.gl_pathv[0]);
globfree(&results);
return res;
}
mraa_boolean_t
mraa_link_targets(char *filename,char *targetname) {
int size = 100;
int nchars = 0;
char *buffer = NULL;
while (nchars == 0)
{
buffer = (char *) realloc(buffer,size);
if (buffer == NULL)
return 0;
nchars = readlink(filename,buffer,size);
if (nchars < 0 ) {
free(buffer);
return 0;
}
if (nchars >= size) {
size *=2;
nchars=0;
}
}
if (strstr(buffer,targetname)) {
free(buffer);
return 1;
}
else {
free(buffer);
return 0;
}
}