Lines Matching refs:file

41 static int dfs_elm_truncate(struct dfs_file *file, off_t offset);
44 static ssize_t dfs_elm_page_read(struct dfs_file *file, struct dfs_page *page);
370 int dfs_elm_open(struct dfs_file *file) in dfs_elm_open() argument
379 struct dfs_mnt *mnt = file->vnode->mnt; in dfs_elm_open()
382 RT_ASSERT(file->vnode->ref_count > 0); in dfs_elm_open()
383 if (file->vnode->data) in dfs_elm_open()
385 if (file->vnode->type == FT_DIRECTORY in dfs_elm_open()
386 && !(file->flags & O_DIRECTORY)) in dfs_elm_open()
390 file->fpos = 0; in dfs_elm_open()
405 rt_snprintf(drivers_fn, 256, "%d:%s", vol, file->dentry->pathname); in dfs_elm_open()
407 drivers_fn = file->dentry->pathname; in dfs_elm_open()
410 if (file->flags & O_DIRECTORY) in dfs_elm_open()
414 if (file->flags & O_CREAT) in dfs_elm_open()
446 file->vnode->data = dir; in dfs_elm_open()
447 rt_mutex_init(&file->vnode->lock, file->dentry->pathname, RT_IPC_FLAG_PRIO); in dfs_elm_open()
454 if (file->flags & O_WRONLY) in dfs_elm_open()
456 if ((file->flags & O_ACCMODE) & O_RDWR) in dfs_elm_open()
459 if (file->flags & O_CREAT) in dfs_elm_open()
462 if (file->flags & O_TRUNC) in dfs_elm_open()
465 if (file->flags & O_EXCL) in dfs_elm_open()
484 file->fpos = fd->fptr; in dfs_elm_open()
485 file->vnode->size = f_size(fd); in dfs_elm_open()
486 file->vnode->type = FT_REGULAR; in dfs_elm_open()
487 file->vnode->data = fd; in dfs_elm_open()
488 rt_mutex_init(&file->vnode->lock, file->dentry->pathname, RT_IPC_FLAG_PRIO); in dfs_elm_open()
490 if (file->flags & O_APPEND) in dfs_elm_open()
494 file->fpos = fd->fptr; in dfs_elm_open()
508 int dfs_elm_close(struct dfs_file *file) in dfs_elm_close() argument
512 RT_ASSERT(file->vnode->ref_count > 0); in dfs_elm_close()
513 if (file->vnode->ref_count > 1) in dfs_elm_close()
518 if (file->vnode->type == FT_DIRECTORY) in dfs_elm_close()
522 dir = (DIR *)(file->vnode->data); in dfs_elm_close()
528 else if (file->vnode->type == FT_REGULAR) in dfs_elm_close()
532 fd = (FIL *)(file->vnode->data); in dfs_elm_close()
540 file->vnode->data = RT_NULL; in dfs_elm_close()
541 rt_mutex_detach(&file->vnode->lock); in dfs_elm_close()
546 int dfs_elm_ioctl(struct dfs_file *file, int cmd, void *args) in dfs_elm_ioctl() argument
553 return dfs_elm_truncate(file, offset); in dfs_elm_ioctl()
563 ssize_t dfs_elm_read(struct dfs_file *file, void *buf, size_t len, off_t *pos) in dfs_elm_read() argument
569 if (file->vnode->type == FT_DIRECTORY) in dfs_elm_read()
574 if (file->vnode->size > *pos) in dfs_elm_read()
576 fd = (FIL *)(file->vnode->data); in dfs_elm_read()
578 rt_mutex_take(&file->vnode->lock, RT_WAITING_FOREVER); in dfs_elm_read()
583 rt_mutex_release(&file->vnode->lock); in dfs_elm_read()
591 ssize_t dfs_elm_write(struct dfs_file *file, const void *buf, size_t len, off_t *pos) in dfs_elm_write() argument
597 if (file->vnode->type == FT_DIRECTORY) in dfs_elm_write()
602 fd = (FIL *)(file->vnode->data); in dfs_elm_write()
604 rt_mutex_take(&file->vnode->lock, RT_WAITING_FOREVER); in dfs_elm_write()
609 file->vnode->size = f_size(fd); in dfs_elm_write()
610 rt_mutex_release(&file->vnode->lock); in dfs_elm_write()
617 int dfs_elm_flush(struct dfs_file *file) in dfs_elm_flush() argument
622 fd = (FIL *)(file->vnode->data); in dfs_elm_flush()
629 off_t dfs_elm_lseek(struct dfs_file *file, off_t offset, int wherece) in dfs_elm_lseek() argument
639 offset += file->fpos; in dfs_elm_lseek()
643 offset += file->vnode->size; in dfs_elm_lseek()
650 if (file->vnode->type == FT_REGULAR) in dfs_elm_lseek()
655 fd = (FIL *)(file->vnode->data); in dfs_elm_lseek()
657 rt_mutex_take(&file->vnode->lock, RT_WAITING_FOREVER); in dfs_elm_lseek()
659 rt_mutex_release(&file->vnode->lock); in dfs_elm_lseek()
666 else if (file->vnode->type == FT_DIRECTORY) in dfs_elm_lseek()
671 dir = (DIR *)(file->vnode->data); in dfs_elm_lseek()
673 rt_mutex_take(&file->vnode->lock, RT_WAITING_FOREVER); in dfs_elm_lseek()
675 rt_mutex_release(&file->vnode->lock); in dfs_elm_lseek()
686 static int dfs_elm_truncate(struct dfs_file *file, off_t offset) in dfs_elm_truncate() argument
691 fd = (FIL *)(file->vnode->data); in dfs_elm_truncate()
710 int dfs_elm_getdents(struct dfs_file *file, struct dirent *dirp, uint32_t count) in dfs_elm_getdents() argument
718 dir = (DIR *)(file->vnode->data); in dfs_elm_getdents()
761 file->fpos += index * sizeof(struct dirent); in dfs_elm_getdents()
1026 static ssize_t dfs_elm_page_read(struct dfs_file *file, struct dfs_page *page) in dfs_elm_page_read() argument
1033 ret = dfs_elm_read(file, page->page, page->size, &fpos); in dfs_elm_page_read()