Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/libc/generic/vfs/vfs.c

    r28be7fa r1313ee9  
    120120    const char *opts, unsigned int flags)
    121121{
    122         int null_id = -1;
    123         char null[DEVMAP_NAME_MAXLEN];
    124        
    125         if (str_cmp(fqdn, "") == 0) {
    126                 /* No device specified, create a fresh
    127                    null/%d device instead */
    128                 null_id = devmap_null_create();
    129                
    130                 if (null_id == -1)
    131                         return ENOMEM;
    132                
    133                 snprintf(null, DEVMAP_NAME_MAXLEN, "null/%d", null_id);
    134                 fqdn = null;
    135         }
    136        
     122        int res;
     123        ipcarg_t rc;
     124        ipcarg_t rc_orig;
     125        aid_t req;
    137126        dev_handle_t dev_handle;
    138         int res = devmap_device_get_handle(fqdn, &dev_handle, flags);
    139         if (res != EOK) {
    140                 if (null_id != -1)
    141                         devmap_null_destroy(null_id);
    142                
     127       
     128        res = devmap_device_get_handle(fqdn, &dev_handle, flags);
     129        if (res != EOK)
    143130                return res;
    144         }
    145131       
    146132        size_t mpa_size;
    147133        char *mpa = absolutize(mp, &mpa_size);
    148         if (!mpa) {
    149                 if (null_id != -1)
    150                         devmap_null_destroy(null_id);
    151                
    152                 return ENOMEM;
    153         }
    154        
    155         futex_down(&vfs_phone_futex);
    156         async_serialize_start();
    157         vfs_connect();
    158        
    159         ipcarg_t rc_orig;
    160         aid_t req = async_send_2(vfs_phone, VFS_IN_MOUNT, dev_handle, flags, NULL);
    161         ipcarg_t rc = async_data_write_start(vfs_phone, (void *) mpa, mpa_size);
     134        if (!mpa)
     135                return ENOMEM;
     136       
     137        futex_down(&vfs_phone_futex);
     138        async_serialize_start();
     139        vfs_connect();
     140       
     141        req = async_send_2(vfs_phone, VFS_IN_MOUNT, dev_handle, flags, NULL);
     142        rc = async_data_write_start(vfs_phone, (void *) mpa, mpa_size);
    162143        if (rc != EOK) {
    163144                async_wait_for(req, &rc_orig);
     
    165146                futex_up(&vfs_phone_futex);
    166147                free(mpa);
    167                
    168                 if (null_id != -1)
    169                         devmap_null_destroy(null_id);
    170                
    171148                if (rc_orig == EOK)
    172149                        return (int) rc;
     
    181158                futex_up(&vfs_phone_futex);
    182159                free(mpa);
    183                
    184                 if (null_id != -1)
    185                         devmap_null_destroy(null_id);
    186                
    187                 if (rc_orig == EOK)
    188                         return (int) rc;
    189                 else
    190                         return (int) rc_orig;
    191         }
    192        
     160                if (rc_orig == EOK)
     161                        return (int) rc;
     162                else
     163                        return (int) rc_orig;
     164        }
     165
    193166        rc = async_data_write_start(vfs_phone, (void *) fs_name, str_size(fs_name));
    194167        if (rc != EOK) {
     
    197170                futex_up(&vfs_phone_futex);
    198171                free(mpa);
    199                
    200                 if (null_id != -1)
    201                         devmap_null_destroy(null_id);
    202                
    203                 if (rc_orig == EOK)
    204                         return (int) rc;
    205                 else
    206                         return (int) rc_orig;
    207         }
    208        
     172                if (rc_orig == EOK)
     173                        return (int) rc;
     174                else
     175                        return (int) rc_orig;
     176        }
     177
    209178        /* Ask VFS whether it likes fs_name. */
    210179        rc = async_req_0_0(vfs_phone, IPC_M_PING);
     
    214183                futex_up(&vfs_phone_futex);
    215184                free(mpa);
    216                
    217                 if (null_id != -1)
    218                         devmap_null_destroy(null_id);
    219                
    220                 if (rc_orig == EOK)
    221                         return (int) rc;
    222                 else
    223                         return (int) rc_orig;
    224         }
    225        
    226         async_wait_for(req, &rc);
    227         async_serialize_end();
    228         futex_up(&vfs_phone_futex);
    229         free(mpa);
    230        
    231         if ((rc != EOK) && (null_id != -1))
    232                 devmap_null_destroy(null_id);
    233        
    234         return (int) rc;
    235 }
    236 
    237 int unmount(const char *mp)
    238 {
    239         ipcarg_t rc;
    240         ipcarg_t rc_orig;
    241         aid_t req;
    242         size_t mpa_size;
    243         char *mpa;
    244        
    245         mpa = absolutize(mp, &mpa_size);
    246         if (!mpa)
    247                 return ENOMEM;
    248        
    249         futex_down(&vfs_phone_futex);
    250         async_serialize_start();
    251         vfs_connect();
    252        
    253         req = async_send_0(vfs_phone, VFS_IN_UNMOUNT, NULL);
    254         rc = async_data_write_start(vfs_phone, (void *) mpa, mpa_size);
    255         if (rc != EOK) {
    256                 async_wait_for(req, &rc_orig);
    257                 async_serialize_end();
    258                 futex_up(&vfs_phone_futex);
    259                 free(mpa);
    260                 if (rc_orig == EOK)
    261                         return (int) rc;
    262                 else
    263                         return (int) rc_orig;
    264         }
    265        
    266 
     185                if (rc_orig == EOK)
     186                        return (int) rc;
     187                else
     188                        return (int) rc_orig;
     189        }
     190       
    267191        async_wait_for(req, &rc);
    268192        async_serialize_end();
Note: See TracChangeset for help on using the changeset viewer.