summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShehjar Tikoo <shehjart@zresearch.com>2009-05-11 18:23:38 +0530
committerAnand V. Avati <avati@amp.gluster.com>2009-05-18 19:12:56 +0530
commit358f5ba40866545ce240ed8fda77c4d2e57a4262 (patch)
treee9beb414b191b9019d1aa6b8493b39fe2a1f2b96
parente420eb2206aa773eb32f1a7146cba4d6da5d9d03 (diff)
booster: Add rewinddir API
Signed-off-by: Anand V. Avati <avati@amp.gluster.com>
-rw-r--r--booster/src/booster.c28
-rw-r--r--booster/src/booster_stat.c9
2 files changed, 37 insertions, 0 deletions
diff --git a/booster/src/booster.c b/booster/src/booster.c
index b9d870d8cb5..64a005e844c 100644
--- a/booster/src/booster.c
+++ b/booster/src/booster.c
@@ -195,6 +195,7 @@ static ssize_t (*real_lgetxattr) (const char *path, const char *name,
void *value, size_t size);
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);
#define RESOLVE(sym) do { \
if (!real_##sym) \
@@ -2084,6 +2085,32 @@ out:
return ret;
}
+void
+booster_rewinddir (DIR *dir)
+{
+ struct booster_dir_handle *bh = (struct booster_dir_handle *)dir;
+
+ if (!bh) {
+ errno = EFAULT;
+ goto out;
+ }
+
+ if (bh->type == BOOSTER_GL_DIR)
+ glusterfs_rewinddir ((glusterfs_dir_t)bh->dirh);
+ else if (bh->type == BOOSTER_POSIX_DIR) {
+ if (real_rewinddir == NULL) {
+ errno = ENOSYS;
+ goto out;
+ }
+
+ real_rewinddir ((DIR *)bh->dirh);
+ } else
+ errno = EINVAL;
+out:
+ return;
+}
+
+
pid_t
fork (void)
{
@@ -2174,6 +2201,7 @@ _init (void)
RESOLVE (lgetxattr);
RESOLVE (remove);
RESOLVE (lchown);
+ RESOLVE (rewinddir);
/* 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 6616c04ced8..9c58b0c9a3b 100644
--- a/booster/src/booster_stat.c
+++ b/booster/src/booster_stat.c
@@ -62,6 +62,9 @@ booster_statvfs64 (const char *path, void *buf);
extern void *
booster_readdir (void *dir);
+extern void
+booster_rewinddir (void *dir);
+
int
stat (const char *path, void *buf)
{
@@ -169,3 +172,9 @@ readdir64 (void *dir)
{
return booster_readdir (dir);
}
+
+void
+rewinddir (void *dir)
+{
+ return booster_rewinddir (dir);
+}