diff options
| -rw-r--r-- | booster/src/booster.c | 42 | ||||
| -rw-r--r-- | booster/src/booster_stat.c | 12 | ||||
| -rwxr-xr-x | libglusterfsclient/src/libglusterfsclient.c | 2 | ||||
| -rwxr-xr-x | libglusterfsclient/src/libglusterfsclient.h | 2 | 
4 files changed, 43 insertions, 15 deletions
diff --git a/booster/src/booster.c b/booster/src/booster.c index 8d3a1dedb..3f171646c 100644 --- a/booster/src/booster.c +++ b/booster/src/booster.c @@ -151,6 +151,7 @@ static int (*real_readlink) (const char *path, char *buf, size_t bufsize);  static char * (*real_realpath) (const char *path, char *resolved);  static DIR * (*real_opendir) (const char *path);  static struct dirent * (*real_readdir) (DIR *dir); +static struct dirent64 * (*real_readdir64) (DIR *dir);  static int (*real_readdir_r) (DIR *dir, struct dirent *entry,                                struct dirent **result);  static int (*real_readdir64_r) (DIR *dir, struct dirent64 *entry, @@ -1686,7 +1687,13 @@ out:  }  struct dirent * -booster_readdir (DIR *dir) +__REDIRECT (booster_false_readdir, (DIR *dir), readdir) __nonnull ((1)); + +struct dirent64 * +__REDIRECT (booster_false_readdir64, (DIR *dir), readdir64) __nonnull ((1)); + +struct dirent * +booster_false_readdir (DIR *dir)  {          struct booster_dir_handle       *bh = (struct booster_dir_handle *)dir;          struct dirent                   *dirp = NULL; @@ -1717,6 +1724,38 @@ out:          return  dirp;  } +struct dirent64 * +booster_false_readdir64 (DIR *dir) +{ +        struct booster_dir_handle       *bh = (struct booster_dir_handle *)dir; +        struct dirent64                 *dirp = NULL; + +        if (!bh) { +                errno = EFAULT; +                goto out; +        } + +        if (bh->type == BOOSTER_GL_DIR) { +                gf_log ("booster", GF_LOG_TRACE, "readdir on gluster"); +                dirp = glusterfs_readdir ((glusterfs_dir_t)bh->dirh); +        } else if (bh->type == BOOSTER_POSIX_DIR) { +                gf_log ("booster", GF_LOG_TRACE, "readdir on posix"); +                if (real_readdir == NULL) { +                        errno = ENOSYS; +                        dirp = NULL; +                        goto out; +                } + +                dirp = real_readdir64 ((DIR *)bh->dirh); +        } else { +                dirp = NULL; +                errno = EINVAL; +        } + +out: +        return  dirp; +} +  int  closedir (DIR *dh)  { @@ -2696,6 +2735,7 @@ booster_lib_init (void)          RESOLVE (realpath);          RESOLVE (opendir);          RESOLVE (readdir); +        RESOLVE (readdir64);          RESOLVE (closedir);          RESOLVE (__xstat);          RESOLVE (__xstat64); diff --git a/booster/src/booster_stat.c b/booster/src/booster_stat.c index 09da554c8..23bc10c0d 100644 --- a/booster/src/booster_stat.c +++ b/booster/src/booster_stat.c @@ -169,18 +169,6 @@ statvfs64 (const char *pathname, void *buf)          return booster_statvfs64 (pathname, buf);  } -void * -readdir (void *dir) -{ -        return booster_readdir (dir); -} - -void * -readdir64 (void *dir) -{ -        return booster_readdir (dir); -} -  void  rewinddir (void *dir)  { diff --git a/libglusterfsclient/src/libglusterfsclient.c b/libglusterfsclient/src/libglusterfsclient.c index 0336b45f9..de4d88fe2 100755 --- a/libglusterfsclient/src/libglusterfsclient.c +++ b/libglusterfsclient/src/libglusterfsclient.c @@ -4141,7 +4141,7 @@ out:  } -struct dirent * +void *  glusterfs_readdir (glusterfs_dir_t dirfd)  {          int op_ret = -1; diff --git a/libglusterfsclient/src/libglusterfsclient.h b/libglusterfsclient/src/libglusterfsclient.h index 448667b8e..fbc020699 100755 --- a/libglusterfsclient/src/libglusterfsclient.h +++ b/libglusterfsclient/src/libglusterfsclient.h @@ -633,7 +633,7 @@ glusterfs_rmdir (const char *path);   * Returns the directory entry on success and NULL pointer on error   * with errno set appropriately.   */ -struct dirent * +void *  glusterfs_readdir (glusterfs_dir_t dirfd);  | 
