summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/VFS/skel_opaque.c4
-rw-r--r--examples/VFS/skel_transparent.c4
-rw-r--r--source3/include/vfs.h2
-rw-r--r--source3/include/vfs_macros.h6
-rw-r--r--source3/modules/vfs_default.c10
-rw-r--r--source3/modules/vfs_tsmsm.c16
-rw-r--r--source3/smbd/dosmode.c5
7 files changed, 21 insertions, 26 deletions
diff --git a/examples/VFS/skel_opaque.c b/examples/VFS/skel_opaque.c
index 1c2fc45011..42154c47a6 100644
--- a/examples/VFS/skel_opaque.c
+++ b/examples/VFS/skel_opaque.c
@@ -585,9 +585,9 @@ static bool skel_aio_force(struct vfs_handle_struct *handle, struct files_struct
return vfswrap_aio_force(NULL, fsp);
}
-static int skel_is_offline(struct vfs_handle_struct *handle, const char *path, SMB_STRUCT_STAT *sbuf, bool *offline)
+static bool skel_is_offline(struct vfs_handle_struct *handle, const char *path, SMB_STRUCT_STAT *sbuf)
{
- return vfswrap_set_offline(NULL, path, sbuf, offline);
+ return vfswrap_is_offline(NULL, path, sbuf);
}
static int skel_set_offline(struct vfs_handle_struct *handle, const char *path)
diff --git a/examples/VFS/skel_transparent.c b/examples/VFS/skel_transparent.c
index 0a934976c4..997783819c 100644
--- a/examples/VFS/skel_transparent.c
+++ b/examples/VFS/skel_transparent.c
@@ -544,9 +544,9 @@ static bool skel_aio_force(struct vfs_handle_struct *handle, struct files_struct
return SMB_VFS_NEXT_AIO_FORCE(handle, fsp);
}
-static int skel_is_offline(struct vfs_handle_struct *handle, const char *path, SMB_STRUCT_STAT *sbuf, bool *offline)
+static bool skel_is_offline(struct vfs_handle_struct *handle, const char *path, SMB_STRUCT_STAT *sbuf)
{
- return SMB_VFS_NEXT_IS_OFFLINE(handle, path, sbuf, offline);
+ return SMB_VFS_NEXT_IS_OFFLINE(handle, path, sbuf);
}
static int skel_set_offline(struct vfs_handle_struct *handle, const char *path)
diff --git a/source3/include/vfs.h b/source3/include/vfs.h
index b0da7e81a5..da5494927e 100644
--- a/source3/include/vfs.h
+++ b/source3/include/vfs.h
@@ -413,7 +413,7 @@ struct vfs_ops {
bool (*aio_force)(struct vfs_handle_struct *handle, struct files_struct *fsp);
/* offline operations */
- int (*is_offline)(struct vfs_handle_struct *handle, const char *path, SMB_STRUCT_STAT *sbuf, bool *offline);
+ bool (*is_offline)(struct vfs_handle_struct *handle, const char *path, SMB_STRUCT_STAT *sbuf);
int (*set_offline)(struct vfs_handle_struct *handle, const char *path);
bool (*is_remotestorage)(struct vfs_handle_struct *handle, const char *path);
diff --git a/source3/include/vfs_macros.h b/source3/include/vfs_macros.h
index 39f245fa35..f7c7e7d623 100644
--- a/source3/include/vfs_macros.h
+++ b/source3/include/vfs_macros.h
@@ -141,7 +141,7 @@
#define SMB_VFS_AIO_FORCE(fsp) ((fsp)->conn->vfs.ops.aio_force((fsp)->conn->vfs.handles.aio_force,(fsp)))
/* Offline operations */
-#define SMB_VFS_IS_OFFLINE(conn,path,sbuf,offline) ((conn)->vfs.ops.is_offline((conn)->vfs.handles.is_offline,(path),(sbuf),(offline)))
+#define SMB_VFS_IS_OFFLINE(conn,path,sbuf) ((conn)->vfs.ops.is_offline((conn)->vfs.handles.is_offline,(path),(sbuf)))
#define SMB_VFS_SET_OFFLINE(conn,path) ((conn)->vfs.ops.set_offline((conn)->vfs.handles.set_offline,(path)))
#define SMB_VFS_IS_REMOTESTORAGE(conn,path) ((conn)->vfs.ops.is_remotestorage((conn)->vfs.handles.is_remotestorage,(path)))
@@ -266,7 +266,7 @@
#define SMB_VFS_OPAQUE_AIO_FORCE(fsp) ((fsp)->conn->vfs_opaque.ops.aio_force((fsp)->conn->vfs_opaque.handles.aio_force,(fsp)))
/* Offline operations */
-#define SMB_VFS_OPAQUE_IS_OFFLINE(conn,path,sbuf,offline) ((conn)->vfs_opaque.ops.is_offline((conn)->vfs_opaque.handles.is_offline,(path),(sbuf),(offline)))
+#define SMB_VFS_OPAQUE_IS_OFFLINE(conn,path,sbuf) ((conn)->vfs_opaque.ops.is_offline((conn)->vfs_opaque.handles.is_offline,(path),(sbuf)))
#define SMB_VFS_OPAQUE_SET_OFFLINE(conn,path) ((conn)->vfs_opaque.ops.set_offline((conn)->vfs_opaque.handles.set_offline,(path)))
#define SMB_VFS_OPAQUE_IS_REMOTESTORAGE(conn,path) ((conn)->vfs_opaque.ops.is_remotestorage((conn)->vfs_opaque.handles.is_remotestorage,(path)))
@@ -392,7 +392,7 @@
#define SMB_VFS_NEXT_AIO_FORCE(handle,fsp) ((handle)->vfs_next.ops.aio_force((handle)->vfs_next.handles.aio_force,(fsp)))
/* Offline operations */
-#define SMB_VFS_NEXT_IS_OFFLINE(handle,path,sbuf,offline) ((handle)->vfs_next.ops.is_offline((handle)->vfs_next.handles.is_offline,(path),(sbuf),(offline)))
+#define SMB_VFS_NEXT_IS_OFFLINE(handle,path,sbuf) ((handle)->vfs_next.ops.is_offline((handle)->vfs_next.handles.is_offline,(path),(sbuf)))
#define SMB_VFS_NEXT_SET_OFFLINE(handle,path) ((handle)->vfs_next.ops.set_offline((handle)->vfs_next.handles.set_offline,(path)))
#define SMB_VFS_NEXT_IS_REMOTESTORAGE(handle,path) ((handle)->vfs_next.ops.is_remotestorage((handle)->vfs_next.handles.is_remotestorage,(path)))
diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c
index d4ba4dc611..755bcdeefa 100644
--- a/source3/modules/vfs_default.c
+++ b/source3/modules/vfs_default.c
@@ -1230,22 +1230,20 @@ static bool vfswrap_aio_force(struct vfs_handle_struct *handle, struct files_str
return false;
}
-static int vfswrap_is_offline(struct vfs_handle_struct *handle, const char *path, SMB_STRUCT_STAT *sbuf, bool *offline)
+static bool vfswrap_is_offline(struct vfs_handle_struct *handle, const char *path, SMB_STRUCT_STAT *sbuf)
{
if (ISDOT(path) || ISDOTDOT(path)) {
- *offline = false;
- return 0;
+ return false;
}
if (!lp_dmapi_support(SNUM(handle->conn)) || !dmapi_have_session()) {
#if defined(ENOTSUP)
errno = ENOTSUP;
#endif
- return -1;
+ return false;
}
- *offline = (dmapi_file_flags(path) & FILE_ATTRIBUTE_OFFLINE) != 0;
- return 0;
+ return (dmapi_file_flags(path) & FILE_ATTRIBUTE_OFFLINE) != 0;
}
static int vfswrap_set_offline(struct vfs_handle_struct *handle, const char *path)
diff --git a/source3/modules/vfs_tsmsm.c b/source3/modules/vfs_tsmsm.c
index c2d826f818..c737032907 100644
--- a/source3/modules/vfs_tsmsm.c
+++ b/source3/modules/vfs_tsmsm.c
@@ -136,24 +136,23 @@ static int tsmsm_connect(struct vfs_handle_struct *handle,
return SMB_VFS_NEXT_CONNECT(handle, service, user);
}
-static int tsmsm_is_offline(struct vfs_handle_struct *handle,
+static bool tsmsm_is_offline(struct vfs_handle_struct *handle,
const char *path,
- SMB_STRUCT_STAT *stbuf,
- bool *offline) {
+ SMB_STRUCT_STAT *stbuf) {
struct tsmsm_struct *tsmd = (struct tsmsm_struct *) handle->data;
void *dmhandle = NULL;
size_t dmhandle_len = 0;
size_t rlen;
dm_attrname_t dmname;
int ret;
+ bool offline;
/* if the file has more than FILE_IS_ONLINE_RATIO of blocks available,
then assume it is not offline (it may not be 100%, as it could be sparse) */
if (512 * (off_t)stbuf->st_blocks >= stbuf->st_size * tsmd->online_ratio) {
- *offline = false;
DEBUG(10,("%s not offline: st_blocks=%ld st_size=%ld online_ratio=%.2f\n",
path, stbuf->st_blocks, stbuf->st_size, tsmd->online_ratio));
- return 0;
+ return false;
}
/* using POSIX capabilities does not work here. It's a slow path, so
@@ -167,10 +166,9 @@ static int tsmsm_is_offline(struct vfs_handle_struct *handle,
/* go the slow DMAPI route */
if (dm_path_to_handle((char*)path, &dmhandle, &dmhandle_len) != 0) {
- ret = -1;
DEBUG(2,("dm_path_to_handle failed - assuming offline (%s) - %s\n",
path, strerror(errno)));
- *offline = true;
+ offline = true;
goto done;
}
@@ -181,7 +179,7 @@ static int tsmsm_is_offline(struct vfs_handle_struct *handle,
DM_NO_TOKEN, &dmname, 0, NULL, &rlen);
/* its offline if the IBMObj attribute exists */
- *offline = (ret == 0 || (ret == -1 && errno == E2BIG));
+ offline = (ret == 0 || (ret == -1 && errno == E2BIG));
DEBUG(10,("dm_get_dmattr %s ret=%d (%s)\n", path, ret, strerror(errno)));
@@ -191,7 +189,7 @@ static int tsmsm_is_offline(struct vfs_handle_struct *handle,
done:
unbecome_root();
- return ret;
+ return offline;
}
diff --git a/source3/smbd/dosmode.c b/source3/smbd/dosmode.c
index 2021621dfa..eb18f65fca 100644
--- a/source3/smbd/dosmode.c
+++ b/source3/smbd/dosmode.c
@@ -350,7 +350,6 @@ uint32 dos_mode(connection_struct *conn, const char *path,SMB_STRUCT_STAT *sbuf)
{
uint32 result = 0;
bool offline;
- int ret;
DEBUG(8,("dos_mode: %s\n", path));
@@ -381,8 +380,8 @@ uint32 dos_mode(connection_struct *conn, const char *path,SMB_STRUCT_STAT *sbuf)
}
- ret = SMB_VFS_IS_OFFLINE(conn, path, sbuf, &offline);
- if (S_ISREG(sbuf->st_mode) && (ret == 0) && offline) {
+ offline = SMB_VFS_IS_OFFLINE(conn, path, sbuf);
+ if (S_ISREG(sbuf->st_mode) && offline) {
result |= FILE_ATTRIBUTE_OFFLINE;
}