Changeset d2c8533 in mainline for uspace/lib/c


Ignore:
Timestamp:
2017-05-08T20:38:47Z (8 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
f066a87
Parents:
582a0b8
Message:

File system probing groundwork. Only MFS can do it for now.

Location:
uspace/lib/c
Files:
3 edited

Legend:

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

    r582a0b8 rd2c8533  
    347347        return loc_service_connect(stat.service, iface, 0);
    348348}
     349
     350/** Determine if a device contains the specified file system type. If so,
     351 * return identification information.
     352 *
     353 * @param fs_name File system name
     354 * @param serv    Service representing the mountee
     355 * @param info    Place to store volume identification information
     356 *
     357 * @return                      EOK on success or a negative error code
     358 */
     359int vfs_fsprobe(const char *fs_name, service_id_t serv,
     360    vfs_fs_probe_info_t *info)
     361{
     362        sysarg_t rc;
     363       
     364        ipc_call_t answer;
     365        async_exch_t *exch = vfs_exchange_begin();
     366        aid_t req = async_send_1(exch, VFS_IN_FSPROBE, serv, &answer);
     367       
     368        rc = async_data_write_start(exch, (void *) fs_name,
     369            str_size(fs_name));
     370       
     371        async_wait_for(req, &rc);
     372       
     373        if (rc != EOK) {
     374                vfs_exchange_end(exch);
     375                return rc;
     376        }
     377       
     378        rc = async_data_read_start(exch, info, sizeof(*info));
     379        vfs_exchange_end(exch);
     380       
     381        return rc;
     382}
     383
    349384
    350385/** Return a list of currently available file system types
  • uspace/lib/c/include/ipc/vfs.h

    r582a0b8 rd2c8533  
    4141
    4242#define FS_NAME_MAXLEN  20
     43#define FS_LABEL_MAXLEN 256
     44#define FS_VUID_MAXLEN 128
    4345#define MAX_PATH_LEN    (32 * 1024)
    4446#define MAX_MNTOPTS_LEN 256
     
    6264} vfs_info_t;
    6365
     66/** Data returned by filesystem probe regarding a specific volume. */
     67typedef struct {
     68        char label[FS_LABEL_MAXLEN + 1];
     69        char vuid[FS_VUID_MAXLEN + 1];
     70} vfs_fs_probe_info_t;
     71
    6472typedef enum {
    6573        VFS_IN_CLONE = IPC_FIRST_USER_METHOD,
     74        VFS_IN_FSPROBE,
    6675        VFS_IN_FSTYPES,
    6776        VFS_IN_MOUNT,
     
    8594        VFS_OUT_CLOSE = IPC_FIRST_USER_METHOD,
    8695        VFS_OUT_DESTROY,
     96        VFS_OUT_FSPROBE,
    8797        VFS_OUT_IS_EMPTY,
    8898        VFS_OUT_LINK,
  • uspace/lib/c/include/vfs/vfs.h

    r582a0b8 rd2c8533  
    8888extern async_exch_t *vfs_exchange_begin(void);
    8989extern void vfs_exchange_end(async_exch_t *);
     90extern int vfs_fsprobe(const char *, service_id_t, vfs_fs_probe_info_t *);
    9091extern int vfs_fstypes(vfs_fstypes_t *);
    9192extern void vfs_fstypes_free(vfs_fstypes_t *);
Note: See TracChangeset for help on using the changeset viewer.