Changeset b14d9f9 in mainline for uspace/srv/vfs/vfs_register.c


Ignore:
Timestamp:
2017-05-05T17:37:36Z (7 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
951f6b9e
Parents:
75b24cd
Message:

Mount should be able to print the list of available file system types.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/vfs/vfs_register.c

    r75b24cd rb14d9f9  
    5050#include <assert.h>
    5151#include <atomic.h>
     52#include <vfs/vfs.h>
    5253#include "vfs.h"
    5354
     
    340341}
    341342
     343/** Get list of file system types.
     344 *
     345 * @param fstypes Place to store list of file system types. Free using
     346 *                vfs_fstypes_free().
     347 *
     348 * @return EOK on success or negative error code
     349 */
     350int vfs_get_fstypes(vfs_fstypes_t *fstypes)
     351{
     352        size_t size;
     353        size_t count;
     354        size_t l;
     355
     356        fibril_mutex_lock(&fs_list_lock);
     357       
     358        size = 0;
     359        count = 0;
     360        list_foreach(fs_list, fs_link, fs_info_t, fs) {
     361                size += str_size(fs->vfs_info.name) + 1;
     362                count++;
     363        }
     364       
     365        if (size == 0)
     366                size = 1;
     367       
     368        fstypes->buf = calloc(1, size);
     369        if (fstypes->buf == NULL) {
     370                fibril_mutex_unlock(&fs_list_lock);
     371                return ENOMEM;
     372        }
     373       
     374        fstypes->fstypes = calloc(sizeof(char *), count);
     375        if (fstypes->fstypes == NULL) {
     376                free(fstypes->buf);
     377                fstypes->buf = NULL;
     378                fibril_mutex_unlock(&fs_list_lock);
     379                return ENOMEM;
     380        }
     381       
     382        fstypes->size = size;
     383       
     384        size = 0; count = 0;
     385        list_foreach(fs_list, fs_link, fs_info_t, fs) {
     386                l = str_size(fs->vfs_info.name) + 1;
     387                memcpy(fstypes->buf + size, fs->vfs_info.name, l);
     388                fstypes->fstypes[count] = &fstypes->buf[size];
     389                size += l;
     390                count++;
     391        }
     392
     393        fibril_mutex_unlock(&fs_list_lock);
     394        return EOK;
     395}
     396
    342397/**
    343398 * @}
Note: See TracChangeset for help on using the changeset viewer.