aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRomain Forlot <romain.forlot@iot.bzh>2017-09-08 11:53:44 +0200
committerRomain Forlot <romain.forlot@iot.bzh>2017-09-08 12:22:18 +0200
commit691f6397954929689a1e9434e31940192c2358bc (patch)
treea38db43e495634ee58f42dec139dd26cdd6e1bc0
parent0ac08beab3581b9b1beecc1cf8debb96ec0c804d (diff)
More reliable GetBindingDirsPath function.
Only return a wanted directory path not a complex structure. Change-Id: I5b5a1dea2c55ee6a76dbbbd52c3ebfdd684255e5 Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
-rw-r--r--filescan-utils.c50
-rw-r--r--filescan-utils.h18
2 files changed, 38 insertions, 30 deletions
diff --git a/filescan-utils.c b/filescan-utils.c
index 830e233..fe01bdc 100644
--- a/filescan-utils.c
+++ b/filescan-utils.c
@@ -123,37 +123,45 @@ PUBLIC const char *GetBinderName() {
return binderName;
}
-PUBLIC BPaths GetBindingDirsPath()
+PUBLIC const char *GetBindingDirPath(BindingDirsT dir)
{
- BPaths BindingPaths;
-
- void initBindingPaths(char* bdir, const char* dir)
- {
- strcpy(bdir, BindingPaths.rootdir);
- strcat(bdir, dir);
- }
-
// A file description should not be greater than 999.999.999
char fd[10];
+ static char retdir[CONTROL_MAXPATH_LEN];
sprintf(fd, "%d", afb_daemon_rootdir_get_fd());
- char* fd_link = malloc(strlen("/proc/self/fd/") + strlen(&fd));
+ char* fd_link = malloc(strlen("/proc/self/fd/") + strlen(fd));
strcpy(fd_link, "/proc/self/fd/");
- strcat(fd_link, &fd);
+ strcat(fd_link, fd);
ssize_t len;
- if((len = readlink(fd_link, &BindingPaths.rootdir, sizeof(BindingPaths)-1)) == -1)
+ if((len = readlink(fd_link, retdir, sizeof(retdir)-1)) == -1)
{
perror("lstat");
AFB_ERROR("Error reading stat of link: %s", fd_link);
- return BindingPaths;
+ strcpy(retdir, "/tmp");
+ }
+ else
+ {
+ retdir[len] = '\0';
+ switch (dir) {
+ case BIN_DIR:
+ strcat(retdir, "/bin");
+ break;
+ case ETC_DIR:
+ strcat(retdir, "/etc");
+ break;
+ case LIB_DIR:
+ strcat(retdir, "/lib");
+ break;
+ case DATA_DIR:
+ strcat(retdir, "/data");
+ break;
+ case HTTP_DIR:
+ strcat(retdir, "/http");
+ break;
+ }
}
- BindingPaths.rootdir[len] = '\0';
- free(fd_link);
- initBindingPaths(BindingPaths.bindir, "/bin");
- initBindingPaths(BindingPaths.etcdir, "/etc");
- initBindingPaths(BindingPaths.libdir, "/lib");
- initBindingPaths(BindingPaths.datadir, "/data");
- initBindingPaths(BindingPaths.httpdir, "/http");
- return BindingPaths;
+ free(fd_link);
+ return retdir;
}
diff --git a/filescan-utils.h b/filescan-utils.h
index e038330..738be27 100644
--- a/filescan-utils.h
+++ b/filescan-utils.h
@@ -44,19 +44,19 @@ typedef enum {
CTL_SCAN_RECURSIVE=1,
} CtlScanDirModeT;
-typedef struct bpath {
- char rootdir[CONTROL_MAXPATH_LEN];
- char bindir[CONTROL_MAXPATH_LEN];
- char etcdir[CONTROL_MAXPATH_LEN];
- char datadir[CONTROL_MAXPATH_LEN];
- char libdir[CONTROL_MAXPATH_LEN];
- char httpdir[CONTROL_MAXPATH_LEN];
-} BPaths;
+typedef enum {
+ ROOT_DIR=0,
+ BIN_DIR=1,
+ ETC_DIR=2,
+ DATA_DIR=3,
+ LIB_DIR=4,
+ HTTP_DIR=5
+} BindingDirsT
PUBLIC const char *GetMidleName(const char*name);
PUBLIC const char *GetBinderName();
PUBLIC json_object* ScanForConfig (const char* searchPath, CtlScanDirModeT mode, const char *pre, const char *ext);
-PUBLIC BPaths GetBindingDirsPath();
+PUBLIC const char *GetBindingDirPath(BindingDirsT dir);
#ifdef __cplusplus