Changeset 210e50a in mainline for uspace/lib/libc/generic/vfs/vfs.c
- Timestamp:
- 2010-02-03T13:36:46Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 28be7fa
- Parents:
- 82474ef
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/libc/generic/vfs/vfs.c
r82474ef r210e50a 125 125 aid_t req; 126 126 dev_handle_t dev_handle; 127 int null_id = -1; 128 char null[DEVMAP_NAME_MAXLEN]; 129 130 if (str_cmp(fqdn, "") == 0) { 131 /* No device specified, create a fresh 132 null/%d device instead */ 133 null_id = devmap_null_create(); 134 135 if (null_id == -1) 136 return ENOMEM; 137 138 snprintf(null, DEVMAP_NAME_MAXLEN, "null/%d", null_id); 139 fqdn = null; 140 } 127 141 128 142 res = devmap_device_get_handle(fqdn, &dev_handle, flags); 129 if (res != EOK) 143 if (res != EOK) { 144 if (null_id != -1) 145 devmap_null_destroy(null_id); 146 130 147 return res; 148 } 131 149 132 150 size_t mpa_size; 133 151 char *mpa = absolutize(mp, &mpa_size); 134 if (!mpa) 135 return ENOMEM; 152 if (!mpa) { 153 if (null_id != -1) 154 devmap_null_destroy(null_id); 155 156 return ENOMEM; 157 } 136 158 137 159 futex_down(&vfs_phone_futex); … … 146 168 futex_up(&vfs_phone_futex); 147 169 free(mpa); 170 171 if (null_id != -1) 172 devmap_null_destroy(null_id); 173 148 174 if (rc_orig == EOK) 149 175 return (int) rc; … … 158 184 futex_up(&vfs_phone_futex); 159 185 free(mpa); 160 if (rc_orig == EOK) 161 return (int) rc; 162 else 163 return (int) rc_orig; 164 } 165 186 187 if (null_id != -1) 188 devmap_null_destroy(null_id); 189 190 if (rc_orig == EOK) 191 return (int) rc; 192 else 193 return (int) rc_orig; 194 } 195 166 196 rc = async_data_write_start(vfs_phone, (void *) fs_name, str_size(fs_name)); 167 197 if (rc != EOK) { … … 170 200 futex_up(&vfs_phone_futex); 171 201 free(mpa); 172 if (rc_orig == EOK) 173 return (int) rc; 174 else 175 return (int) rc_orig; 176 } 177 202 203 if (null_id != -1) 204 devmap_null_destroy(null_id); 205 206 if (rc_orig == EOK) 207 return (int) rc; 208 else 209 return (int) rc_orig; 210 } 211 178 212 /* Ask VFS whether it likes fs_name. */ 179 213 rc = async_req_0_0(vfs_phone, IPC_M_PING); … … 183 217 futex_up(&vfs_phone_futex); 184 218 free(mpa); 219 220 if (null_id != -1) 221 devmap_null_destroy(null_id); 222 185 223 if (rc_orig == EOK) 186 224 return (int) rc; … … 193 231 futex_up(&vfs_phone_futex); 194 232 free(mpa); 233 234 if ((rc != EOK) && (null_id != -1)) 235 devmap_null_destroy(null_id); 195 236 196 237 return (int) rc;
Note:
See TracChangeset
for help on using the changeset viewer.