Changeset 9b48c06 in mainline for uspace/lib/c/generic/vfs/vfs.c


Ignore:
Timestamp:
2013-07-24T22:41:54Z (11 years ago)
Author:
Ji?? Z?rev?cky <zarevucky.jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
ff8c87c
Parents:
3ef62df
Message:

Replace all the other uses of VFS_IN_OPEN.

File:
1 edited

Legend:

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

    r3ef62df r9b48c06  
    333333}
    334334
    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                 else
    359                         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 
    371335int open(const char *path, int oflag, ...)
    372336{
     
    652616{
    653617        DIR *dirp = malloc(sizeof(DIR));
    654         if (!dirp)
    655                 return NULL;
     618        if (!dirp) {
     619                errno = ENOMEM;
     620                return NULL;
     621        }
    656622       
    657623        size_t abs_size;
     
    659625        if (!abs) {
    660626                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);
    665632        free(abs);
    666633       
    667634        if (ret < 0) {
    668635                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;
    669645                return NULL;
    670646        }
     
    825801                return ENOMEM;
    826802       
    827         int fd = open_internal(abs, abs_size, L_DIRECTORY, O_DESC);
    828        
     803        int fd = _vfs_walk(-1, abs, WALK_DIRECTORY);
    829804        if (fd < 0) {
    830805                free(abs);
Note: See TracChangeset for help on using the changeset viewer.