Changeset b14d9f9 in mainline for uspace/srv/vfs/vfs_register.c
- Timestamp:
- 2017-05-05T17:37:36Z (6 years ago)
- Branches:
- lfn, master, serial
- Children:
- 951f6b9e
- Parents:
- 75b24cd
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/vfs/vfs_register.c
r75b24cd rb14d9f9 50 50 #include <assert.h> 51 51 #include <atomic.h> 52 #include <vfs/vfs.h> 52 53 #include "vfs.h" 53 54 … … 340 341 } 341 342 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 */ 350 int 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 342 397 /** 343 398 * @}
Note: See TracChangeset
for help on using the changeset viewer.