(((fsp)->fsp_flags.can_read)))
#define CHECK_WRITE(fsp) \
- ((fsp)->can_write && \
+ ((fsp)->fsp_flags.can_write && \
((fsp)->fh->fd != -1))
#define ERROR_WAS_LOCK_DENIED(status) (NT_STATUS_EQUAL((status), NT_STATUS_LOCK_NOT_GRANTED) || \
bool write_time_forced : 1;
bool can_lock : 1;
bool can_read : 1;
+ bool can_write : 1;
} fsp_flags;
struct tevent_timer *update_write_time_event;
struct lock_struct last_lock_failure;
int current_lock_count; /* Count the number of outstanding locks and pending locks. */
- bool can_write;
bool modified;
bool is_directory;
bool aio_write_behind;
static int map_posix_lock_type( files_struct *fsp, enum brl_type lock_type)
{
- if((lock_type == WRITE_LOCK) && !fsp->can_write) {
+ if ((lock_type == WRITE_LOCK) && !fsp->fsp_flags.can_write) {
/*
* Many UNIX's cannot get a write lock on a file opened read-only.
* Win32 locking semantics allow this.
nwritten = SMB_VFS_NEXT_PWRITE(handle, fsp, data, n, offset);
if (nwritten == -1) {
- if (errno == EBADF && fsp->can_write) {
+ if (errno == EBADF && fsp->fsp_flags.can_write) {
errno = EROFS;
}
}
if (tevent_req_is_unix_error(req, &vfs_aio_state->error)) {
if ((vfs_aio_state->error == EBADF) &&
- state->fsp->can_write)
+ state->fsp->fsp_flags.can_write)
{
vfs_aio_state->error = EROFS;
errno = EROFS;
struct syncops_config_data,
return -1);
- if (fsp->can_write && config->onclose) {
+ if (fsp->fsp_flags.can_write && config->onclose) {
/* ideally we'd only do this if we have written some
data, but there is no flag for that in fsp yet. */
fsync(fsp->fh->fd);
fsp->fsp_flags.can_lock = false;
fsp->fsp_flags.can_read = false;
fsp->access_mask = FILE_GENERIC_WRITE;
- fsp->can_write = true;
+ fsp->fsp_flags.can_write = true;
fsp->modified = false;
fsp->oplock_type = NO_OPLOCK;
fsp->sent_oplock_break = NO_BREAK_SENT;
fsp->open_time = e.time;
fsp->access_mask = e.access_mask;
fsp->fsp_flags.can_read = ((fsp->access_mask & FILE_READ_DATA) != 0);
- fsp->can_write = ((fsp->access_mask & (FILE_WRITE_DATA|FILE_APPEND_DATA)) != 0);
+ fsp->fsp_flags.can_write = ((fsp->access_mask & (FILE_WRITE_DATA|FILE_APPEND_DATA)) != 0);
fsp->fnum = op->local_id;
fsp_set_gen_id(fsp);
/*
* TODO: properly calculate open flags
*/
- if (fsp->can_write && fsp->fsp_flags.can_read) {
+ if (fsp->fsp_flags.can_write && fsp->fsp_flags.can_read) {
flags = O_RDWR;
- } else if (fsp->can_write) {
+ } else if (fsp->fsp_flags.can_write) {
flags = O_WRONLY;
} else if (fsp->fsp_flags.can_read) {
flags = O_RDONLY;
return t;
}
- if (!fsp->can_write) {
+ if (!fsp->fsp_flags.can_write) {
errno = EPERM;
return -1;
}
to->oplock_type = from->oplock_type;
to->fsp_flags.can_lock = from->fsp_flags.can_lock;
to->fsp_flags.can_read = ((access_mask & FILE_READ_DATA) != 0);
- to->can_write =
+ to->fsp_flags.can_write =
CAN_WRITE(from->conn) &&
((access_mask & (FILE_WRITE_DATA | FILE_APPEND_DATA)) != 0);
to->modified = from->modified;
uint32_t perms = 0;
p += 25;
if (fsp->is_directory ||
- fsp->can_write ||
+ fsp->fsp_flags.can_write ||
can_write_to_file(conn, smb_fname)) {
perms = FILE_GENERIC_ALL;
} else {
uint32_t perms = 0;
p += 25;
if (fsp->is_directory ||
- fsp->can_write ||
+ fsp->fsp_flags.can_write ||
can_write_to_file(conn, smb_fname)) {
perms = FILE_GENERIC_ALL;
} else {
fsp->file_pid = req ? req->smbpid : 0;
fsp->fsp_flags.can_lock = true;
fsp->fsp_flags.can_read = ((access_mask & FILE_READ_DATA) != 0);
- fsp->can_write =
+ fsp->fsp_flags.can_write =
CAN_WRITE(conn) &&
((access_mask & (FILE_WRITE_DATA | FILE_APPEND_DATA)) != 0);
fsp->print_file = NULL;
conn->session_info->unix_info->unix_name,
smb_fname_str_dbg(smb_fname),
BOOLSTR(fsp->fsp_flags.can_read),
- BOOLSTR(fsp->can_write),
+ BOOLSTR(fsp->fsp_flags.can_write),
conn->num_files_open));
errno = 0;
fsp->file_pid = req ? req->smbpid : 0;
fsp->fsp_flags.can_lock = false;
fsp->fsp_flags.can_read = false;
- fsp->can_write = False;
+ fsp->fsp_flags.can_write = false;
fsp->fh->private_options = 0;
/*
fsp->file_pid = 0;
fsp->fsp_flags.can_lock = true;
fsp->fsp_flags.can_read = true;
- fsp->can_write = True;
+ fsp->fsp_flags.can_write = true;
fsp->print_file = NULL;
fsp->modified = False;
fsp->sent_oplock_break = NO_BREAK_SENT;
bool *found = (bool *)private_data;
char *path;
- if (!fsp->can_write) {
+ if (!fsp->fsp_flags.can_write) {
return NULL;
}
if (!(*found)) {
break;
case POSIX_LOCK_TYPE_WRITE:
/* Return the right POSIX-mappable error code for files opened read-only. */
- if (!fsp->can_write) {
+ if (!fsp->fsp_flags.can_write) {
return NT_STATUS_INVALID_HANDLE;
}
lock_type = WRITE_LOCK;
fsp->file_pid = 0;
fsp->fsp_flags.can_lock = true;
fsp->fsp_flags.can_read = true;
- fsp->can_write =
- CAN_WRITE(vfs->conn);
+ fsp->fsp_flags.can_write = CAN_WRITE(vfs->conn);
fsp->print_file = NULL;
fsp->modified = False;
fsp->sent_oplock_break = NO_BREAK_SENT;
fsp->file_pid = 0;
fsp->fsp_flags.can_lock = true;
fsp->fsp_flags.can_read = true;
- fsp->can_write = True;
+ fsp->fsp_flags.can_write = true;
fsp->print_file = NULL;
fsp->modified = False;
fsp->sent_oplock_break = NO_BREAK_SENT;