diff options
| -rw-r--r-- | booster/src/booster.c | 26 | ||||
| -rw-r--r-- | booster/src/booster_stat.c | 10 | 
2 files changed, 36 insertions, 0 deletions
diff --git a/booster/src/booster.c b/booster/src/booster.c index 64a005e84..a36559537 100644 --- a/booster/src/booster.c +++ b/booster/src/booster.c @@ -196,6 +196,7 @@ static ssize_t (*real_lgetxattr) (const char *path, const char *name,  static int (*real_remove) (const char* path);  static int (*real_lchown) (const char *path, uid_t owner, gid_t group);  static void (*real_rewinddir) (DIR *dirp); +static void (*real_seekdir) (DIR *dirp, off_t offset);  #define RESOLVE(sym) do {                                       \                  if (!real_##sym)                                \ @@ -2110,6 +2111,30 @@ out:          return;  } +void +booster_seekdir (DIR *dir, off_t offset) +{ +        struct booster_dir_handle       *bh = (struct booster_dir_handle *)dir; + +        if (!bh) { +                errno = EFAULT; +                goto out; +        } + +        if (bh->type == BOOSTER_GL_DIR) +                glusterfs_seekdir ((glusterfs_dir_t)bh->dirh, offset); +        else if (bh->type == BOOSTER_POSIX_DIR) { +                if (real_seekdir == NULL) { +                        errno = ENOSYS; +                        goto out; +                } + +                real_seekdir ((DIR *)bh->dirh, offset); +        } else +                errno = EINVAL; +out: +        return; +}  pid_t   fork (void) @@ -2202,6 +2227,7 @@ _init (void)          RESOLVE (remove);          RESOLVE (lchown);  	RESOLVE (rewinddir); +	RESOLVE (seekdir);          /* This must be called after resolving real functions           * above so that the socket based IO calls in libglusterfsclient diff --git a/booster/src/booster_stat.c b/booster/src/booster_stat.c index 9c58b0c9a..a16dab86a 100644 --- a/booster/src/booster_stat.c +++ b/booster/src/booster_stat.c @@ -17,6 +17,7 @@     <http://www.gnu.org/licenses/>.  */ +#include <sys/types.h>  extern int  booster_stat (const char *path, void *buf); @@ -65,6 +66,9 @@ booster_readdir (void *dir);  extern void  booster_rewinddir (void *dir); +extern void +booster_seekdir (void *dir, off_t offset); +  int  stat (const char *path, void *buf)  { @@ -178,3 +182,9 @@ rewinddir (void *dir)  {  	return booster_rewinddir (dir);  } + +void +seekdir (void *dir, off_t offset) +{ +	return booster_seekdir (dir, offset); +}  | 
