Lines Matching defs: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
6206 // Set file descriptor open mode
6212 if (descriptor->ops->fd_set_flags != NULL) {
6213 status = descriptor->ops->fd_set_flags(descriptor.Get(), argument);
6215 status = FS_CALL(vnode, set_flags, descriptor->cookie,
6221 // update this descriptor's open_mode field
6222 descriptor->open_mode = (descriptor->open_mode
6230 // Get file descriptor open mode
6231 status = descriptor->open_mode;
6237 status = new_fd_etc(context, descriptor.Get(), (int)argument);
6243 atomic_add(&descriptor->ref_count, 1);
6253 status = normalize_flock(descriptor.Get(), &normalizedLock);
6258 status = FS_CALL(vnode, test_lock, descriptor->cookie,
6295 status = normalize_flock(descriptor.Get(), &flock);
6303 status = FS_CALL(vnode, release_lock, descriptor->cookie,
6311 if (((descriptor->open_mode & O_RWMASK) == O_RDONLY
6313 || ((descriptor->open_mode & O_RWMASK) == O_WRONLY
6319 descriptor->cookie, &flock, op == F_SETLKW);
6344 FileDescriptorPutter descriptor(get_fd_and_vnode(fd, &vnode, kernel));
6345 if (!descriptor.IsSet())
6362 FileDescriptorPutter descriptor(get_fd_and_vnode(fd, &vnode, kernel));
6363 if (!descriptor.IsSet())
6371 descriptor.Get(), (file_descriptor*)NULL) != NULL)
6382 FileDescriptorPutter descriptor(get_fd_and_vnode(fd, &vnode, kernel));
6383 if (!descriptor.IsSet())
6391 (file_descriptor*)NULL, descriptor.Get()) != descriptor.Get())
6407 FileDescriptorPutter descriptor(get_fd_and_vnode(fd, &vnode, kernel));
6408 if (!descriptor.IsSet() || (descriptor->open_mode & O_RWMASK) == O_RDONLY)
6605 common_read_stat(struct file_descriptor* descriptor, struct stat* stat)
6607 struct vnode* vnode = descriptor->u.vnode;
6622 common_write_stat(struct file_descriptor* descriptor, const struct stat* stat,
6625 struct vnode* vnode = descriptor->u.vnode;
6630 if ((descriptor->open_mode & O_RWMASK) == O_RDONLY
6704 attr_dir_close(struct file_descriptor* descriptor)
6706 struct vnode* vnode = descriptor->u.vnode;
6708 FUNCTION(("attr_dir_close(descriptor = %p)\n", descriptor));
6711 return FS_CALL(vnode, close_attr_dir, descriptor->cookie);
6718 attr_dir_free_fd(struct file_descriptor* descriptor)
6720 struct vnode* vnode = descriptor->u.vnode;
6723 FS_CALL(vnode, free_attr_dir_cookie, descriptor->cookie);
6730 attr_dir_read(struct io_context* ioContext, struct file_descriptor* descriptor,
6733 struct vnode* vnode = descriptor->u.vnode;
6735 FUNCTION(("attr_dir_read(descriptor = %p)\n", descriptor));
6738 return FS_CALL(vnode, read_attr_dir, descriptor->cookie, buffer,
6746 attr_dir_rewind(struct file_descriptor* descriptor)
6748 struct vnode* vnode = descriptor->u.vnode;
6750 FUNCTION(("attr_dir_rewind(descriptor = %p)\n", descriptor));
6753 return FS_CALL(vnode, rewind_attr_dir, descriptor->cookie);
6825 // now we only need a file descriptor for this attribute and we're done
6842 attr_close(struct file_descriptor* descriptor)
6844 struct vnode* vnode = descriptor->u.vnode;
6846 FUNCTION(("attr_close(descriptor = %p)\n", descriptor));
6849 return FS_CALL(vnode, close_attr, descriptor->cookie);
6856 attr_free_fd(struct file_descriptor* descriptor)
6858 struct vnode* vnode = descriptor->u.vnode;
6861 FS_CALL(vnode, free_attr_cookie, descriptor->cookie);
6868 attr_read(struct file_descriptor* descriptor, off_t pos, void* buffer,
6871 struct vnode* vnode = descriptor->u.vnode;
6879 return FS_CALL(vnode, read_attr, descriptor->cookie, pos, buffer, length);
6884 attr_write(struct file_descriptor* descriptor, off_t pos, const void* buffer,
6887 struct vnode* vnode = descriptor->u.vnode;
6895 return FS_CALL(vnode, write_attr, descriptor->cookie, pos, buffer, length);
6900 attr_seek(struct file_descriptor* descriptor, off_t pos, int seekType)
6909 offset = descriptor->pos;
6913 struct vnode* vnode = descriptor->u.vnode;
6918 status_t status = FS_CALL(vnode, read_attr_stat, descriptor->cookie,
6938 return descriptor->pos = pos;
6943 attr_read_stat(struct file_descriptor* descriptor, struct stat* stat)
6945 struct vnode* vnode = descriptor->u.vnode;
6952 return FS_CALL(vnode, read_attr_stat, descriptor->cookie, stat);
6957 attr_write_stat(struct file_descriptor* descriptor, const struct stat* stat,
6960 struct vnode* vnode = descriptor->u.vnode;
6967 return FS_CALL(vnode, write_attr_stat, descriptor->cookie, stat, statMask);
6981 FileDescriptorPutter descriptor(get_fd_and_vnode(fd, &vnode, kernel));
6982 if (!descriptor.IsSet())
7071 index_dir_close(struct file_descriptor* descriptor)
7073 struct fs_mount* mount = descriptor->u.mount;
7075 FUNCTION(("index_dir_close(descriptor = %p)\n", descriptor));
7078 return FS_MOUNT_CALL(mount, close_index_dir, descriptor->cookie);
7085 index_dir_free_fd(struct file_descriptor* descriptor)
7087 struct fs_mount* mount = descriptor->u.mount;
7090 FS_MOUNT_CALL(mount, free_index_dir_cookie, descriptor->cookie);
7097 index_dir_read(struct io_context* ioContext, struct file_descriptor* descriptor,
7100 struct fs_mount* mount = descriptor->u.mount;
7103 return FS_MOUNT_CALL(mount, read_index_dir, descriptor->cookie, buffer,
7112 index_dir_rewind(struct file_descriptor* descriptor)
7114 struct fs_mount* mount = descriptor->u.mount;
7117 return FS_MOUNT_CALL(mount, rewind_index_dir, descriptor->cookie);
7150 index_read_stat(struct file_descriptor* descriptor, struct stat* stat)
7152 struct vnode* vnode = descriptor->u.vnode;
7160 //return FS_CALL(vnode, read_index_stat, descriptor->cookie, stat);
7165 index_free_fd(struct file_descriptor* descriptor)
7167 struct vnode* vnode = descriptor->u.vnode;
7170 FS_CALL(vnode, free_index_cookie, descriptor->cookie);
7274 query_close(struct file_descriptor* descriptor)
7276 struct fs_mount* mount = descriptor->u.mount;
7278 FUNCTION(("query_close(descriptor = %p)\n", descriptor));
7281 return FS_MOUNT_CALL(mount, close_query, descriptor->cookie);
7288 query_free_fd(struct file_descriptor* descriptor)
7290 struct fs_mount* mount = descriptor->u.mount;
7293 FS_MOUNT_CALL(mount, free_query_cookie, descriptor->cookie);
7300 query_read(struct io_context* ioContext, struct file_descriptor* descriptor,
7303 struct fs_mount* mount = descriptor->u.mount;
7306 return FS_MOUNT_CALL(mount, read_query, descriptor->cookie, buffer,
7315 query_rewind(struct file_descriptor* descriptor)
7317 struct fs_mount* mount = descriptor->u.mount;
7320 return FS_MOUNT_CALL(mount, rewind_query, descriptor->cookie);
8243 struct file_descriptor* descriptor;
8245 && (descriptor = context->fds[slot]) == NULL) {
8253 info->open_mode = descriptor->open_mode;
8255 struct vnode* vnode = fd_vnode(descriptor);
8259 } else if (descriptor->u.mount != NULL) {
8260 info->device = descriptor->u.mount->id;
8670 FileDescriptorPutter descriptor
8672 if (!descriptor.IsSet())
8675 if (descriptor->ops->fd_write_stat)
8676 status = descriptor->ops->fd_write_stat(descriptor.Get(), stat, statMask);
9142 \return The file descriptor of the opened parent directory, if everything
9223 FileDescriptorPutter descriptor(get_fd_and_vnode(fd, &vnode, false));
9224 if (!descriptor.IsSet())
9227 if (descriptor->type != FDTYPE_FILE)
9239 status = FS_CALL(vnode, release_lock, descriptor->cookie, &flock);
9241 status = release_advisory_lock(vnode, NULL, descriptor.Get(), &flock);
9244 status = FS_CALL(vnode, acquire_lock, descriptor->cookie, &flock,
9247 status = acquire_advisory_lock(vnode, NULL, descriptor.Get(), &flock,
9628 FileDescriptorPutter descriptor
9630 if (!descriptor.IsSet())
9633 if (descriptor->ops->fd_read_stat)
9634 status = descriptor->ops->fd_read_stat(descriptor.Get(), &stat);
9684 FileDescriptorPutter descriptor
9686 if (!descriptor.IsSet())
9689 if (descriptor->ops->fd_write_stat) {
9690 status = descriptor->ops->fd_write_stat(descriptor.Get(), &stat,
9793 struct file_descriptor* descriptor
9795 if (descriptor == NULL) {
9801 if (descriptor->ops->fd_read_stat)
9802 status = descriptor->ops->fd_read_stat(descriptor, &stat);
9806 put_fd(descriptor);