Changes in uspace/lib/c/generic/vfs/vfs.c [9ea7d90:79ae36dd] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/vfs/vfs.c
r9ea7d90 r79ae36dd 51 51 #include <assert.h> 52 52 #include <str.h> 53 #include < loc.h>53 #include <devmap.h> 54 54 #include <ipc/vfs.h> 55 #include <ipc/ loc.h>55 #include <ipc/devmap.h> 56 56 57 57 static FIBRIL_MUTEX_INITIALIZE(vfs_mutex); … … 69 69 * 70 70 */ 71 async_exch_t *vfs_exchange_begin(void)71 static async_exch_t *vfs_exchange_begin(void) 72 72 { 73 73 fibril_mutex_lock(&vfs_mutex); … … 87 87 * 88 88 */ 89 void vfs_exchange_end(async_exch_t *exch)89 static void vfs_exchange_end(async_exch_t *exch) 90 90 { 91 91 async_exchange_end(exch); … … 142 142 } 143 143 144 int mount(const char *fs_name, const char *mp, const char *fq sn,144 int mount(const char *fs_name, const char *mp, const char *fqdn, 145 145 const char *opts, unsigned int flags) 146 146 { 147 147 int null_id = -1; 148 char null[ LOC_NAME_MAXLEN];149 150 if (str_cmp(fq sn, "") == 0) {148 char null[DEVMAP_NAME_MAXLEN]; 149 150 if (str_cmp(fqdn, "") == 0) { 151 151 /* No device specified, create a fresh 152 152 null/%d device instead */ 153 null_id = loc_null_create();153 null_id = devmap_null_create(); 154 154 155 155 if (null_id == -1) 156 156 return ENOMEM; 157 157 158 snprintf(null, LOC_NAME_MAXLEN, "null/%d", null_id);159 fq sn = null;160 } 161 162 service_id_t service_id;163 int res = loc_service_get_id(fqsn, &service_id, flags);158 snprintf(null, DEVMAP_NAME_MAXLEN, "null/%d", null_id); 159 fqdn = null; 160 } 161 162 devmap_handle_t devmap_handle; 163 int res = devmap_device_get_handle(fqdn, &devmap_handle, flags); 164 164 if (res != EOK) { 165 165 if (null_id != -1) 166 loc_null_destroy(null_id);166 devmap_null_destroy(null_id); 167 167 168 168 return res; … … 173 173 if (!mpa) { 174 174 if (null_id != -1) 175 loc_null_destroy(null_id);175 devmap_null_destroy(null_id); 176 176 177 177 return ENOMEM; … … 181 181 182 182 sysarg_t rc_orig; 183 aid_t req = async_send_2(exch, VFS_IN_MOUNT, service_id, flags, NULL);183 aid_t req = async_send_2(exch, VFS_IN_MOUNT, devmap_handle, flags, NULL); 184 184 sysarg_t rc = async_data_write_start(exch, (void *) mpa, mpa_size); 185 185 if (rc != EOK) { … … 189 189 190 190 if (null_id != -1) 191 loc_null_destroy(null_id);191 devmap_null_destroy(null_id); 192 192 193 193 if (rc_orig == EOK) … … 204 204 205 205 if (null_id != -1) 206 loc_null_destroy(null_id);206 devmap_null_destroy(null_id); 207 207 208 208 if (rc_orig == EOK) … … 219 219 220 220 if (null_id != -1) 221 loc_null_destroy(null_id);221 devmap_null_destroy(null_id); 222 222 223 223 if (rc_orig == EOK) … … 235 235 236 236 if (null_id != -1) 237 loc_null_destroy(null_id);237 devmap_null_destroy(null_id); 238 238 239 239 if (rc_orig == EOK) … … 248 248 249 249 if ((rc != EOK) && (null_id != -1)) 250 loc_null_destroy(null_id);250 devmap_null_destroy(null_id); 251 251 252 252 return (int) rc; … … 329 329 } 330 330 331 int open_node(fdi_node_t *node, int oflag) 332 { 333 async_exch_t *exch = vfs_exchange_begin(); 334 335 ipc_call_t answer; 336 aid_t req = async_send_4(exch, VFS_IN_OPEN_NODE, node->fs_handle, 337 node->devmap_handle, node->index, oflag, &answer); 338 339 vfs_exchange_end(exch); 340 341 sysarg_t rc; 342 async_wait_for(req, &rc); 343 344 if (rc != EOK) 345 return (int) rc; 346 347 return (int) IPC_GET_ARG1(answer); 348 } 349 331 350 int close(int fildes) 332 351 { … … 396 415 else 397 416 return -1; 398 }399 400 /** Read entire buffer.401 *402 * In face of short reads this function continues reading until either403 * the entire buffer is read or no more data is available (at end of file).404 *405 * @param fildes File descriptor406 * @param buf Buffer, @a nbytes bytes long407 * @param nbytes Number of bytes to read408 *409 * @return On success, positive number of bytes read.410 * On failure, negative error code from read().411 */412 ssize_t read_all(int fildes, void *buf, size_t nbyte)413 {414 ssize_t cnt = 0;415 size_t nread = 0;416 uint8_t *bp = (uint8_t *) buf;417 418 do {419 bp += cnt;420 nread += cnt;421 cnt = read(fildes, bp, nbyte - nread);422 } while (cnt > 0 && (nbyte - nread - cnt) > 0);423 424 if (cnt < 0)425 return cnt;426 427 return nread + cnt;428 }429 430 /** Write entire buffer.431 *432 * This function fails if it cannot write exactly @a len bytes to the file.433 *434 * @param fildes File descriptor435 * @param buf Data, @a nbytes bytes long436 * @param nbytes Number of bytes to write437 *438 * @return EOK on error, return value from write() if writing439 * failed.440 */441 ssize_t write_all(int fildes, const void *buf, size_t nbyte)442 {443 ssize_t cnt = 0;444 ssize_t nwritten = 0;445 const uint8_t *bp = (uint8_t *) buf;446 447 do {448 bp += cnt;449 nwritten += cnt;450 cnt = write(fildes, bp, nbyte - nwritten);451 } while (cnt > 0 && ((ssize_t )nbyte - nwritten - cnt) > 0);452 453 if (cnt < 0)454 return cnt;455 456 if ((ssize_t)nbyte - nwritten - cnt > 0)457 return EIO;458 459 return nbyte;460 417 } 461 418 … … 654 611 async_exch_t *exch = vfs_exchange_begin(); 655 612 656 req = async_send_ 1(exch, VFS_IN_UNLINK, lflag, NULL);613 req = async_send_0(exch, VFS_IN_UNLINK, NULL); 657 614 rc = async_data_write_start(exch, pa, pa_size); 658 615 if (rc != EOK) { … … 792 749 } 793 750 794 if (!stat. service) {751 if (!stat.device) { 795 752 errno = ENOENT; 796 753 return NULL; 797 754 } 798 755 799 return loc_service_connect(mgmt, stat.service, 0); 756 return devmap_device_connect(mgmt, stat.device, 0); 757 } 758 759 int fd_node(int fildes, fdi_node_t *node) 760 { 761 struct stat stat; 762 int rc = fstat(fildes, &stat); 763 764 if (rc == EOK) { 765 node->fs_handle = stat.fs_handle; 766 node->devmap_handle = stat.devmap_handle; 767 node->index = stat.index; 768 } 769 770 return rc; 800 771 } 801 772 … … 815 786 } 816 787 817 int fd_wait(void)818 {819 async_exch_t *exch = vfs_exchange_begin();820 821 sysarg_t ret;822 sysarg_t rc = async_req_0_1(exch, VFS_IN_WAIT_HANDLE, &ret);823 824 vfs_exchange_end(exch);825 826 if (rc == EOK)827 return (int) ret;828 829 return (int) rc;830 }831 832 788 /** @} 833 789 */
Note:
See TracChangeset
for help on using the changeset viewer.