Lines Matching +full:node +full:- +full:version

43 static char spinner[] = { '|', '/', '-', '\\' };
55 while (list->listMemBase != NULL) { in free_nodes()
56 struct mem_block *next = list->listMemBase->next; in free_nodes()
57 free(list->listMemBase); in free_nodes()
58 list->listMemBase = next; in free_nodes()
69 memBase = list->listMemBase; in add_node()
71 index = memBase->index; in add_node()
80 memBase->next = list->listMemBase; in add_node()
84 b = (struct b_node *)&memBase->nodes[size * index]; in add_node()
87 memBase->index = index; in add_node()
88 list->listMemBase = memBase; in add_node()
89 list->listCount++; in add_node()
99 if (list->listTail != NULL && list->listCompare(new, list->listTail)) in insert_node()
100 prev = list->listTail; in insert_node()
101 else if (list->listLast != NULL && list->listCompare(new, list->listLast)) in insert_node()
102 prev = list->listLast; in insert_node()
106 for (b = (prev ? prev->next : list->listHead); in insert_node()
107 b != NULL && list->listCompare(new, b); in insert_node()
108 prev = b, b = b->next) { in insert_node()
109 list->listLoops++; in insert_node()
112 list->listLast = prev; in insert_node()
115 new->next = b; in insert_node()
117 prev->next = new; in insert_node()
119 list->listHead = new; in insert_node()
123 new->next = (struct b_node *) NULL; in insert_node()
124 if (list->listTail != NULL) { in insert_node()
125 list->listTail->next = new; in insert_node()
126 list->listTail = new; in insert_node()
128 list->listTail = list->listHead = new; in insert_node()
136 insert_inode(struct b_list *list, struct jffs2_raw_inode *node, u32 offset) in insert_inode() argument
144 new->offset = offset; in insert_inode()
145 new->version = node->version; in insert_inode()
146 new->ino = node->ino; in insert_inode()
147 new->isize = node->isize; in insert_inode()
148 new->csize = node->csize; in insert_inode()
154 insert_dirent(struct b_list *list, struct jffs2_raw_dirent *node, u32 offset) in insert_dirent() argument
162 new->offset = offset; in insert_dirent()
163 new->version = node->version; in insert_dirent()
164 new->pino = node->pino; in insert_dirent()
165 new->ino = node->ino; in insert_dirent()
166 new->nhash = full_name_hash(node->name, node->nsize); in insert_dirent()
167 new->nsize = node->nsize; in insert_dirent()
168 new->type = node->type; in insert_dirent()
174 /* Sort data entries with the latest version last, so that if there
175 * is overlapping data the latest version will be used.
182 (struct jffs2_raw_inode *)get_fl_mem(new->offset, sizeof(ojNew), &ojNew); in compare_inodes()
184 (struct jffs2_raw_inode *)get_fl_mem(old->offset, sizeof(ojOld), &ojOld); in compare_inodes()
186 return jNew->version > jOld->version; in compare_inodes()
190 * with the same name are grouped together, with the latest version
191 * last. This makes it easy to eliminate all but the latest version
192 * by marking the previous version dead by setting the inode to 0.
199 (struct jffs2_raw_dirent *)get_fl_mem(new->offset, sizeof(ojNew), &ojNew); in compare_dirents()
201 (struct jffs2_raw_dirent *)get_fl_mem(old->offset, sizeof(ojOld), &ojOld); in compare_dirents()
205 if (jNew->pino != jOld->pino) in compare_dirents()
206 return jNew->pino > jOld->pino; in compare_dirents()
211 if (jNew->nsize != jOld->nsize) in compare_dirents()
212 return jNew->nsize > jOld->nsize; in compare_dirents()
216 cmp = strncmp(jNew->name, jOld->name, jNew->nsize); in compare_dirents()
221 * sort by version in compare_dirents()
223 if (jNew->version > jOld->version) { in compare_dirents()
227 jOld->ino = 0; in compare_dirents()
240 if (part->jffs2_priv != NULL) { in jffs_init_1pass_list()
241 pL = (struct b_lists *)part->jffs2_priv; in jffs_init_1pass_list()
242 free_nodes(&pL->frag); in jffs_init_1pass_list()
243 free_nodes(&pL->dir); in jffs_init_1pass_list()
246 if (NULL != (part->jffs2_priv = malloc(sizeof(struct b_lists)))) { in jffs_init_1pass_list()
247 pL = (struct b_lists *)part->jffs2_priv; in jffs_init_1pass_list()
251 pL->dir.listCompare = compare_dirents; in jffs_init_1pass_list()
252 pL->frag.listCompare = compare_inodes; in jffs_init_1pass_list()
276 for (jNode = (struct b_inode *)pL->frag.listHead; jNode; jNode = jNode->next) { in jffs2_1pass_read_inode()
277 if ((ino == jNode->ino)) { in jffs2_1pass_read_inode()
278 /* get actual file length from the newest node */ in jffs2_1pass_read_inode()
279 if (jNode->version >= latestVersion) { in jffs2_1pass_read_inode()
280 totalSize = jNode->isize; in jffs2_1pass_read_inode()
281 latestVersion = jNode->version; in jffs2_1pass_read_inode()
287 for (jNode = (struct b_inode *)pL->frag.listHead; jNode; jNode = jNode->next) { in jffs2_1pass_read_inode()
288 if ((ino != jNode->ino)) in jffs2_1pass_read_inode()
291 /* get actual file length from the newest node */ in jffs2_1pass_read_inode()
292 if (jNode->version >= latestVersion) { in jffs2_1pass_read_inode()
293 totalSize = jNode->isize; in jffs2_1pass_read_inode()
294 latestVersion = jNode->version; in jffs2_1pass_read_inode()
306 len += jNode->csize; in jffs2_1pass_read_inode()
307 nand_read(mtd, jNode->offset, &len, inode); in jffs2_1pass_read_inode()
309 if (inode->offset > totalSize) in jffs2_1pass_read_inode()
313 stat->st_mtime = inode->mtime; in jffs2_1pass_read_inode()
314 stat->st_mode = inode->mode; in jffs2_1pass_read_inode()
315 stat->st_ino = inode->ino; in jffs2_1pass_read_inode()
316 stat->st_size = totalSize; in jffs2_1pass_read_inode()
323 dst = (char *) (dest + inode->offset); in jffs2_1pass_read_inode()
325 switch (inode->compr) { in jffs2_1pass_read_inode()
328 memcpy(dst, src, inode->dsize); in jffs2_1pass_read_inode()
332 memset(dst, 0, inode->dsize); in jffs2_1pass_read_inode()
336 rtime_decompress(src, dst, inode->csize, inode->dsize); in jffs2_1pass_read_inode()
341 dynrubin_decompress(src, dst, inode->csize, inode->dsize); in jffs2_1pass_read_inode()
344 ret = zlib_decompress(src, dst, inode->csize, inode->dsize); in jffs2_1pass_read_inode()
348 ret = lzo_decompress(src, dst, inode->csize, inode->dsize); in jffs2_1pass_read_inode()
353 putLabeledWord("UNKNOWN COMPRESSION METHOD = ", inode->compr); in jffs2_1pass_read_inode()
354 return -1; in jffs2_1pass_read_inode()
369 u32 version = 0; in jffs2_1pass_find_inode() local
372 /* we need to search all and return the inode with the highest version */ in jffs2_1pass_find_inode()
373 for (jDir = (struct b_dirent *)pL->dir.listHead; jDir; jDir = jDir->next) { in jffs2_1pass_find_inode()
374 if ((pino == jDir->pino) && (jDir->ino) && /* 0 for unlink */ in jffs2_1pass_find_inode()
375 (len == jDir->nsize) && (nhash == jDir->nhash)) { in jffs2_1pass_find_inode()
377 if (jDir->version < version) in jffs2_1pass_find_inode()
380 if (jDir->version == version && inode != 0) { in jffs2_1pass_find_inode()
383 /* putnstr(jDir->name, jDir->nsize); */ in jffs2_1pass_find_inode()
384 /* putLabeledWord(" has dup version =", version); */ in jffs2_1pass_find_inode()
386 inode = jDir->ino; in jffs2_1pass_find_inode()
387 version = jDir->version; in jffs2_1pass_find_inode()
406 case S_IFREG: str[0] = '-'; break; in mkmodestr()
412 str[9-i] = (mode & mask)?c:'-'; in mkmodestr()
428 if (st->st_mtime == (time_t)(-1)) /* some ctimes really hate -1 */ in dump_stat()
429 st->st_mtime = 1; in dump_stat()
431 ctime_r(&st->st_mtime, s/*,64*/); /* newlib ctime doesn't have buflen */ in dump_stat()
437 printf("%6lo %s %8ld %s %s\n", st->st_mode, mkmodestr(st->st_mode, str), in dump_stat()
438 st->st_size, s, name); in dump_stat()
441 printf(" %s %8ld %s %s", mkmodestr(st->st_mode,str), st->st_size, s, name); in dump_stat()
451 if(!d || !i) return -1; in dump_inode()
452 len = d->nsize; in dump_inode()
453 nand_read(mtd, d->offset + sizeof(struct jffs2_raw_dirent), in dump_inode()
455 fname[d->nsize] = '\0'; in dump_inode()
459 jffs2_1pass_read_inode(pL, i->ino, NULL, &st); in dump_inode()
463 if (d->type == DT_LNK) { in dump_inode()
465 putstr(" -> "); in dump_inode()
466 putnstr(src, (int)i->dsize); in dump_inode()
481 for (jDir = (struct b_dirent *)pL->dir.listHead; jDir; jDir = jDir->next) { in jffs2_1pass_list_inodes()
482 if ((pino == jDir->pino) && (jDir->ino)) { /* ino=0 -> unlink */ in jffs2_1pass_list_inodes()
483 struct b_inode *jNode = (struct b_inode *)pL->frag.listHead; in jffs2_1pass_list_inodes()
487 if (jNode->ino == jDir->ino && jNode->version >= i_version) { in jffs2_1pass_list_inodes()
488 i_version = jNode->version; in jffs2_1pass_list_inodes()
491 jNode = jNode->next; in jffs2_1pass_list_inodes()
515 strncpy(working_tmp, tmp, c - tmp); in jffs2_1pass_search_inode()
516 working_tmp[c - tmp] = '\0'; in jffs2_1pass_search_inode()
528 for (i = 0; i < strlen(c) - 1; i++) in jffs2_1pass_search_inode()
564 u32 version = 0; in jffs2_1pass_resolve_inode() local
567 /* we need to search all and return the inode with the highest version */ in jffs2_1pass_resolve_inode()
568 for (jDir = (struct b_dirent *)pL->dir.listHead; jDir; jDir = jDir->next) { in jffs2_1pass_resolve_inode()
569 if (ino == jDir->ino) { in jffs2_1pass_resolve_inode()
570 if (jDir->version < version) in jffs2_1pass_resolve_inode()
573 if (jDir->version == version && jDirFoundType) { in jffs2_1pass_resolve_inode()
576 /* putnstr(jDir->name, jDir->nsize); */ in jffs2_1pass_resolve_inode()
577 /* putLabeledWord(" has dup version (resolve) = ", */ in jffs2_1pass_resolve_inode()
578 /* version); */ in jffs2_1pass_resolve_inode()
581 jDirFoundType = jDir->type; in jffs2_1pass_resolve_inode()
582 jDirFoundIno = jDir->ino; in jffs2_1pass_resolve_inode()
583 jDirFoundPino = jDir->pino; in jffs2_1pass_resolve_inode()
584 version = jDir->version; in jffs2_1pass_resolve_inode()
592 for (jNode = (struct b_inode *)pL->frag.listHead; jNode; jNode = jNode->next) { in jffs2_1pass_resolve_inode()
593 if (jNode->ino == jDirFoundIno) { in jffs2_1pass_resolve_inode()
594 size_t len = jNode->csize; in jffs2_1pass_resolve_inode()
596 jNode->offset + sizeof(struct jffs2_raw_inode), in jffs2_1pass_resolve_inode()
598 tmp[jNode->csize] = '\0'; in jffs2_1pass_resolve_inode()
628 strncpy(working_tmp, tmp, c - tmp); in jffs2_1pass_search_list_inodes()
629 working_tmp[c - tmp] = '\0'; in jffs2_1pass_search_list_inodes()
630 for (i = 0; i < strlen(c) - 1; i++) in jffs2_1pass_search_list_inodes()
665 struct jffs2_unknown_node *node; in jffs2_1pass_rescan_needed() local
666 struct b_lists *pL = (struct b_lists *)part->jffs2_priv; in jffs2_1pass_rescan_needed()
668 if (part->jffs2_priv == 0){ in jffs2_1pass_rescan_needed()
673 if (pL->frag.listCount == 0) { in jffs2_1pass_rescan_needed()
679 if (pL->partOffset != part->offset) { in jffs2_1pass_rescan_needed()
687 b = pL->dir.listHead; in jffs2_1pass_rescan_needed()
689 node = (struct jffs2_unknown_node *) get_fl_mem(b->offset, in jffs2_1pass_rescan_needed()
691 if (node->nodetype != JFFS2_NODETYPE_DIRENT) { in jffs2_1pass_rescan_needed()
693 (unsigned long) b->offset); in jffs2_1pass_rescan_needed()
696 b = b->next; in jffs2_1pass_rescan_needed()
711 b = pL->frag.listHead; in dump_fragments()
713 jNode = (struct jffs2_raw_inode *) get_fl_mem(b->offset, in dump_fragments()
715 putLabeledWord("\r\n\tbuild_list: FLASH_OFFSET = ", b->offset); in dump_fragments()
716 putLabeledWord("\tbuild_list: totlen = ", jNode->totlen); in dump_fragments()
717 putLabeledWord("\tbuild_list: inode = ", jNode->ino); in dump_fragments()
718 putLabeledWord("\tbuild_list: version = ", jNode->version); in dump_fragments()
719 putLabeledWord("\tbuild_list: isize = ", jNode->isize); in dump_fragments()
720 putLabeledWord("\tbuild_list: atime = ", jNode->atime); in dump_fragments()
721 putLabeledWord("\tbuild_list: offset = ", jNode->offset); in dump_fragments()
722 putLabeledWord("\tbuild_list: csize = ", jNode->csize); in dump_fragments()
723 putLabeledWord("\tbuild_list: dsize = ", jNode->dsize); in dump_fragments()
724 putLabeledWord("\tbuild_list: compr = ", jNode->compr); in dump_fragments()
725 putLabeledWord("\tbuild_list: usercompr = ", jNode->usercompr); in dump_fragments()
726 putLabeledWord("\tbuild_list: flags = ", jNode->flags); in dump_fragments()
727 putLabeledWord("\tbuild_list: offset = ", b->offset); /* FIXME: ? [RS] */ in dump_fragments()
728 b = b->next; in dump_fragments()
741 b = pL->dir.listHead; in dump_dirents()
743 jDir = (struct jffs2_raw_dirent *) get_node_mem(b->offset); in dump_dirents()
745 putnstr(jDir->name, jDir->nsize); in dump_dirents()
746 putLabeledWord("\r\n\tbuild_list: magic = ", jDir->magic); in dump_dirents()
747 putLabeledWord("\tbuild_list: nodetype = ", jDir->nodetype); in dump_dirents()
748 putLabeledWord("\tbuild_list: hdr_crc = ", jDir->hdr_crc); in dump_dirents()
749 putLabeledWord("\tbuild_list: pino = ", jDir->pino); in dump_dirents()
750 putLabeledWord("\tbuild_list: version = ", jDir->version); in dump_dirents()
751 putLabeledWord("\tbuild_list: ino = ", jDir->ino); in dump_dirents()
752 putLabeledWord("\tbuild_list: mctime = ", jDir->mctime); in dump_dirents()
753 putLabeledWord("\tbuild_list: nsize = ", jDir->nsize); in dump_dirents()
754 putLabeledWord("\tbuild_list: type = ", jDir->type); in dump_dirents()
755 putLabeledWord("\tbuild_list: node_crc = ", jDir->node_crc); in dump_dirents()
756 putLabeledWord("\tbuild_list: name_crc = ", jDir->name_crc); in dump_dirents()
757 putLabeledWord("\tbuild_list: offset = ", b->offset); /* FIXME: ? [RS] */ in dump_dirents()
758 b = b->next; in dump_dirents()
779 return -1; in jffs2_fill_scan_buf()
789 struct jffs2_unknown_node *node; in jffs2_1pass_build_lists() local
798 struct mtdids *id = part->dev->id; in jffs2_1pass_build_lists()
799 mtd = get_nand_dev_by_index(id->num); in jffs2_1pass_build_lists()
807 pL = (struct b_lists *)part->jffs2_priv; in jffs2_1pass_build_lists()
808 pL->partOffset = part->offset; in jffs2_1pass_build_lists()
811 sectorsize = mtd->erasesize; in jffs2_1pass_build_lists()
812 nr_blocks = part->size / sectorsize; in jffs2_1pass_build_lists()
820 offset = part->offset + i * sectorsize; in jffs2_1pass_build_lists()
835 …if (jffs2_fill_scan_buf(mtd, buf + EMPTY_SCAN_SIZE, offset + EMPTY_SCAN_SIZE, sectorsize - EMPTY_S… in jffs2_1pass_build_lists()
839 while (ofs < sectorsize - sizeof(struct jffs2_unknown_node)) { in jffs2_1pass_build_lists()
840 node = (struct jffs2_unknown_node *)&buf[ofs]; in jffs2_1pass_build_lists()
841 if (node->magic != JFFS2_MAGIC_BITMASK || !hdr_crc(node)) { in jffs2_1pass_build_lists()
848 if (node->nodetype == JFFS2_NODETYPE_INODE && in jffs2_1pass_build_lists()
849 inode_crc((struct jffs2_raw_inode *) node)) { in jffs2_1pass_build_lists()
850 if (insert_inode(&pL->frag, (struct jffs2_raw_inode *) node, in jffs2_1pass_build_lists()
854 } else if (node->nodetype == JFFS2_NODETYPE_DIRENT && in jffs2_1pass_build_lists()
855 dirent_crc((struct jffs2_raw_dirent *) node) && in jffs2_1pass_build_lists()
856 dirent_name_crc((struct jffs2_raw_dirent *) node)) { in jffs2_1pass_build_lists()
859 if (insert_dirent(&pL->dir, (struct jffs2_raw_dirent *) node, in jffs2_1pass_build_lists()
864 } else if (node->nodetype == JFFS2_NODETYPE_CLEANMARKER) { in jffs2_1pass_build_lists()
865 if (node->totlen != sizeof(struct jffs2_unknown_node)) in jffs2_1pass_build_lists()
868 node->totlen, in jffs2_1pass_build_lists()
870 } else if (node->nodetype == JFFS2_NODETYPE_PADDING) { in jffs2_1pass_build_lists()
871 if (node->totlen < sizeof(struct jffs2_unknown_node)) in jffs2_1pass_build_lists()
874 node->totlen, in jffs2_1pass_build_lists()
877 printf("Unknown node type: %x len %d offset 0x%x\n", in jffs2_1pass_build_lists()
878 node->nodetype, in jffs2_1pass_build_lists()
879 node->totlen, offset); in jffs2_1pass_build_lists()
881 offset += ((node->totlen + 3) & ~3); in jffs2_1pass_build_lists()
882 ofs += ((node->totlen + 3) & ~3); in jffs2_1pass_build_lists()
890 putLabeledWord("dir entries = ", pL->dir.listCount); in jffs2_1pass_build_lists()
891 putLabeledWord("frag entries = ", pL->frag.listCount); in jffs2_1pass_build_lists()
921 piL->compr_info[i].num_frags = 0; in jffs2_1pass_fill_info()
922 piL->compr_info[i].compr_sum = 0; in jffs2_1pass_fill_info()
923 piL->compr_info[i].decompr_sum = 0; in jffs2_1pass_fill_info()
926 b = pL->frag.listHead; in jffs2_1pass_fill_info()
928 jNode = (struct jffs2_raw_inode *) get_fl_mem(b->offset, in jffs2_1pass_fill_info()
930 if (jNode->compr < JFFS2_NUM_COMPR) { in jffs2_1pass_fill_info()
931 piL->compr_info[jNode->compr].num_frags++; in jffs2_1pass_fill_info()
932 piL->compr_info[jNode->compr].compr_sum += jNode->csize; in jffs2_1pass_fill_info()
933 piL->compr_info[jNode->compr].decompr_sum += jNode->dsize; in jffs2_1pass_fill_info()
935 b = b->next; in jffs2_1pass_fill_info()
951 return (struct b_lists *)part->jffs2_priv; in jffs2_get_list()