/Module.symvers
/.tmp_versions
+# .swp files which are generated by open vim sessions.
+*.swp
+
#
# cscope files
#
cscope.*
+
+#emfile
+emfile-*
+
+# here are the files that are copied into the direct folder. They are modified
+# when they are copied. We don't want to track them.
+
+direct/yaffs_allocator.c
+direct/yaffs_allocator.h
+direct/yaffs_attribs.h
+direct/yaffs_bitmap.c
+direct/yaffs_bitmap.h
+direct/yaffs_cache.c
+direct/yaffs_cache.h
+direct/yaffs_checkptrw.c
+direct/yaffs_checkptrw.h
+direct/yaffs_ecc.c
+direct/yaffs_ecc.h
+direct/yaffs_endian.c
+direct/yaffs_endian.h
+direct/yaffs_getblockinfo.h
+direct/yaffs_guts.c
+direct/yaffs_guts.h
+direct/yaffs_nameval.c
+direct/yaffs_nameval.h
+direct/yaffs_nand.c
+direct/yaffs_nand.h
+direct/yaffs_packedtags1.c
+direct/yaffs_packedtags1.h
+direct/yaffs_packedtags2.c
+direct/yaffs_packedtags2.h
+direct/yaffs_summary.c
+direct/yaffs_summary.h
+direct/yaffs_tagscompat.c
+direct/yaffs_tagscompat.h
+direct/yaffs_tagsmarshall.c
+direct/yaffs_tagsmarshall.h
+direct/yaffs_trace.h
+direct/yaffs_verify.c
+direct/yaffs_verify.h
+direct/yaffs_yaffs1.c
+direct/yaffs_yaffs1.h
+direct/yaffs_yaffs2.c
+direct/yaffs_yaffs2.h
+
+
+
+# here are all the symlinks that yaffs direct uses
+# we don't want to track them.
+# this list was created using the command run in the root directory.
+# $ find * -type l -not -exec grep -q "^{}$" .gitignore \; -print >> .gitignore
+
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/nanddrv.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_packedtags2.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/nandsim.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_cache.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_hweight.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_ramem2k.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_flexible_file_sim.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_cache.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_m18_drv.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/nandstore_file.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_nand.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_bitmap.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_yaffs2.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_fileem2k.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_checkptrw.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_error.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_flashif.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_getblockinfo.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_list.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_ecc.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffsfs.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_nand_drv.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/ydirectenv.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_allocator.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/nanddrv.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_verify.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffsfs.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/nandsim.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_ramdisk.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/nand_chip.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_summary.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_nameval.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_summary.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_checkptrw.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/nand_store.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_endian.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_m18_drv.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_tagsmarshall.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_yaffs2.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/nandsim_file.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_allocator.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yportenv.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_packedtags2.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_osglue.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_flashif2.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_tagsmarshall.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_endian.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_nand_drv.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_nandsim_file.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_fileem2k.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_nor_drv.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_verify.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/nandsim_file.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_packedtags1.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_nor_drv.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/ynorsim.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_nand.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_attribs.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_fileem.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_yaffs1.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_guts.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffscfg2k.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffscfg.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_flexible_file_sim.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_guts.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/ynorsim.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_ramdisk.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_hweight.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_packedtags1.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_trace.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_tagscompat.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_attribs.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_ecc.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_yaffs1.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_bitmap.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_nameval.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_nandemul2k.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_tagscompat.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_nandsim_file.h
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/yaffs_osglue.c
+direct/test-framework/unit_tests/64_and_32_bit_time/64_bit/nandstore_file.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/nanddrv.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_packedtags2.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/nandsim.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_cache.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_hweight.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_ramem2k.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_flexible_file_sim.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_cache.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_m18_drv.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/nandstore_file.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_nand.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_bitmap.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_yaffs2.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_fileem2k.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_checkptrw.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_error.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_flashif.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_getblockinfo.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_list.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_ecc.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffsfs.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_nand_drv.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/ydirectenv.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_allocator.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/nanddrv.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_verify.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffsfs.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/nandsim.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_ramdisk.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/nand_chip.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_summary.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_nameval.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_summary.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_checkptrw.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/nand_store.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_endian.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_m18_drv.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_tagsmarshall.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_yaffs2.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/nandsim_file.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_allocator.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yportenv.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_packedtags2.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_osglue.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_flashif2.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_tagsmarshall.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_endian.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_nand_drv.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_nandsim_file.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_fileem2k.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_nor_drv.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_verify.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/nandsim_file.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_packedtags1.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_nor_drv.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/ynorsim.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_nand.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_attribs.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_fileem.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_yaffs1.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_guts.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffscfg2k.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffscfg.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_flexible_file_sim.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_guts.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/ynorsim.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_ramdisk.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_hweight.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_packedtags1.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_trace.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_tagscompat.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_attribs.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_ecc.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_yaffs1.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_bitmap.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_nameval.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_nandemul2k.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_tagscompat.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_nandsim_file.h
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/yaffs_osglue.c
+direct/test-framework/unit_tests/64_and_32_bit_time/32_bit/nandstore_file.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/nanddrv.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_packedtags2.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/nandsim.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_cache.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_hweight.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_ramem2k.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_flexible_file_sim.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_cache.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_m18_drv.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/nandstore_file.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_nand.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_bitmap.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_yaffs2.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_fileem2k.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_checkptrw.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_error.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_flashif.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_getblockinfo.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_list.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_ecc.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffsfs.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_nand_drv.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/ydirectenv.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_allocator.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/nanddrv.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_verify.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffsfs.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/nandsim.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_ramdisk.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/nand_chip.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_summary.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_nameval.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_summary.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_checkptrw.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/nand_store.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_endian.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_m18_drv.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_tagsmarshall.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_yaffs2.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/nandsim_file.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_allocator.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/yportenv.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_packedtags2.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_osglue.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_flashif2.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_tagsmarshall.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_endian.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_nand_drv.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_nandsim_file.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_fileem2k.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_nor_drv.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_verify.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/nandsim_file.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_packedtags1.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_nor_drv.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/ynorsim.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_nand.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_attribs.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_fileem.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_yaffs1.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_guts.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffscfg2k.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffscfg.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_flexible_file_sim.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_guts.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/ynorsim.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_ramdisk.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_hweight.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_packedtags1.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_trace.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_tagscompat.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_attribs.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_ecc.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_yaffs1.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_bitmap.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_nameval.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_nandemul2k.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_tagscompat.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_nandsim_file.h
+direct/test-framework/unit_tests/is_yaffs_working_tests/yaffs_osglue.c
+direct/test-framework/unit_tests/is_yaffs_working_tests/nandstore_file.c
+direct/test-framework/unit_tests/quick_tests/nanddrv.c
+direct/test-framework/unit_tests/quick_tests/yaffs_packedtags2.h
+direct/test-framework/unit_tests/quick_tests/nandsim.h
+direct/test-framework/unit_tests/quick_tests/yaffs_cache.h
+direct/test-framework/unit_tests/quick_tests/yaffs_hweight.c
+direct/test-framework/unit_tests/quick_tests/yaffs_ramem2k.c
+direct/test-framework/unit_tests/quick_tests/yaffs_flexible_file_sim.c
+direct/test-framework/unit_tests/quick_tests/yaffs_cache.c
+direct/test-framework/unit_tests/quick_tests/yaffs_m18_drv.c
+direct/test-framework/unit_tests/quick_tests/nandstore_file.h
+direct/test-framework/unit_tests/quick_tests/yaffs_nand.c
+direct/test-framework/unit_tests/quick_tests/yaffs_bitmap.h
+direct/test-framework/unit_tests/quick_tests/yaffs_yaffs2.c
+direct/test-framework/unit_tests/quick_tests/yaffs_fileem2k.h
+direct/test-framework/unit_tests/quick_tests/yaffs_checkptrw.h
+direct/test-framework/unit_tests/quick_tests/yaffs_error.c
+direct/test-framework/unit_tests/quick_tests/yaffs_flashif.h
+direct/test-framework/unit_tests/quick_tests/yaffs_getblockinfo.h
+direct/test-framework/unit_tests/quick_tests/yaffs_list.h
+direct/test-framework/unit_tests/quick_tests/yaffs_ecc.c
+direct/test-framework/unit_tests/quick_tests/yaffsfs.h
+direct/test-framework/unit_tests/quick_tests/yaffs_nand_drv.c
+direct/test-framework/unit_tests/quick_tests/ydirectenv.h
+direct/test-framework/unit_tests/quick_tests/yaffs_allocator.h
+direct/test-framework/unit_tests/quick_tests/nanddrv.h
+direct/test-framework/unit_tests/quick_tests/yaffs_verify.h
+direct/test-framework/unit_tests/quick_tests/yaffsfs.c
+direct/test-framework/unit_tests/quick_tests/nandsim.c
+direct/test-framework/unit_tests/quick_tests/yaffs_ramdisk.h
+direct/test-framework/unit_tests/quick_tests/nand_chip.h
+direct/test-framework/unit_tests/quick_tests/yaffs_summary.h
+direct/test-framework/unit_tests/quick_tests/yaffs_nameval.c
+direct/test-framework/unit_tests/quick_tests/yaffs_summary.c
+direct/test-framework/unit_tests/quick_tests/yaffs_checkptrw.c
+direct/test-framework/unit_tests/quick_tests/nand_store.h
+direct/test-framework/unit_tests/quick_tests/yaffs_endian.c
+direct/test-framework/unit_tests/quick_tests/yaffs_m18_drv.h
+direct/test-framework/unit_tests/quick_tests/yaffs_tagsmarshall.c
+direct/test-framework/unit_tests/quick_tests/yaffs_yaffs2.h
+direct/test-framework/unit_tests/quick_tests/nandsim_file.c
+direct/test-framework/unit_tests/quick_tests/yaffs_allocator.c
+direct/test-framework/unit_tests/quick_tests/yportenv.h
+direct/test-framework/unit_tests/quick_tests/yaffs_packedtags2.c
+direct/test-framework/unit_tests/quick_tests/yaffs_osglue.h
+direct/test-framework/unit_tests/quick_tests/yaffs_flashif2.h
+direct/test-framework/unit_tests/quick_tests/yaffs_tagsmarshall.h
+direct/test-framework/unit_tests/quick_tests/yaffs_endian.h
+direct/test-framework/unit_tests/quick_tests/yaffs_nand_drv.h
+direct/test-framework/unit_tests/quick_tests/yaffs_nandsim_file.c
+direct/test-framework/unit_tests/quick_tests/yaffs_fileem2k.c
+direct/test-framework/unit_tests/quick_tests/yaffs_nor_drv.h
+direct/test-framework/unit_tests/quick_tests/yaffs_verify.c
+direct/test-framework/unit_tests/quick_tests/nandsim_file.h
+direct/test-framework/unit_tests/quick_tests/yaffs_packedtags1.c
+direct/test-framework/unit_tests/quick_tests/yaffs_nor_drv.c
+direct/test-framework/unit_tests/quick_tests/ynorsim.c
+direct/test-framework/unit_tests/quick_tests/yaffs_nand.h
+direct/test-framework/unit_tests/quick_tests/yaffs_attribs.h
+direct/test-framework/unit_tests/quick_tests/yaffs_fileem.c
+direct/test-framework/unit_tests/quick_tests/yaffs_yaffs1.c
+direct/test-framework/unit_tests/quick_tests/yaffs_guts.h
+direct/test-framework/unit_tests/quick_tests/yaffscfg2k.c
+direct/test-framework/unit_tests/quick_tests/yaffscfg.h
+direct/test-framework/unit_tests/quick_tests/yaffs_flexible_file_sim.h
+direct/test-framework/unit_tests/quick_tests/yaffs_guts.c
+direct/test-framework/unit_tests/quick_tests/ynorsim.h
+direct/test-framework/unit_tests/quick_tests/yaffs_ramdisk.c
+direct/test-framework/unit_tests/quick_tests/yaffs_hweight.h
+direct/test-framework/unit_tests/quick_tests/yaffs_packedtags1.h
+direct/test-framework/unit_tests/quick_tests/yaffs_trace.h
+direct/test-framework/unit_tests/quick_tests/yaffs_tagscompat.h
+direct/test-framework/unit_tests/quick_tests/yaffs_attribs.c
+direct/test-framework/unit_tests/quick_tests/yaffs_ecc.h
+direct/test-framework/unit_tests/quick_tests/yaffs_yaffs1.h
+direct/test-framework/unit_tests/quick_tests/yaffs_bitmap.c
+direct/test-framework/unit_tests/quick_tests/yaffs_nameval.h
+direct/test-framework/unit_tests/quick_tests/yaffs_nandemul2k.h
+direct/test-framework/unit_tests/quick_tests/yaffs_tagscompat.c
+direct/test-framework/unit_tests/quick_tests/yaffs_nandsim_file.h
+direct/test-framework/unit_tests/quick_tests/yaffs_osglue.c
+direct/test-framework/unit_tests/quick_tests/nandstore_file.c
+direct/test-framework/stress_tests/stress_tester/nanddrv.c
+direct/test-framework/stress_tests/stress_tester/yaffs_packedtags2.h
+direct/test-framework/stress_tests/stress_tester/nandsim.h
+direct/test-framework/stress_tests/stress_tester/yaffs_cache.h
+direct/test-framework/stress_tests/stress_tester/yaffs_hweight.c
+direct/test-framework/stress_tests/stress_tester/yaffs_ramem2k.c
+direct/test-framework/stress_tests/stress_tester/yaffs_flexible_file_sim.c
+direct/test-framework/stress_tests/stress_tester/yaffs_cache.c
+direct/test-framework/stress_tests/stress_tester/yaffs_m18_drv.c
+direct/test-framework/stress_tests/stress_tester/nandstore_file.h
+direct/test-framework/stress_tests/stress_tester/yaffs_nand.c
+direct/test-framework/stress_tests/stress_tester/yaffs_bitmap.h
+direct/test-framework/stress_tests/stress_tester/yaffs_yaffs2.c
+direct/test-framework/stress_tests/stress_tester/yaffs_fileem2k.h
+direct/test-framework/stress_tests/stress_tester/yaffs_checkptrw.h
+direct/test-framework/stress_tests/stress_tester/yaffs_error.c
+direct/test-framework/stress_tests/stress_tester/yaffs_flashif.h
+direct/test-framework/stress_tests/stress_tester/yaffs_getblockinfo.h
+direct/test-framework/stress_tests/stress_tester/yaffs_list.h
+direct/test-framework/stress_tests/stress_tester/yaffs_ecc.c
+direct/test-framework/stress_tests/stress_tester/yaffsfs.h
+direct/test-framework/stress_tests/stress_tester/yaffs_nand_drv.c
+direct/test-framework/stress_tests/stress_tester/ydirectenv.h
+direct/test-framework/stress_tests/stress_tester/yaffs_allocator.h
+direct/test-framework/stress_tests/stress_tester/nanddrv.h
+direct/test-framework/stress_tests/stress_tester/yaffs_verify.h
+direct/test-framework/stress_tests/stress_tester/yaffsfs.c
+direct/test-framework/stress_tests/stress_tester/nandsim.c
+direct/test-framework/stress_tests/stress_tester/yaffs_ramdisk.h
+direct/test-framework/stress_tests/stress_tester/nand_chip.h
+direct/test-framework/stress_tests/stress_tester/yaffs_summary.h
+direct/test-framework/stress_tests/stress_tester/yaffs_nameval.c
+direct/test-framework/stress_tests/stress_tester/yaffs_summary.c
+direct/test-framework/stress_tests/stress_tester/yaffs_checkptrw.c
+direct/test-framework/stress_tests/stress_tester/nand_store.h
+direct/test-framework/stress_tests/stress_tester/yaffs_endian.c
+direct/test-framework/stress_tests/stress_tester/yaffs_m18_drv.h
+direct/test-framework/stress_tests/stress_tester/yaffs_tagsmarshall.c
+direct/test-framework/stress_tests/stress_tester/yaffs_yaffs2.h
+direct/test-framework/stress_tests/stress_tester/nandsim_file.c
+direct/test-framework/stress_tests/stress_tester/yaffs_allocator.c
+direct/test-framework/stress_tests/stress_tester/yportenv.h
+direct/test-framework/stress_tests/stress_tester/yaffs_packedtags2.c
+direct/test-framework/stress_tests/stress_tester/yaffs_osglue.h
+direct/test-framework/stress_tests/stress_tester/yaffs_flashif2.h
+direct/test-framework/stress_tests/stress_tester/yaffs_tagsmarshall.h
+direct/test-framework/stress_tests/stress_tester/yaffs_endian.h
+direct/test-framework/stress_tests/stress_tester/yaffs_nand_drv.h
+direct/test-framework/stress_tests/stress_tester/yaffs_nandsim_file.c
+direct/test-framework/stress_tests/stress_tester/yaffs_fileem2k.c
+direct/test-framework/stress_tests/stress_tester/yaffs_nor_drv.h
+direct/test-framework/stress_tests/stress_tester/yaffs_verify.c
+direct/test-framework/stress_tests/stress_tester/nandsim_file.h
+direct/test-framework/stress_tests/stress_tester/yaffs_packedtags1.c
+direct/test-framework/stress_tests/stress_tester/yaffs_nor_drv.c
+direct/test-framework/stress_tests/stress_tester/ynorsim.c
+direct/test-framework/stress_tests/stress_tester/yaffs_nand.h
+direct/test-framework/stress_tests/stress_tester/yaffs_attribs.h
+direct/test-framework/stress_tests/stress_tester/yaffs_fileem.c
+direct/test-framework/stress_tests/stress_tester/yaffs_yaffs1.c
+direct/test-framework/stress_tests/stress_tester/yaffs_guts.h
+direct/test-framework/stress_tests/stress_tester/yaffscfg2k.c
+direct/test-framework/stress_tests/stress_tester/yaffscfg.h
+direct/test-framework/stress_tests/stress_tester/yaffs_flexible_file_sim.h
+direct/test-framework/stress_tests/stress_tester/yaffs_guts.c
+direct/test-framework/stress_tests/stress_tester/ynorsim.h
+direct/test-framework/stress_tests/stress_tester/yaffs_ramdisk.c
+direct/test-framework/stress_tests/stress_tester/yaffs_hweight.h
+direct/test-framework/stress_tests/stress_tester/yaffs_packedtags1.h
+direct/test-framework/stress_tests/stress_tester/yaffs_trace.h
+direct/test-framework/stress_tests/stress_tester/yaffs_tagscompat.h
+direct/test-framework/stress_tests/stress_tester/yaffs_attribs.c
+direct/test-framework/stress_tests/stress_tester/yaffs_ecc.h
+direct/test-framework/stress_tests/stress_tester/yaffs_yaffs1.h
+direct/test-framework/stress_tests/stress_tester/yaffs_bitmap.c
+direct/test-framework/stress_tests/stress_tester/yaffs_nameval.h
+direct/test-framework/stress_tests/stress_tester/yaffs_nandemul2k.h
+direct/test-framework/stress_tests/stress_tester/yaffs_tagscompat.c
+direct/test-framework/stress_tests/stress_tester/yaffs_nandsim_file.h
+direct/test-framework/stress_tests/stress_tester/yaffs_osglue.c
+direct/test-framework/stress_tests/stress_tester/nandstore_file.c
+direct/test-framework/stress_tests/threading/nanddrv.c
+direct/test-framework/stress_tests/threading/yaffs_packedtags2.h
+direct/test-framework/stress_tests/threading/nandsim.h
+direct/test-framework/stress_tests/threading/yaffs_cache.h
+direct/test-framework/stress_tests/threading/yaffs_hweight.c
+direct/test-framework/stress_tests/threading/yaffs_ramem2k.c
+direct/test-framework/stress_tests/threading/yaffs_flexible_file_sim.c
+direct/test-framework/stress_tests/threading/yaffs_cache.c
+direct/test-framework/stress_tests/threading/yaffs_m18_drv.c
+direct/test-framework/stress_tests/threading/nandstore_file.h
+direct/test-framework/stress_tests/threading/yaffs_nand.c
+direct/test-framework/stress_tests/threading/yaffs_bitmap.h
+direct/test-framework/stress_tests/threading/yaffs_yaffs2.c
+direct/test-framework/stress_tests/threading/yaffs_fileem2k.h
+direct/test-framework/stress_tests/threading/yaffs_checkptrw.h
+direct/test-framework/stress_tests/threading/yaffs_error.c
+direct/test-framework/stress_tests/threading/yaffs_flashif.h
+direct/test-framework/stress_tests/threading/yaffs_getblockinfo.h
+direct/test-framework/stress_tests/threading/yaffs_list.h
+direct/test-framework/stress_tests/threading/yaffs_ecc.c
+direct/test-framework/stress_tests/threading/yaffsfs.h
+direct/test-framework/stress_tests/threading/yaffs_nand_drv.c
+direct/test-framework/stress_tests/threading/ydirectenv.h
+direct/test-framework/stress_tests/threading/yaffs_allocator.h
+direct/test-framework/stress_tests/threading/nanddrv.h
+direct/test-framework/stress_tests/threading/yaffs_verify.h
+direct/test-framework/stress_tests/threading/yaffsfs.c
+direct/test-framework/stress_tests/threading/nandsim.c
+direct/test-framework/stress_tests/threading/yaffs_ramdisk.h
+direct/test-framework/stress_tests/threading/nand_chip.h
+direct/test-framework/stress_tests/threading/yaffs_summary.h
+direct/test-framework/stress_tests/threading/yaffs_nameval.c
+direct/test-framework/stress_tests/threading/yaffs_summary.c
+direct/test-framework/stress_tests/threading/yaffs_checkptrw.c
+direct/test-framework/stress_tests/threading/nand_store.h
+direct/test-framework/stress_tests/threading/yaffs_endian.c
+direct/test-framework/stress_tests/threading/yaffs_m18_drv.h
+direct/test-framework/stress_tests/threading/yaffs_tagsmarshall.c
+direct/test-framework/stress_tests/threading/yaffs_yaffs2.h
+direct/test-framework/stress_tests/threading/nandsim_file.c
+direct/test-framework/stress_tests/threading/yaffs_allocator.c
+direct/test-framework/stress_tests/threading/yportenv.h
+direct/test-framework/stress_tests/threading/yaffs_packedtags2.c
+direct/test-framework/stress_tests/threading/yaffs_osglue.h
+direct/test-framework/stress_tests/threading/yaffs_flashif2.h
+direct/test-framework/stress_tests/threading/yaffs_tagsmarshall.h
+direct/test-framework/stress_tests/threading/yaffs_endian.h
+direct/test-framework/stress_tests/threading/yaffs_nand_drv.h
+direct/test-framework/stress_tests/threading/yaffs_nandsim_file.c
+direct/test-framework/stress_tests/threading/yaffs_fileem2k.c
+direct/test-framework/stress_tests/threading/yaffs_nor_drv.h
+direct/test-framework/stress_tests/threading/yaffs_verify.c
+direct/test-framework/stress_tests/threading/nandsim_file.h
+direct/test-framework/stress_tests/threading/yaffs_packedtags1.c
+direct/test-framework/stress_tests/threading/yaffs_nor_drv.c
+direct/test-framework/stress_tests/threading/ynorsim.c
+direct/test-framework/stress_tests/threading/yaffs_nand.h
+direct/test-framework/stress_tests/threading/yaffs_attribs.h
+direct/test-framework/stress_tests/threading/yaffs_fileem.c
+direct/test-framework/stress_tests/threading/yaffs_yaffs1.c
+direct/test-framework/stress_tests/threading/yaffs_guts.h
+direct/test-framework/stress_tests/threading/yaffscfg2k.c
+direct/test-framework/stress_tests/threading/yaffscfg.h
+direct/test-framework/stress_tests/threading/yaffs_flexible_file_sim.h
+direct/test-framework/stress_tests/threading/yaffs_guts.c
+direct/test-framework/stress_tests/threading/ynorsim.h
+direct/test-framework/stress_tests/threading/yaffs_ramdisk.c
+direct/test-framework/stress_tests/threading/yaffs_hweight.h
+direct/test-framework/stress_tests/threading/yaffs_packedtags1.h
+direct/test-framework/stress_tests/threading/yaffs_trace.h
+direct/test-framework/stress_tests/threading/yaffs_tagscompat.h
+direct/test-framework/stress_tests/threading/yaffs_attribs.c
+direct/test-framework/stress_tests/threading/yaffs_ecc.h
+direct/test-framework/stress_tests/threading/yaffs_yaffs1.h
+direct/test-framework/stress_tests/threading/yaffs_bitmap.c
+direct/test-framework/stress_tests/threading/yaffs_nameval.h
+direct/test-framework/stress_tests/threading/yaffs_nandemul2k.h
+direct/test-framework/stress_tests/threading/yaffs_tagscompat.c
+direct/test-framework/stress_tests/threading/yaffs_nandsim_file.h
+direct/test-framework/stress_tests/threading/yaffs_osglue.c
+direct/test-framework/stress_tests/threading/nandstore_file.c
+direct/test-framework/stress_tests/handle_tests/nanddrv.c
+direct/test-framework/stress_tests/handle_tests/yaffs_packedtags2.h
+direct/test-framework/stress_tests/handle_tests/nandsim.h
+direct/test-framework/stress_tests/handle_tests/yaffs_cache.h
+direct/test-framework/stress_tests/handle_tests/yaffs_hweight.c
+direct/test-framework/stress_tests/handle_tests/yaffs_ramem2k.c
+direct/test-framework/stress_tests/handle_tests/yaffs_flexible_file_sim.c
+direct/test-framework/stress_tests/handle_tests/yaffs_cache.c
+direct/test-framework/stress_tests/handle_tests/yaffs_m18_drv.c
+direct/test-framework/stress_tests/handle_tests/nandstore_file.h
+direct/test-framework/stress_tests/handle_tests/yaffs_nand.c
+direct/test-framework/stress_tests/handle_tests/yaffs_bitmap.h
+direct/test-framework/stress_tests/handle_tests/yaffs_yaffs2.c
+direct/test-framework/stress_tests/handle_tests/yaffs_fileem2k.h
+direct/test-framework/stress_tests/handle_tests/yaffs_checkptrw.h
+direct/test-framework/stress_tests/handle_tests/yaffs_error.c
+direct/test-framework/stress_tests/handle_tests/yaffs_flashif.h
+direct/test-framework/stress_tests/handle_tests/yaffs_getblockinfo.h
+direct/test-framework/stress_tests/handle_tests/yaffs_list.h
+direct/test-framework/stress_tests/handle_tests/yaffs_ecc.c
+direct/test-framework/stress_tests/handle_tests/yaffsfs.h
+direct/test-framework/stress_tests/handle_tests/yaffs_nand_drv.c
+direct/test-framework/stress_tests/handle_tests/ydirectenv.h
+direct/test-framework/stress_tests/handle_tests/yaffs_allocator.h
+direct/test-framework/stress_tests/handle_tests/nanddrv.h
+direct/test-framework/stress_tests/handle_tests/yaffs_verify.h
+direct/test-framework/stress_tests/handle_tests/yaffsfs.c
+direct/test-framework/stress_tests/handle_tests/nandsim.c
+direct/test-framework/stress_tests/handle_tests/yaffs_ramdisk.h
+direct/test-framework/stress_tests/handle_tests/nand_chip.h
+direct/test-framework/stress_tests/handle_tests/yaffs_summary.h
+direct/test-framework/stress_tests/handle_tests/yaffs_nameval.c
+direct/test-framework/stress_tests/handle_tests/yaffs_summary.c
+direct/test-framework/stress_tests/handle_tests/yaffs_checkptrw.c
+direct/test-framework/stress_tests/handle_tests/nand_store.h
+direct/test-framework/stress_tests/handle_tests/yaffs_endian.c
+direct/test-framework/stress_tests/handle_tests/yaffs_m18_drv.h
+direct/test-framework/stress_tests/handle_tests/yaffs_tagsmarshall.c
+direct/test-framework/stress_tests/handle_tests/yaffs_yaffs2.h
+direct/test-framework/stress_tests/handle_tests/nandsim_file.c
+direct/test-framework/stress_tests/handle_tests/yaffs_allocator.c
+direct/test-framework/stress_tests/handle_tests/yportenv.h
+direct/test-framework/stress_tests/handle_tests/yaffs_packedtags2.c
+direct/test-framework/stress_tests/handle_tests/yaffs_osglue.h
+direct/test-framework/stress_tests/handle_tests/yaffs_flashif2.h
+direct/test-framework/stress_tests/handle_tests/yaffs_tagsmarshall.h
+direct/test-framework/stress_tests/handle_tests/yaffs_endian.h
+direct/test-framework/stress_tests/handle_tests/yaffs_nand_drv.h
+direct/test-framework/stress_tests/handle_tests/yaffs_nandsim_file.c
+direct/test-framework/stress_tests/handle_tests/yaffs_fileem2k.c
+direct/test-framework/stress_tests/handle_tests/yaffs_nor_drv.h
+direct/test-framework/stress_tests/handle_tests/yaffs_verify.c
+direct/test-framework/stress_tests/handle_tests/nandsim_file.h
+direct/test-framework/stress_tests/handle_tests/yaffs_packedtags1.c
+direct/test-framework/stress_tests/handle_tests/yaffs_nor_drv.c
+direct/test-framework/stress_tests/handle_tests/ynorsim.c
+direct/test-framework/stress_tests/handle_tests/yaffs_nand.h
+direct/test-framework/stress_tests/handle_tests/yaffs_attribs.h
+direct/test-framework/stress_tests/handle_tests/yaffs_fileem.c
+direct/test-framework/stress_tests/handle_tests/yaffs_yaffs1.c
+direct/test-framework/stress_tests/handle_tests/yaffs_guts.h
+direct/test-framework/stress_tests/handle_tests/yaffscfg2k.c
+direct/test-framework/stress_tests/handle_tests/yaffscfg.h
+direct/test-framework/stress_tests/handle_tests/yaffs_flexible_file_sim.h
+direct/test-framework/stress_tests/handle_tests/yaffs_guts.c
+direct/test-framework/stress_tests/handle_tests/ynorsim.h
+direct/test-framework/stress_tests/handle_tests/yaffs_ramdisk.c
+direct/test-framework/stress_tests/handle_tests/yaffs_hweight.h
+direct/test-framework/stress_tests/handle_tests/yaffs_packedtags1.h
+direct/test-framework/stress_tests/handle_tests/yaffs_trace.h
+direct/test-framework/stress_tests/handle_tests/yaffs_tagscompat.h
+direct/test-framework/stress_tests/handle_tests/yaffs_attribs.c
+direct/test-framework/stress_tests/handle_tests/yaffs_ecc.h
+direct/test-framework/stress_tests/handle_tests/yaffs_yaffs1.h
+direct/test-framework/stress_tests/handle_tests/yaffs_bitmap.c
+direct/test-framework/stress_tests/handle_tests/yaffs_nameval.h
+direct/test-framework/stress_tests/handle_tests/yaffs_nandemul2k.h
+direct/test-framework/stress_tests/handle_tests/yaffs_tagscompat.c
+direct/test-framework/stress_tests/handle_tests/yaffs_nandsim_file.h
+direct/test-framework/stress_tests/handle_tests/yaffs_osglue.c
+direct/test-framework/stress_tests/handle_tests/nandstore_file.c
-e "s/strncmp/yaffs_strncmp/g"\
-e "s/loff_t/Y_LOFF_T/g" \
>$i
+
+ chmod 0444 $i
done
elif [ "$1" = "clean" ] ; then
for i in $YAFFS_COMMON_SOURCES ; do
#EXTRA_COMPILE_FLAGS = -DYAFFS_IGNORE_TAGS_ECC
-CFLAGS = -DCONFIG_YAFFS_DIRECT -DCONFIG_YAFFS_YAFFS2 -DCONFIG_YAFFS_DEFINES_TYPES
+CFLAGS += -DCONFIG_YAFFS_DIRECT -DCONFIG_YAFFS_YAFFS2 -DCONFIG_YAFFS_DEFINES_TYPES
CFLAGS += -DCONFIG_YAFFS_PROVIDE_DEFS -DCONFIG_YAFFSFS_PROVIDE_VALUES
CFLAGS += -DCONFIG_YAFFS_MONITOR_MALLOC
CFLAGS += -Wall -g $(EXTRA_COMPILE_FLAGS) -Wstrict-aliasing -Werror
#CFLAGS+= -Wshadow -Wpointer-arith -Wwrite-strings -Wstrict-prototypes -Wmissing-declarations
#CFLAGS+= -Wmissing-prototypes -Wredundant-decls -Wnested-externs -Winline
-
+CLEAN_OBJS += emfile-2k-0 emfile-nand emfile-nand128MB
COMMONTESTOBJS = yaffscfg2k.o yaffs_osglue.o yaffs_hweight.o yaffs_error.o\
yaffs_ecc.o yaffs_fileem.o yaffs_fileem2k.o yaffsfs.o yaffs_guts.o \
ln -s $(YDI_FRAMEWORK_DIR)/$@ $@
$(ALLOBJS): %.o: %.c
- gcc -c $(CFLAGS) -o $@ $<
YDI_DIR = ../../
YDI_FRAMEWORK_DIR = ../
-TARGETS = directtest2k
+TARGETS = directtest2k reldevtest
all: $(TARGETS)
DIRECTTESTOBJS = $(COMMONTESTOBJS) dtest.o
+RELDEVOBJS = $(COMMONTESTOBJS) reldevtest.o
-ALL_UNSORTED_OBJS += $(DIRECTTESTOBJS)
+ALL_UNSORTED_OBJS += $(DIRECTTESTOBJS) $(RELDEVOBJS)
include ../FrameworkRules.mk
-directtest2k: $(FRAMEWORK_SOURCES) $(DIRECTTESTOBJS)
+directtest2k: $(FRAMEWORK_SOURCES) $(DIRECTTESTOBJS) Makefile
gcc -o $@ $(DIRECTTESTOBJS) -lpthread
+reldevtest: $(FRAMEWORK_SOURCES) $(RELDEVOBJS) Makefile
+ gcc -o $@ $(RELDEVOBJS) -lpthread
+
--- /dev/null
+basic-tests README
+
+This test is where we write a tests to
+reproduce errors that are hard to recreate.
+
+These errors frequently require yaffs to be put
+into abnormal states, which will not work well in
+normal test rig.
+
+The solutions are manually verified here.
+
+This is not designed to be run by you as a test rig.
+It is just here for us to use for debugging purposes.
#include <time.h>
#include <ctype.h>
+
#include "yaffsfs.h"
#include "yaffs_guts.h" /* Only for dumping device innards */
+#include "yaffs_endian.h" /*For testing the swap_u64 macro */
extern int yaffs_trace_mask;
struct yaffs_utimbuf utb;
struct yaffs_stat st;
+ //setup
yaffs_start_up();
yaffs_mount(mountpt);
h = yaffs_open(name,O_CREAT | O_TRUNC | O_RDWR, S_IREAD | S_IWRITE);
yaffs_fstat(h,&st);
- printf(" times %lu %lu %lu\n",
- st.yst_atime, st.yst_ctime, st.yst_mtime);
+ printf(" times before %llu %llu %llu\n",
+ ( u64) st.yst_atime, ( u64) st.yst_ctime, ( u64) st.yst_mtime);
+ //here are the last access and modification times.
utb.actime = 1000;
utb.modtime = 2000;
+
+ //futime sets the last modification and access time of the file
result = yaffs_futime(h,&utb);
- printf("futime to a 1000 m 2000 result %d\n",result);
+ printf("setting times using the futime function to a 1000 m 2000 result %d\n",result);
+
+ //read the times from the file header
yaffs_fstat(h,&st);
- printf(" times %lu %lu %lu\n",
- st.yst_atime, st.yst_ctime, st.yst_mtime);
+ printf(" times %llu %llu %llu\n",
+ ( u64) st.yst_atime, ( u64) st.yst_ctime, ( u64) st.yst_mtime);
utb.actime = 5000;
result = yaffs_utime(name, &utb);
printf("utime to a 5000 m 8000 result %d\n",result);
yaffs_fstat(h,&st);
- printf(" times %lu %lu %lu\n",
- st.yst_atime, st.yst_ctime, st.yst_mtime);
+ printf(" times %llu %llu %llu\n",
+ ( u64) st.yst_atime, ( u64) st.yst_ctime, ( u64) st.yst_mtime);
result = yaffs_utime(name, NULL);
printf("utime to NULL result %d\n",result);
yaffs_fstat(h,&st);
- printf(" times %lu %lu %lu\n",
- st.yst_atime, st.yst_ctime, st.yst_mtime);
+ printf(" times %llu %llu %llu\n",
+ ( u64) st.yst_atime, ( u64) st.yst_ctime, ( u64) st.yst_mtime);
}
+void print_binary(u64 val){
+ int count = 0;
+ for (int i= 63; i>=0; i --) {
+ if (count == 0){
+ printf(" ");
+ }
+ if ((((u64)1) << i) & val) {
+ printf("1");
+ } else {
+ printf("0");
+ }
+ count = (count +1) % 8;
+ }
+}
+
+void testing_swap_u64() {
+ int numberOfFailedTests = 0;
+ for (int i =0; i < 8; i ++) {
+ u64 startingNumber = (0xffLLu << (i*8));
+ u64 expected = (0xffLLu << (64 - (i*8) -8));
+ u64 converted = swap_u64(startingNumber);
+ if (converted != expected) {
+ numberOfFailedTests ++;
+ printf("numbers do not match.\n");
+ printf("0xff\t\t\t");
+ print_binary(0xff);
+ printf("\nStarting Number \t");
+ print_binary(startingNumber);
+ printf("\nExpecting \t\t");
+ print_binary(expected);
+ printf("\nConverted \t\t");
+ print_binary(converted);
+
+ printf("\n");
+ }
+ }
+ if (numberOfFailedTests){
+ printf("testing_swap failed %d tests\n", numberOfFailedTests);
+ } else {
+ printf("testing_swap_u64 passed all tests\n");
+ }
+}
+
+
+void size_utime_test(const char *mountpt)
+{
+ char name[100];
+ int h;
+ int result;
+ struct yaffs_utimbuf utb;
+ struct yaffs_stat st;
+
+ //setup
+ yaffs_start_up();
+
+ yaffs_mount(mountpt);
+
+ strcpy(name,mountpt);
+ strcat(name,"/");
+ strcat(name,"xfile");
+
+ yaffs_unlink(name);
+
+ printf("created\n");
+ h = yaffs_open(name,O_CREAT | O_TRUNC | O_RDWR, S_IREAD | S_IWRITE);
+
+ yaffs_fstat(h,&st);
+ printf(" times before %llu %llu %llu\n",
+ ( u64) st.yst_atime, ( u64) st.yst_ctime, ( u64) st.yst_mtime);
+
+ //first lets get the yaffs_object.
+
+ //then check that yaffs_stat also works.
+ //yaffs_stat already uses 64 bits for both wince and unix times.
+ //To see if we are using 32 or 64 bit time, save a large number into the time and
+ //see if it overflows.
+ long bitsInTime = 8*sizeof(st.yst_ctime);
+ printf("the times are %ld bits long\n", bitsInTime);
+
+ //two testcases
+ if (bitsInTime == 64) {
+ //no need to test the overflow. Just check that it can be retrieved intact.
+
+ //use u64 variables in case utb truncates the values to 32 bit time by accident.
+ u64 start = 0xfffff;
+ u64 end = 0xffffff;
+
+ utb.actime = start;
+ utb.modtime = end;
+
+ result = yaffs_futime(h,&utb);
+ yaffs_fstat(h,&st);
+ if (st.yst_atime == start && st.yst_mtime == end) {
+ printf("successfully stored and retrevied a 64 bit number for atime and modtime\n");
+ } else {
+ printf("failed to store and retrieve a 64 bit number for atime and modtime\n");
+
+ }
+ } else {
+ //it is a 32 bit number. Check to see that it overflowed.
+
+ }
+
+
+ //here are the last access and modification times.
+ utb.actime = 1000;
+ utb.modtime = 2000;
+
+ //futime sets the last modification and access time of the file
+ result = yaffs_futime(h,&utb);
+ printf("setting times using the futime function to a 1000 m 2000 result %d\n",result);
+
+ //read the times from the file header
+ yaffs_fstat(h,&st);
+ printf(" times %llu %llu %llu\n",
+ ( u64) st.yst_atime, ( u64) st.yst_ctime, ( u64) st.yst_mtime);
+
+
+ utb.actime = 5000;
+ utb.modtime = 8000;
+ result = yaffs_utime(name, &utb);
+ printf("utime to a 5000 m 8000 result %d\n",result);
+ yaffs_fstat(h,&st);
+ printf(" times %llu %llu %llu\n",
+ ( u64) st.yst_atime, ( u64) st.yst_ctime, ( u64) st.yst_mtime);
+
+ result = yaffs_utime(name, NULL);
+ printf("utime to NULL result %d\n",result);
+ yaffs_fstat(h,&st);
+ printf(" times %llu %llu %llu\n",
+ ( u64) st.yst_atime, ( u64) st.yst_ctime, ( u64) st.yst_mtime);
+
+
+}
+
+
void basic_xattr_test(const char *mountpt)
{
char name[100];
//long_test_on_path("/ram2k");
// long_test_on_path("/flash");
//simple_rw_test("/flash/flash");
- fill_n_file_test("/nand128MB", 50, 128000000/50);
+ //fill_n_file_test("/nand128MB", 50, 128000000/50);
// rename_over_test("/flash");
//lookup_test("/flash");
//freespace_test("/flash/flash");
//large_file_test("/nand");
//readdir_test("/nand");
- //basic_utime_test("/nand");
+ basic_utime_test("/nand");
+ testing_swap_u64();
+ size_utime_test("/nand");
//case_insensitive_test("/nand");
//yy_test("/nand");
--- /dev/null
+/*
+ * YAFFS: Yet another FFS. A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2018 Aleph One Ltd.
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <time.h>
+#include <ctype.h>
+
+
+#include "yaffsfs.h"
+
+#include "yaffs_guts.h" /* Only for dumping device innards */
+#include "yaffs_endian.h" /*For testing the swap_u64 macro */
+
+extern int yaffs_trace_mask;
+
+
+
+int call_all_reldev(struct yaffs_dev *dev)
+{
+ struct yaffs_stat buf;
+ struct yaffs_utimbuf utime;
+ unsigned char xbuffer[20];
+ char cbuffer[20];
+
+ yaffs_mount_reldev(dev);
+ yaffs_open_sharing_reldev(dev, "foo", 0, 0, 0);
+ yaffs_open_reldev(dev, "foo", 0, 0);
+ yaffs_truncate_reldev(dev, "foo", 99);
+ yaffs_unlink_reldev(dev, "foo");
+ yaffs_rename_reldev(dev, "foo", "foo_new");
+ yaffs_stat_reldev(dev, "foo", &buf);
+ yaffs_lstat_reldev(dev, "foo", &buf);
+ yaffs_utime_reldev(dev, "foo", &utime);
+ yaffs_setxattr_reldev(dev, "foo", "name", xbuffer, 20, 0);
+ yaffs_lsetxattr_reldev(dev, "foo", "name", xbuffer, 20, 0);
+ yaffs_getxattr_reldev(dev, "foo", "name", xbuffer, 20);
+ yaffs_lgetxattr_reldev(dev, "foo", "name", xbuffer, 20);
+
+ yaffs_listxattr_reldev(dev, "foo", cbuffer, 20);
+ yaffs_llistxattr_reldev(dev, "foo", cbuffer, 20);
+ yaffs_removexattr_reldev(dev, "foo", "name");
+ yaffs_lremovexattr_reldev(dev, "foo", "name");
+
+ yaffs_access_reldev(dev, "foo", 0);
+ yaffs_chmod_reldev(dev, "foo", 0);
+ yaffs_mkdir_reldev(dev, "foo", 0);
+ yaffs_rmdir_reldev(dev, "foo");
+
+
+ yaffs_opendir_reldev(dev, "foo");
+
+ //yaffs_symlink_reldev(dev, "foo", "foolink");
+ //yaffs_readlink_reldev(dev, "foo", cbuffer, 20);
+ //yaffs_link_reldev(dev, "foo", "foo_new");
+
+ yaffs_mknod_reldev(dev, "foo", 0, 0);
+ yaffs_freespace_reldev(dev);
+ yaffs_totalspace_reldev(dev);
+
+ yaffs_sync_reldev(dev);
+ yaffs_sync_files_reldev(dev);
+
+ yaffs_unmount_reldev(dev);
+ yaffs_unmount2_reldev(dev, 1);
+ yaffs_remount_reldev(dev, 1, 1);
+
+ return 0;
+}
+
+
+int random_seed;
+int simulate_power_failure;
+
+int main(int argc, char *argv[])
+{
+ (void) argc;
+ (void) argv;
+
+ call_all_reldev(NULL);
+
+ return 0;
+}
--- /dev/null
+handle_test
yaffs_test: $(FRAMEWORK_SOURCES) $(YAFFS_TEST_OBJS)
- gcc $(CFLAGS) -o $@ $(YAFFS_TEST_OBJS)
+ gcc $(CFLAGS) -o $@ $(YAFFS_TEST_OBJS) -lpthread
handle_test: $(FRAMEWORK_SOURCES) $(YAFFS_TEST_OBJS)
- gcc $(CFLAGS) -o $@ $(YAFFS_TEST_OBJS)
+ gcc $(CFLAGS) -o $@ $(YAFFS_TEST_OBJS) -lpthread
int output =0;
unsigned int total_number_of_tests_run=0;
yaffs_start_up();
- yaffs_mount("yaffs2");
+ yaffs_mount(YAFFS_MOUNT_POINT);
printf("running tests\n");
output=yaffs_lseek(handle,20,SEEK_SET);
if (output >= 0) {
output = yaffs_lseek(handle,0,SEEK_CUR);
- if (output = 20){
+ if (output == 20){
printf("dup is working\n");
return 1;
} else if (output <0){
#include <stdio.h>
#include "yaffsfs.h"
-#define FILE_PATH "/yaffs2/foo"
+#define YAFFS_MOUNT_POINT "/yflash2/"
+#define FILE_PATH "/yflash2/foo"
int open_close_handle_test(int num_of_tests);
int open_handle(void);
void get_error(void);
+int dup_test(void);
+
#endif
--- /dev/null
+yaffs_tester
YDI_FRAMEWORK_DIR = ../../
CLEAN_OBJS = yaffs_tester emfile-2k-0
-TESTFILES = yaffs_tester.o message_buffer.o error_handler.o
+TESTFILES = yaffs_tester.o message_buffer.o error_handler.o shared.o
all: yaffs_tester
yaffs_test: $(FRAMEWORK_SOURCES) $(YAFFS_TEST_OBJS)
- gcc $(CFLAGS) -o $@ $(YAFFS_TEST_OBJS)
+ gcc $(CFLAGS) -o $@ $(YAFFS_TEST_OBJS) -lpthread
yaffs_tester: $(FRAMEWORK_SOURCES) $(YAFFS_TEST_OBJS)
- gcc $(CFLAGS) -o $@ $(YAFFS_TEST_OBJS)
+ gcc $(CFLAGS) -o $@ $(YAFFS_TEST_OBJS) -lpthread
* error_handler.c contains code for checking yaffs function calls for errors.
*/
#include "error_handler.h"
-
+#include "shared.h"
typedef struct error_codes_template {
int code;
{ 0, NULL }
};
-const char * error_to_str(int err)
+char * error_to_str(int err)
{
- error_entry *e = error_list;
+ error_entry const *e = error_list;
if (err < 0)
err = -err;
while(e->code && e->text){
}
void yaffs_check_for_errors(char output, buffer *message_buffer,char error_message[],char success_message[]){
- char dummy[10];
- unsigned int x=0;
int yaffs_error=-1;
- char error_found=0;
+
if (output==-1)
{
add_to_buffer(message_buffer, "\nerror##########",MESSAGE_LEVEL_ERROR,PRINT);
--- /dev/null
+/*
+ * YAFFS: Yet another FFS. A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2018 Aleph One Ltd.
+ *
+ * Created by Timothy Manning <timothy@yaffs.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+/*
+ * error_handler.c contains code for checking yaffs function calls for errors.
+ */
+#include "shared.h"
+#include "yaffsfs.h"
+
+void quit_program(){
+ yaffs_unmount(YAFFS_MOUNT_DIR);
+ exit(1);
+}
--- /dev/null
+/*
+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2018 Aleph One Ltd.
+ *
+ * Created by Timothy Manning <timothy@yaffs.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 2.1 as
+ * published by the Free Software Foundation.
+ *
+ * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
+ */
+
+#ifndef __shared_h__
+#define __shared_h__
+
+#define YAFFS_TEST_DIR "/yflash2/test_dir" /*the path to the directory where all of the testing will take place*/
+#define YAFFS_MOUNT_DIR "/yflash2/" /*the path to the mount point which yaffs will mount*/
+
+void quit_program();
+#endif
#include "yaffs_tester.h"
+#include "shared.h"
buffer message_buffer; /*create message_buffer */
-char yaffs_test_dir[] ="/yaffs2/test_dir"; /*the path to the directory where all of the testing will take place*/
-char yaffs_mount_dir[]="/yaffs2/"; /*the path to the mount point which yaffs will mount*/
-
int main(int argc, char *argv[]){
- init(yaffs_test_dir,yaffs_mount_dir,argc,argv);
- test(yaffs_test_dir);
- yaffs_unmount(yaffs_mount_dir);
+ init(YAFFS_TEST_DIR, YAFFS_MOUNT_DIR, argc, argv);
+ test(YAFFS_TEST_DIR);
+ yaffs_unmount(YAFFS_MOUNT_DIR);
return 0;
}
}
-void quit_program(){
- yaffs_unmount(yaffs_mount_dir);
- exit(1);
-}
+
+
void join_paths(char *path1,char *path2,char *new_path ){
/* printf("strlen path1:%d\n",strlen(path1));
if (P_open_handles_array->number_of_open_handles<MAX_NUMBER_OF_OPENED_HANDLES)
{
generate_random_string(name,MAX_FILE_NAME_SIZE);
- printf("before %d %d %d\n",strlen(yaffs_test_dir),strlen(name),strlen(path));
+ //printf("before %d %d %d\n",strlen(yaffs_test_dir),strlen(name),strlen(path));
join_paths(yaffs_test_dir,name,path);
- printf("after %d %d %d\n",strlen(yaffs_test_dir),strlen(name),strlen(path));
+ //printf("after %d %d %d\n",strlen(yaffs_test_dir),strlen(name),strlen(path));
add_to_buffer(&message_buffer,"trying to open file: ",MESSAGE_LEVEL_BASIC_TASKS,NPRINT);
append_to_buffer(&message_buffer,path,MESSAGE_LEVEL_BASIC_TASKS,PRINT);
if (yaffs_access(path,0)==0){
}
void test(char*yaffs_test_dir){
- struct yaffs_stat stat;
- int output=0;
+
//char name[MAX_FILE_NAME_SIZE+3 ]="apple\0";
//char path[MAX_FILE_NAME_SIZE];
handle_regster open_handles_array;
void stat_file(char *path);
void write_to_random_file(handle_regster *P_open_handles_array);
void close_random_file(handle_regster *P_open_handles_array);
-void quit_program();
+
void truncate_random_file(handle_regster *P_open_handles_array);
#endif
+++ /dev/null
-# Makefile for linux_test
-#
-#
-# YAFFS: Yet another Flash File System. A NAND-flash specific file system.
-#
-# Copyright (C) 2002-2018 Aleph One Ltd.
-#
-#
-# Created by Timothy Manning <timothy@aleph1.co.uk>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation.
-#
-# NB Warning this Makefile does not include header dependencies.
-#
-
-YDI_DIR = ../../../
-YDI_FRAMEWORK_DIR = ../../
-CLEAN_OBJS = linux_test emfile-2k-0
-
-TESTFILES = linux_test.o lib.o
-
-all: linux_test
-
-YAFFS_TEST_OBJS = $(COMMONTESTOBJS) $(TESTFILES)
-
-
-ALL_UNSORTED_OBJS += $(YAFFS_TEST_OBJS) $(FUZZER_OBJS)
-
-include $(YDI_FRAMEWORK_DIR)/FrameworkRules.mk
-
-
-yaffs_test: $(FRAMEWORK_SOURCES) $(YAFFS_TEST_OBJS)
- gcc $(CFLAGS) -o $@ $(YAFFS_TEST_OBJS)
-
-
-
-linux_test: $(FRAMEWORK_SOURCES) $(YAFFS_TEST_OBJS)
- gcc $(CFLAGS) -o $@ $(YAFFS_TEST_OBJS)
-
+++ /dev/null
-
-linux_test.c tests yaffs running under linux using the nandsim generator.
-
-
-If a segmentation fault happens during the test then check that
-the nandsim has been initilised properly.
-
-How to initilise the nandsim
-
-$ make
-
-$ sudo -s
-...password..
-# now you have a root shell
-$ ./linux-tests/initnandsim 128MiB-2048
-$ insmod yaffs2multi.ko
-$ mkdir /mnt/y
-$ mount -t yaffs2 /dev/mtdblock0 /mnt/y
-
-
-
-How to change the permissions on the nandsim partition
-
-$ sudo chmod a+wr /mnt/y/
-#check the permission change
-$ touch /mnt/y/test_file
-
-How to clean the folder
-
-$ rm -rf /mnt/y
-
-
-The test must be run in sudo to work to allow the files to be
-created in the root folders.
-
-compile command: make
-run command: sudo ./linux_test
-
-command line options:
- -h display the command line options.
- -s [number] seeds the rand with the number.
- -p [number] sets the print level to the number.
- the higher the number the more low level commands are printed.
- the number should be between 0 and 5.
- -v verbose mode. everything is printed.
- -q quite mode. nothing is printed.
-
-
+++ /dev/null
-/*
- * YAFFS: Yet another FFS. A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2018 Aleph One Ltd.
- *
- * Created by Timothy Manning <timothy@yaffs.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include "lib.h"
-static char message[200];
-static int PRINT_LEVEL = 3;
-static int exit_on_error_val =1;
-char string[FILE_NAME_LENGTH+1];
-
-
-int get_exit_on_error(void)
-{
- return exit_on_error_val;
-}
-
-void set_exit_on_error(int val)
-{
- exit_on_error_val=val;
-}
-
-node * linked_list_add_node(int pos,node *head_node)
-{
- node *new_node=NULL;
- if (pos==HEAD){
- new_node=malloc(sizeof(node));
- memset(new_node, 0, sizeof(node));
- new_node->string=NULL;
- new_node->next=head_node;
- return new_node;
- }
- return NULL;
-}
-
-void node_print_pointers(node *current_node)
-{
- while (current_node != NULL){
- sprintf(message,"current_node: %p, string: %s next_node: %p\n",current_node,current_node->string,current_node->next);
- print_message(3,message);
- current_node=current_node->next;
- }
-}
-
-int delete_linked_list(node *head_node)
-{
- node *next_node=NULL;
- node *current_node=head_node;
-
- while (current_node != NULL){
- next_node=current_node->next;
- free(current_node);
- current_node=next_node;
- }
-
- return 1;
-}
-
-char * generate_random_string(unsigned int length)
-{
-
- unsigned int x;
- for (x=0;x<(length-1);x++)
- {
- string[x]=(rand() % NAME_RANGE)+65;
- }
- string[x]='\0';
- return string;
-}
-
-void set_print_level(int new_level)
-{
- PRINT_LEVEL=new_level;
-}
-int get_print_level(void)
-{
- return PRINT_LEVEL;
-}
-void print_message(char print_level,char *message)
-{
- if (print_level <= PRINT_LEVEL){
- printf("%s",message);
- }
-}
-int random_int(void)
-{
- return (random()%1000000);
-}
-
-void check_function(int output)
-{
- if (output>=0){
- print_message(3,"test_passed\n");
- } else {
- print_message(3,"test_failed\n");
- get_error_linux();
- }
-}
-
-void get_error_linux(void)
-{
- int error_code=0;
- char message[30];
- message[0]='\0';
-
- error_code=errno;
- sprintf(message,"linux_error code %d\n",error_code);
- print_message(1,message);
-
- strcpy(message,"error is");
- perror(message);
-// sprintf(message,"error is : %s\n",yaffs_error_to_str(error_code));
- //perror(message);
- //print_message(1,message);
-}
+++ /dev/null
-/*
- * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2018 Aleph One Ltd.
- *
- * Created by Timothy Manning <timothy@yaffs.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 2.1 as
- * published by the Free Software Foundation.
- *
- * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
- */
-
-#ifndef __lib_h__
-#define __lib_h__
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#define NAME_RANGE 10
-#define ROOT_PATH "/mnt/y/"
-#define FILE_NAME_LENGTH 3
-#define HEAD 0
-#define TAIL 1
-
-typedef struct node_temp{
- char *string;
- struct node_temp *next;
-}node;
-
-int get_exit_on_error(void);
-void set_exit_on_error(int val);
-int delete_linked_list(node *head_node);
-node * linked_list_add_node(int pos,node *head_node);
-int random_int(void);
-char * generate_random_string(unsigned int length);
-void get_error_linux(void);
-void check_function(int output);
-void print_message(char print_level, char *message);
-void set_print_level(int new_level);
-int get_print_level(void);
-void node_print_pointers(node *current_node);
-#endif
+++ /dev/null
-/*
- * YAFFS: Yet another FFS. A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2018 Aleph One Ltd.
- *
- * Created by Timothy Manning <timothy@yaffs.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include "linux_test.h"
-
-int random_seed;
-int simulate_power_failure = 1;
-
-char message[400]; //this is used for storing print messages.
-
-
-
-const struct option long_options[]={
- {"help", 0,NULL,'h'},
-
-
- {"print_level", 1,NULL,'p'},
- {"quiet", 0,NULL,'q'},
-
- {"seed", 1,NULL,'s'},
-
- {"verbose", 0,NULL,'v'}
-};
-
-const char short_options[]="hp:qs:v";
-
-
-void init(int argc, char *argv[])
-{
- char dir[200];
- dir[0]='\0';
- int x=-1;
- char message[100];
- int new_option;
-
- x=(unsigned)time(NULL);
- sprintf(message,"seeding srand with: %d\n",x);
- print_message(2,message);
- srand(x);
-
-
-
- do {
- new_option=getopt_long(argc,argv,short_options,long_options,NULL);
- if (new_option=='h'){
- printf("mirror_tests help\n");
- printf("arguments:\n");
- printf("\t-p [NUMBER] //sets the print level for mirror_tests.\n");
- printf("\t-v //verbose mode everything is printed\n");
- printf("\t-q //quiet mode nothing is printed.\n");
- printf("\t-s [number] //seeds rand with the number\n");
-
- exit(0);
-
- } else if (new_option=='p'){
- set_print_level(atoi(optarg));
- } else if (new_option=='v'){
- set_print_level(5);
- } else if (new_option=='q'){
- set_print_level(-1);
- } else if (new_option=='s'){
- srand(atoi(argv[x+1]));
-
- } else if (new_option==-1){
-
- } else if (new_option=='?') {
- printf("bad argument\n");
- exit(0);
- }
- }while(new_option!=-1);
-}
-
-int main(int argc, char *argv[])
-{
- dir_struct *scanned_dir=NULL;
- int output=0;
- int break_bool=0;
- int x=5;
-
- init(argc,argv);
- while( 1){
- while (break_bool!=1){
- //printf("x %d\n",x);
- x--;
- if (x<0 &&(break_bool!=1)){
- output=mkdir_test();
- break_bool=1;
- }
- x--;
- if (x<0 &&(break_bool!=1)){
- output=rmdir_test();
- break_bool=1;
- }
- x--;
- if (x<0 &&(break_bool!=1)){
- output=mknod_test();
- break_bool=1;
- }
- x--;
- if (x<0 &&(break_bool!=1)){
- output=symlink_test();
- break_bool=1;
- }
- x--;
- if (x<0 &&(break_bool!=1)){
- output=link_test();
- break_bool=1;
- }
- x--;
- if (x<0 &&(break_bool!=1)){
- output=rename_test();
- break_bool=1;
- }
- x--;
- if (x<0 &&(break_bool!=1)){
- scanned_dir=scan_dir();
-
- output=remount_test();
- check_dir(scanned_dir);
- scanned_dir=NULL; //the scanned dir has been freed in check_dir.
- break_bool=1;
- }
- }
- //printf("resetting x\n");
- check_function(output);
- break_bool=0;
- x=(rand()% 99);
- }
- return 0;
-}
-
-dir_struct * scan_dir(void)
-{
- struct dirent *dir_data;
- dir_struct *dir=NULL;
- dir=malloc(sizeof(dir_struct));
- memset(dir, 0, sizeof(dir_struct));
- DIR *open_dir=NULL;
-
-
- open_dir=opendir(ROOT_PATH);
- if (open_dir < 0){
- sprintf(message,"failed to find the directory: %s",ROOT_PATH);
- print_message(1,message);
- }
- dir_data=readdir(open_dir);
- while(dir_data){
- dir->path_list=linked_list_add_node(HEAD,dir->path_list);
- dir->path_list->string=malloc(strlen(dir_data->d_name)+1);
- strcpy(dir->path_list->string,dir_data->d_name);
- sprintf(message,"opened file: %s\n",dir->path_list->string);
- print_message(5,message);
- dir_data=readdir(open_dir);
- }
- closedir(open_dir);
- //node_print_pointers(dir->path_list);
- return dir;
-}
-
-int check_dir(dir_struct *old_dir)
-{
- print_message(3,"scanning new dir\n");
- dir_struct *new_dir=scan_dir();
- node *new_list=new_dir->path_list;
- node *old_list=old_dir->path_list;
- int exit_loop=0,error=0;
- print_message(3,"checking dir\n");
- for (;old_list!= NULL;old_list=old_list->next){
- //sprintf(message,"new_list=!NULL= %d, exit_loop !=1 = %d\n",(new_list!=NULL),(exit_loop !=1));
- //print_message(3,message);
- for (;(new_list!=NULL) && (exit_loop !=1);new_list=new_list->next){
- //sprintf(message,"comparing %s and %s\n",old_list->string,new_list->string);
- //print_message(3,message);
- if (strcmp( new_list->string ,old_list->string)==0){
- //files match -now compare the modes and contents of the files.
- //and set the paths to NULL.
- exit_loop=1;
- }
- /*if (new_list->next==NULL){
- print_message(3,"next is null\n");
-
- }*/
- }
- if (exit_loop !=1){
- //failed to find a matching file
- sprintf(message,"a file has disappeared: %s\n",old_list->string);
- print_message(3,message);
- error=1;
-
- }
- new_list=new_dir->path_list;
- exit_loop=0;
- }
- //now check if there are any old unmatched files
-
- //free both data structs
- delete_linked_list(old_dir->path_list);
- delete_linked_list(new_dir->path_list);
- new_dir->path_list=NULL;
- old_dir->path_list=NULL;
- free(old_dir);
- free(new_dir);
- if (error ==1){
- print_message(3,"checking dir failed\n");
- if (get_exit_on_error()==1){
- print_message(3,"exiting_program\n");
- exit(0);
- }
- }
-
- else if (error !=1){
- print_message(3,"checking dir passed\n");
- }
- return error;
-}
-
-int remount_test(void)
-{
- int output;
- print_message(3,"\nunmounting\n");
- output=umount2("/mnt/y",1);
- check_function(output);
- print_message(3,"mounting\n");
- mount("/dev/mtdblock0","/mnt/y","yaffs2",0,NULL);
- check_function(output);
- return output;
-}
-
-int mkdir_test(void)
-{
-
- char string[FILE_NAME_LENGTH+strlen(ROOT_PATH)];
- int mode=0,output=0;
- strcpy(string,ROOT_PATH);
- strcat(string,generate_random_string(FILE_NAME_LENGTH));
- mode = ((S_IREAD|S_IWRITE)&random_int());
- sprintf(message,"\nmaking directory: %s, with mode %d\n",string,mode);
- print_message(3,message);
- output= mkdir(string,mode);
- return output;
-}
-
-int rmdir_test(void)
-{
- char string[FILE_NAME_LENGTH+strlen(ROOT_PATH)];
- int output=0;
- strcpy(string,ROOT_PATH);
- strcat(string,generate_random_string(FILE_NAME_LENGTH));
-
- sprintf(message,"\nremoving directory: %s\n",string);
- print_message(3,message);
- output= rmdir(string);
- return output;
-}
-int symlink_test(void)
-{
- char string[FILE_NAME_LENGTH+strlen(ROOT_PATH)];
- char string2[FILE_NAME_LENGTH+strlen(ROOT_PATH)];
- int output;
- strcpy(string,ROOT_PATH);
- strcat(string,generate_random_string(FILE_NAME_LENGTH));
- strcpy(string2,ROOT_PATH);
- strcat(string2,generate_random_string(FILE_NAME_LENGTH));
- sprintf(message,"\nsymlink from: %s, to %s\n",string,string2);
- print_message(3,message);
- output= symlink(string,string2);
- return output;
-}
-int rename_test(void)
-{
- char string[FILE_NAME_LENGTH+strlen(ROOT_PATH)];
- char string2[FILE_NAME_LENGTH+strlen(ROOT_PATH)];
- int output;
- strcpy(string,ROOT_PATH);
- strcat(string,generate_random_string(FILE_NAME_LENGTH));
- strcpy(string2,ROOT_PATH);
- strcat(string2,generate_random_string(FILE_NAME_LENGTH));
- sprintf(message,"\nrenaming from: %s, to %s\n",string,string2);
- print_message(3,message);
- output= rename(string,string2);
- return output;
-}
-int link_test(void)
-{
- char string[FILE_NAME_LENGTH+strlen(ROOT_PATH)];
- char string2[FILE_NAME_LENGTH+strlen(ROOT_PATH)];
- int output=0;
- strcpy(string,ROOT_PATH);
- strcat(string,generate_random_string(FILE_NAME_LENGTH));
- strcpy(string2,ROOT_PATH);
- strcat(string2,generate_random_string(FILE_NAME_LENGTH));
- sprintf(message,"\nlink from: %s, to %s\n",string,string2);
- print_message(3,message);
- output= link(string,string2);
- return output;
-}
-int mknod_test(void)
-{
- char string[FILE_NAME_LENGTH+strlen(ROOT_PATH)];
- int mode=0,dev=0,output=0;
- strcpy(string,ROOT_PATH);
- strcat(string,generate_random_string(FILE_NAME_LENGTH));
- mode = ((S_IREAD|S_IWRITE)&random_int());
- dev = random_int();
- sprintf(message,"\nmaking node: %s, with mode %d, dev %d\n",string,mode,dev);
- print_message(3,message);
- output= mknod(string,mode,dev);
- return output;
-}
+++ /dev/null
-/*
- * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2018 Aleph One Ltd.
- *
- * Created by Timothy Manning <timothy@yaffs.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 2.1 as
- * published by the Free Software Foundation.
- *
- * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
- */
-
-#ifndef __linux_test_h__
-#define __linux_test_h__
-#include <stdio.h>
-#include <stdlib.h>
-#include <dirent.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <sys/mount.h>
-#include "lib.h"
-#include <fcntl.h>
-#include <time.h>
-#include <getopt.h>
-
-typedef struct dir_struct_temp{
- node *path_list;
- int number_of_items;
-}dir_struct;
-
-int check_dir(dir_struct *old_dir);
-dir_struct * scan_dir(void);
-int link_test(void);
-int symlink_test(void);
-int mknod_test(void);
-int mkdir_test(void);
-int rename_test(void);
-int rmdir_test(void);
-int remount_test(void);
-#endif
+++ /dev/null
-/*
- * YAFFS: Yet another FFS. A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2018 Aleph One Ltd.
- *
- * Created by Timothy Manning <timothy@yaffs.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include "test_yaffs_open_EISDIR.h"
-
-/*EISDIR is caused by trying to open a directory */
-
-static int handle = -1;
-
-int test_yaffs_open_EISDIR(void)
-{
- int error_code=0;
-
- handle=yaffs_open(YAFFS_MOUNT_POINT, O_CREAT | O_TRUNC| O_RDWR ,FILE_MODE );
- if (handle == -1){
- error_code=yaffs_get_error();
- if (abs(error_code)== EISDIR){
- return 1;
- } else {
- print_message("different error than expected\n", 2);
- return -1;
- }
- } else {
- print_message("non existant directory opened.(which is a bad thing)\n", 2);
- return -1;
- }
-
-}
-int test_yaffs_open_EISDIR_clean(void)
-{
- if (handle >=0){
- return yaffs_close(handle);
- } else {
- return 1; /* the file failed to open so there is no need to close it*/
- }
-}
-
+++ /dev/null
-/*
- * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2018 Aleph One Ltd.
- *
- * Created by Timothy Manning <timothy@yaffs.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 2.1 as
- * published by the Free Software Foundation.
- *
- * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
- */
-
-#ifndef __test_yaffs_open_EISDIR_h__
-#define __test_yaffs_open_EISDIR_h__
-
-#include "lib.h"
-#include "yaffsfs.h"
-
-int test_yaffs_open_EISDIR(void);
-int test_yaffs_open_EISDIR_clean(void);
-
-#endif
+++ /dev/null
-# Makefile for mirror_tests
-#
-#
-# YAFFS: Yet another Flash File System. A NAND-flash specific file system.
-#
-# Copyright (C) 2002-2018 Aleph One Ltd.
-#
-#
-# Created by Timothy Manning <timothy@aleph1.co.uk>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation.
-#
-# NB Warning this Makefile does not include header dependencies.
-#
-
-YDI_DIR = ../../../
-YDI_FRAMEWORK_DIR = ../../
-CLEAN_OBJS = mirror_tests emfile-2k-0
-
-TESTFILES = mirror_tests.o lib.o\
- linux_test_open.o yaffs_test_open.o\
- linux_test_truncate.o yaffs_test_truncate.o \
- linux_test_unlink.o yaffs_test_unlink.o \
- linux_test_write.o yaffs_test_write.o
-
-all: mirror_tests
-
-YAFFS_TEST_OBJS = $(COMMONTESTOBJS) $(TESTFILES)
-
-
-ALL_UNSORTED_OBJS += $(YAFFS_TEST_OBJS) $(FUZZER_OBJS)
-
-include $(YDI_FRAMEWORK_DIR)/FrameworkRules.mk
-
-
-yaffs_test: $(FRAMEWORK_SOURCES) $(YAFFS_TEST_OBJS)
- gcc $(CFLAGS) -o $@ $(YAFFS_TEST_OBJS)
-
-
-
-mirror_tests: $(FRAMEWORK_SOURCES) $(YAFFS_TEST_OBJS)
- gcc $(CFLAGS) -o $@ $(YAFFS_TEST_OBJS)
-
+++ /dev/null
-Made by Timothy Manning on 24/12/2010 <timothy@yaffs.net>
-
-
- mirror_tests is designed to check that yaffs behaves the same way as linux.
- This is done by applying the same command to both linux and yaffs and
- then checking the output of the functions.
- The default place for creating linux files is direct/timothy_tests/mirror_tests/tests/
- This directory is removed and is recreated at the beginning of each test,
- However some of the files may be read only and cannot be deleted.
- It is much better to remove this directory via the command line.
-
- rm test/*;rmdir test/;./mirror_tests -n 100 -v
-
-compile command: make
-run command: mirror_tests
-
-Command line arguments
- -yaffs_path [PATH] sets the path for yaffs.
- -linux_path [PATH] sets the path for linux.
- -p [NUMBER] sets the print level for mirror_tests.
- -v verbose mode everything is printed
- -q quiet mode nothing is printed.
- -n [number] sets the number of random tests to run.
- -s [number] seeds rand with the number
- -t [number] sets yaffs_trace to the number
- -clean removes emfile and test dir
-
+++ /dev/null
-/*
- * YAFFS: Yet another FFS. A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2018 Aleph One Ltd.
- *
- * Created by Timothy Manning <timothy@yaffs.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include "lib.h"
-
-static int EXIT_ON_ERROR = 1;
-static int PRINT_LEVEL = 2; //This sets the level of detail which is printed. There are 3 levels 0,1,2 and 3
- //0 just prints the number of tests passed and failed.
- //1 is the basic print level. it will print the details of a failed test.
- //2 will print if a test passes and cleans.
-void set_print_level(int new_level)
-{
- PRINT_LEVEL=new_level;
-}
-int get_print_level(void)
-{
- return PRINT_LEVEL;
-}
-
-void set_exit_on_error(int num)
-{
- EXIT_ON_ERROR=num;
-}
-
-int get_exit_on_error(void)
-{
- return EXIT_ON_ERROR;
-}
-
-void display_error(void)
-{
-
-}
-
-void get_error_yaffs(void)
-{
- int error_code=0;
- char message[30];
- message[0]='\0';
-
- error_code=yaffs_get_error();
- sprintf(message,"yaffs_error code %d\n",error_code);
- print_message(1,message);
- sprintf(message,"error is : %s\n",yaffs_error_to_str(error_code));
- print_message(1,message);
-}
-
-void get_error_linux(void)
-{
- int error_code=0;
- char message[30];
- message[0]='\0';
-
- error_code=errno;
- sprintf(message,"linux_error code %d\n",error_code);
- print_message(1,message);
- strcpy(message,"error code");
- sprintf(message,"error is : %s\n",yaffs_error_to_str(error_code));
- //perror(message);
- print_message(1,message);
-}
-void generate_random_string(char *ptr,int length_of_str){
- unsigned int x;
- unsigned int length=((rand() %(length_of_str-3))+3); /*creates a int with the number of charecters been between 1 and 51*/
- char letter='\0';
- strcpy(ptr,"");
- //printf("generating string\n");
- //printf("string length is %d\n",length);
- for (x=0; x <= (length-2) &&length>2 ; x++)
- {
- //printf("x=%d\n",x);
- /* keep generating a charecter until the charecter is legal*/
- while((letter=='\0' )||(letter=='/')||(letter=='\\')){
- letter=(rand() % 125-59)+58; /*generate a number between 32 and 126 and uses it as a charecter (letter) */
- }
- ptr[x]=letter;
- //printf("charecter generated is %c\n",ptr[x]);
- }
- ptr[x+1]='\0'; /*adds NULL charecter to turn it into a string*/
-
-}
-
-void join_paths(char *path1,char *path2,char *new_path )
-{
- char message[100];
- print_message(3,"joining paths\n");
- sprintf(message,"path1: %s\n",path1);
- print_message(3,message);
- sprintf(message,"path2: %s\n",path2);
- print_message(3,message);
- strcpy(new_path,"");
- //strcat(new_path,path1); /*since all functions have this then pull it out*/
- if ( (path1[(sizeof(path1)/sizeof(char))-2]=='/') && path2[0]!='/') {
- /*paths are compatiable. concatanate them. note -2 is because of \0*/
- strcat(new_path,path1);
- strcat(new_path,path2);
- //char new_path[(sizeof(path1)/sizeof(char))+(sizeof(path2)/sizeof(char))];
- //strcpy(new_path,strcat(path1,path2));
- //return new_path;
- } else if ((path1[(sizeof(path1)/sizeof(char))-2]!='/') && path2[0]=='/') {
- /*paths are compatiable. concatanate them*/
- strcat(new_path,path1);
- strcat(new_path,path2);
-
- } else if ((path1[(sizeof(path1)/sizeof(char))-2]!='/') && path2[0]!='/') {
- /*need to add a "/". */
- strcat(new_path,path1);
- strcat(new_path,"/");
- strcat(new_path,path2);
-
- } else if ((path1[(sizeof(path1)/sizeof(char))-2]=='/') && path2[0]=='/') {
- /*need to remove a "/". */
- /*yaffs does not mind the extra slash. */
- strcat(new_path,path1);
- strcat(new_path,path2);
-
- } else {
- //error
- //return -1;
- }
-}
-
-void print_message(char print_level,char *message)
-{
- if (print_level <= PRINT_LEVEL){
- printf(message);
- }
-}
-
-
-
+++ /dev/null
-/*
- * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2018 Aleph One Ltd.
- *
- * Created by Timothy Manning <timothy@yaffs.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 2.1 as
- * published by the Free Software Foundation.
- *
- * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
- */
-
-#ifndef _lib_h__
-#define _lib_h__
-
-#include <stdio.h>
-#include <string.h>
-#include "yaffsfs.h"
-#include <errno.h>
-
-typedef struct arg_temp2{
- char char1;
- char char2;
- char string1[100];
- char string2[100];
- int int1;
- int int2;
-} arg_temp;
-
-
-typedef struct test_dir_temp
-{
- int type_of_test; //used to tell if it is LINUX of YAFFS
- char root_path[200];
-} test_dir;
-test_dir yaffs_struct,linux_struct;
-
-
-
-void generate_random_string(char *ptr,int length_of_str);
-void join_paths(char *path1,char *path2,char *new_path );
-void print_message(char print_level, char *message);
-void set_print_level(int new_level);
-int get_print_level(void);
-void set_exit_on_error(int num);
-int get_exit_on_error(void);
-void display_error(void);
-void get_error_yaffs(void);
-void get_error_linux(void);
-#endif
+++ /dev/null
-/*
- * YAFFS: Yet another FFS. A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2018 Aleph One Ltd.
- *
- * Created by Timothy Manning <timothy@yaffs.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include "linux_test_open.h"
-
-int linux_test_open(arg_temp *args_struct)
-{
- char path[250];
- char message[150];
- int output;
- join_paths(linux_struct.root_path,args_struct->string1, path );
- sprintf(message,"file path: %s\n",path);
- print_message(3,message);
-
- output= open(path,args_struct->char1 & (O_TRUNC|O_EXCL|O_CREAT|O_APPEND) ,args_struct->char2& (S_IREAD|S_IWRITE));
- if (output>=0){
- output=close(output);
- if (output<0) {
- print_message(3,"failed to close handle\n");
- return -1;
- } else {
- return 1;
- }
- } else {
- print_message(3,"failed to open file\n");
- return -1;
- }
-}
+++ /dev/null
-/*
- * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2018 Aleph One Ltd.
- *
- * Created by Timothy Manning <timothy@yaffs.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 2.1 as
- * published by the Free Software Foundation.
- *
- * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
- */
-
-#ifndef __linux_test_open_h__
-#define __linux_test_open_h__
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include "lib.h"
-
-int linux_test_open(arg_temp *args_struct);
-#endif
+++ /dev/null
-/*
- * YAFFS: Yet another FFS. A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2018 Aleph One Ltd.
- *
- * Created by Timothy Manning <timothy@yaffs.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include "linux_test_truncate.h"
-
-int linux_test_truncate(arg_temp *args_struct)
-{
- char path[200];
- char message[200];
- int output=0;
- join_paths(linux_struct.root_path,args_struct->string1, path );
- sprintf(message,"file path: %s\n",path);
- print_message(3,message);
-
- output=truncate(path,args_struct->int1);
- return output;
-}
+++ /dev/null
-/*
- * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2018 Aleph One Ltd.
- *
- * Created by Timothy Manning <timothy@yaffs.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 2.1 as
- * published by the Free Software Foundation.
- *
- * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
- */
-
-#ifndef __linux_test_truncate_h__
-#define __linux_test_truncate_h__
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include "yaffsfs.h"
-#include "lib.h"
-
-int linux_test_truncate(arg_temp *args_struct);
-
-#endif
+++ /dev/null
-/*
- * YAFFS: Yet another FFS. A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2018 Aleph One Ltd.
- *
- * Created by Timothy Manning <timothy@yaffs.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include "linux_test_unlink.h"
-
-int linux_test_unlink(arg_temp *args_struct)
-{
- char path[250];
- char message[150];
- int output;
- join_paths(linux_struct.root_path,args_struct->string1, path );
- sprintf(message,"file path: %s\n",path);
- print_message(3,message);
-
- output= unlink(path);
-
- if (output<0) {
- print_message(3,"failed to unlink file\n");
- return -1;
- } else {
- return 1;
- }
-}
+++ /dev/null
-/*
- * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2018 Aleph One Ltd.
- *
- * Created by Timothy Manning <timothy@yaffs.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 2.1 as
- * published by the Free Software Foundation.
- *
- * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
- */
-
-#ifndef __linux_test_unlink_h__
-#define __linux_test_unlink_h__
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include "yaffsfs.h"
-#include "lib.h"
-
-int linux_test_unlink(arg_temp *args_struct);
-
-#endif
+++ /dev/null
-/*
- * YAFFS: Yet another FFS. A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2018 Aleph One Ltd.
- *
- * Created by Timothy Manning <timothy@yaffs.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include "linux_test_write.h"
-
-int linux_test_write(arg_temp *args_struct)
-{
- char path[200];
- char message[200];
- int output=0;
- int handle=-1;
- join_paths(linux_struct.root_path,args_struct->string1, path );
- sprintf(message,"trying to write to: %s\nwith mode set to %o \n",path,args_struct->char1 );
- print_message(3,message);
- printf("mode S_IREAD %d S_IWRITE %d\n",(args_struct->char2 & S_IREAD),(args_struct->char2 & S_IWRITE));
- handle=open(path,((args_struct->char1 &(O_TRUNC|O_EXCL|O_CREAT|O_APPEND))|O_RDWR),(args_struct->char2&(S_IREAD|S_IWRITE)));
- printf("handle %d\n",handle);
- if (handle<0){
- print_message(3,"failed to open a handle\n");
- return -1; //handle failed to open
- }
- sprintf(message,"trying to write: %d bytes into the file\n",strlen(args_struct->string2));
- print_message(3,message);
- output=write(handle,args_struct->string2,strlen(args_struct->string2));
- close(handle);
- return output;
-}
+++ /dev/null
-/*
- * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2018 Aleph One Ltd.
- *
- * Created by Timothy Manning <timothy@yaffs.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 2.1 as
- * published by the Free Software Foundation.
- *
- * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
- */
-
-#ifndef __linux_test_write_h__
-#define __linux_test_write_h__
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include "yaffsfs.h"
-#include "lib.h"
-
-int linux_test_write(arg_temp *args_struct);
-
-#endif
+++ /dev/null
-/*
- * YAFFS: Yet another FFS. A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2018 Aleph One Ltd.
- *
- * Created by Timothy Manning <timothy@yaffs.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include "mirror_tests.h"
-
-int random_seed;
-int simulate_power_failure = 0;
-
-int num_of_random_tests=1;
-
-
-
-typedef struct test_list_temp2{
- char *test_name;
- int (*test_pointer)(arg_temp *args_struct);
-}test_list_temp;
-
-typedef struct test_temp2 {
- int num_of_tests;
- test_list_temp test_list[];
-}test_temp;
-
-test_temp yaffs_tests={
- 4,
- {{"yaffs_test_open",yaffs_test_open},
- {"yaffs_test_truncate",yaffs_test_truncate},
- {"yaffs_test_unlink",yaffs_test_unlink},
- {"yaffs_test_write",yaffs_test_write}
- }
-};
-
-test_temp linux_tests={
- 4,
- {{"linux_test_open",linux_test_open},
- {"linux_test_truncate",linux_test_truncate},
- {"linux_test_unlink",linux_test_unlink},
- {"linux_test_write",linux_test_write}
- }
-};
-
-const struct option long_options[]={
- {"help", 0,NULL,'h'},
- {"yaffs_path", 1,NULL,'y'},
- {"linux_path", 1,NULL,'l'},
- {"print_level", 1,NULL,'p'},
- {"quiet", 0,NULL,'q'},
- {"number", 1,NULL,'n'},
- {"seed", 1,NULL,'s'},
- {"trace", 1,NULL,'t'},
- {"clean", 0,NULL,'c'},
- {"verbose", 0,NULL,'v'}
-};
-
-const char short_options[]="hy:l:p:qn:s:t:cv";
-
-
-int main(int argc, char *argv[])
-{
- char message[100];
-
-// yaffs_tests.num_of_tests=(sizeof(yaffs_tests)/sizeof(test_temp));
-// linux_tests.num_of_tests=(sizeof(linux_tests)/sizeof(test_temp));
-
- init(argc,argv);
- print_message(1,"running mirror_tests\n");
- sprintf(message,"linux_root_path: %s\n",linux_struct.root_path);
- print_message(3,message);
- sprintf(message,"yaffs_root_path: %s\n",yaffs_struct.root_path);
- print_message(3,message);
- sprintf(message,"linux_num_of_tests: %d\n",linux_tests.num_of_tests);
- print_message(3,message);
- sprintf(message,"yaffs_num_of_tests: %d\n",yaffs_tests.num_of_tests);
- print_message(3,message);
-
- run_random_test(num_of_random_tests);
- //compare_linux_and_yaffs();
- yaffs_unmount("yaffs2");
- return 0;
-}
-
-void init(int argc, char *argv[])
-{
- char dir[200];
- dir[0]='\0';
- int x=-1;
- char message[100];
- int new_option;
-
- x=(unsigned)time(NULL);
- sprintf(message,"seeding srand with: %d\n",x);
- print_message(2,message);
- srand(x);
- yaffs_set_trace(0);
- linux_struct.type_of_test =LINUX;
- yaffs_struct.type_of_test =YAFFS;
-
- sprintf(message,"current absolute path is: %s\n",getcwd(dir,200));
- print_message(3,message);
- strcpy(dir,getcwd(dir,200));
-
- strcat(dir,"/test/");
- printf("dir: %s\n",dir);
- strcpy(linux_struct.root_path,dir);
- strcpy(yaffs_struct.root_path,"yaffs2/test/");
-
-
- do {
- new_option=getopt_long(argc,argv,short_options,long_options,NULL);
- if (new_option=='h'){
- printf("mirror_tests help\n");
- printf("arguments:\n");
- printf("\t-yaffs_path [PATH] //sets the path for yaffs.\n");
- printf("\t-linux_path [PATH] //sets the path for linux.\n");
- printf("\t-p [NUMBER] //sets the print level for mirror_tests.\n");
- printf("\t-v //verbose mode everything is printed\n");
- printf("\t-q //quiet mode nothing is printed.\n");
- printf("\t-n [number] //sets the number of random tests to run.\n");
- printf("\t-s [number] //seeds rand with the number\n");
- printf("\t-t [number] //sets yaffs_trace to the number\n");
- printf("\t-clean //removes emfile and test dir\n");
- exit(0);
- } else if (new_option=='y'){
- strcpy(yaffs_struct.root_path, optarg);
- } else if (new_option=='l'){
- strcpy(linux_struct.root_path, optarg);
- } else if (new_option=='p'){
- set_print_level(atoi(optarg));
- } else if (new_option=='v'){
- set_print_level(5);
- } else if (new_option=='q'){
- set_print_level(-1);
- } else if (new_option=='n'){
- num_of_random_tests=atoi(optarg);
- } else if (new_option=='s'){
- srand(atoi(argv[x+1]));
- } else if (new_option=='t'){
- yaffs_set_trace(atoi(optarg));
- } else if (new_option=='c'){
- clean_dir();
- exit(0);
- } else if (new_option==-1){
-
- } else if (new_option=='?') {
- printf("bad argument\n");
- exit(0);
- }
-
- } while(new_option!=-1);
- clean_dir();
- yaffs_start_up();
- print_message(2,"\nmounting yaffs\n");
- x=yaffs_mount("yaffs2");
- if (x<0) {
- print_message(3,"failed to mount yaffs\n");
- get_error_yaffs();
- } else {
- print_message(3,"mounted yaffs\n");
- }
-
-
- print_message(3,"\nmaking linux test dir\n");
- x=mkdir(linux_struct.root_path,0777);
- if (x<0) {
- print_message(1,"failed to make dir\n");
- get_error_linux();
- } else {
- print_message(3,"made dir\n");
- }
-
- print_message(3,"\nmaking yaffs test dir\n");
- x=yaffs_mkdir(yaffs_struct.root_path,0777);
- if (x<0) {
- print_message(1,"failed to make dir\n");
- get_error_yaffs();
- } else {
- print_message(3,"made dir\n");
- }
-}
-
-int run_random_test(int num_of_random_tests)
-{
- int y=0;
- int x=-1;
- int id=0;
- int test_id=-1;
- int num_of_tests_before_check=1;
- char message[200];
- arg_temp args_struct;
- for (y=0;(y*num_of_tests_before_check)<num_of_random_tests;y++){
- for (x=0;x<num_of_tests_before_check && (x+(y*num_of_tests_before_check)<num_of_random_tests);x++) {
- errno=0;
- yaffs_set_error(0);
- test_id = select_test_id(yaffs_tests.num_of_tests);
- sprintf(message,"running test_id %d\n",test_id);
- print_message(3,message);
- generate_random_numbers(&args_struct);
- run_yaffs_test(test_id, &args_struct);
-
- //check_mode(&args_struct);
-
- run_linux_test(test_id, &args_struct);
-
- if (get_print_level()>=4){
- get_error_yaffs();
- get_error_linux();
- }
-
- if ((abs(yaffs_get_error())!=abs(errno)) &&
- (abs(yaffs_get_error())!=EISDIR && abs(errno) != 0) &&
- (abs(yaffs_get_error())!=ENOENT && abs(errno) != EACCES)&&
- (abs(yaffs_get_error())!=EINVAL && abs(errno) != EBADF)
- ){
- print_message(2,"\ndifference in returned errors######################################\n");
- get_error_yaffs();
- get_error_linux();
- if (get_exit_on_error()){
- exit(0);
- }
- }
- }
- //check_mode(&args_struct);
- compare_linux_and_yaffs(&args_struct);
- //check_mode(&args_struct);
-
- }
- compare_linux_and_yaffs(&args_struct);
-}
-
-int select_test_id(int test_len)
-{
- int id=0;
- //printf("test_len = %d\n",test_len);
- id=(rand() % test_len );
- //printf("id %d\n",id);
- return id;
-
-}
-
-int check_mode(arg_temp *args_struct)
-{
- char path[200];
- char message[200];
- int output=0;
-
- struct yaffs_stat yaffs_stat_struct;
- join_paths(yaffs_struct.root_path,args_struct->string1, path );
- sprintf(message,"\ntrying to stat to: %s\n",path);
- print_message(3,message);
- output=yaffs_stat(path,&yaffs_stat_struct);
- if (output < 0){
- sprintf(message,"failed to stat the file\n");
- print_message(3,message);
- get_error_yaffs();
- } else {
- sprintf(message,"stated the file\n");
- print_message(3,message);
- sprintf(message," yaffs file mode is %d\n",(yaffs_stat_struct.st_mode & (S_IREAD| S_IWRITE)));
- print_message(3,message);
- sprintf(message,"mode S_IREAD %d S_IWRITE %d\n",(yaffs_stat_struct.st_mode & S_IREAD),(yaffs_stat_struct.st_mode & S_IWRITE));
- print_message(3,message);
- }
- return 1;
-}
-
-int check_mode_file(char *path)
-{
- char message[200];
- int output=0;
-
- struct yaffs_stat yaffs_stat_struct;
-
- sprintf(message,"\ntrying to stat to: %s\n",path);
- print_message(3,message);
- output=yaffs_stat(path,&yaffs_stat_struct);
- if (output < 0){
- sprintf(message,"failed to stat the file\n");
- print_message(3,message);
- get_error_yaffs();
- } else {
- sprintf(message,"stated the file\n");
- print_message(3,message);
- sprintf(message," yaffs file mode is %d\n",(yaffs_stat_struct.st_mode & (S_IREAD| S_IWRITE)));
- print_message(3,message);
- sprintf(message,"mode S_IREAD %d S_IWRITE %d\n\n",(yaffs_stat_struct.st_mode & S_IREAD),(yaffs_stat_struct.st_mode & S_IWRITE));
- print_message(3,message);
- }
- return 1;
-}
-
-int compare_linux_and_yaffs(arg_temp *args_struct)
-{
- int x=0,y=0;
- char l_path[200];
- char y_path[200];
- char file_name[200];
- int exit_bool=0;
- int number_of_files_in_yaffs=0;
- int number_of_files_in_linux=0;
- char message[200];
- char **yaffs_file_list=NULL;
- char **linux_file_list=NULL;
-
- struct yaffs_stat yaffs_stat_struct;
- struct stat linux_stat_struct;
- yaffs_DIR *yaffs_open_dir;
- struct yaffs_dirent *yaffs_current_file;
-
- DIR *linux_open_dir;
- struct dirent *linux_current_file;
-
- l_path[0]='\0';
- y_path[0]='\0';
- file_name[0]='\0';
- message[0]='\0';
- print_message(2,"\n\n\n comparing folders\n");
-// check_mode_file("yaffs2/test/YY");
- //find out the number of files in the directory
- yaffs_open_dir = yaffs_opendir(yaffs_struct.root_path);
- if (yaffs_open_dir) {
- for (x=0;yaffs_readdir(yaffs_open_dir);x++){}
- number_of_files_in_yaffs=x;
- sprintf(message,"number of files in yaffs dir= %d\n",number_of_files_in_yaffs);
- print_message(2,message);
- yaffs_rewinddir(yaffs_open_dir);
- } else {
- print_message(3,"failed to open yaffs test dir\n");
- }
- //create array
- yaffs_file_list= (char **)malloc(x*sizeof(char*));
- for (x=0;x<number_of_files_in_yaffs;x++) {
- yaffs_file_list[x]=malloc(200);
- }
-
- //check_mode_file("yaffs2/test/YY");
- //copy file names into array
- if (yaffs_open_dir){
- yaffs_current_file =yaffs_readdir(yaffs_open_dir);
- for (x=0 ;yaffs_current_file;x++)
- {
- printf("x= %d \n",x);
- printf("yaffs_current_file->d_name = %s\n",yaffs_current_file->d_name);
- if (yaffs_current_file){
- strcpy(yaffs_file_list[x],yaffs_current_file->d_name);
-
- }
- yaffs_current_file =yaffs_readdir(yaffs_open_dir);
- }
- yaffs_closedir(yaffs_open_dir);
- } else {
- print_message(3,"failed to populate yaffs test list\n");
- }
-
-
- //find out the number of files in the directory
- linux_open_dir = opendir(linux_struct.root_path);
- if (linux_open_dir){
- for (x=0;readdir(linux_open_dir);x++){}
- number_of_files_in_linux=(x-2);
- sprintf(message,"number of files in linux dir= %d\n",(number_of_files_in_linux));
- print_message(2,message);
- //the -2 is because linux shows 2 extra files which are automaticly created.
-
- rewinddir(linux_open_dir);
- } else {
- print_message(3,"failed to open linux test dir\n");
- }
-
- //create array
- linux_file_list= (char **)malloc(number_of_files_in_linux*sizeof(char*));
-
- for (x=0;x<number_of_files_in_linux;x++) {
- linux_file_list[x]=malloc(200);
- }
-
- //check_mode_file("yaffs2/test/YY");
- //copy file names into array
- if (linux_open_dir){
- linux_current_file =readdir(linux_open_dir);
- for (x=0, y=0 ;linux_current_file;x++)
- {
-
- if (linux_current_file){
- strcpy(message,linux_current_file->d_name);
- print_message(7,"opened file: ");
- print_message(7,message);
- print_message(7,"\n");
- }
- if (linux_current_file &&
- 0!=strcmp(message,".")&&
- 0!=strcmp(message,"..")){
- strcpy(file_name,linux_current_file->d_name);
- //sprintf("file opened: %s\n",linux_current_file->d_name);
- //print_message(3,message);
- print_message(7,"added file to list\n");
- strcpy(linux_file_list[y],file_name);
- sprintf(message,"file added to list: %s\n",linux_file_list[y]);
- print_message(7,message);
- y++;
- }
- linux_current_file =readdir(linux_open_dir);
- }
- closedir(linux_open_dir);
- } else {
- print_message(3,"failed to populate linux test dir\n");
- }
-
-
- //match the files in both folders
- for (x=0;x<number_of_files_in_yaffs;x++){
- sprintf(message,"\nsearching for yaffs file: %s\n",yaffs_file_list[x]);
- print_message(3,message);
- for (y=0;y<number_of_files_in_linux;y++){
- sprintf(message,"comparing to linux file: %s\n",linux_file_list[y]);
- print_message(7,message);
-
- if (0==strcmp(yaffs_file_list[x],linux_file_list[y])){
- sprintf(message,"file matched: %s\n",linux_file_list[y]);
- print_message(3,message);
- //check that the modes of both files are the same
- join_paths(yaffs_struct.root_path,yaffs_file_list[x],y_path);
- join_paths(linux_struct.root_path,linux_file_list[y],l_path);
- if (yaffs_stat(y_path,&yaffs_stat_struct)>=0&&
- stat(l_path,&linux_stat_struct)>=0){
- sprintf(message," yaffs file mode is %d\n",(yaffs_stat_struct.st_mode & (S_IREAD| S_IWRITE)));
- print_message(3,message);
- sprintf(message,"mode S_IREAD %d S_IWRITE %d\n",(yaffs_stat_struct.st_mode & S_IREAD),(yaffs_stat_struct.st_mode & S_IWRITE));
- print_message(3,message);
- sprintf(message," linux file mode is %d\n",(linux_stat_struct.st_mode & (S_IREAD|S_IWRITE)));
- print_message(3,message);
- sprintf(message,"mode S_IREAD %d S_IWRITE %d\n",(linux_stat_struct.st_mode & S_IREAD),(linux_stat_struct.st_mode & S_IWRITE));
- print_message(3,message);
- if ((yaffs_stat_struct.st_mode & (S_IREAD| S_IWRITE))==
- ( linux_stat_struct.st_mode & (S_IREAD|S_IWRITE))){
- print_message(2,"file modes match\n");
- } else {
- print_message(2,"file modes do not match\n");
- exit_bool=1;
- }
- linux_file_list[y][0]=NULL;
- yaffs_file_list[x][0]=NULL;
- } else {
- print_message(2,"failed to stat one of the files\n");
- get_error_yaffs();
- get_error_linux();
- }
-
- //read file contents
-
-
- break;
- }
- }
- }
-
- //print remaining files
- for (x=0;x<number_of_files_in_linux;x++){
- if (linux_file_list[x][0]){
- sprintf(message,"unmatched file in linux: %s\n",linux_file_list[x]);
- print_message(2,message);
- exit_bool=1;
- }
- }
- for (x=0;x<number_of_files_in_yaffs;x++){
- if (yaffs_file_list[x][0]){
- sprintf(message,"unmatched file in yaffs: %s\n",yaffs_file_list[x]);
- print_message(2,message);
- exit_bool=1;
- }
- }
- if (exit_bool==1&& get_exit_on_error()==1){
- print_message(2,"exiting program\n");
- exit(0);
- }
-
- for (x=0;x<number_of_files_in_yaffs;x++) {
- free(yaffs_file_list[x]);
- }
- free(yaffs_file_list);
-
- for (x=0;x<number_of_files_in_linux;x++) {
- free(linux_file_list[x]);
- }
- free(linux_file_list);
-
-
- //printf("file_name %s\n", yaffs_current_file->d_name);
-// generate_array_of_objects_in_yaffs();
-// generate_array_of_objects_in_linux();
- //first do a check to see if both sides have the same objects on both sides.
- //then stat all of the files and compare size and mode
- //read the text of each file and compare them.
-
- //show the diffrences by printing them.
- return 1;
-
-}
-
-void generate_random_numbers(arg_temp *args_struct)
-{
- char string[51];
- args_struct->char1= (rand() % 255);
- args_struct->char2= (rand() % 255);
- args_struct->int1= (rand() % 100000);
- args_struct->int2= (rand() % 100000);
- generate_random_string(string,50);
- strcpy(args_struct->string1, string);
- generate_random_string(string,50);
- strcpy(args_struct->string2, string);
-}
-
-void run_yaffs_test(int id,arg_temp *args_struct)
-{
- char message[200];
- int output =0;
- print_message(3,"\n");
- //printf("id = %d\n",id);
- sprintf(message,"running_test %s\n",yaffs_tests.test_list[id].test_name);
- print_message(3,message);
- output=yaffs_tests.test_list[id].test_pointer(args_struct);
- if (output<0) {
- sprintf(message,"test_failed %s\n",yaffs_tests.test_list[id].test_name);
- print_message(3,message);
- } else {
- print_message(3,"test_passed\n");
- }
-}
-
-void run_linux_test(int id,arg_temp *args_struct)
-{
- char message[200];
- int output =0;
- print_message(3,"\n");
- //printf("id = %d\n",id);
- sprintf(message,"running_test %s\n",linux_tests.test_list[id].test_name);
- print_message(3,message);
- output=linux_tests.test_list[id].test_pointer(args_struct);
- if (output<0) {
- sprintf(message,"test_failed %s\n",linux_tests.test_list[id].test_name);
- print_message(3,message);
- } else {
- print_message(3,"test_passed\n");
- }
-}
-
-
-void clean_dir(void)
-{
- char string[200];
- char file[200];
- char message[200];
- DIR *linux_open_dir;
- struct dirent *linux_current_file;
- int x=0,output=0;
-
- getcwd(string,200);
- strcat(string,"/emfile-2k-0");
- sprintf(message,"\n\nunlinking emfile at this path: %s\n",string);
- print_message(3,message);
- unlink(string);
-
-
- linux_open_dir = opendir(linux_struct.root_path);
- if (linux_open_dir){
-
- do
- {
-
- linux_current_file =readdir(linux_open_dir);
- if (NULL!=linux_current_file){
-
- strcpy(file,linux_struct.root_path);
- strcat(file,linux_current_file->d_name);
- sprintf(message,"unlinking file %s\n",file);
- print_message(3,message);
- print_message(3,"chmoding file\n");
- output=chmod(file,(S_IRUSR|S_IWUSR));
- if (output<0) {
- get_error_linux();
- }
- print_message(3,"unlinking file\n");
- output=unlink(file);
- if (output<0) {
- get_error_linux();
- }
- }
- } while(linux_current_file);
- closedir(linux_open_dir);
- rmdir(linux_struct.root_path);
- }
-
-}
+++ /dev/null
-/*
- * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2018 Aleph One Ltd.
- *
- * Created by Timothy Manning <timothy@yaffs.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 2.1 as
- * published by the Free Software Foundation.
- *
- * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
- */
-
-#ifndef __mirror_tests_h__
-#define __mirror_tests_h__
-
-#include <stdio.h>
-#include <dirent.h>
-#include <unistd.h> //used for getting the current directory.
-#include <string.h>
-#include <errno.h>
-#include "yaffsfs.h"
-#include "lib.h"
-#include <time.h>
-#include <getopt.h>
-#include <sys/stat.h>
-
-#include "linux_test_open.h"
-#include "yaffs_test_open.h"
-#include "linux_test_truncate.h"
-#include "yaffs_test_truncate.h"
-#include "linux_test_unlink.h"
-#include "yaffs_test_unlink.h"
-#include "linux_test_write.h"
-#include "yaffs_test_write.h"
-
-#define LINUX 1
-#define YAFFS 2
-
-
-
-
-
-void init(int argc, char *argv[]);
-int run_random_test(int num_of_random_tests);
-int compare_linux_and_yaffs(arg_temp *args_struct);
-
-int select_test_id(int test_len);
-void generate_random_numbers(arg_temp *args_struct);
-void run_yaffs_test(int id,arg_temp *args_struct);
-void run_linux_test(int id,arg_temp *args_struct);
-void clean_dir(void);
-int select_test_id(int test_len);
-int check_mode(arg_temp *args_struct);
-int check_mode_file(char *path);
-//void generate_array_of_objects_in_yaffs(void);
-//void generate_array_of_objects_in_linux(void);
-
-#endif
+++ /dev/null
-/*
- * YAFFS: Yet another FFS. A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2018 Aleph One Ltd.
- *
- * Created by Timothy Manning <timothy@yaffs.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include "yaffs_test_open.h"
-
-int yaffs_test_open(arg_temp *args_struct)
-{
- char path[200];
- char message[100];
- int output=0;
- join_paths(yaffs_struct.root_path,args_struct->string1, path );
- sprintf(message,"file path: %s\n",path);
- print_message(3,message);
-
- output=yaffs_open(path,args_struct->char1 &(O_TRUNC|O_EXCL|O_CREAT|O_APPEND),args_struct->char2&(S_IREAD|S_IWRITE));
- if (output>=0){
- output= yaffs_close(output);
- if (output<0) {
- print_message(3,"failed to close handle\n");
- return -1;
- } else {
- return 1;
- }
- } else {
- print_message(3,"failed to open file\n");
- return -1;
- }
-}
+++ /dev/null
-/*
- * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2018 Aleph One Ltd.
- *
- * Created by Timothy Manning <timothy@yaffs.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 2.1 as
- * published by the Free Software Foundation.
- *
- * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
- */
-
-#ifndef __yaffs_test_open_h__
-#define __yaffs_test_open_h__
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include "yaffsfs.h"
-#include "lib.h"
-
-int yaffs_test_open(arg_temp *args_struct);
-
-#endif
+++ /dev/null
-/*
- * YAFFS: Yet another FFS. A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2018 Aleph One Ltd.
- *
- * Created by Timothy Manning <timothy@yaffs.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include "yaffs_test_truncate.h"
-
-int yaffs_test_truncate(arg_temp *args_struct)
-{
- char path[200];
- char message[200];
- int output=0;
- join_paths(yaffs_struct.root_path,args_struct->string1, path );
- sprintf(message,"file path: %s\n",path);
- print_message(3,message);
-
- output=yaffs_truncate(path,args_struct->int1);
- return output;
-}
+++ /dev/null
-/*
- * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2018 Aleph One Ltd.
- *
- * Created by Timothy Manning <timothy@yaffs.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 2.1 as
- * published by the Free Software Foundation.
- *
- * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
- */
-
-#ifndef __yaffs_test_truncate_h__
-#define __yaffs_test_truncate_h__
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include "yaffsfs.h"
-#include "lib.h"
-
-int yaffs_test_truncate(arg_temp *args_struct);
-
-#endif
+++ /dev/null
-/*
- * YAFFS: Yet another FFS. A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2018 Aleph One Ltd.
- *
- * Created by Timothy Manning <timothy@yaffs.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include "yaffs_test_unlink.h"
-
-int yaffs_test_unlink(arg_temp *args_struct)
-{
- char path[250];
- char message[150];
- int output;
- join_paths(yaffs_struct.root_path,args_struct->string1, path );
- sprintf(message,"file path: %s\n",path);
- print_message(3,message);
-
- output= yaffs_unlink(path);
-
- if (output<0) {
- print_message(3,"failed to unlink file\n");
- return -1;
- } else {
- return 1;
- }
-
-}
+++ /dev/null
-/*
- * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2018 Aleph One Ltd.
- *
- * Created by Timothy Manning <timothy@yaffs.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 2.1 as
- * published by the Free Software Foundation.
- *
- * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
- */
-
-#ifndef __yaffs_test_unlink_h__
-#define __yaffs_test_unlink_h__
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include "yaffsfs.h"
-#include "lib.h"
-
-int yaffs_test_unlink(arg_temp *args_struct);
-
-#endif
+++ /dev/null
-/*
- * YAFFS: Yet another FFS. A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2018 Aleph One Ltd.
- *
- * Created by Timothy Manning <timothy@yaffs.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include "yaffs_test_write.h"
-
-int yaffs_test_write(arg_temp *args_struct)
-{
- char path[200];
- char message[200];
- int output=0,output2=0;
- int handle;
- struct yaffs_stat yaffs_stat_struct;
- join_paths(yaffs_struct.root_path,args_struct->string1, path );
- sprintf(message,"trying to write to: %s\nwith mode set to %o \n",path,args_struct->char1);
- print_message(3,message);
- printf("mode S_IREAD %d S_IWRITE %d\n",(args_struct->char2 & S_IREAD),(args_struct->char2 & S_IWRITE));
- handle=yaffs_open(path,((args_struct->char1 &(O_TRUNC|O_EXCL|O_CREAT|O_APPEND))|O_RDWR),(args_struct->char2&(S_IREAD|S_IWRITE)));
- printf("handle %d\n",handle);
- if (handle<0){
- print_message(3,"failed to open a handle\n");
- return -1; //handle failed to open
- }
-
-/* output=yaffs_fstat(handle,&yaffs_stat_struct);
- if (output < 0){
- sprintf(message,"failed to stat the file\n");
- print_message(3,message);
- get_error_yaffs();
- } else {
- sprintf(message,"stated the file\n");
- print_message(3,message);
- sprintf(message," yaffs file mode is %d\n",(yaffs_stat_struct.st_mode & (S_IREAD| S_IWRITE)));
- print_message(3,message);
- sprintf(message,"mode S_IREAD %d S_IWRITE %d\n",(yaffs_stat_struct.st_mode & S_IREAD),(yaffs_stat_struct.st_mode & S_IWRITE));
- print_message(3,message);
- }
-
- sprintf(message,"trying to write: %d bytes into the file\n",strlen(args_struct->string2));
- print_message(3,message);
-*/
- output=yaffs_write(handle,&args_struct->string2,strlen(args_struct->string2));
-
-/* print_message(3,"\n wrote to the file\n");
- output2=yaffs_fstat(handle,&yaffs_stat_struct);
- if (output2 < 0){
- sprintf(message,"failed to stat the file\n");
- print_message(3,message);
- get_error_yaffs();
- } else {
- sprintf(message,"stated the file\n");
- print_message(3,message);
- sprintf(message," yaffs file mode is %d\n",(yaffs_stat_struct.st_mode & (S_IREAD| S_IWRITE)));
- print_message(3,message);
- sprintf(message,"mode S_IREAD %d S_IWRITE %d\n",(yaffs_stat_struct.st_mode & S_IREAD),(yaffs_stat_struct.st_mode & S_IWRITE));
- print_message(3,message);
- }
-*/ yaffs_close(handle);
-/* print_message(3,"\n closing the file\n");
- output2=yaffs_stat(path,&yaffs_stat_struct);
- if (output2 < 0){
- sprintf(message,"failed to stat the file\n");
- print_message(3,message);
- get_error_yaffs();
- } else {
- sprintf(message,"stated the file\n");
- print_message(3,message);
- sprintf(message," yaffs file mode is %d\n",(yaffs_stat_struct.st_mode & (S_IREAD| S_IWRITE)));
- print_message(3,message);
- sprintf(message,"mode S_IREAD %d S_IWRITE %d\n",(yaffs_stat_struct.st_mode & S_IREAD),(yaffs_stat_struct.st_mode & S_IWRITE));
- print_message(3,message);
- }
-*/
-
- return output;
-}
+++ /dev/null
-/*
- * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2018 Aleph One Ltd.
- *
- * Created by Timothy Manning <timothy@yaffs.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 2.1 as
- * published by the Free Software Foundation.
- *
- * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
- */
-
-#ifndef __yaffs_test_write_h__
-#define __yaffs_test_write_h__
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include "yaffsfs.h"
-#include "lib.h"
-
-int yaffs_test_write(arg_temp *args_struct);
-
-#endif
--- /dev/null
+time_32_tests
--- /dev/null
+# Makefile for 64 bit time test.
+#
+#
+# YAFFS: Yet another Flash File System. A NAND-flash specific file system.
+#
+# Copyright (C) 2002-2018 Aleph One Ltd.
+#
+#
+# Created by Timothy Manning <timothy@aleph1.co.uk>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation.
+#
+# NB Warning this Makefile does not include header dependencies.
+#
+
+YDI_DIR = ../../../../
+YDI_FRAMEWORK_DIR = ../../../
+
+MAINFILES = time_32_tests create_32_bit validate_32_bit
+MAIN_OBJS = $(addsuffix .o,$(MAINFILES))
+
+EXTRA_OBJS = shared.o
+
+CLEAN_OBJS = $(MAINFILES)
+CFLAGS = -DCONFIG_YAFFS_USE_32_BIT_TIME_T
+
+YAFFS_TEST_OBJS = $(COMMONTESTOBJS) $(EXTRA_OBJS)
+ALL_UNSORTED_OBJS += $(YAFFS_TEST_OBJS) $(MAIN_OBJS)
+
+all: $(MAINFILES)
+
+include $(YDI_FRAMEWORK_DIR)/FrameworkRules.mk
+
+phony. test: time_32_tests
+ ./time_32_tests
+
+$(MAINFILES): $(FRAMEWORK_SOURCES) $(YAFFS_TEST_OBJS) $(MAIN_OBJS)
+ gcc $(CFLAGS) -o $@ $(YAFFS_TEST_OBJS) $@.o -lpthread -DCONFIG_YAFFS_USE_32_BIT_TIME_T
+
--- /dev/null
+../shared/create_file.c
\ No newline at end of file
--- /dev/null
+../shared/shared.c
\ No newline at end of file
--- /dev/null
+../shared/shared.h
\ No newline at end of file
--- /dev/null
+#include "yaffsfs.h"
+#define YAFFS_MOUNT_POINT "/yflash2/"
+#define FILE_PATH "/yflash2/foo.txt"
+
+int random_seed;
+int simulate_power_failure = 0;
+
+
+int main()
+{
+ yaffs_start_up();
+
+ //test that ytime is 32 bits
+
+ if (sizeof(YTIME_T) != 4) {
+ printf("Error:size of YTIME_T is %lu, not 32 bits \n", sizeof(YTIME_T)*8);
+ return 1;
+ }
+
+
+ //create several times and save them
+ //
+
+ //extra tests
+ //save the time and get it to overflow.
+ printf("all tests pass\n");
+ return 0;
+}
--- /dev/null
+../shared/validate_file.c
\ No newline at end of file
--- /dev/null
+time_64_tests
--- /dev/null
+# Makefile for 64 bit time test.
+#
+#
+# YAFFS: Yet another Flash File System. A NAND-flash specific file system.
+#
+# Copyright (C) 2002-2018 Aleph One Ltd.
+#
+#
+# Created by Timothy Manning <timothy@aleph1.co.uk>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation.
+#
+# NB Warning this Makefile does not include header dependencies.
+#
+
+YDI_DIR = ../../../../
+YDI_FRAMEWORK_DIR = ../../../
+
+MAINFILES = time_64_tests create_64_bit validate_64_bit
+MAIN_OBJS = $(addsuffix .o,$(MAINFILES))
+
+EXTRA_OBJS = shared.o
+
+CLEAN_OBJS = $(MAINFILES)
+
+YAFFS_TEST_OBJS = $(COMMONTESTOBJS) $(EXTRA_OBJS)
+ALL_UNSORTED_OBJS += $(YAFFS_TEST_OBJS) $(MAIN_OBJS)
+
+all: $(MAINFILES)
+
+include $(YDI_FRAMEWORK_DIR)/FrameworkRules.mk
+
+phony. test: time_64_tests
+ ./time_64_tests
+
+$(MAINFILES): $(FRAMEWORK_SOURCES) $(YAFFS_TEST_OBJS) $(MAIN_OBJS)
+ gcc $(CFLAGS) -o $@ $(YAFFS_TEST_OBJS) $@.o -lpthread
+
--- /dev/null
+../shared/create_file.c
\ No newline at end of file
--- /dev/null
+../shared/shared.c
\ No newline at end of file
--- /dev/null
+../shared/shared.h
\ No newline at end of file
--- /dev/null
+#include "yaffsfs.h"
+#include "yaffs_endian.h"
+
+#define YAFFS_MOUNT_POINT "/yflash2/"
+#define FILE_PATH "/yflash2/foo.txt"
+
+int random_seed;
+int simulate_power_failure = 0;
+
+
+int main()
+{
+ yaffs_start_up();
+
+ //test that ytime is 64 bits
+
+ if (sizeof(YTIME_T) != 8) {
+ printf("Error:size of YTIME_T is not 64 bits\n");
+ return 1;
+ }
+
+ struct yaffs_obj obj;
+ if (sizeof(obj.yst_atime) != 8) {
+ printf("Error: size of yaffs_obj.yst_atime is not 64 bits\n");
+ return 1;
+ }
+
+ //create several times and save them
+ //
+ struct yaffs_dev dev;
+
+ //need to set this to get the function to swap
+ //endianess of the values.
+
+ //remember that the first two bytes are swapped to the
+ //other end while still retaining their order.
+ // i.e. 0xfa..... becomes 0x...fa
+ dev.swap_endian = 1;
+
+ struct yaffs_obj_hdr oh;
+
+ oh.yst_atime = 0xaf1732b0;
+ oh.yst_mtime = 0xaf1732b0;
+ oh.yst_ctime = 0xaf1732b0;
+
+ yaffs_do_endian_oh(&dev,&oh);
+
+ //check that the endianess is correct
+ u32 expected = 0xb03217af;
+ if (oh.yst_atime != expected ) {
+ printf("endian test failed for yst_atime, got %x expected %x\n",oh.yst_atime,expected);
+ return 1;
+ }
+ if (oh.yst_mtime != expected) {
+ printf("endian test failed for yst_mtime, got %x, expected %x\n",oh.yst_mtime,expected);
+ return 1;
+ }
+ if (oh.yst_ctime != expected) {
+ printf("endian test failed for yst_ctime, got %x, expected %x\n",oh.yst_ctime,expected);
+ return 1;
+ }
+
+ printf("all tests pass\n");
+ return 0;
+}
--- /dev/null
+../shared/validate_file.c
\ No newline at end of file
--- /dev/null
+#include "shared.h"
+
+int random_seed;
+int simulate_power_failure = 0;
+
+int main(int argc, char *argv[] ){
+ int ret = shared_create(argc, argv);
+ ret = ret && shared_validate_file(argc, argv);
+ return ret;
+}
--- /dev/null
+#include <stdlib.h>
+#include "yaffsfs.h"
+#include "shared.h"
+
+void assert_exit_yaffs(char *fun_name, int fun_return_value){
+ if (fun_return_value < 0) {
+ printf("yaffs command: %s failed with error code %d \n", fun_name, fun_return_value);
+ int error_code = yaffsfs_GetLastError();
+ printf("error code is: %d, which is %s\n", error_code, yaffs_error_to_str(error_code));
+ printf("exiting program now\n");
+ exit(-1);
+ }
+}
+
+void setup_yaffs() {
+ yaffs_start_up();
+ yaffs_set_trace(0);
+ assert_exit_yaffs("yaffs_mount", yaffs_mount(YAFFS_MOUNT_POINT));
+}
+
+
+
+int shared_create(int argc, char *argv[]){
+ printf("YTIME_T size is %lu bits\n", sizeof(YTIME_T) *8);
+ #ifdef CONFIG_YAFFS_USE_32_BIT_TIME_T
+ if (sizeof(YTIME_T)*8 != 32) {
+ printf("YTIME_T size is incorrect. it is %lu and should be 32\n", sizeof(YTIME_T));
+ }
+ #endif
+ if (argc != 3) {
+ printf("wrong number of arguments\n");
+ printf("requires $ create file_name time\n");
+ return TEST_FAIL;
+ }
+
+ setup_yaffs();
+ char *file_path = argv[1];
+ int handle = yaffs_open(file_path, O_CREAT | O_RDWR, S_IREAD |S_IWRITE);
+ assert_exit_yaffs ( "yaffs_open", handle);
+
+ assert_exit_yaffs ( "yaffs_close", yaffs_close(handle));
+
+
+ //set the time.
+ uint time = atoi(argv[2]);
+
+ struct yaffs_utimbuf new_times;
+ new_times.actime = time;
+ int ret = yaffs_utime(file_path, &new_times);
+ assert_exit_yaffs("yaffs_utime", ret);
+
+ assert_exit_yaffs("yaffs_unmount", yaffs_unmount(YAFFS_MOUNT_POINT));
+ return 0;
+}
+
+int shared_validate_file(int argc, char *argv[]){
+
+ if (argc != 3) {
+ printf("wrong number of arguments\n");
+ printf("requires $ create file_name time\n");
+ return TEST_FAIL;
+ }
+
+ setup_yaffs();
+ char *file_path = argv[1];
+ int handle = yaffs_open(file_path, O_RDWR, S_IREAD |S_IWRITE);
+ assert_exit_yaffs ( "yaffs_open", handle);
+
+ //assert the file is the correct size and has the correct time.
+ uint expected_time = atoi(argv[2]);
+ struct yaffs_stat stat;
+ assert_exit_yaffs ( "yaffs_stat", yaffs_stat(file_path, &stat));
+ assert_exit_yaffs ( "yaffs_close", yaffs_close(handle));
+ if (stat.yst_atime != expected_time) {
+ printf("stat time is different from expected time\n");
+ exit(0);
+ }
+ assert_exit_yaffs("yaffs_unmount", yaffs_unmount(YAFFS_MOUNT_POINT));
+ return 0;
+}
--- /dev/null
+#ifndef __SHARED_H__
+#define __SHARED_H__
+
+#define TEST_PASS 0
+#define TEST_FAIL 1
+
+#define YAFFS_MOUNT_POINT "/yflash2/"
+#define FILE_PATH "/yflash2/foo.txt"
+
+void setup_yaffs();
+int shared_create();
+int shared_validate_file();
+#endif
--- /dev/null
+#include "shared.h"
+
+int random_seed;
+int simulate_power_failure = 0;
+
+int main(int argc, char *argv[] ){
+ return shared_validate_file(argc, argv);
+}
--- /dev/null
+make -C 32_bit/ && make -C 64_bit/ &&
+ rm emfile-* &&
+ ./32_bit/create_32_bit /yflash2/foo 100 &&
+ echo created 32 bit file &&
+ ./64_bit/validate_64_bit /yflash2/foo 100 &&
+ echo 32 bit file opened with 64 bit mode correctly
+
+ rm emfile-* &&
+ ./64_bit/create_64_bit /yflash2/foo 100 &&
+ echo created 64 bit file &&
+ ./32_bit/validate_32_bit /yflash2/foo 100 &&
+ echo 64 bit file opened with 32 bit mode correctly &&
+
+ echo All tests ran properly
--- /dev/null
+test_1_yaffs_mount
include $(YDI_FRAMEWORK_DIR)/FrameworkRules.mk
-
-yaffs_test: $(FRAMEWORK_SOURCES) $(YAFFS_TEST_OBJS)
- gcc $(CFLAGS) -o $@ $(YAFFS_TEST_OBJS)
-
-
+phony. test: test_1_yaffs_mount
+ ./test_1_yaffs_mount
test_1_yaffs_mount: $(FRAMEWORK_SOURCES) $(YAFFS_TEST_OBJS)
- gcc $(CFLAGS) -o $@ $(YAFFS_TEST_OBJS)
+ gcc $(CFLAGS) -o $@ $(YAFFS_TEST_OBJS) -lpthread
#include "yaffsfs.h"
-#define YAFFS_MOUNT_POINT "/yaffs2/"
-#define FILE_PATH "/yaffs2/foo.txt"
+#define YAFFS_MOUNT_POINT "/yflash2/"
+#define FILE_PATH "/yflash2/foo.txt"
int random_seed;
int simulate_power_failure = 0;
output = yaffs_mount(YAFFS_MOUNT_POINT);
if (output>=0){
- printf("yaffs mounted: %s\n",YAFFS_MOUNT_POINT);
+ printf("yaffs correctly mounted: %s\n",YAFFS_MOUNT_POINT);
} else {
- printf("error\n yaffs failed to mount: %s\nerror\n",YAFFS_MOUNT_POINT);
- return (0);
+ printf("error\n yaffs failed to mount: %s\n with error code %d\n",YAFFS_MOUNT_POINT, yaffs_get_error());
+
+ return (-1);
}
//now create a file.
output = yaffs_open(FILE_PATH,O_CREAT | O_RDWR, S_IREAD | S_IWRITE);
if (output>=0){
- printf("file created: %s\n",FILE_PATH);
+ printf("yaffs correctly created a the file: %s\n",FILE_PATH);
} else {
printf("error\n yaffs failed to create the file: %s\nerror\n",FILE_PATH);
- return (0);
+ return (-1);
}
output2 = yaffs_close(output);
if (output2>=0){
- printf("file closed: %s\n",FILE_PATH);
+ printf("yaffs correctly closed the file: %s\n",FILE_PATH);
} else {
printf("error\n yaffs failed to close the file: %s\nerror\n",FILE_PATH);
- return (0);
+ return (-1);
}
//unmount and remount the mount point.
output = yaffs_unmount(YAFFS_MOUNT_POINT);
if (output>=0){
- printf("yaffs unmounted: %s\n",YAFFS_MOUNT_POINT);
+ printf("yaffs correctly unmounted: %s\n",YAFFS_MOUNT_POINT);
} else {
printf("error\n yaffs failed to unmount: %s\nerror\n",YAFFS_MOUNT_POINT);
- return (0);
+ return (-1);
}
output = yaffs_mount(YAFFS_MOUNT_POINT);
if (output>=0){
- printf("yaffs mounted: %s\n",YAFFS_MOUNT_POINT);
+ printf("yaffs correctly mounted: %s\n",YAFFS_MOUNT_POINT);
} else {
printf("error\n yaffs failed to mount: %s\nerror\n",YAFFS_MOUNT_POINT);
- return (0);
+ return (-1);
}
//now open the existing file.
output = yaffs_open(FILE_PATH, O_RDWR, S_IREAD | S_IWRITE);
if (output>=0){
- printf("file created: %s\n",FILE_PATH);
+ printf("yaffs correctly opened the file: %s\n",FILE_PATH);
} else {
printf("error\n yaffs failed to create the file: %s\nerror\n",FILE_PATH);
- return (0);
+ return (-1);
}
//close the file.
output2 = yaffs_close(output);
if (output2>=0){
- printf("file closed: %s\n",FILE_PATH);
+ printf("yaffs correctly closed the file: %s\n",FILE_PATH);
} else {
printf("error\n yaffs failed to close the file: %s\nerror\n",FILE_PATH);
- return (0);
+ return (-1);
}
//unmount the mount point.
output = yaffs_unmount(YAFFS_MOUNT_POINT);
if (output>=0){
- printf("yaffs unmounted: %s\n",YAFFS_MOUNT_POINT);
+ printf("yaffs correctly unmounted: %s\n",YAFFS_MOUNT_POINT);
} else {
printf("error\n yaffs failed to unmount: %s\nerror\n",YAFFS_MOUNT_POINT);
- return (0);
+ return (-1);
}
printf("test passed. yay!\n");
+ return(0);
}
--- /dev/null
+quick_tests
test_yaffs_mount.o test_yaffs_mount_ENODEV.o test_yaffs_mount_ENAMETOOLONG.o test_yaffs_mount_EBUSY.o \
test_yaffs_mount_NULL.o \
test_yaffs_unmount.o test_yaffs_unmount_ENODEV.o test_yaffs_unmount_ENAMETOOLONG.o test_yaffs_unmount_EBUSY.o \
- test_yaffs_open.o test_yaffs_open_ENOENT.o test_yaffs_open_ENOTDIR.o test_yaffs_open_EEXIST.o test_yaffs_open_EISDIR.o \
+ test_yaffs_open.o test_yaffs_open_ENOENT.o test_yaffs_open_ENOTDIR.o test_yaffs_open_EEXIST.o \
test_yaffs_open_ENAMETOOLONG.o test_yaffs_open_EINVAL.o test_yaffs_open_EINVAL2.o test_yaffs_open_ELOOP.o \
test_yaffs_open_ELOOP_dir.o test_yaffs_open_EROFS.o test_yaffs_open_EACCES.o test_yaffs_open_NULL.o \
test_yaffs_unlink.o test_yaffs_unlink_EISDIR.o test_yaffs_unlink_ENOENT.o test_yaffs_unlink_ENAMETOOLONG.o \
include $(YDI_FRAMEWORK_DIR)/FrameworkRules.mk
-
-yaffs_test: $(FRAMEWORK_SOURCES) $(YAFFS_TEST_OBJS)
- gcc $(CFLAGS) -o $@ $(YAFFS_TEST_OBJS) -lpthread
-
+phony. test: quick_tests
+ ./quick_tests
quick_tests: $(FRAMEWORK_SOURCES) $(YAFFS_TEST_OBJS)
yaffs_DIR *d;
struct yaffs_dirent *de;
struct yaffs_stat s;
- char str[100];
+ char str[300];
d = yaffs_opendir(dir_name);
//printf("%s\n",dir_name);
if(!d)
run_random_test_loop();
}
/*this is where the loop should break to*/
- quit_quick_tests(0);
+ quit_quick_tests();
}
get_error();
print_message("\n\n",1);
if (get_exit_on_error()){
- quit_quick_tests(1);
+ quit_quick_tests();
}
}
output=0;
get_error();
printf("\n\n");
if (get_exit_on_error()){
- quit_quick_tests(1);
+ quit_quick_tests();
}
} else {
delete_dir(TEST_DIR);
}
-void quit_quick_tests(int exit_code)
+void quit_quick_tests()
{
/*char message[30];
message[0]='\0';
}
printf("out of %d tests, %d ran: %d passed and %d failed\n\n\n", total_number_of_tests,(num_of_tests_pass+num_of_tests_failed) ,num_of_tests_pass,num_of_tests_failed);
yaffs_unmount(YAFFS_MOUNT_POINT);
+
+ //remember that the exit_code needs to be 0 when all the tests pass.
+ int exit_code = num_of_tests_failed != 0;
exit(exit_code);
}
#include "test_yaffs_unmount_EBUSY.h"
#include "test_yaffs_open.h"
-#include "test_yaffs_open_EISDIR.h"
#include "test_yaffs_open_EEXIST.h"
#include "test_yaffs_open_ENOENT.h"
#include "test_yaffs_open_ENOTDIR.h"
{test_yaffs_unmount_EBUSY,test_yaffs_unmount_EBUSY_clean,"test_yaffs_unmount_EBUSY"},
{test_yaffs_open,test_yaffs_open_clean,"test_yaffs_open"},
- {test_yaffs_open_EISDIR,test_yaffs_open_EISDIR_clean,"test_yaffs_open_EISDIR"},
{test_yaffs_open_EEXIST,test_yaffs_open_EEXIST_clean,"test_yaffs_open_EEXIST"},
{test_yaffs_open_ENOTDIR,test_yaffs_open_ENOTDIR_clean,"test_yaffs_open_ENOTDIR"},
{test_yaffs_open_ENOENT,test_yaffs_open_ENOENT_clean,"test_yaffs_open_ENOENT"},
void logical_run_of_tests(void);
void init_quick_tests(int argc, char *argv[]);
-void quit_quick_tests(int exit_code);
+void quit_quick_tests();
void get_error(void);
void run_random_test_loop(void);
void run_test(int x);
--- /dev/null
+#!/usr/bin/env python3
+"""
+test_runner.py
+This file runs all of the yaffs unit tests and aggrates the outputs.
+
+To run this file you can use:
+
+$ python3 test_runner.py
+
+or
+
+$ ./test_runner.py
+
+To add a new test to this test runner, add the test dir path to the
+test_list below. Inside that folder there need to be a makefile with
+a "test" target that compiles and runs the test script. I.e. "make test"
+is called in every test directory.
+"""
+
+
+import subprocess, sys
+
+test_list = ["is_yaffs_working_tests",
+ "quick_tests",
+ "64_and_32_bit_time/64_bit",
+ "64_and_32_bit_time/32_bit",
+ ]
+
+
+TEST_FAILED = -1
+TEST_PASSED = 1
+
+def run(makefile_paths):
+ failed_tests =[]
+ for path in makefile_paths:
+ print("\nrunning test {}".format(path))
+ is_successful, test_output = run_makefile_test(path)
+ if is_successful != TEST_PASSED:
+ print('\033[41m' +'test {} failed'.format(path)+'\033[0m')
+ print(test_output)
+ failed_tests.append( (path, is_successful) )
+ else:
+ print('\033[42m' +"test passed"+'\033[0m')
+ return failed_tests
+
+def run_makefile_test(path):
+ try:
+ subprocess.check_output("make -j -C {} test".format(path), shell=True)
+ except subprocess.CalledProcessError as e:
+ return (TEST_FAILED, e.output.decode('UTF-8'))
+
+ return (TEST_PASSED, "test passed")
+
+def clean_tests(makefile_paths):
+ cmds = [("make -j -C {} clean".format(path), path) for path in makefile_paths]
+
+ failed = 0
+ passed = 0
+
+ for cmd, is_successful, cmd_text, debug_info in run_cmds(cmds):
+ if not is_successful:
+ print("\033[41mtest failed to clean\033[0m {}".format(debug_info[0]))
+ failed += 1
+ else :
+ print("\033[42mtest cleaned successfully\033[0m {}".format(debug_info[0]))
+ passed += 1
+ if not failed:
+ print ("\n\033[42mAll tests cleaned successfully\033[0m")
+ else :
+ print ("\n\033[42mTests failed to clean successfully\033[0m")
+ print("ran {}, passed {}, failed {}".format(len(cmds), passed, failed))
+
+def run_tests(makefile_paths):
+ cmds = [("make -j -C {} test".format(path), path) for path in makefile_paths]
+
+ failed = 0
+ passed = 0
+
+ print("running tests")
+ for cmd, is_successful, cmd_text, debug_info in run_cmds(cmds):
+ if not is_successful:
+ print("\033[41mtest failed\033[0m {}".format(debug_info[0]))
+ failed += 1
+ else :
+ print("\033[42mtest passed\033[0m {}".format(debug_info[0]))
+ passed += 1
+ if not failed:
+ print ("\n\033[42mAll tests passed\033[0m")
+ else :
+ print ("\n\033[41mTests failed\033[0m")
+ print("ran {}, passed {}, failed {}".format(len(cmds), passed, failed))
+
+def run_cmds(cmds):
+ output = []
+ for cmd, *debug_info in cmds:
+ try:
+ subprocess.check_output(cmd, shell=True)
+ output.append((cmd, True, "todo add getting text for non failing test", debug_info))
+ except subprocess.CalledProcessError as e:
+ output.append((cmd, False, e.output.decode('UTF-8'), debug_info))
+ return output
+if __name__ == "__main__":
+ if len(sys.argv) == 2 and sys.argv[1] == "clean":
+ clean_tests(test_list)
+ elif len(sys.argv) == 1:
+ #run the test runner.
+ failed_tests = run_tests(test_list)
+ else:
+ print("run with command ./test_runner.py [clean]")
void yaffs_load_attribs(struct yaffs_obj *obj, struct yaffs_obj_hdr *oh)
{
+
#ifdef CONFIG_YAFFS_WINCE
obj->win_atime[0] = oh->win_atime[0];
obj->win_ctime[0] = oh->win_ctime[0];
#else
obj->yst_uid = oh->yst_uid;
obj->yst_gid = oh->yst_gid;
- obj->yst_atime = oh->yst_atime;
- obj->yst_mtime = oh->yst_mtime;
- obj->yst_ctime = oh->yst_ctime;
+
+ obj->yst_ctime = yaffs_oh_ctime_fetch(oh);
+ obj->yst_mtime = yaffs_oh_mtime_fetch(oh);
+ obj->yst_atime = yaffs_oh_atime_fetch(oh);
+
obj->yst_rdev = oh->yst_rdev;
#endif
}
#else
oh->yst_uid = obj->yst_uid;
oh->yst_gid = obj->yst_gid;
- oh->yst_atime = obj->yst_atime;
- oh->yst_mtime = obj->yst_mtime;
- oh->yst_ctime = obj->yst_ctime;
+
+ yaffs_oh_ctime_load(obj, oh);
+ yaffs_oh_mtime_load(obj, oh);
+ yaffs_oh_atime_load(obj, oh);
+
oh->yst_rdev = obj->yst_rdev;
#endif
}
obj->yst_mtime = Y_CURRENT_TIME;
if (do_a)
- obj->yst_atime = obj->yst_atime;
+ obj->yst_atime = obj->yst_mtime;
if (do_c)
- obj->yst_ctime = obj->yst_atime;
+ obj->yst_ctime = obj->yst_mtime;
#endif
}
}
#if !CONFIG_YAFFS_WINCE
+ // if the the buffer is null then create one with the fields set to the current time.
if (!buf) {
local.actime = Y_CURRENT_TIME;
local.modtime = local.actime;
buf = &local;
}
+ // copy the buffer's time into the obj.
if (obj) {
int result;
obj->yst_atime = buf->actime;
obj->yst_mtime = buf->modtime;
+
+ // set the obj to dirty to cause it to be written to flash during the next flush operation.
obj->dirty = 1;
result = yaffs_flush_file(obj, 0, 0, 0);
retVal = result == YAFFS_OK ? 0 : -1;
{
int retVal = -1;
- if (yaffsfs_CheckMemRegion(path, 0, 0) < 0) {
- yaffsfs_SetError(-EFAULT);
- return -1;
- }
- if (yaffsfs_CheckPath(path) < 0) {
- yaffsfs_SetError(-ENAMETOOLONG);
- return -1;
+ if (!dev) {
+ if (yaffsfs_CheckMemRegion(path, 0, 0) < 0) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
+ }
+
+ if (yaffsfs_CheckPath(path) < 0) {
+ yaffsfs_SetError(-ENAMETOOLONG);
+ return -1;
+ }
}
yaffsfs_Lock();
unsigned long yst_wince_mtime[2];
unsigned long yst_wince_ctime[2];
#else
- unsigned long yst_atime; /* time of last access */
- unsigned long yst_mtime; /* time of last modification */
- unsigned long yst_ctime; /* time of last change */
+ YTIME_T yst_atime; /* time of last access */
+ YTIME_T yst_mtime; /* time of last modification */
+ YTIME_T yst_ctime; /* time of last change */
#endif
};
struct yaffs_utimbuf {
- unsigned long actime;
- unsigned long modtime;
+ YTIME_T actime;
+ YTIME_T modtime;
};
/* Normal POSIX-style API functions */
#define BUG() do { yaffs_bug_fn(__FILE__, __LINE__); } while (0)
+#ifdef CONFIG_YAFFS_USE_32_BIT_TIME_T
+ #define YTIME_T u32
+#else
+ #define YTIME_T u64
+#endif
#define YCHAR char
#define YUCHAR unsigned char
#define CONFIG_YAFFS_PROVIDE_DEFS 1
#define CONFIG_YAFFSFS_PROVIDE_VALUES 1
#define CONFIG_YAFFS_DEFINES_TYPES 1
+#define CONFIG_YAFFS_USE_32_BIT_TIME_T 1
#define NO_Y_INLINE 1
#define loff_t off_t
# Files to be made into local symlinks
YCORE_SYMLINKS = \
yaffs_ecc.c \
+ yaffs_cache.c \
yaffs_endian.c \
yaffs_guts.c \
yaffs_packedtags1.c \
yaffs_verify.c \
yaffs_summary.c \
yaffs_tagsmarshall.c\
+ yaffs_cache.h \
yaffs_ecc.h \
yaffs_guts.h \
yaffs_packedtags1.h \
LIB_PIECES = yaffs_ecc \
yaffs_endian \
yaffs_guts \
+ yaffs_cache \
yaffs_packedtags1 \
yaffs_tagscompat \
yaffs_tagsmarshall\
Building test application
-$ cd rtems-y-test/
+$ cd rtems-y-test/basic-test
+$ make
-
-
-Running
-
-$ sparc-rtems5-sis hello_world_c/o-optimize/hello.exe
+$ sparc-rtems5-sis o-optimize/yaffs-rtems-test.exe
SIS - SPARC/RISCV instruction simulator 2.20, copyright Jiri Gaisler 2019
Bug-reports to jiri@gaisler.se
ERC32 emulation enabled
- Loaded hello_world_c/o-optimize/hello.exe, entry 0x02000000
+ Loaded o-optimize/yaffs-rtems-test.exe, entry 0x02000000
sis> go
resuming at 0x02000000
-
-
-*** HELLO WORLD TEST ***
-Hello World 123
-*** END OF HELLO WORLD TEST ***
-
-*** FATAL ***
-fatal source: 5 (RTEMS_FATAL_SOURCE_EXIT)
-fatal code: 0 (0x00000000)
-RTEMS version: 5.0.0.e22554535796fc29a7ed7c5e2338128e324a621d-modified
-RTEMS tools: 7.5.0 20191114 (RTEMS 5, RSB 5 (599c4d7c87fa), Newlib d14714c69)
-executing thread ID: 0x08a010001
-executing thread name: UI1
-cpu 0 in error mode (tt = 0x101)
- 125619 0200c0e0: 91d02000 ta 0x0
-sis>
+Starting
+Created simulated flash device 0x2d203c8
+yaffs: 0 blocks to be sorted...
+....
Running with GDB
obj = yaffs_get_equivalent_obj(obj);
if (obj != NULL) {
obj->dirty = 1;
- obj->yst_atime = (u32) actime;
- obj->yst_mtime = (u32) modtime;
- obj->yst_ctime = (u32) time(NULL);
+ obj->yst_atime = actime;
+ obj->yst_mtime = modtime;
+ obj->yst_ctime = time(NULL);
} else {
errno = EIO;
rv = -1;
mode = S_IFLNK |
((S_IRWXU | S_IRWXG | S_IRWXO) & ~rtems_filesystem_umask);
- created_link = yaffs_create_symlink(parent_dir, name, mode,
+ created_link = yaffs_create_symlink(parent_dir, name, mode,
geteuid(), getegid(), target);
if (created_link != NULL) {
free(ptr);
}
-u32 yaffsfs_CurrentTime(void)
+YTIME_T yaffsfs_CurrentTime(void)
{
return time(NULL);
}
{
obj->yst_uid = oh->yst_uid;
obj->yst_gid = oh->yst_gid;
- obj->yst_atime = oh->yst_atime;
- obj->yst_mtime = oh->yst_mtime;
- obj->yst_ctime = oh->yst_ctime;
+
+ obj->yst_ctime = yaffs_oh_ctime_fetch(oh);
+ obj->yst_mtime = yaffs_oh_mtime_fetch(oh);
+ obj->yst_atime = yaffs_oh_atime_fetch(oh);
+
obj->yst_rdev = oh->yst_rdev;
}
{
oh->yst_uid = obj->yst_uid;
oh->yst_gid = obj->yst_gid;
- oh->yst_atime = obj->yst_atime;
- oh->yst_mtime = obj->yst_mtime;
- oh->yst_ctime = obj->yst_ctime;
+
+ yaffs_oh_ctime_load(obj, oh);
+ yaffs_oh_mtime_load(obj, oh);
+ yaffs_oh_atime_load(obj, oh);
+
oh->yst_rdev = obj->yst_rdev;
}
yaffs_update_oh(obj, NULL, 1, 0, 0, NULL);
return YAFFS_OK;
-
}
int yaffs_get_attribs(struct yaffs_obj *obj, struct iattr *attr)
((val <<24) & 0xff000000);
}
+static inline u64 swap_u64(u64 val)
+{
+ return ((val >> 56) & 0x00000000000000ff) |
+ ((val >> 40) & 0x000000000000ff00) |
+ ((val >> 24) & 0x0000000000ff0000) |
+ ((val >> 8) & 0x00000000ff000000) |
+ ((val << 8) & 0x000000ff00000000) |
+ ((val << 24) & 0x0000ff0000000000) |
+ ((val << 40) & 0x00ff000000000000) |
+ ((val << 56) & 0xff00000000000000);
+}
+
+static inline YTIME_T swap_ytime_t(YTIME_T val)
+{
+
+ if (sizeof(YTIME_T) == sizeof(u64))
+ return swap_u64(val);
+ else
+ return swap_u32(val);
+}
+
+//swap a signed 32 bit integer.
#define swap_s32(val) \
(s32)(swap_u32((u32)(val)))
}
+/* Frees all the temp_buffer objects in the yaffs_dev instance
+*/
void yaffs_release_temp_buffer(struct yaffs_dev *dev, u8 *buffer)
{
int i;
kfree(dev->checkpt_block_list);
dev->checkpt_block_list = NULL;
+ dev->ll_init = 0;
dev->is_mounted = 0;
yaffs_deinit_nand(dev);
return n_free;
}
+/*
+ * Marshalling functions to get the appropriate time values saved
+ * and restored to/from obj headers.
+ *
+ * Note that the WinCE time fields are used to store the 32-bit values.
+ */
+
+static void yaffs_oh_time_load(u32 *yst_time, u32 *win_time, YTIME_T timeval)
+{
+ u32 upper;
+ u32 lower;
+
+ lower = timeval & 0xffffffff;
+ /* we have to use #defines here insted of an if statement
+ otherwise the compiler throws an error saying that
+ right shift count >= width of type when we are using 32 bit time.
+ */
+ #ifdef CONFIG_YAFFS_USE_32_BIT_TIME_T
+ upper = 0;
+ #else
+ upper = (timeval >> 32) & 0xffffffff;
+ #endif
+
+ *yst_time = lower;
+ win_time[0] = lower;
+ win_time[1] = upper;
+}
+
+static YTIME_T yaffs_oh_time_fetch(const u32 *yst_time, const u32 *win_time)
+{
+ u32 upper;
+ u32 lower;
+
+ if (win_time[1] == 0xffffffff) {
+ upper = 0;
+ lower = *yst_time;
+ } else {
+ upper = win_time[1];
+ lower = win_time[0];
+ }
+ if (sizeof(YTIME_T) > sizeof(u32)) {
+ u64 ret;
+ ret = (((u64)upper) << 32) | lower;
+ return (YTIME_T) ret;
+
+ } else
+ return (YTIME_T) lower;
+}
+
+YTIME_T yaffs_oh_ctime_fetch(struct yaffs_obj_hdr *oh)
+{
+ return yaffs_oh_time_fetch(&oh->yst_ctime, oh->win_ctime);
+}
+
+YTIME_T yaffs_oh_mtime_fetch(struct yaffs_obj_hdr *oh)
+{
+ return yaffs_oh_time_fetch(&oh->yst_mtime, oh->win_mtime);
+}
+
+YTIME_T yaffs_oh_atime_fetch(struct yaffs_obj_hdr *oh)
+{
+ return yaffs_oh_time_fetch(&oh->yst_atime, oh->win_atime);
+}
+
+void yaffs_oh_ctime_load(struct yaffs_obj *obj, struct yaffs_obj_hdr *oh)
+{
+ yaffs_oh_time_load(&oh->yst_ctime, oh->win_ctime, obj->yst_ctime);
+}
+
+void yaffs_oh_mtime_load(struct yaffs_obj *obj, struct yaffs_obj_hdr *oh)
+{
+ yaffs_oh_time_load(&oh->yst_mtime, oh->win_mtime, obj->yst_mtime);
+}
+
+void yaffs_oh_atime_load(struct yaffs_obj *obj, struct yaffs_obj_hdr *oh)
+{
+ yaffs_oh_time_load(&oh->yst_atime, oh->win_atime, obj->yst_atime);
+}
+
/*
* Marshalling functions to get loff_t file sizes into and out of
u32 yst_rdev; /* stuff for block and char devices (major/min) */
+ /*
+ * WinCE times are no longer just used to store WinCE times.
+ * They are also used to store 64-bit times.
+ * We actually store and read the times in both places and use
+ * the best we can.
+ */
u32 win_ctime[2];
u32 win_atime[2];
u32 win_mtime[2];
YCHAR short_name[YAFFS_SHORT_NAME_LENGTH + 1];
#ifdef CONFIG_YAFFS_WINCE
+ //these are always 64 bits
u32 win_ctime[2];
u32 win_mtime[2];
u32 win_atime[2];
#else
- u32 yst_uid;
- u32 yst_gid;
- u32 yst_atime;
- u32 yst_mtime;
- u32 yst_ctime;
+ //these can be 32 or 64 bits
+ YTIME_T yst_uid;
+ YTIME_T yst_gid;
+ YTIME_T yst_atime;
+ YTIME_T yst_mtime;
+ YTIME_T yst_ctime;
#endif
u32 yst_rdev;
int yaffs_find_chunk_in_file(struct yaffs_obj *in, int inode_chunk,
struct yaffs_ext_tags *tags);
+/*
+ *Time marshalling functions
+ */
+
+YTIME_T yaffs_oh_ctime_fetch(struct yaffs_obj_hdr *oh);
+YTIME_T yaffs_oh_mtime_fetch(struct yaffs_obj_hdr *oh);
+YTIME_T yaffs_oh_atime_fetch(struct yaffs_obj_hdr *oh);
+
+void yaffs_oh_ctime_load(struct yaffs_obj *obj, struct yaffs_obj_hdr *oh);
+void yaffs_oh_mtime_load(struct yaffs_obj *obj, struct yaffs_obj_hdr *oh);
+void yaffs_oh_atime_load(struct yaffs_obj *obj, struct yaffs_obj_hdr *oh);
+
/*
* Define LOFF_T_32_BIT if a 32-bit LOFF_T is being used.
* Not serious if you get this wrong - you might just get some warnings.
#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
inode->i_rdev = old_decode_dev(obj->yst_rdev);
- inode->i_atime.tv_sec = (time_t) (obj->yst_atime);
+ inode->i_atime.tv_sec = (YTIME_T) (obj->yst_atime);
inode->i_atime.tv_nsec = 0;
- inode->i_mtime.tv_sec = (time_t) obj->yst_mtime;
+ inode->i_mtime.tv_sec = (YTIME_T) obj->yst_mtime;
inode->i_mtime.tv_nsec = 0;
- inode->i_ctime.tv_sec = (time_t) obj->yst_ctime;
+ inode->i_ctime.tv_sec = (YTIME_T) obj->yst_ctime;
inode->i_ctime.tv_nsec = 0;
#else
inode->i_rdev = obj->yst_rdev;
inode->i_rdev = old_decode_dev(obj->yst_rdev);
- inode->i_atime.tv_sec = (time_t) (obj->yst_atime);
+ inode->i_atime.tv_sec = (YTIME_T) (obj->yst_atime);
inode->i_atime.tv_nsec = 0;
- inode->i_mtime.tv_sec = (time_t) obj->yst_mtime;
+ inode->i_mtime.tv_sec = (YTIME_T) obj->yst_mtime;
inode->i_mtime.tv_nsec = 0;
- inode->i_ctime.tv_sec = (time_t) obj->yst_ctime;
+ inode->i_ctime.tv_sec = (YTIME_T) obj->yst_ctime;
inode->i_ctime.tv_nsec = 0;
inode->i_size = yaffs_get_obj_length(obj);
inode->i_blocks = (inode->i_size + 511) >> 9;
#define YUCHAR unsigned char
#define _Y(x) x
+#define YTIME_T u64
+
#define YAFFS_LOSTNFOUND_NAME "lost+found"
#define YAFFS_LOSTNFOUND_PREFIX "obj"
#define YCHAR char
#define YUCHAR unsigned char
#define _Y(x) x
+#define YTIME_T u64
+
#define YAFFS_LOSTNFOUND_NAME "lost+found"
#define YAFFS_LOSTNFOUND_PREFIX "obj"