dfs.c 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /*
  2. * Copyright (c) 2006-2023, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2011-07-25 weety first version
  9. * 2023-02-25 GuEe-GUI make blk interface
  10. */
  11. #include "efi.h"
  12. #define DBG_TAG "blk.part.dfs"
  13. #define DBG_LVL DBG_INFO
  14. #include <rtdbg.h>
  15. rt_err_t dfs_partition(struct rt_blk_disk *disk)
  16. {
  17. rt_ssize_t res;
  18. struct dfs_partition part;
  19. rt_uint8_t *sector = rt_malloc(rt_blk_disk_get_logical_block_size(disk));
  20. if (!sector)
  21. {
  22. return -RT_ENOMEM;
  23. }
  24. res = disk->ops->read(disk, 0, sector, 1);
  25. if (res < 0)
  26. {
  27. rt_free(sector);
  28. return res;
  29. }
  30. for (rt_size_t i = 0; i < disk->max_partitions; ++i)
  31. {
  32. res = dfs_filesystem_get_partition(&part, sector, i);
  33. if (res)
  34. {
  35. break;
  36. }
  37. if (blk_put_partition(disk, "dfs", part.offset, part.size, i) == -RT_ENOMEM)
  38. {
  39. break;
  40. }
  41. }
  42. rt_free(sector);
  43. return RT_EOK;
  44. }