Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/vfs/vfs_ops.c

    rd2c8533 r6ad454f  
    8686}
    8787
    88 int vfs_op_clone(int oldfd, int newfd, bool desc)
     88int vfs_op_clone(int oldfd, int newfd, bool desc, int *out_fd)
    8989{
    9090        int rc;
     
    102102
    103103        if (newfd != -1) {
    104                 /* Make sure newfd is closed. */
    105                 (void) vfs_fd_free(newfd);
    106104                /* Assign the old file to newfd. */
    107105                rc = vfs_fd_assign(oldfile, newfd);
     106                *out_fd = newfd;
    108107        } else {
    109108                vfs_file_t *newfile;
    110                 int newfd = vfs_fd_alloc(&newfile, desc);
    111                 if (newfd >= 0) {
     109                rc = vfs_fd_alloc(&newfile, desc, out_fd);
     110                if (rc == EOK) {
    112111                        newfile->node = oldfile->node;
    113112                        newfile->permissions = oldfile->permissions;
     
    116115                        vfs_file_put(newfile);
    117116                }
    118                 rc = newfd;
    119117        }
    120118        vfs_file_put(oldfile);
     
    225223
    226224int vfs_op_mount(int mpfd, unsigned service_id, unsigned flags,
    227     unsigned instance, const char *opts, const char *fs_name, int *outfd)
     225    unsigned instance, const char *opts, const char *fs_name, int *out_fd)
    228226{
    229227        int rc;
    230228        vfs_file_t *mp = NULL;
    231229        vfs_file_t *file = NULL;
    232         int fd = -1;
     230        *out_fd = -1;
    233231       
    234232        if (!(flags & VFS_MOUNT_CONNECT_ONLY)) {
     
    256254       
    257255        if (!(flags & VFS_MOUNT_NO_REF)) {
    258                 fd = vfs_fd_alloc(&file, false);
    259                 if (fd < 0) {
    260                         rc = fd;
     256                rc = vfs_fd_alloc(&file, false, out_fd);
     257                if (rc != EOK) {
    261258                        goto out;
    262259                }
     
    297294                vfs_file_put(file);
    298295
    299         if (rc != EOK && fd >= 0) {
    300                 vfs_fd_free(fd);
    301                 fd = 0;
    302         }
    303        
    304         *outfd = fd;
     296        if (rc != EOK && *out_fd >= 0) {
     297                vfs_fd_free(*out_fd);
     298                *out_fd = -1;
     299        }
     300       
    305301        return rc;
    306302}
     
    830826}
    831827
    832 int vfs_op_wait_handle(bool high_fd)
    833 {
    834         return vfs_wait_handle_internal(high_fd);
     828int vfs_op_wait_handle(bool high_fd, int *out_fd)
     829{
     830        return vfs_wait_handle_internal(high_fd, out_fd);
    835831}
    836832
     
    894890       
    895891        vfs_file_t *file;
    896         int fd = vfs_fd_alloc(&file, false);
    897         if (fd < 0) {
     892        rc = vfs_fd_alloc(&file, false, out_fd);
     893        if (rc != EOK) {
    898894                vfs_node_put(node);
    899895                vfs_file_put(parent);
    900                 return fd;
     896                return rc;
    901897        }
    902898        assert(file != NULL);
     
    912908        fibril_rwlock_read_unlock(&namespace_rwlock);
    913909
    914         *out_fd = fd;
    915910        return EOK;
    916911}
Note: See TracChangeset for help on using the changeset viewer.