Only return binding root dir.
authorRomain Forlot <romain.forlot@iot.bzh>
Fri, 8 Sep 2017 15:21:40 +0000 (17:21 +0200)
committerRomain Forlot <romain.forlot@iot.bzh>
Thu, 13 Dec 2018 13:12:02 +0000 (14:12 +0100)
If subdirs path is needed then concatenation as to be done
using the rootdir.

Change-Id: I50a1eeb1f853ae26995a96e1661ff38cb7959f60
Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
filescan-utils.c
filescan-utils.h

index fe01bdc..83565b2 100644 (file)
@@ -126,42 +126,21 @@ PUBLIC const char *GetBinderName() {
 PUBLIC const char *GetBindingDirPath(BindingDirsT 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));
-    strcpy(fd_link, "/proc/self/fd/");
-    strcat(fd_link, fd);
+    char fd_link[CONTROL_MAXPATH_LEN];
+    char retdir[CONTROL_MAXPATH_LEN];
+    sprintf(fd_link, "/proc/self/fd/%d", afb_daemon_rootdir_get_fd());
 
     ssize_t len;
     if((len = readlink(fd_link, retdir, sizeof(retdir)-1)) == -1)
     {
         perror("lstat");
         AFB_ERROR("Error reading stat of link: %s", fd_link);
-        strcpy(retdir, "/tmp");
+        strncpy(retdir, "/tmp", 4);
     }
     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;
-        }
     }
 
-    free(fd_link);
-    return retdir;
+    return strndup(retdir, sizeof(retdir));
 }
index 738be27..68df0fc 100644 (file)
@@ -44,19 +44,10 @@ typedef enum {
   CTL_SCAN_RECURSIVE=1,
 } CtlScanDirModeT;
 
-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 const char *GetBindingDirPath(BindingDirsT dir);
+PUBLIC const char *GetBindingDirPath();
 
 
 #ifdef __cplusplus