Changeset 9b48c06 in mainline
- Timestamp:
- 2013-07-24T22:41:54Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- ff8c87c
- Parents:
- 3ef62df
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/vfs/vfs.c
r3ef62df r9b48c06 333 333 } 334 334 335 static int open_internal(const char *abs, size_t abs_size, int lflag, int oflag)336 {337 // FIXME: Some applications call this incorrectly.338 if ((oflag & (O_RDONLY|O_WRONLY|O_RDWR)) == 0) {339 oflag |= O_RDWR;340 }341 342 assert((((oflag & O_RDONLY) != 0) + ((oflag & O_WRONLY) != 0) + ((oflag & O_RDWR) != 0)) == 1);343 344 async_exch_t *exch = vfs_exchange_begin();345 346 ipc_call_t answer;347 aid_t req = async_send_3(exch, VFS_IN_OPEN, lflag, oflag, 0, &answer);348 sysarg_t rc = async_data_write_start(exch, abs, abs_size);349 350 if (rc != EOK) {351 vfs_exchange_end(exch);352 353 sysarg_t rc_orig;354 async_wait_for(req, &rc_orig);355 356 if (rc_orig == EOK)357 return (int) rc;358 else359 return (int) rc_orig;360 }361 362 vfs_exchange_end(exch);363 async_wait_for(req, &rc);364 365 if (rc != EOK)366 return (int) rc;367 368 return (int) IPC_GET_ARG1(answer);369 }370 371 335 int open(const char *path, int oflag, ...) 372 336 { … … 652 616 { 653 617 DIR *dirp = malloc(sizeof(DIR)); 654 if (!dirp) 655 return NULL; 618 if (!dirp) { 619 errno = ENOMEM; 620 return NULL; 621 } 656 622 657 623 size_t abs_size; … … 659 625 if (!abs) { 660 626 free(dirp); 661 return NULL; 662 } 663 664 int ret = open_internal(abs, abs_size, L_DIRECTORY, 0); 627 errno = ENOMEM; 628 return NULL; 629 } 630 631 int ret = _vfs_walk(-1, abs, WALK_DIRECTORY); 665 632 free(abs); 666 633 667 634 if (ret < 0) { 668 635 free(dirp); 636 errno = ret; 637 return NULL; 638 } 639 640 int rc = _vfs_open(ret, MODE_READ); 641 if (rc < 0) { 642 free(dirp); 643 close(ret); 644 errno = rc; 669 645 return NULL; 670 646 } … … 825 801 return ENOMEM; 826 802 827 int fd = open_internal(abs, abs_size, L_DIRECTORY, O_DESC); 828 803 int fd = _vfs_walk(-1, abs, WALK_DIRECTORY); 829 804 if (fd < 0) { 830 805 free(abs);
Note:
See TracChangeset
for help on using the changeset viewer.