Changeset fcab7ef in mainline for uspace/srv/vfs/vfs_ops.c
- Timestamp:
- 2017-03-26T20:46:56Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- fe91f66
- Parents:
- f644472
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/vfs/vfs_ops.c
rf644472 rfcab7ef 88 88 } 89 89 90 int vfs_op_clone(int oldfd, bool desc) 91 { 90 int vfs_op_clone(int oldfd, int newfd, bool desc) 91 { 92 int rc; 93 94 /* If the file descriptors are the same, do nothing. */ 95 if (oldfd == newfd) 96 return EOK; 97 92 98 /* Lookup the file structure corresponding to fd. */ 93 99 vfs_file_t *oldfile = vfs_file_get(oldfd); … … 96 102 97 103 assert(oldfile->node != NULL); 98 99 vfs_file_t *newfile; 100 int newfd = vfs_fd_alloc(&newfile, desc); 101 if (newfd >= 0) { 102 newfile->node = oldfile->node; 103 newfile->permissions = oldfile->permissions; 104 vfs_node_addref(newfile->node); 105 106 vfs_file_put(newfile); 104 105 if (newfd != -1) { 106 /* Make sure newfd is closed. */ 107 (void) vfs_fd_free(newfd); 108 /* Assign the old file to newfd. */ 109 rc = vfs_fd_assign(oldfile, newfd); 110 } else { 111 vfs_file_t *newfile; 112 int newfd = vfs_fd_alloc(&newfile, desc); 113 if (newfd >= 0) { 114 newfile->node = oldfile->node; 115 newfile->permissions = oldfile->permissions; 116 vfs_node_addref(newfile->node); 117 118 vfs_file_put(newfile); 119 } 120 rc = newfd; 107 121 } 108 122 vfs_file_put(oldfile); 109 123 110 return newfd;124 return rc; 111 125 } 112 126 … … 114 128 { 115 129 return vfs_fd_free(fd); 116 }117 118 int vfs_op_dup(int oldfd, int newfd)119 {120 /* If the file descriptors are the same, do nothing. */121 if (oldfd == newfd)122 return EOK;123 124 /* Lookup the file structure corresponding to oldfd. */125 vfs_file_t *oldfile = vfs_file_get(oldfd);126 if (!oldfile)127 return EBADF;128 129 /* Make sure newfd is closed. */130 (void) vfs_fd_free(newfd);131 132 /* Assign the old file to newfd. */133 int ret = vfs_fd_assign(oldfile, newfd);134 vfs_file_put(oldfile);135 136 return ret;137 130 } 138 131
Note:
See TracChangeset
for help on using the changeset viewer.