Changeset f15cf1a6 in mainline for uspace/lib/libc/generic/vfs.c


Ignore:
Timestamp:
2008-02-17T16:22:10Z (17 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
cf19ab5
Parents:
e704503
Message:

Support for rmdir(), unlink() and the respective VFS operations.

File:
1 edited

Legend:

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

    re704503 rf15cf1a6  
    311311        int res;
    312312        ipcarg_t rc;
    313         ipc_call_t answer;
    314         aid_t req;
    315        
    316         futex_down(&vfs_phone_futex);
    317         async_serialize_start();
    318         if (vfs_phone < 0) {
    319                 res = vfs_connect();
    320                 if (res < 0) {
    321                         async_serialize_end();
    322                         futex_up(&vfs_phone_futex);
    323                         return res;
    324                 }
    325         }
    326         req = async_send_1(vfs_phone, VFS_MKDIR, mode, &answer);
     313        aid_t req;
     314       
     315        futex_down(&vfs_phone_futex);
     316        async_serialize_start();
     317        if (vfs_phone < 0) {
     318                res = vfs_connect();
     319                if (res < 0) {
     320                        async_serialize_end();
     321                        futex_up(&vfs_phone_futex);
     322                        return res;
     323                }
     324        }
     325        req = async_send_1(vfs_phone, VFS_MKDIR, mode, NULL);
    327326        rc = ipc_data_write_start(vfs_phone, path, strlen(path));
    328327        if (rc != EOK) {
     
    336335        futex_up(&vfs_phone_futex);
    337336        return EOK;
     337}
     338
     339static int _unlink(const char *path, int lflag)
     340{
     341        int res;
     342        ipcarg_t rc;
     343        aid_t req;
     344       
     345        futex_down(&vfs_phone_futex);
     346        async_serialize_start();
     347        if (vfs_phone < 0) {
     348                res = vfs_connect();
     349                if (res < 0) {
     350                        async_serialize_end();
     351                        futex_up(&vfs_phone_futex);
     352                        return res;
     353                }
     354        }
     355        req = async_send_0(vfs_phone, VFS_UNLINK, NULL);
     356        rc = ipc_data_write_start(vfs_phone, path, strlen(path));
     357        if (rc != EOK) {
     358                async_wait_for(req, NULL);
     359                async_serialize_end();
     360                futex_up(&vfs_phone_futex);
     361                return (int) rc;
     362        }
     363        async_wait_for(req, &rc);
     364        async_serialize_end();
     365        futex_up(&vfs_phone_futex);
     366        return EOK;
     367}
     368
     369int unlink(const char *path)
     370{
     371        return _unlink(path, L_NONE);
     372}
     373
     374int rmdir(const char *path)
     375{
     376        return _unlink(path, L_DIRECTORY);
    338377}
    339378
Note: See TracChangeset for help on using the changeset viewer.