diff options
Diffstat (limited to 'source3')
| -rw-r--r-- | source3/include/vfs.h | 2 | ||||
| -rw-r--r-- | source3/include/vfs_macros.h | 6 | ||||
| -rw-r--r-- | source3/modules/vfs_default.c | 10 | ||||
| -rw-r--r-- | source3/modules/vfs_tsmsm.c | 16 | ||||
| -rw-r--r-- | source3/smbd/dosmode.c | 5 | 
5 files changed, 17 insertions, 22 deletions
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;  	}  | 
