Lines Matching +full:long +full:- +full:summary
2 -------------------------------------------------------------------------
8 *-----------------------------------------------------------------------*/
13 * JFFS2 -- Journalling Flash File System, Version 2.
32 * The Original Code is JFFS2 - Journalling Flash File System, version 2
69 * on Jan/2002 for U-Boot.
71 * Clipped out all the non-1pass functions, cleaned up warnings,
79 * Bugfixing by Kai-Uwe Bloem <kai-uwe.bloem@auerswald.de>, (C) Mar/2003
81 * - overhaul of the memory management. Removed much of the "paper-bagging"
84 * It's still ugly :-(
85 * - fixed a bug in jffs2_1pass_read_inode where the file length calculation
86 * was incorrect. Removed a bit of the paper-bagging as well.
87 * - removed double crc calculation for fragment headers in jffs2_private.h
89 * - scan_empty rewritten in a more "standard" manner (non-paperbag, that is).
90 * - spinning wheel now spins depending on how much memory has been scanned
91 * - lots of small changes all over the place to "improve" readability.
92 * - implemented fragment sorting to ensure that the newest data is copied
107 * You still should have paper bags at hand :-(. The code lacks more or less
145 #include "summary.h"
154 * Support for jffs2 on top of NAND-flash
165 #define NAND_PAGE_MASK (~(NAND_PAGE_SIZE-1))
173 static u32 nand_cache_off = (u32)-1;
177 struct mtdids *id = current_part->dev->id; in read_nand_cached()
183 mtd = get_nand_dev_by_index(id->num); in read_nand_cached()
185 return -1; in read_nand_cached()
198 return -1; in read_nand_cached()
208 return -1; in read_nand_cached()
211 cpy_bytes = nand_cache_off + NAND_CACHE_SIZE - (off + bytes_read); in read_nand_cached()
212 if (cpy_bytes > size - bytes_read) in read_nand_cached()
213 cpy_bytes = size - bytes_read; in read_nand_cached()
215 nand_cache + off + bytes_read - nand_cache_off, in read_nand_cached()
270 #define ONENAND_PAGE_MASK (~(ONENAND_PAGE_SIZE-1))
278 static u32 onenand_cache_off = (u32)-1;
297 return -1; in read_onenand_cached()
307 return -1; in read_onenand_cached()
310 cpy_bytes = onenand_cache_off + ONENAND_CACHE_SIZE - (off + bytes_read); in read_onenand_cached()
311 if (cpy_bytes > size - bytes_read) in read_onenand_cached()
312 cpy_bytes = size - bytes_read; in read_onenand_cached()
314 onenand_cache + off + bytes_read - onenand_cache_off, in read_onenand_cached()
366 * Support for jffs2 on top of NOR-flash
374 struct mtdids *id = current_part->dev->id; in get_fl_mem_nor()
377 flash_info_t *flash = &flash_info[id->num]; in get_fl_mem_nor()
379 addr += flash->start[0]; in get_fl_mem_nor()
391 /* pNode will point directly to flash - don't provide external buffer in get_node_mem_nor()
394 return (void *)get_fl_mem_nor(off, pNode->magic == JFFS2_MAGIC_BITMASK ? in get_node_mem_nor()
395 pNode->totlen : sizeof(*pNode), ext_buf); in get_node_mem_nor()
406 struct mtdids *id = current_part->dev->id; in get_fl_mem()
408 switch(id->type) { in get_fl_mem()
433 struct mtdids *id = current_part->dev->id; in get_node_mem()
435 switch(id->type) { in get_node_mem()
461 struct mtdids *id = current_part->dev->id; in put_fl_mem()
463 /* If buf is the same as ext_buf, it was provided by the caller - in put_fl_mem()
467 switch (id->type) { in put_fl_mem()
504 while (list->listMemBase != NULL) { in free_nodes()
505 struct mem_block *next = list->listMemBase->next; in free_nodes()
506 free( list->listMemBase ); in free_nodes()
507 list->listMemBase = next; in free_nodes()
518 memBase = list->listMemBase; in add_node()
520 index = memBase->index; in add_node()
523 putLabeledWord("add_node: memBase = ", list->listMemBase); in add_node()
533 memBase->next = list->listMemBase; in add_node()
541 b = &memBase->nodes[index]; in add_node()
544 memBase->index = index; in add_node()
545 list->listMemBase = memBase; in add_node()
546 list->listCount++; in add_node()
559 new->offset = offset; in insert_node()
560 new->next = NULL; in insert_node()
562 if (list->listTail != NULL) in insert_node()
563 list->listTail->next = new; in insert_node()
565 list->listHead = new; in insert_node()
566 list->listTail = new; in insert_node()
583 get_fl_mem(new->offset + offsetof(struct jffs2_raw_inode, version), in compare_inodes()
585 get_fl_mem(old->offset + offsetof(struct jffs2_raw_inode, version), in compare_inodes()
603 struct jffs2_raw_dirent *jNew = get_node_mem(new->offset, NULL); in compare_dirents()
604 struct jffs2_raw_dirent *jOld = get_node_mem(old->offset, NULL); in compare_dirents()
608 if (jNew->pino != jOld->pino) { in compare_dirents()
610 ret = jNew->pino > jOld->pino; in compare_dirents()
611 } else if (jNew->nsize != jOld->nsize) { in compare_dirents()
616 ret = jNew->nsize > jOld->nsize; in compare_dirents()
621 cmp = strncmp((char *)jNew->name, (char *)jOld->name, in compare_dirents()
622 jNew->nsize); in compare_dirents()
630 ret = jNew->version > jOld->version; in compare_dirents()
645 if (part->jffs2_priv != NULL) { in jffs2_free_cache()
646 pL = (struct b_lists *)part->jffs2_priv; in jffs2_free_cache()
647 free_nodes(&pL->frag); in jffs2_free_cache()
648 free_nodes(&pL->dir); in jffs2_free_cache()
649 free(pL->readbuf); in jffs2_free_cache()
661 if (NULL != (part->jffs2_priv = malloc(sizeof(struct b_lists)))) { in jffs_init_1pass_list()
662 pL = (struct b_lists *)part->jffs2_priv; in jffs_init_1pass_list()
666 pL->dir.listCompare = compare_dirents; in jffs_init_1pass_list()
667 pL->frag.listCompare = compare_inodes; in jffs_init_1pass_list()
674 static long
693 for (b = pL->frag.listHead; b != NULL; b = b->next) { in jffs2_1pass_read_inode()
694 jNode = (struct jffs2_raw_inode *) get_fl_mem(b->offset, in jffs2_1pass_read_inode()
695 sizeof(struct jffs2_raw_inode), pL->readbuf); in jffs2_1pass_read_inode()
696 if ((inode == jNode->ino)) { in jffs2_1pass_read_inode()
698 if (jNode->version >= latestVersion) { in jffs2_1pass_read_inode()
699 totalSize = jNode->isize; in jffs2_1pass_read_inode()
700 latestVersion = jNode->version; in jffs2_1pass_read_inode()
703 put_fl_mem(jNode, pL->readbuf); in jffs2_1pass_read_inode()
713 for (b = pL->frag.listHead; b != NULL; b = b->next) { in jffs2_1pass_read_inode()
718 jNode = (struct jffs2_raw_inode *)get_fl_mem(b->offset, in jffs2_1pass_read_inode()
720 pL->readbuf); in jffs2_1pass_read_inode()
721 if (inode == jNode->ino) { in jffs2_1pass_read_inode()
723 putLabeledWord("\r\n\r\nread_inode: totlen = ", jNode->totlen); in jffs2_1pass_read_inode()
724 putLabeledWord("read_inode: inode = ", jNode->ino); in jffs2_1pass_read_inode()
725 putLabeledWord("read_inode: version = ", jNode->version); in jffs2_1pass_read_inode()
726 putLabeledWord("read_inode: isize = ", jNode->isize); in jffs2_1pass_read_inode()
727 putLabeledWord("read_inode: offset = ", jNode->offset); in jffs2_1pass_read_inode()
728 putLabeledWord("read_inode: csize = ", jNode->csize); in jffs2_1pass_read_inode()
729 putLabeledWord("read_inode: dsize = ", jNode->dsize); in jffs2_1pass_read_inode()
730 putLabeledWord("read_inode: compr = ", jNode->compr); in jffs2_1pass_read_inode()
731 putLabeledWord("read_inode: usercompr = ", jNode->usercompr); in jffs2_1pass_read_inode()
732 putLabeledWord("read_inode: flags = ", jNode->flags); in jffs2_1pass_read_inode()
737 if (jNode->version >= latestVersion) { in jffs2_1pass_read_inode()
738 totalSize = jNode->isize; in jffs2_1pass_read_inode()
739 latestVersion = jNode->version; in jffs2_1pass_read_inode()
748 put_fl_mem(jNode, pL->readbuf); in jffs2_1pass_read_inode()
750 get_node_mem(b->offset, pL->readbuf); in jffs2_1pass_read_inode()
754 if (jNode->offset > totalSize) { in jffs2_1pass_read_inode()
755 put_fl_mem(jNode, pL->readbuf); in jffs2_1pass_read_inode()
758 if (b->datacrc == CRC_UNKNOWN) in jffs2_1pass_read_inode()
759 b->datacrc = data_crc(jNode) ? in jffs2_1pass_read_inode()
761 if (b->datacrc == CRC_BAD) { in jffs2_1pass_read_inode()
762 put_fl_mem(jNode, pL->readbuf); in jffs2_1pass_read_inode()
766 lDest = (uchar *) (dest + jNode->offset); in jffs2_1pass_read_inode()
771 switch (jNode->compr) { in jffs2_1pass_read_inode()
773 ldr_memcpy(lDest, src, jNode->dsize); in jffs2_1pass_read_inode()
776 for (i = 0; i < jNode->dsize; i++) in jffs2_1pass_read_inode()
780 rtime_decompress(src, lDest, jNode->csize, jNode->dsize); in jffs2_1pass_read_inode()
784 dynrubin_decompress(src, lDest, jNode->csize, jNode->dsize); in jffs2_1pass_read_inode()
787 zlib_decompress(src, lDest, jNode->csize, jNode->dsize); in jffs2_1pass_read_inode()
791 lzo_decompress(src, lDest, jNode->csize, jNode->dsize); in jffs2_1pass_read_inode()
796 putLabeledWord("UNKNOWN COMPRESSION METHOD = ", jNode->compr); in jffs2_1pass_read_inode()
797 put_fl_mem(jNode, pL->readbuf); in jffs2_1pass_read_inode()
798 return -1; in jffs2_1pass_read_inode()
808 put_fl_mem(jNode, pL->readbuf); in jffs2_1pass_read_inode()
833 for(b = pL->dir.listHead; b; b = b->next, counter++) { in jffs2_1pass_find_inode()
834 jDir = (struct jffs2_raw_dirent *) get_node_mem(b->offset, in jffs2_1pass_find_inode()
835 pL->readbuf); in jffs2_1pass_find_inode()
836 if ((pino == jDir->pino) && (len == jDir->nsize) && in jffs2_1pass_find_inode()
837 (!strncmp((char *)jDir->name, name, len))) { /* a match */ in jffs2_1pass_find_inode()
838 if (jDir->version < version) { in jffs2_1pass_find_inode()
839 put_fl_mem(jDir, pL->readbuf); in jffs2_1pass_find_inode()
843 if (jDir->version == version && inode != 0) { in jffs2_1pass_find_inode()
846 putnstr(jDir->name, jDir->nsize); in jffs2_1pass_find_inode()
849 inode = jDir->ino; in jffs2_1pass_find_inode()
850 version = jDir->version; in jffs2_1pass_find_inode()
853 putstr("\r\nfind_inode:p&l ->"); in jffs2_1pass_find_inode()
854 putnstr(jDir->name, jDir->nsize); in jffs2_1pass_find_inode()
856 putLabeledWord("pino = ", jDir->pino); in jffs2_1pass_find_inode()
857 putLabeledWord("nsize = ", jDir->nsize); in jffs2_1pass_find_inode()
861 put_fl_mem(jDir, pL->readbuf); in jffs2_1pass_find_inode()
866 char *mkmodestr(unsigned long mode, char *str) in mkmodestr()
879 case S_IFREG: str[0] = '-'; break; in mkmodestr()
885 str[9-i] = (mode & mask)?c:'-'; in mkmodestr()
901 if (st->st_mtime == (time_t)(-1)) /* some ctimes really hate -1 */ in dump_stat()
902 st->st_mtime = 1; in dump_stat()
904 ctime_r((time_t *)&st->st_mtime, s/*,64*/); /* newlib ctime doesn't have buflen */ in dump_stat()
910 printf("%6lo %s %8ld %s %s\n", st->st_mode, mkmodestr(st->st_mode, str), in dump_stat()
911 st->st_size, s, name); in dump_stat()
914 printf(" %s %8ld %s %s", mkmodestr(st->st_mode,str), st->st_size, s, name); in dump_stat()
922 if(!d || !i) return -1; in dump_inode()
924 strncpy(fname, (char *)d->name, d->nsize); in dump_inode()
925 fname[d->nsize] = '\0'; in dump_inode()
929 st.st_mtime = i->mtime; in dump_inode()
930 st.st_mode = i->mode; in dump_inode()
931 st.st_ino = i->ino; in dump_inode()
932 st.st_size = i->isize; in dump_inode()
936 if (d->type == DT_LNK) { in dump_inode()
938 putstr(" -> "); in dump_inode()
939 putnstr(src, (int)i->dsize); in dump_inode()
954 for (b = pL->dir.listHead; b; b = b->next) { in jffs2_1pass_list_inodes()
955 jDir = (struct jffs2_raw_dirent *) get_node_mem(b->offset, in jffs2_1pass_list_inodes()
956 pL->readbuf); in jffs2_1pass_list_inodes()
957 if (pino == jDir->pino) { in jffs2_1pass_list_inodes()
966 struct b_node *next = b->next; in jffs2_1pass_list_inodes()
971 get_node_mem(next->offset, NULL); in jffs2_1pass_list_inodes()
972 match = jDirNext->pino == jDir->pino && in jffs2_1pass_list_inodes()
973 jDirNext->nsize == jDir->nsize && in jffs2_1pass_list_inodes()
974 strncmp((char *)jDirNext->name, in jffs2_1pass_list_inodes()
975 (char *)jDir->name, in jffs2_1pass_list_inodes()
976 jDir->nsize) == 0; in jffs2_1pass_list_inodes()
986 if (jDir->ino == 0) { in jffs2_1pass_list_inodes()
988 put_fl_mem(jDir, pL->readbuf); in jffs2_1pass_list_inodes()
992 for (b2 = pL->frag.listHead; b2; b2 = b2->next) { in jffs2_1pass_list_inodes()
994 get_fl_mem(b2->offset, sizeof(*jNode), in jffs2_1pass_list_inodes()
996 if (jNode->ino == jDir->ino && in jffs2_1pass_list_inodes()
997 jNode->version >= i_version) { in jffs2_1pass_list_inodes()
998 i_version = jNode->version; in jffs2_1pass_list_inodes()
1002 if (jDir->type == DT_LNK) in jffs2_1pass_list_inodes()
1003 i = get_node_mem(b2->offset, in jffs2_1pass_list_inodes()
1006 i = get_fl_mem(b2->offset, in jffs2_1pass_list_inodes()
1016 put_fl_mem(jDir, pL->readbuf); in jffs2_1pass_list_inodes()
1037 strncpy(working_tmp, tmp, c - tmp); in jffs2_1pass_search_inode()
1038 working_tmp[c - tmp] = '\0'; in jffs2_1pass_search_inode()
1050 for (i = 0; i < strlen(c) - 1; i++) in jffs2_1pass_search_inode()
1093 for(b = pL->dir.listHead; b; b = b->next) { in jffs2_1pass_resolve_inode()
1094 jDir = (struct jffs2_raw_dirent *) get_node_mem(b->offset, in jffs2_1pass_resolve_inode()
1095 pL->readbuf); in jffs2_1pass_resolve_inode()
1096 if (ino == jDir->ino) { in jffs2_1pass_resolve_inode()
1097 if (jDir->version < version) { in jffs2_1pass_resolve_inode()
1098 put_fl_mem(jDir, pL->readbuf); in jffs2_1pass_resolve_inode()
1102 if (jDir->version == version && jDirFoundType) { in jffs2_1pass_resolve_inode()
1105 putnstr(jDir->name, jDir->nsize); in jffs2_1pass_resolve_inode()
1110 jDirFoundType = jDir->type; in jffs2_1pass_resolve_inode()
1111 jDirFoundIno = jDir->ino; in jffs2_1pass_resolve_inode()
1112 jDirFoundPino = jDir->pino; in jffs2_1pass_resolve_inode()
1113 version = jDir->version; in jffs2_1pass_resolve_inode()
1115 put_fl_mem(jDir, pL->readbuf); in jffs2_1pass_resolve_inode()
1122 b2 = pL->frag.listHead; in jffs2_1pass_resolve_inode()
1124 jNode = (struct jffs2_raw_inode *) get_node_mem(b2->offset, in jffs2_1pass_resolve_inode()
1125 pL->readbuf); in jffs2_1pass_resolve_inode()
1126 if (jNode->ino == jDirFoundIno) { in jffs2_1pass_resolve_inode()
1130 putLabeledWord("\t\t dsize = ", jNode->dsize); in jffs2_1pass_resolve_inode()
1132 putnstr(src, jNode->dsize); in jffs2_1pass_resolve_inode()
1135 strncpy(tmp, (char *)src, jNode->dsize); in jffs2_1pass_resolve_inode()
1136 tmp[jNode->dsize] = '\0'; in jffs2_1pass_resolve_inode()
1137 put_fl_mem(jNode, pL->readbuf); in jffs2_1pass_resolve_inode()
1140 b2 = b2->next; in jffs2_1pass_resolve_inode()
1141 put_fl_mem(jNode, pL->readbuf); in jffs2_1pass_resolve_inode()
1169 strncpy(working_tmp, tmp, c - tmp); in jffs2_1pass_search_list_inodes()
1170 working_tmp[c - tmp] = '\0'; in jffs2_1pass_search_list_inodes()
1171 for (i = 0; i < strlen(c) - 1; i++) in jffs2_1pass_search_list_inodes()
1207 struct b_lists *pL = (struct b_lists *)part->jffs2_priv; in jffs2_1pass_rescan_needed()
1209 if (part->jffs2_priv == 0){ in jffs2_1pass_rescan_needed()
1215 if (pL->frag.listCount == 0) { in jffs2_1pass_rescan_needed()
1221 b = pL->dir.listHead; in jffs2_1pass_rescan_needed()
1223 node = (struct jffs2_unknown_node *) get_fl_mem(b->offset, in jffs2_1pass_rescan_needed()
1225 if (node->nodetype != JFFS2_NODETYPE_DIRENT) { in jffs2_1pass_rescan_needed()
1227 (unsigned long) b->offset); in jffs2_1pass_rescan_needed()
1230 b = b->next; in jffs2_1pass_rescan_needed()
1258 * Process the stored summary information - helper function for
1263 struct jffs2_raw_summary *summary, in jffs2_sum_process_sum_data() argument
1271 sp = summary->sum; in jffs2_sum_process_sum_data()
1273 for (i = 0; i < summary->sum_num; i++) { in jffs2_sum_process_sum_data()
1275 dbg_summary("processing summary index %d\n", i); in jffs2_sum_process_sum_data()
1277 switch (sum_get_unaligned16(&spu->nodetype)) { in jffs2_sum_process_sum_data()
1283 ret = insert_node(&pL->frag, in jffs2_sum_process_sum_data()
1284 (u32)part->offset + in jffs2_sum_process_sum_data()
1287 &spi->offset)); in jffs2_sum_process_sum_data()
1289 return -1; in jffs2_sum_process_sum_data()
1300 ret = insert_node(&pL->dir, in jffs2_sum_process_sum_data()
1301 (u32) part->offset + in jffs2_sum_process_sum_data()
1304 &spd->offset)); in jffs2_sum_process_sum_data()
1306 return -1; in jffs2_sum_process_sum_data()
1310 spd->nsize); in jffs2_sum_process_sum_data()
1316 &spu->nodetype); in jffs2_sum_process_sum_data()
1318 " in summary!\n", in jffs2_sum_process_sum_data()
1322 return -EIO; in jffs2_sum_process_sum_data()
1323 return -EBADMSG; in jffs2_sum_process_sum_data()
1331 /* Process the summary node - called from jffs2_scan_eraseblock() */
1333 struct jffs2_raw_summary *summary, uint32_t sumsize, in jffs2_sum_scan_sumnode() argument
1340 ofs = part->sector_size - sumsize; in jffs2_sum_scan_sumnode()
1342 dbg_summary("summary found for 0x%08x at 0x%08x (0x%x bytes)\n", in jffs2_sum_scan_sumnode()
1348 crcnode.totlen = summary->totlen; in jffs2_sum_scan_sumnode()
1349 crc = crc32_no_comp(0, (uchar *)&crcnode, sizeof(crcnode)-4); in jffs2_sum_scan_sumnode()
1351 if (summary->hdr_crc != crc) { in jffs2_sum_scan_sumnode()
1352 dbg_summary("Summary node header is corrupt (bad CRC or " in jffs2_sum_scan_sumnode()
1353 "no summary at all)\n"); in jffs2_sum_scan_sumnode()
1357 if (summary->totlen != sumsize) { in jffs2_sum_scan_sumnode()
1358 dbg_summary("Summary node is corrupt (wrong erasesize?)\n"); in jffs2_sum_scan_sumnode()
1362 crc = crc32_no_comp(0, (uchar *)summary, in jffs2_sum_scan_sumnode()
1363 sizeof(struct jffs2_raw_summary)-8); in jffs2_sum_scan_sumnode()
1365 if (summary->node_crc != crc) { in jffs2_sum_scan_sumnode()
1366 dbg_summary("Summary node is corrupt (bad CRC)\n"); in jffs2_sum_scan_sumnode()
1370 crc = crc32_no_comp(0, (uchar *)summary->sum, in jffs2_sum_scan_sumnode()
1371 sumsize - sizeof(struct jffs2_raw_summary)); in jffs2_sum_scan_sumnode()
1373 if (summary->sum_crc != crc) { in jffs2_sum_scan_sumnode()
1374 dbg_summary("Summary node data is corrupt (bad CRC)\n"); in jffs2_sum_scan_sumnode()
1378 if (summary->cln_mkr) in jffs2_sum_scan_sumnode()
1379 dbg_summary("Summary : CLEANMARKER node \n"); in jffs2_sum_scan_sumnode()
1381 ret = jffs2_sum_process_sum_data(part, offset, summary, pL); in jffs2_sum_scan_sumnode()
1382 if (ret == -EBADMSG) in jffs2_sum_scan_sumnode()
1390 putstr("Summary node crc error, skipping summary information.\n"); in jffs2_sum_scan_sumnode()
1405 b = pL->frag.listHead; in dump_fragments()
1407 jNode = (struct jffs2_raw_inode *) get_fl_mem(b->offset, in dump_fragments()
1409 putLabeledWord("\r\n\tbuild_list: FLASH_OFFSET = ", b->offset); in dump_fragments()
1410 putLabeledWord("\tbuild_list: totlen = ", jNode->totlen); in dump_fragments()
1411 putLabeledWord("\tbuild_list: inode = ", jNode->ino); in dump_fragments()
1412 putLabeledWord("\tbuild_list: version = ", jNode->version); in dump_fragments()
1413 putLabeledWord("\tbuild_list: isize = ", jNode->isize); in dump_fragments()
1414 putLabeledWord("\tbuild_list: atime = ", jNode->atime); in dump_fragments()
1415 putLabeledWord("\tbuild_list: offset = ", jNode->offset); in dump_fragments()
1416 putLabeledWord("\tbuild_list: csize = ", jNode->csize); in dump_fragments()
1417 putLabeledWord("\tbuild_list: dsize = ", jNode->dsize); in dump_fragments()
1418 putLabeledWord("\tbuild_list: compr = ", jNode->compr); in dump_fragments()
1419 putLabeledWord("\tbuild_list: usercompr = ", jNode->usercompr); in dump_fragments()
1420 putLabeledWord("\tbuild_list: flags = ", jNode->flags); in dump_fragments()
1421 putLabeledWord("\tbuild_list: offset = ", b->offset); /* FIXME: ? [RS] */ in dump_fragments()
1422 b = b->next; in dump_fragments()
1435 b = pL->dir.listHead; in dump_dirents()
1437 jDir = (struct jffs2_raw_dirent *) get_node_mem(b->offset, in dump_dirents()
1438 pL->readbuf); in dump_dirents()
1440 putnstr(jDir->name, jDir->nsize); in dump_dirents()
1441 putLabeledWord("\r\n\tbuild_list: magic = ", jDir->magic); in dump_dirents()
1442 putLabeledWord("\tbuild_list: nodetype = ", jDir->nodetype); in dump_dirents()
1443 putLabeledWord("\tbuild_list: hdr_crc = ", jDir->hdr_crc); in dump_dirents()
1444 putLabeledWord("\tbuild_list: pino = ", jDir->pino); in dump_dirents()
1445 putLabeledWord("\tbuild_list: version = ", jDir->version); in dump_dirents()
1446 putLabeledWord("\tbuild_list: ino = ", jDir->ino); in dump_dirents()
1447 putLabeledWord("\tbuild_list: mctime = ", jDir->mctime); in dump_dirents()
1448 putLabeledWord("\tbuild_list: nsize = ", jDir->nsize); in dump_dirents()
1449 putLabeledWord("\tbuild_list: type = ", jDir->type); in dump_dirents()
1450 putLabeledWord("\tbuild_list: node_crc = ", jDir->node_crc); in dump_dirents()
1451 putLabeledWord("\tbuild_list: name_crc = ", jDir->name_crc); in dump_dirents()
1452 putLabeledWord("\tbuild_list: offset = ", b->offset); /* FIXME: ? [RS] */ in dump_dirents()
1453 b = b->next; in dump_dirents()
1454 put_fl_mem(jDir, pL->readbuf); in dump_dirents()
1483 nr_sectors = lldiv(part->size, part->sector_size); in jffs2_1pass_build_lists()
1491 pL = (struct b_lists *)part->jffs2_priv; in jffs2_1pass_build_lists()
1497 uint32_t sector_ofs = i * part->sector_size; in jffs2_1pass_build_lists()
1520 get_fl_mem(part->offset + sector_ofs + part->sector_size - in jffs2_1pass_build_lists()
1521 buf_len, buf_len, buf + buf_size - buf_len); in jffs2_1pass_build_lists()
1523 sm = (void *)buf + buf_size - sizeof(*sm); in jffs2_1pass_build_lists()
1524 if (sm->magic == JFFS2_SUM_MAGIC) { in jffs2_1pass_build_lists()
1525 sumlen = part->sector_size - sm->offset; in jffs2_1pass_build_lists()
1526 sumptr = buf + buf_size - sumlen; in jffs2_1pass_build_lists()
1528 /* Now, make sure the summary itself is available */ in jffs2_1pass_build_lists()
1533 putstr("Can't get memory for summary " in jffs2_1pass_build_lists()
1539 memcpy(sumptr + sumlen - buf_len, buf + in jffs2_1pass_build_lists()
1540 buf_size - buf_len, buf_len); in jffs2_1pass_build_lists()
1543 /* Need to read more so that the entire summary in jffs2_1pass_build_lists()
1546 get_fl_mem(part->offset + sector_ofs + in jffs2_1pass_build_lists()
1547 part->sector_size - sumlen, in jffs2_1pass_build_lists()
1548 sumlen - buf_len, sumptr); in jffs2_1pass_build_lists()
1569 buf_len = EMPTY_SCAN_SIZE(part->sector_size); in jffs2_1pass_build_lists()
1571 get_fl_mem((u32)part->offset + buf_ofs, buf_len, buf); in jffs2_1pass_build_lists()
1577 while (ofs < EMPTY_SCAN_SIZE(part->sector_size) && in jffs2_1pass_build_lists()
1581 if (ofs == EMPTY_SCAN_SIZE(part->sector_size)) in jffs2_1pass_build_lists()
1585 prevofs = ofs - 1; in jffs2_1pass_build_lists()
1593 while (ofs < sector_ofs + part->sector_size) { in jffs2_1pass_build_lists()
1601 if (sector_ofs + part->sector_size < in jffs2_1pass_build_lists()
1606 + part->sector_size - ofs); in jffs2_1pass_build_lists()
1607 get_fl_mem((u32)part->offset + ofs, buf_len, in jffs2_1pass_build_lists()
1612 node = (struct jffs2_unknown_node *)&buf[ofs-buf_ofs]; in jffs2_1pass_build_lists()
1614 if (*(uint32_t *)(&buf[ofs-buf_ofs]) == 0xffffffff) { in jffs2_1pass_build_lists()
1620 part->sector_size)/8, in jffs2_1pass_build_lists()
1623 inbuf_ofs = ofs - buf_ofs; in jffs2_1pass_build_lists()
1647 part->sector_size - ofs); in jffs2_1pass_build_lists()
1657 get_fl_mem((u32)part->offset + ofs, buf_len, in jffs2_1pass_build_lists()
1667 if (node->magic != JFFS2_MAGIC_BITMASK || in jffs2_1pass_build_lists()
1673 if (ofs + node->totlen > in jffs2_1pass_build_lists()
1674 sector_ofs + part->sector_size) { in jffs2_1pass_build_lists()
1680 switch (node->nodetype) { in jffs2_1pass_build_lists()
1687 part->sector_size - in jffs2_1pass_build_lists()
1689 get_fl_mem((u32)part->offset + ofs, in jffs2_1pass_build_lists()
1697 if (insert_node(&pL->frag, (u32) part->offset + in jffs2_1pass_build_lists()
1703 if (max_totlen < node->totlen) in jffs2_1pass_build_lists()
1704 max_totlen = node->totlen; in jffs2_1pass_build_lists()
1711 node)->nsize) { in jffs2_1pass_build_lists()
1713 node->totlen, in jffs2_1pass_build_lists()
1715 part->sector_size - in jffs2_1pass_build_lists()
1717 get_fl_mem((u32)part->offset + ofs, in jffs2_1pass_build_lists()
1732 if (insert_node(&pL->dir, (u32) part->offset + in jffs2_1pass_build_lists()
1738 if (max_totlen < node->totlen) in jffs2_1pass_build_lists()
1739 max_totlen = node->totlen; in jffs2_1pass_build_lists()
1743 if (node->totlen != sizeof(struct jffs2_unknown_node)) in jffs2_1pass_build_lists()
1746 node->totlen, in jffs2_1pass_build_lists()
1748 if ((node->totlen == in jffs2_1pass_build_lists()
1760 if (node->totlen < sizeof(struct jffs2_unknown_node)) in jffs2_1pass_build_lists()
1763 node->totlen, in jffs2_1pass_build_lists()
1770 node->nodetype, in jffs2_1pass_build_lists()
1771 node->totlen, ofs); in jffs2_1pass_build_lists()
1773 ofs += ((node->totlen + 3) & ~3); in jffs2_1pass_build_lists()
1783 sort_list(&pL->frag); in jffs2_1pass_build_lists()
1784 sort_list(&pL->dir); in jffs2_1pass_build_lists()
1788 /* We don't care if malloc failed - then each read operation will in jffs2_1pass_build_lists()
1792 pL->readbuf = malloc(max_totlen); in jffs2_1pass_build_lists()
1798 putLabeledWord("dir entries = ", pL->dir.listCount); in jffs2_1pass_build_lists()
1799 putLabeledWord("frag entries = ", pL->frag.listCount); in jffs2_1pass_build_lists()
1828 piL->compr_info[i].num_frags = 0; in jffs2_1pass_fill_info()
1829 piL->compr_info[i].compr_sum = 0; in jffs2_1pass_fill_info()
1830 piL->compr_info[i].decompr_sum = 0; in jffs2_1pass_fill_info()
1833 b = pL->frag.listHead; in jffs2_1pass_fill_info()
1835 jNode = (struct jffs2_raw_inode *) get_fl_mem(b->offset, in jffs2_1pass_fill_info()
1837 if (jNode->compr < JFFS2_NUM_COMPR) { in jffs2_1pass_fill_info()
1838 piL->compr_info[jNode->compr].num_frags++; in jffs2_1pass_fill_info()
1839 piL->compr_info[jNode->compr].compr_sum += jNode->csize; in jffs2_1pass_fill_info()
1840 piL->compr_info[jNode->compr].decompr_sum += jNode->dsize; in jffs2_1pass_fill_info()
1842 b = b->next; in jffs2_1pass_fill_info()
1860 return (struct b_lists *)part->jffs2_priv; in jffs2_get_list()
1869 long ret = 1; in jffs2_1pass_ls()
1896 long ret = 1; in jffs2_1pass_load()
1919 (unsigned long) dest, ret); in jffs2_1pass_load()