Lines Matching refs:d

338 static void lfs1_dir_fromle32(struct lfs1_disk_dir *d) {  in lfs1_dir_fromle32()  argument
339 d->rev = lfs1_fromle32(d->rev); in lfs1_dir_fromle32()
340 d->size = lfs1_fromle32(d->size); in lfs1_dir_fromle32()
341 d->tail[0] = lfs1_fromle32(d->tail[0]); in lfs1_dir_fromle32()
342 d->tail[1] = lfs1_fromle32(d->tail[1]); in lfs1_dir_fromle32()
345 static void lfs1_dir_tole32(struct lfs1_disk_dir *d) { in lfs1_dir_tole32() argument
346 d->rev = lfs1_tole32(d->rev); in lfs1_dir_tole32()
347 d->size = lfs1_tole32(d->size); in lfs1_dir_tole32()
348 d->tail[0] = lfs1_tole32(d->tail[0]); in lfs1_dir_tole32()
349 d->tail[1] = lfs1_tole32(d->tail[1]); in lfs1_dir_tole32()
352 static void lfs1_entry_fromle32(struct lfs1_disk_entry *d) { in lfs1_entry_fromle32() argument
353 d->u.dir[0] = lfs1_fromle32(d->u.dir[0]); in lfs1_entry_fromle32()
354 d->u.dir[1] = lfs1_fromle32(d->u.dir[1]); in lfs1_entry_fromle32()
357 static void lfs1_entry_tole32(struct lfs1_disk_entry *d) { in lfs1_entry_tole32() argument
358 d->u.dir[0] = lfs1_tole32(d->u.dir[0]); in lfs1_entry_tole32()
359 d->u.dir[1] = lfs1_tole32(d->u.dir[1]); in lfs1_entry_tole32()
362 static void lfs1_superblock_fromle32(struct lfs1_disk_superblock *d) { in lfs1_superblock_fromle32() argument
363 d->root[0] = lfs1_fromle32(d->root[0]); in lfs1_superblock_fromle32()
364 d->root[1] = lfs1_fromle32(d->root[1]); in lfs1_superblock_fromle32()
365 d->block_size = lfs1_fromle32(d->block_size); in lfs1_superblock_fromle32()
366 d->block_count = lfs1_fromle32(d->block_count); in lfs1_superblock_fromle32()
367 d->version = lfs1_fromle32(d->version); in lfs1_superblock_fromle32()
370 static void lfs1_superblock_tole32(struct lfs1_disk_superblock *d) { in lfs1_superblock_tole32() argument
371 d->root[0] = lfs1_tole32(d->root[0]); in lfs1_superblock_tole32()
372 d->root[1] = lfs1_tole32(d->root[1]); in lfs1_superblock_tole32()
373 d->block_size = lfs1_tole32(d->block_size); in lfs1_superblock_tole32()
374 d->block_count = lfs1_tole32(d->block_count); in lfs1_superblock_tole32()
375 d->version = lfs1_tole32(d->version); in lfs1_superblock_tole32()
405 return 4 + entry->d.elen + entry->d.alen + entry->d.nlen; in lfs1_entry_size()
419 int err = lfs1_bd_read(lfs1, dir->pair[0], 0, &dir->d.rev, 4); in lfs1_dir_alloc()
425 dir->d.rev = lfs1_fromle32(dir->d.rev); in lfs1_dir_alloc()
429 dir->d.rev += 1; in lfs1_dir_alloc()
430 dir->d.size = sizeof(dir->d)+4; in lfs1_dir_alloc()
431 dir->d.tail[0] = 0xffffffff; in lfs1_dir_alloc()
432 dir->d.tail[1] = 0xffffffff; in lfs1_dir_alloc()
433 dir->off = sizeof(dir->d); in lfs1_dir_alloc()
457 if (valid && lfs1_scmp(test.rev, dir->d.rev) < 0) { in lfs1_dir_fetch()
488 dir->off = sizeof(dir->d); in lfs1_dir_fetch()
489 dir->d = test; in lfs1_dir_fetch()
511 dir->d.rev += 1; in lfs1_dir_commit()
516 dir->d.size += regions[i].newlen - regions[i].oldlen; in lfs1_dir_commit()
533 lfs1_dir_tole32(&dir->d); in lfs1_dir_commit()
534 lfs1_crc(&crc, &dir->d, sizeof(dir->d)); in lfs1_dir_commit()
535 err = lfs1_bd_prog(lfs1, dir->pair[0], 0, &dir->d, sizeof(dir->d)); in lfs1_dir_commit()
536 lfs1_dir_fromle32(&dir->d); in lfs1_dir_commit()
545 lfs1_off_t oldoff = sizeof(dir->d); in lfs1_dir_commit()
546 lfs1_off_t newoff = sizeof(dir->d); in lfs1_dir_commit()
547 while (newoff < (0x7fffffff & dir->d.size)-4) { in lfs1_dir_commit()
604 (0x7fffffff & dir->d.size)-4, &ncrc); in lfs1_dir_commit()
648 for (lfs1_dir_t *d = lfs1->dirs; d; d = d->next) { in lfs1_dir_commit() local
649 if (lfs1_paircmp(d->pair, dir->pair) == 0) { in lfs1_dir_commit()
650 d->pair[0] = dir->pair[0]; in lfs1_dir_commit()
651 d->pair[1] = dir->pair[1]; in lfs1_dir_commit()
660 lfs1_entry_tole32(&entry->d); in lfs1_dir_update()
662 {entry->off, sizeof(entry->d), &entry->d, sizeof(entry->d)}, in lfs1_dir_update()
663 {entry->off+sizeof(entry->d), entry->d.nlen, data, entry->d.nlen} in lfs1_dir_update()
665 lfs1_entry_fromle32(&entry->d); in lfs1_dir_update()
673 if (dir->d.size + lfs1_entry_size(entry) <= lfs1->cfg->block_size) { in lfs1_dir_append()
674 entry->off = dir->d.size - 4; in lfs1_dir_append()
676 lfs1_entry_tole32(&entry->d); in lfs1_dir_append()
678 {entry->off, 0, &entry->d, sizeof(entry->d)}, in lfs1_dir_append()
679 {entry->off, 0, data, entry->d.nlen} in lfs1_dir_append()
681 lfs1_entry_fromle32(&entry->d); in lfs1_dir_append()
686 if (!(0x80000000 & dir->d.size)) { in lfs1_dir_append()
693 dir->d.tail[0] = olddir.d.tail[0]; in lfs1_dir_append()
694 dir->d.tail[1] = olddir.d.tail[1]; in lfs1_dir_append()
695 entry->off = dir->d.size - 4; in lfs1_dir_append()
696 lfs1_entry_tole32(&entry->d); in lfs1_dir_append()
698 {entry->off, 0, &entry->d, sizeof(entry->d)}, in lfs1_dir_append()
699 {entry->off, 0, data, entry->d.nlen} in lfs1_dir_append()
701 lfs1_entry_fromle32(&entry->d); in lfs1_dir_append()
706 olddir.d.size |= 0x80000000; in lfs1_dir_append()
707 olddir.d.tail[0] = dir->pair[0]; in lfs1_dir_append()
708 olddir.d.tail[1] = dir->pair[1]; in lfs1_dir_append()
712 int err = lfs1_dir_fetch(lfs1, dir, dir->d.tail); in lfs1_dir_append()
721 if ((dir->d.size & 0x7fffffff) == sizeof(dir->d)+4 in lfs1_dir_remove()
729 if (pdir.d.size & 0x80000000) { in lfs1_dir_remove()
730 pdir.d.size &= dir->d.size | 0x7fffffff; in lfs1_dir_remove()
731 pdir.d.tail[0] = dir->d.tail[0]; in lfs1_dir_remove()
732 pdir.d.tail[1] = dir->d.tail[1]; in lfs1_dir_remove()
757 for (lfs1_dir_t *d = lfs1->dirs; d; d = d->next) { in lfs1_dir_remove() local
758 if (lfs1_paircmp(d->pair, dir->pair) == 0) { in lfs1_dir_remove()
759 if (d->off > entry->off) { in lfs1_dir_remove()
760 d->off -= lfs1_entry_size(entry); in lfs1_dir_remove()
761 d->pos -= lfs1_entry_size(entry); in lfs1_dir_remove()
770 while (dir->off + sizeof(entry->d) > (0x7fffffff & dir->d.size)-4) { in lfs1_dir_next()
771 if (!(0x80000000 & dir->d.size)) { in lfs1_dir_next()
776 int err = lfs1_dir_fetch(lfs1, dir, dir->d.tail); in lfs1_dir_next()
781 dir->off = sizeof(dir->d); in lfs1_dir_next()
782 dir->pos += sizeof(dir->d) + 4; in lfs1_dir_next()
786 &entry->d, sizeof(entry->d)); in lfs1_dir_next()
787 lfs1_entry_fromle32(&entry->d); in lfs1_dir_next()
802 entry->d.type = LFS1_TYPE_DIR; in lfs1_dir_find()
803 entry->d.elen = sizeof(entry->d) - 4; in lfs1_dir_find()
804 entry->d.alen = 0; in lfs1_dir_find()
805 entry->d.nlen = 0; in lfs1_dir_find()
806 entry->d.u.dir[0] = lfs1->root[0]; in lfs1_dir_find()
807 entry->d.u.dir[1] = lfs1->root[1]; in lfs1_dir_find()
855 if (entry->d.type != LFS1_TYPE_DIR) { in lfs1_dir_find()
859 int err = lfs1_dir_fetch(lfs1, dir, entry->d.u.dir); in lfs1_dir_find()
871 if (((0x7f & entry->d.type) != LFS1_TYPE_REG && in lfs1_dir_find()
872 (0x7f & entry->d.type) != LFS1_TYPE_DIR) || in lfs1_dir_find()
873 entry->d.nlen != pathlen) { in lfs1_dir_find()
878 entry->off + 4+entry->d.elen+entry->d.alen, in lfs1_dir_find()
891 if (!lfs1->moving && entry->d.type & 0x80) { in lfs1_dir_find()
892 int moved = lfs1_moved(lfs1, &entry->d.u); in lfs1_dir_find()
897 entry->d.type &= ~0x80; in lfs1_dir_find()
932 dir.d.tail[0] = cwd.d.tail[0]; in lfs1_mkdir()
933 dir.d.tail[1] = cwd.d.tail[1]; in lfs1_mkdir()
940 entry.d.type = LFS1_TYPE_DIR; in lfs1_mkdir()
941 entry.d.elen = sizeof(entry.d) - 4; in lfs1_mkdir()
942 entry.d.alen = 0; in lfs1_mkdir()
943 entry.d.nlen = strlen(path); in lfs1_mkdir()
944 entry.d.u.dir[0] = dir.pair[0]; in lfs1_mkdir()
945 entry.d.u.dir[1] = dir.pair[1]; in lfs1_mkdir()
947 cwd.d.tail[0] = dir.pair[0]; in lfs1_mkdir()
948 cwd.d.tail[1] = dir.pair[1]; in lfs1_mkdir()
967 } else if (entry.d.type != LFS1_TYPE_DIR) { in lfs1_dir_open()
971 err = lfs1_dir_fetch(lfs1, dir, entry.d.u.dir); in lfs1_dir_open()
980 dir->pos = sizeof(dir->d) - 2; in lfs1_dir_open()
981 dir->off = sizeof(dir->d); in lfs1_dir_open()
1006 if (dir->pos == sizeof(dir->d) - 2) { in lfs1_dir_read()
1011 } else if (dir->pos == sizeof(dir->d) - 1) { in lfs1_dir_read()
1025 if ((0x7f & entry.d.type) != LFS1_TYPE_REG && in lfs1_dir_read()
1026 (0x7f & entry.d.type) != LFS1_TYPE_DIR) { in lfs1_dir_read()
1031 if (entry.d.type & 0x80) { in lfs1_dir_read()
1032 int moved = lfs1_moved(lfs1, &entry.d.u); in lfs1_dir_read()
1041 entry.d.type &= ~0x80; in lfs1_dir_read()
1047 info->type = entry.d.type; in lfs1_dir_read()
1049 info->size = entry.d.u.file.size; in lfs1_dir_read()
1053 entry.off + 4+entry.d.elen+entry.d.alen, in lfs1_dir_read()
1054 info->name, entry.d.nlen); in lfs1_dir_read()
1070 while (off > (0x7fffffff & dir->d.size)) { in lfs1_dir_seek()
1071 off -= 0x7fffffff & dir->d.size; in lfs1_dir_seek()
1072 if (!(0x80000000 & dir->d.size)) { in lfs1_dir_seek()
1076 err = lfs1_dir_fetch(lfs1, dir, dir->d.tail); in lfs1_dir_seek()
1100 dir->pos = sizeof(dir->d) - 2; in lfs1_dir_rewind()
1101 dir->off = sizeof(dir->d); in lfs1_dir_rewind()
1319 entry.d.type = LFS1_TYPE_REG; in lfs1_file_opencfg()
1320 entry.d.elen = sizeof(entry.d) - 4; in lfs1_file_opencfg()
1321 entry.d.alen = 0; in lfs1_file_opencfg()
1322 entry.d.nlen = strlen(path); in lfs1_file_opencfg()
1323 entry.d.u.file.head = 0xffffffff; in lfs1_file_opencfg()
1324 entry.d.u.file.size = 0; in lfs1_file_opencfg()
1329 } else if (entry.d.type == LFS1_TYPE_DIR) { in lfs1_file_opencfg()
1340 file->head = entry.d.u.file.head; in lfs1_file_opencfg()
1341 file->size = entry.d.u.file.size; in lfs1_file_opencfg()
1549 &entry.d, sizeof(entry.d)); in lfs1_file_sync()
1550 lfs1_entry_fromle32(&entry.d); in lfs1_file_sync()
1555 LFS1_ASSERT(entry.d.type == LFS1_TYPE_REG); in lfs1_file_sync()
1556 entry.d.u.file.head = file->head; in lfs1_file_sync()
1557 entry.d.u.file.size = file->size; in lfs1_file_sync()
1844 info->type = entry.d.type; in lfs1_stat()
1846 info->size = entry.d.u.file.size; in lfs1_stat()
1849 if (lfs1_paircmp(entry.d.u.dir, lfs1->root) == 0) { in lfs1_stat()
1853 entry.off + 4+entry.d.elen+entry.d.alen, in lfs1_stat()
1854 info->name, entry.d.nlen); in lfs1_stat()
1880 if (entry.d.type == LFS1_TYPE_DIR) { in lfs1_remove()
1884 err = lfs1_dir_fetch(lfs1, &dir, entry.d.u.dir); in lfs1_remove()
1887 } else if (dir.d.size != sizeof(dir.d)+4) { in lfs1_remove()
1899 if (entry.d.type == LFS1_TYPE_DIR) { in lfs1_remove()
1906 cwd.d.tail[0] = dir.d.tail[0]; in lfs1_remove()
1907 cwd.d.tail[1] = dir.d.tail[1]; in lfs1_remove()
1936 oldentry.d.type |= 0x80; in lfs1_rename()
1952 if (prevexists && preventry.d.type != (0x7f & oldentry.d.type)) { in lfs1_rename()
1957 if (prevexists && preventry.d.type == LFS1_TYPE_DIR) { in lfs1_rename()
1961 err = lfs1_dir_fetch(lfs1, &dir, preventry.d.u.dir); in lfs1_rename()
1964 } else if (dir.d.size != sizeof(dir.d)+4) { in lfs1_rename()
1971 newentry.d = oldentry.d; in lfs1_rename()
1972 newentry.d.type &= ~0x80; in lfs1_rename()
1973 newentry.d.nlen = strlen(newpath); in lfs1_rename()
2002 if (prevexists && preventry.d.type == LFS1_TYPE_DIR) { in lfs1_rename()
2009 newcwd.d.tail[0] = dir.d.tail[0]; in lfs1_rename()
2010 newcwd.d.tail[1] = dir.d.tail[1]; in lfs1_rename()
2139 .off = sizeof(superdir.d), in lfs1_format()
2140 .d.type = LFS1_TYPE_SUPERBLOCK, in lfs1_format()
2141 .d.elen = sizeof(superblock.d) - sizeof(superblock.d.magic) - 4, in lfs1_format()
2142 .d.nlen = sizeof(superblock.d.magic), in lfs1_format()
2143 .d.version = LFS1_DISK_VERSION, in lfs1_format()
2144 .d.magic = {"littlefs"}, in lfs1_format()
2145 .d.block_size = lfs1->cfg->block_size, in lfs1_format()
2146 .d.block_count = lfs1->cfg->block_count, in lfs1_format()
2147 .d.root = {lfs1->root[0], lfs1->root[1]}, in lfs1_format()
2149 superdir.d.tail[0] = root.pair[0]; in lfs1_format()
2150 superdir.d.tail[1] = root.pair[1]; in lfs1_format()
2151 superdir.d.size = sizeof(superdir.d) + sizeof(superblock.d) + 4; in lfs1_format()
2154 lfs1_superblock_tole32(&superblock.d); in lfs1_format()
2158 {sizeof(superdir.d), sizeof(superblock.d), in lfs1_format()
2159 &superblock.d, sizeof(superblock.d)} in lfs1_format()
2210 err = lfs1_bd_read(lfs1, dir.pair[0], sizeof(dir.d), in lfs1_mount()
2211 &superblock.d, sizeof(superblock.d)); in lfs1_mount()
2212 lfs1_superblock_fromle32(&superblock.d); in lfs1_mount()
2217 lfs1->root[0] = superblock.d.root[0]; in lfs1_mount()
2218 lfs1->root[1] = superblock.d.root[1]; in lfs1_mount()
2221 if (err || memcmp(superblock.d.magic, "littlefs", 8) != 0) { in lfs1_mount()
2227 uint16_t major_version = (0xffff & (superblock.d.version >> 16)); in lfs1_mount()
2228 uint16_t minor_version = (0xffff & (superblock.d.version >> 0)); in lfs1_mount()
2276 while (dir.off + sizeof(entry.d) <= (0x7fffffff & dir.d.size)-4) { in lfs1_traverse()
2278 &entry.d, sizeof(entry.d)); in lfs1_traverse()
2279 lfs1_entry_fromle32(&entry.d); in lfs1_traverse()
2285 if ((0x70 & entry.d.type) == (0x70 & LFS1_TYPE_REG)) { in lfs1_traverse()
2287 entry.d.u.file.head, entry.d.u.file.size, cb, data); in lfs1_traverse()
2294 cwd[0] = dir.d.tail[0]; in lfs1_traverse()
2295 cwd[1] = dir.d.tail[1]; in lfs1_traverse()
2335 while (!lfs1_pairisnull(pdir->d.tail)) { in lfs1_pred()
2336 if (lfs1_paircmp(pdir->d.tail, dir) == 0) { in lfs1_pred()
2340 err = lfs1_dir_fetch(lfs1, pdir, pdir->d.tail); in lfs1_pred()
2355 parent->d.tail[0] = 0; in lfs1_parent()
2356 parent->d.tail[1] = 1; in lfs1_parent()
2359 while (!lfs1_pairisnull(parent->d.tail)) { in lfs1_parent()
2360 int err = lfs1_dir_fetch(lfs1, parent, parent->d.tail); in lfs1_parent()
2375 if (((0x70 & entry->d.type) == (0x70 & LFS1_TYPE_DIR)) && in lfs1_parent()
2376 lfs1_paircmp(entry->d.u.dir, dir) == 0) { in lfs1_parent()
2399 while (!lfs1_pairisnull(cwd.d.tail)) { in lfs1_moved()
2400 err = lfs1_dir_fetch(lfs1, &cwd, cwd.d.tail); in lfs1_moved()
2415 if (!(0x80 & entry.d.type) && in lfs1_moved()
2416 memcmp(&entry.d.u, e, sizeof(entry.d.u)) == 0) { in lfs1_moved()
2437 entry.d.u.dir[0] = newpair[0]; in lfs1_relocate()
2438 entry.d.u.dir[1] = newpair[1]; in lfs1_relocate()
2465 parent.d.tail[0] = newpair[0]; in lfs1_relocate()
2466 parent.d.tail[1] = newpair[1]; in lfs1_relocate()
2482 lfs1_dir_t pdir = {.d.size = 0x80000000}; in lfs1_deorphan()
2483 lfs1_dir_t cwd = {.d.tail[0] = 0, .d.tail[1] = 1}; in lfs1_deorphan()
2487 if (lfs1_pairisnull(cwd.d.tail)) { in lfs1_deorphan()
2491 int err = lfs1_dir_fetch(lfs1, &cwd, cwd.d.tail); in lfs1_deorphan()
2497 if (!(0x80000000 & pdir.d.size)) { in lfs1_deorphan()
2501 int res = lfs1_parent(lfs1, pdir.d.tail, &parent, &entry); in lfs1_deorphan()
2509 pdir.d.tail[0], pdir.d.tail[1]); in lfs1_deorphan()
2511 pdir.d.tail[0] = cwd.d.tail[0]; in lfs1_deorphan()
2512 pdir.d.tail[1] = cwd.d.tail[1]; in lfs1_deorphan()
2522 if (!lfs1_pairsync(entry.d.u.dir, pdir.d.tail)) { in lfs1_deorphan()
2525 entry.d.u.dir[0], entry.d.u.dir[1]); in lfs1_deorphan()
2527 pdir.d.tail[0] = entry.d.u.dir[0]; in lfs1_deorphan()
2528 pdir.d.tail[1] = entry.d.u.dir[1]; in lfs1_deorphan()
2552 if (entry.d.type & 0x80) { in lfs1_deorphan()
2553 int moved = lfs1_moved(lfs1, &entry.d.u); in lfs1_deorphan()
2560 entry.d.u.dir[0], entry.d.u.dir[1]); in lfs1_deorphan()
2567 entry.d.u.dir[0], entry.d.u.dir[1]); in lfs1_deorphan()
2568 entry.d.type &= ~0x80; in lfs1_deorphan()