Lines Matching refs:descriptor

356 // file descriptor operation prototypes
357 static status_t file_read(struct file_descriptor* descriptor, off_t pos,
359 static status_t file_write(struct file_descriptor* descriptor, off_t pos,
361 static off_t file_seek(struct file_descriptor* descriptor, off_t pos,
363 static void file_free_fd(struct file_descriptor* descriptor);
364 static status_t file_close(struct file_descriptor* descriptor);
365 static status_t file_select(struct file_descriptor* descriptor, uint8 event,
367 static status_t file_deselect(struct file_descriptor* descriptor, uint8 event,
370 struct file_descriptor* descriptor, struct dirent* buffer,
374 static status_t dir_rewind(struct file_descriptor* descriptor);
375 static void dir_free_fd(struct file_descriptor* descriptor);
376 static status_t dir_close(struct file_descriptor* descriptor);
378 struct file_descriptor* descriptor, struct dirent* buffer,
380 static status_t attr_dir_rewind(struct file_descriptor* descriptor);
381 static void attr_dir_free_fd(struct file_descriptor* descriptor);
382 static status_t attr_dir_close(struct file_descriptor* descriptor);
383 static status_t attr_read(struct file_descriptor* descriptor, off_t pos,
385 static status_t attr_write(struct file_descriptor* descriptor, off_t pos,
387 static off_t attr_seek(struct file_descriptor* descriptor, off_t pos,
389 static void attr_free_fd(struct file_descriptor* descriptor);
390 static status_t attr_close(struct file_descriptor* descriptor);
391 static status_t attr_read_stat(struct file_descriptor* descriptor,
393 static status_t attr_write_stat(struct file_descriptor* descriptor,
396 struct file_descriptor* descriptor, struct dirent* buffer,
398 static status_t index_dir_rewind(struct file_descriptor* descriptor);
399 static void index_dir_free_fd(struct file_descriptor* descriptor);
400 static status_t index_dir_close(struct file_descriptor* descriptor);
402 struct file_descriptor* descriptor, struct dirent* buffer,
404 static status_t query_rewind(struct file_descriptor* descriptor);
405 static void query_free_fd(struct file_descriptor* descriptor);
406 static status_t query_close(struct file_descriptor* descriptor);
408 static status_t common_ioctl(struct file_descriptor* descriptor, ulong op,
410 static status_t common_read_stat(struct file_descriptor* descriptor,
412 static status_t common_write_stat(struct file_descriptor* descriptor,
1613 struct file_descriptor* descriptor, struct flock* flock)
1628 if (descriptor != NULL && lock->bound_to == descriptor) {
1720 If \a descriptor is NULL, POSIX semantics are used for this lock. Otherwise,
1727 struct file_descriptor* descriptor, struct flock* flock, bool wait)
1733 void* boundTo = descriptor != NULL ? (void*)descriptor : (void*)context;
1775 return descriptor != NULL ? B_WOULD_BLOCK : B_PERMISSION_DENIED;
1815 normalize_flock(struct file_descriptor* descriptor, struct flock* flock)
1821 flock->l_start += descriptor->pos;
1825 struct vnode* vnode = descriptor->u.vnode;
1935 struct file_descriptor* descriptor = context->fds[i];
1936 if (descriptor == NULL || (descriptor->open_mode & O_DISCONNECTED) != 0)
1939 inc_fd_ref_count(descriptor);
1941 // if this descriptor points at this mount, we
1943 struct vnode* vnode = fd_vnode(descriptor);
1946 disconnect_fd(descriptor);
1948 || (vnode == NULL && descriptor->u.mount == mount))
1949 disconnect_fd(descriptor);
1951 put_fd(descriptor);
2709 struct file_descriptor* descriptor
2711 if (descriptor == NULL)
2714 struct vnode* vnode = fd_vnode(descriptor);
2716 put_fd(descriptor);
2720 // ToDo: when we can close a file descriptor at any point, investigate
2724 return descriptor;
2731 struct file_descriptor* descriptor;
2734 descriptor = get_fd(get_current_io_context(kernel), fd);
2735 if (descriptor == NULL)
2738 vnode = fd_vnode(descriptor);
2742 put_fd(descriptor);
2750 If \a fd is a valid file descriptor, \a path may be NULL for directories,
2792 struct file_descriptor* descriptor;
2804 descriptor = alloc_fd();
2805 if (!descriptor)
2809 descriptor->u.vnode = vnode;
2811 descriptor->u.mount = mount;
2812 descriptor->cookie = cookie;
2817 descriptor->ops = &sFileOps;
2820 descriptor->ops = &sDirectoryOps;
2823 descriptor->ops = &sAttributeOps;
2826 descriptor->ops = &sAttributeDirectoryOps;
2831 descriptor->ops = &sIndexDirectoryOps;
2834 descriptor->ops = &sQueryOps;
2841 descriptor->type = type;
2842 descriptor->open_mode = openMode;
2844 if (descriptor->ops->fd_seek != NULL) {
2849 ASSERT(descriptor->pos == -1);
2855 descriptor->pos = 0;
2861 fd = new_fd(context, descriptor);
2863 descriptor->ops = NULL;
2864 put_fd(descriptor);
3638 if (struct file_descriptor* descriptor = context->fds[i]) {
3639 close_fd(context, descriptor);
3640 put_fd(descriptor);
4015 struct file_descriptor* descriptor;
4018 descriptor = get_fd_and_vnode(fd, &vnode, true);
4019 if (descriptor == NULL)
4022 status_t status = vfs_read_pages(vnode, descriptor->cookie, pos, vecs,
4025 put_fd(descriptor);
4034 struct file_descriptor* descriptor;
4037 descriptor = get_fd_and_vnode(fd, &vnode, true);
4038 if (descriptor == NULL)
4041 status_t status = vfs_write_pages(vnode, descriptor->cookie, pos, vecs,
4044 put_fd(descriptor);
4056 FileDescriptorPutter descriptor(get_fd_and_vnode(fd, &vnode, true));
4057 if (!descriptor.IsSet())
4060 status_t status = common_file_io_vec_pages(vnode, descriptor->cookie,
4074 FileDescriptorPutter descriptor(get_fd_and_vnode(fd, &vnode, true));
4075 if (!descriptor.IsSet())
4078 status_t status = common_file_io_vec_pages(vnode, descriptor->cookie,
4155 struct file_descriptor* descriptor;
4157 descriptor = get_fd(get_current_io_context(true), fd);
4158 if (descriptor == NULL)
4161 *_cookie = descriptor->cookie;
4248 file descriptor for it
4340 FileDescriptorPutter descriptor
4342 if (!descriptor.IsSet())
4345 if (descriptor->ops->fd_read_stat)
4346 status = descriptor->ops->fd_read_stat(descriptor.Get(), stat);
4865 /*! If the given descriptor locked its vnode, that lock will be released. */
4867 vfs_unlock_vnode_if_locked(struct file_descriptor* descriptor)
4869 struct vnode* vnode = fd_vnode(descriptor);
4871 if (vnode != NULL && vnode->mandatory_locked_by == descriptor)
4876 /*! Releases any POSIX locks on the file descriptor. */
4878 vfs_release_posix_lock(io_context* context, struct file_descriptor* descriptor)
4880 struct vnode* vnode = descriptor->u.vnode;
4885 return FS_CALL(vnode, release_lock, descriptor->cookie, NULL);
4902 struct file_descriptor* descriptor = context->fds[i];
4905 if (descriptor != NULL && fd_close_on_exec(context, i)) {
4915 close_fd(context, descriptor);
4916 put_fd(descriptor);
4982 struct file_descriptor* descriptor = parentContext->fds[i];
4984 if (descriptor != NULL
4985 && (descriptor->open_mode & O_DISCONNECTED) == 0) {
4990 TFD(InheritFD(context, i, descriptor, parentContext));
4992 context->fds[i] = descriptor;
4994 atomic_add(&descriptor->ref_count, 1);
4995 atomic_add(&descriptor->open_count, 1);
5303 panic("vfs_init: error creating file descriptor object_cache\n");
5354 file descriptor for it
5375 file descriptor for it
5499 file descriptor for it
5525 file descriptor for it.
5659 file_close(struct file_descriptor* descriptor)
5661 struct vnode* vnode = descriptor->u.vnode;
5664 FUNCTION(("file_close(descriptor = %p)\n", descriptor));
5669 status = FS_CALL(vnode, close, descriptor->cookie);
5675 status = FS_CALL(vnode, release_lock, descriptor->cookie, NULL);
5677 status = release_advisory_lock(vnode, NULL, descriptor, NULL);
5684 file_free_fd(struct file_descriptor* descriptor)
5686 struct vnode* vnode = descriptor->u.vnode;
5689 FS_CALL(vnode, free_cookie, descriptor->cookie);
5696 file_read(struct file_descriptor* descriptor, off_t pos, void* buffer,
5699 struct vnode* vnode = descriptor->u.vnode;
5705 if (pos != -1 && descriptor->pos == -1)
5708 return FS_CALL(vnode, read, descriptor->cookie, pos, buffer, length);
5713 file_write(struct file_descriptor* descriptor, off_t pos, const void* buffer,
5716 struct vnode* vnode = descriptor->u.vnode;
5722 if (pos != -1 && descriptor->pos == -1)
5728 return FS_CALL(vnode, write, descriptor->cookie, pos, buffer, length);
5733 file_seek(struct file_descriptor* descriptor, off_t pos, int seekType)
5735 struct vnode* vnode = descriptor->u.vnode;
5742 if (descriptor->pos == -1)
5758 offset = descriptor->pos;
5778 status = FS_CALL(vnode, ioctl, descriptor->cookie,
5796 status = FS_CALL(vnode, ioctl, descriptor->cookie,
5835 return descriptor->pos = pos;
5840 file_select(struct file_descriptor* descriptor, uint8 event,
5843 FUNCTION(("file_select(%p, %u, %p)\n", descriptor, event, sync));
5845 struct vnode* vnode = descriptor->u.vnode;
5855 return FS_CALL(vnode, select, descriptor->cookie, event, sync);
5860 file_deselect(struct file_descriptor* descriptor, uint8 event,
5863 struct vnode* vnode = descriptor->u.vnode;
5868 return FS_CALL(vnode, deselect, descriptor->cookie, event, sync);
5986 dir_close(struct file_descriptor* descriptor)
5988 struct vnode* vnode = descriptor->u.vnode;
5990 FUNCTION(("dir_close(descriptor = %p)\n", descriptor));
5995 return FS_CALL(vnode, close_dir, descriptor->cookie);
6002 dir_free_fd(struct file_descriptor* descriptor)
6004 struct vnode* vnode = descriptor->u.vnode;
6007 FS_CALL(vnode, free_dir_cookie, descriptor->cookie);
6014 dir_read(struct io_context* ioContext, struct file_descriptor* descriptor,
6017 return dir_read(ioContext, descriptor->u.vnode, descriptor->cookie, buffer,
6081 dir_rewind(struct file_descriptor* descriptor)
6083 struct vnode* vnode = descriptor->u.vnode;
6086 return FS_CALL(vnode, rewind_dir, descriptor->cookie);
6139 common_ioctl(struct file_descriptor* descriptor, ulong op, void* buffer,
6142 struct vnode* vnode = descriptor->u.vnode;
6145 return FS_CALL(vnode, ioctl, descriptor->cookie, op, buffer, length);
6161 FileDescriptorPutter descriptor(get_fd(context, fd));
6162 if (!descriptor.IsSet())
6165 struct vnode* vnode = fd_vnode(descriptor.Get());
6170 if (descriptor->type != FDTYPE_FILE)
6184 // Set file descriptor flags
6197 // Get file descriptor flags
6205 // Set file descriptor open mode
6209 if (descriptor->ops->fd_set_flags != NULL) {
6210 status = descriptor->ops->fd_set_flags(descriptor.Get(), argument);
6212 status = FS_CALL(vnode, set_flags, descriptor->cookie,
6218 // update this descriptor's open_mode field
6219 descriptor->open_mode = (descriptor->open_mode
6226 // Get file descriptor open mode
6227 status = descriptor->open_mode;
6233 status = new_fd_etc(context, descriptor.Get(), (int)argument);
6239 atomic_add(&descriptor->ref_count, 1);
6249 status = normalize_flock(descriptor.Get(), &normalizedLock);
6254 status = FS_CALL(vnode, test_lock, descriptor->cookie,
6291 status = normalize_flock(descriptor.Get(), &flock);
6299 status = FS_CALL(vnode, release_lock, descriptor->cookie,
6307 if (((descriptor->open_mode & O_RWMASK) == O_RDONLY
6309 || ((descriptor->open_mode & O_RWMASK) == O_WRONLY
6315 descriptor->cookie, &flock, op == F_SETLKW);
6340 FileDescriptorPutter descriptor(get_fd_and_vnode(fd, &vnode, kernel));
6341 if (!descriptor.IsSet())
6358 FileDescriptorPutter descriptor(get_fd_and_vnode(fd, &vnode, kernel));
6359 if (!descriptor.IsSet())
6367 descriptor.Get(), (file_descriptor*)NULL) != NULL)
6378 FileDescriptorPutter descriptor(get_fd_and_vnode(fd, &vnode, kernel));
6379 if (!descriptor.IsSet())
6387 (file_descriptor*)NULL, descriptor.Get()) != descriptor.Get())
6403 FileDescriptorPutter descriptor(get_fd_and_vnode(fd, &vnode, kernel));
6404 if (!descriptor.IsSet() || (descriptor->open_mode & O_RWMASK) == O_RDONLY)
6601 common_read_stat(struct file_descriptor* descriptor, struct stat* stat)
6603 struct vnode* vnode = descriptor->u.vnode;
6618 common_write_stat(struct file_descriptor* descriptor, const struct stat* stat,
6621 struct vnode* vnode = descriptor->u.vnode;
6626 if ((descriptor->open_mode & O_RWMASK) == O_RDONLY
6700 attr_dir_close(struct file_descriptor* descriptor)
6702 struct vnode* vnode = descriptor->u.vnode;
6704 FUNCTION(("attr_dir_close(descriptor = %p)\n", descriptor));
6707 return FS_CALL(vnode, close_attr_dir, descriptor->cookie);
6714 attr_dir_free_fd(struct file_descriptor* descriptor)
6716 struct vnode* vnode = descriptor->u.vnode;
6719 FS_CALL(vnode, free_attr_dir_cookie, descriptor->cookie);
6726 attr_dir_read(struct io_context* ioContext, struct file_descriptor* descriptor,
6729 struct vnode* vnode = descriptor->u.vnode;
6731 FUNCTION(("attr_dir_read(descriptor = %p)\n", descriptor));
6734 return FS_CALL(vnode, read_attr_dir, descriptor->cookie, buffer,
6742 attr_dir_rewind(struct file_descriptor* descriptor)
6744 struct vnode* vnode = descriptor->u.vnode;
6746 FUNCTION(("attr_dir_rewind(descriptor = %p)\n", descriptor));
6749 return FS_CALL(vnode, rewind_attr_dir, descriptor->cookie);
6821 // now we only need a file descriptor for this attribute and we're done
6838 attr_close(struct file_descriptor* descriptor)
6840 struct vnode* vnode = descriptor->u.vnode;
6842 FUNCTION(("attr_close(descriptor = %p)\n", descriptor));
6845 return FS_CALL(vnode, close_attr, descriptor->cookie);
6852 attr_free_fd(struct file_descriptor* descriptor)
6854 struct vnode* vnode = descriptor->u.vnode;
6857 FS_CALL(vnode, free_attr_cookie, descriptor->cookie);
6864 attr_read(struct file_descriptor* descriptor, off_t pos, void* buffer,
6867 struct vnode* vnode = descriptor->u.vnode;
6875 return FS_CALL(vnode, read_attr, descriptor->cookie, pos, buffer, length);
6880 attr_write(struct file_descriptor* descriptor, off_t pos, const void* buffer,
6883 struct vnode* vnode = descriptor->u.vnode;
6891 return FS_CALL(vnode, write_attr, descriptor->cookie, pos, buffer, length);
6896 attr_seek(struct file_descriptor* descriptor, off_t pos, int seekType)
6905 offset = descriptor->pos;
6909 struct vnode* vnode = descriptor->u.vnode;
6914 status_t status = FS_CALL(vnode, read_attr_stat, descriptor->cookie,
6934 return descriptor->pos = pos;
6939 attr_read_stat(struct file_descriptor* descriptor, struct stat* stat)
6941 struct vnode* vnode = descriptor->u.vnode;
6948 return FS_CALL(vnode, read_attr_stat, descriptor->cookie, stat);
6953 attr_write_stat(struct file_descriptor* descriptor, const struct stat* stat,
6956 struct vnode* vnode = descriptor->u.vnode;
6963 return FS_CALL(vnode, write_attr_stat, descriptor->cookie, stat, statMask);
6977 FileDescriptorPutter descriptor(get_fd_and_vnode(fd, &vnode, kernel));
6978 if (!descriptor.IsSet())
7067 index_dir_close(struct file_descriptor* descriptor)
7069 struct fs_mount* mount = descriptor->u.mount;
7071 FUNCTION(("index_dir_close(descriptor = %p)\n", descriptor));
7074 return FS_MOUNT_CALL(mount, close_index_dir, descriptor->cookie);
7081 index_dir_free_fd(struct file_descriptor* descriptor)
7083 struct fs_mount* mount = descriptor->u.mount;
7086 FS_MOUNT_CALL(mount, free_index_dir_cookie, descriptor->cookie);
7093 index_dir_read(struct io_context* ioContext, struct file_descriptor* descriptor,
7096 struct fs_mount* mount = descriptor->u.mount;
7099 return FS_MOUNT_CALL(mount, read_index_dir, descriptor->cookie, buffer,
7108 index_dir_rewind(struct file_descriptor* descriptor)
7110 struct fs_mount* mount = descriptor->u.mount;
7113 return FS_MOUNT_CALL(mount, rewind_index_dir, descriptor->cookie);
7146 index_read_stat(struct file_descriptor* descriptor, struct stat* stat)
7148 struct vnode* vnode = descriptor->u.vnode;
7156 //return FS_CALL(vnode, read_index_stat, descriptor->cookie, stat);
7161 index_free_fd(struct file_descriptor* descriptor)
7163 struct vnode* vnode = descriptor->u.vnode;
7166 FS_CALL(vnode, free_index_cookie, descriptor->cookie);
7270 query_close(struct file_descriptor* descriptor)
7272 struct fs_mount* mount = descriptor->u.mount;
7274 FUNCTION(("query_close(descriptor = %p)\n", descriptor));
7277 return FS_MOUNT_CALL(mount, close_query, descriptor->cookie);
7284 query_free_fd(struct file_descriptor* descriptor)
7286 struct fs_mount* mount = descriptor->u.mount;
7289 FS_MOUNT_CALL(mount, free_query_cookie, descriptor->cookie);
7296 query_read(struct io_context* ioContext, struct file_descriptor* descriptor,
7299 struct fs_mount* mount = descriptor->u.mount;
7302 return FS_MOUNT_CALL(mount, read_query, descriptor->cookie, buffer,
7311 query_rewind(struct file_descriptor* descriptor)
7313 struct fs_mount* mount = descriptor->u.mount;
7316 return FS_MOUNT_CALL(mount, rewind_query, descriptor->cookie);
8239 struct file_descriptor* descriptor;
8241 && (descriptor = context->fds[slot]) == NULL) {
8249 info->open_mode = descriptor->open_mode;
8251 struct vnode* vnode = fd_vnode(descriptor);
8255 } else if (descriptor->u.mount != NULL) {
8256 info->device = descriptor->u.mount->id;
8666 FileDescriptorPutter descriptor
8668 if (!descriptor.IsSet())
8671 if (descriptor->ops->fd_write_stat)
8672 status = descriptor->ops->fd_write_stat(descriptor.Get(), stat, statMask);
9138 \return The file descriptor of the opened parent directory, if everything
9219 FileDescriptorPutter descriptor(get_fd_and_vnode(fd, &vnode, false));
9220 if (!descriptor.IsSet())
9223 if (descriptor->type != FDTYPE_FILE)
9235 status = FS_CALL(vnode, release_lock, descriptor->cookie, &flock);
9237 status = release_advisory_lock(vnode, NULL, descriptor.Get(), &flock);
9240 status = FS_CALL(vnode, acquire_lock, descriptor->cookie, &flock,
9243 status = acquire_advisory_lock(vnode, NULL, descriptor.Get(), &flock,
9624 FileDescriptorPutter descriptor
9626 if (!descriptor.IsSet())
9629 if (descriptor->ops->fd_read_stat)
9630 status = descriptor->ops->fd_read_stat(descriptor.Get(), &stat);
9680 FileDescriptorPutter descriptor
9682 if (!descriptor.IsSet())
9685 if (descriptor->ops->fd_write_stat) {
9686 status = descriptor->ops->fd_write_stat(descriptor.Get(), &stat,
9789 struct file_descriptor* descriptor
9791 if (descriptor == NULL) {
9797 if (descriptor->ops->fd_read_stat)
9798 status = descriptor->ops->fd_read_stat(descriptor, &stat);
9802 put_fd(descriptor);