Changeset f061de75 in mainline for uspace/srv/fs/exfat/exfat_directory.c
- Timestamp:
- 2011-08-14T17:24:52Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- cd860fc
- Parents:
- 25c60f4
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/fs/exfat/exfat_directory.c
r25c60f4 rf061de75 54 54 di->bnum = 0; 55 55 di->last = false; 56 di->fragmented = false; 57 di->firstc = 0; 56 58 } 57 59 … … 62 64 if (di->nodep->type != EXFAT_DIRECTORY) 63 65 return EINVAL; 64 65 di->bs = block_bb_get(di->nodep->idx->devmap_handle); 66 di->blocks = di->nodep->size / BPS(di->bs); 66 di->devmap_handle = nodep->idx->devmap_handle; 67 di->fragmented = nodep->fragmented; 68 di->firstc = nodep->firstc; 69 70 di->bs = block_bb_get(di->devmap_handle); 71 di->blocks = nodep->size / BPS(di->bs); 72 return EOK; 73 } 74 75 int exfat_directory_open_parent(exfat_directory_t *di, 76 devmap_handle_t devmap_handle, exfat_cluster_t firstc, bool fragmented) 77 { 78 exfat_directory_init(di); 79 di->devmap_handle = devmap_handle; 80 di->fragmented = fragmented; 81 di->firstc = firstc; 82 di->bs = block_bb_get(devmap_handle); 83 di->blocks = 0; 67 84 return EOK; 68 85 } … … 84 101 85 102 i = (di->pos * sizeof(exfat_dentry_t)) / BPS(di->bs); 86 if (i < di->blocks) { 87 if (di->b && di->bnum != i) { 88 block_put(di->b); 103 if (di->nodep && (i >= di->blocks)) 104 return ENOENT; 105 106 if (di->b && di->bnum != i) { 107 block_put(di->b); 108 di->b = NULL; 109 } 110 if (!di->b) { 111 if (di->nodep) { 112 rc = exfat_block_get(&di->b, di->bs, di->nodep, i, BLOCK_FLAGS_NONE); 113 } else { 114 rc = exfat_block_get_by_clst(&di->b, di->bs, di->devmap_handle, 115 di->fragmented, di->firstc, NULL, i, BLOCK_FLAGS_NONE); 116 } 117 if (rc != EOK) { 89 118 di->b = NULL; 119 return rc; 90 120 } 91 if (!di->b) { 92 rc = exfat_block_get(&di->b, di->bs, di->nodep, i, BLOCK_FLAGS_NONE); 93 if (rc != EOK) { 94 di->b = NULL; 95 return rc; 96 } 97 di->bnum = i; 98 } 99 return EOK; 100 } 101 return ENOENT; 121 di->bnum = i; 122 } 123 return EOK; 102 124 } 103 125
Note:
See TracChangeset
for help on using the changeset viewer.