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


Ignore:
Timestamp:
2013-07-06T15:53:01Z (12 years ago)
Author:
Manuele Conti <conti.ma@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
11baebb
Parents:
66366470
Message:

Implement statfs operation.

File:
1 edited

Legend:

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

    r66366470 r9dc6083  
    4343#include <stdio.h>
    4444#include <sys/stat.h>
     45#include <sys/statfs.h>
    4546#include <sys/types.h>
    4647#include <ipc/services.h>
     
    892893}
    893894
    894 int statfs(const char *path, struct statfs *buf)
    895 {
    896         sysarg_t rc;
    897         //aid_t req;
    898 
    899         if ( NULL == buf )
    900                 return 1;
    901 
    902         sysarg_t value;
    903         async_exch_t *exch = vfs_exchange_begin();     
    904         rc = async_req_0_1(exch, VFS_IN_STATFS, &value);
    905         if (rc != EOK)
    906                 goto exit;
    907 
    908         buf->f_bsize = value;
    909 exit:
    910         vfs_exchange_end(exch);
     895#include <stdio.h>
     896int statfs(const char *path, struct statfs *statfs)
     897{
     898        sysarg_t rc;
     899        sysarg_t rc_orig;
     900        aid_t req;
     901        size_t pa_size;
     902       
     903        char *pa = absolutize(path, &pa_size);
     904        if (!pa)
     905                return ENOMEM;
     906       
     907        async_exch_t *exch = vfs_exchange_begin();
     908       
     909        req = async_send_0(exch, VFS_IN_STATFS, NULL);
     910        rc = async_data_write_start(exch, pa, pa_size);
     911        if (rc != EOK) {
     912                vfs_exchange_end(exch);
     913                free(pa);
     914                async_wait_for(req, &rc_orig);
     915                if (rc_orig == EOK)
     916                        return (int) rc;
     917                else
     918                        return (int) rc_orig;
     919        }
     920        printf("TRACE: send VFS_IN_STATFS\n");
     921        rc = async_data_read_start(exch, statfs, sizeof(struct statfs));
     922        if (rc != EOK) {
     923                printf("TRACE: error reply\n");
     924                vfs_exchange_end(exch);
     925                free(pa);
     926                async_wait_for(req, &rc_orig);
     927                if (rc_orig == EOK)
     928                        return (int) rc;
     929                else
     930                        return (int) rc_orig;
     931        }
     932        vfs_exchange_end(exch);
     933        free(pa);
     934        async_wait_for(req, &rc);
    911935        return rc;
    912936}
Note: See TracChangeset for help on using the changeset viewer.