--- /dev/null
+import os
+from yaffsfs import *
+
+yaffs_StartUp()
+yaffs_mount("/yaffs2/")
+absolute_path = os.path.abspath(os.path.curdir)
+print "absolute path:", absolute_path
+#cwd = os.getcwd()
+#print cwd
+dir_in_snapshot=[]
+files_in_snapshot=[]
+symlinks_in_snapshot=[]
+unknown_in_snapshot=[]
+is_mount_in_snapshot=[]
+#def scandir(path):
+# global dir_in_snapshot
+# global files_in_snapshot
+# global symlinks_in_snapshot
+# global unknown_in_snapshot
+#path=raw_input("path")
+#print "does this path exist?", os.path.exists(path)
+#dir_snapshot=os.listdir(path)
+#print dir_snapshot
+def is_dir_hidden(dir):
+ slash_id=[]
+ for i in range(0, len(dir)):
+ if dir[i]=="/":
+ slash_id.append(i)
+ #print "dir", dir
+ #print "slash_id", slash_id
+ if dir[slash_id[len(slash_id)-1]+1]==".":
+ return True
+ else :
+ return False
+
+def scan_dir(path):
+ global files_in_snapshot
+ global symlinks_in_snapshot
+ global search_hidden_directories
+ dir_in_current_dir=[]
+ if os.path.exists(path)==False:
+ print "error#############################"
+ print "path:", path, " doesnot exist"
+ return 0
+ dir_snapshot=os.listdir(path)
+ for i in range(0, len(dir_snapshot)):
+ #print os.path.isdir(dir_snapshot[i])
+ #print os.path.isfile(dir_snapshot[i])
+ #print os.path.islink(dir_snapshot[i])
+ current_snapshot=os.path.join(path, dir_snapshot[i])
+ #print "current snapshot:", current_snapshot
+ isDir=os.path.isdir(current_snapshot)
+ isFile=os.path.isfile(current_snapshot)
+ isLink=os.path.islink(current_snapshot)
+ isMount=os.path.ismount(current_snapshot)
+ #print dir_snapshot[i]
+ if isDir:
+ if search_hidden_directories==True or is_dir_hidden(current_snapshot) ==False :
+ stat=os.stat(current_snapshot)
+# st_mode ##mode of the folder read/write ect
+ dir_in_snapshot.append({"path":current_snapshot, "mode":stat.st_mode})
+ dir_in_current_dir.append(current_snapshot)
+ else :
+ print "file is hidden so it is ingored", current_snapshot
+ elif isFile:
+ stat=os.stat(current_snapshot)
+# stat.st_ino ##inode number
+# st_nlink ##number of hard links to this file
+# st_size ##size of file
+ files_in_snapshot.append({"path":current_snapshot, "inode": stat.st_ino, "size":stat.st_size, "num_of_hardlinks":stat.st_nlink, "mode":stat.st_mode})
+ elif isLink:
+ symlinks_in_snapshot.append(current_snapshot)
+ elif isMount:
+ is_mount_in_snapshot.append(current_snapshot)
+ else:
+ unknown_in_snapshot.append(current_snapshot)
+
+ for i in range(0, len(dir_in_current_dir)):
+ scan_dir(dir_in_current_dir[i])
+
+def print_scanned_dir_list():
+ global files_in_snapshot
+ global symlinks_in_snapshot
+ print "scanned dir"
+
+
+ for i in range(0, len(files_in_snapshot)):
+ if files_in_snapshot[i]["num_of_hardlinks"]>1:
+ print "inode",files_in_snapshot[i]["inode"],"size",files_in_snapshot[i]["size"],"path:", files_in_snapshot[i]["path"], " num of hard links", files_in_snapshot[i]["num_of_hardlinks"]
+
+ else :
+ print "inode",files_in_snapshot[i]["inode"],"size",files_in_snapshot[i]["size"],"path:", files_in_snapshot[i]["path"]
+# current_open_file=open(files_in_snapshot[i], "r")
+# #current_open_file.f.read(3)
+# lines_in_file=current_open_file.readlines()
+# #use for loop to write code into yaffs file
+# print "number of line of code:", len(lines_in_file)
+# print current_open_file
+ for i in range(0, len(symlinks_in_snapshot)):
+ print "symlinks in snapshot:", symlinks_in_snapshot[i]
+ for i in range(0, len(dir_in_snapshot)):
+ print "directories in snapshot:", dir_in_snapshot[i]
+ for i in range(0, len(unknown_in_snapshot)):
+ print "unknown objects in snapshot:", unknown_in_snapshot[i]
+
+def copy_scanned_files_into_yaffs():
+ global files_in_snapshot
+ global symlinks_in_snapshot
+ global path
+ print"making directories in yaffs"
+
+ for i in range(0, len(dir_in_snapshot)):
+ path2=dir_in_snapshot[i]["path"][len(path):]
+ print"path2", path2
+ dir_path="/yaffs2"+path2
+ output=yaffs_mkdir(dir_path,dir_in_snapshot[i]["mode"] )
+ print"copied", dir_path, " output", output
+ print "mode" ,dir_in_snapshot[i]["mode"]
+ print "copying scanned files into yaffs"
+
+
+ for i in range(0, len(files_in_snapshot)):
+ if files_in_snapshot[i]["num_of_hardlinks"]>1:
+ print "inode",files_in_snapshot[i]["inode"],"size",files_in_snapshot[i]["size"],"path:", files_in_snapshot[i]["path"], " num of hard links", files_in_snapshot[i]["num_of_hardlinks"]
+
+ else :
+ file_path=files_in_snapshot[i]["path"][len(path):]
+ current_handle=yaffs_open("yaffs2/"+file_path, 66, files_in_snapshot[i]["mode"])
+ output=yaffs_close(current_handle)
+ print "created a file", files_in_snapshot[i]["path"][len(path):], " ", output
+ print "inode",files_in_snapshot[i]["inode"],"size",files_in_snapshot[i]["size"],"path:", files_in_snapshot[i]["path"]
+
+# current_open_file=open(files_in_snapshot[i], "r")
+# #current_open_file.f.read(3)
+# lines_in_file=current_open_file.readlines()
+# #use for loop to write code into yaffs file
+# print "number of line of code:", len(lines_in_file)
+# print current_open_file
+ for i in range(0, len(symlinks_in_snapshot)):
+ print "symlinks in snapshot:", symlinks_in_snapshot[i]
+ for i in range(0, len(dir_in_snapshot)):
+ print "directories in snapshot:", dir_in_snapshot[i]
+ for i in range(0, len(unknown_in_snapshot)):
+ print "unknown objects in snapshot:", unknown_in_snapshot[i]
+
+
+#path=raw_input("path")
+path="/home/timothy/work/yaffs/git/yaffs2"
+#path="/home/timothy"
+
+#x=raw_input("search hidden files and directories?[y/n]")
+x="n"
+if x=="y" or x=="yes":
+ search_hidden_directories=True
+else :
+ search_hidden_directories=False
+scan_dir(path)
+copy_scanned_files_into_yaffs()
+#print_scanned_dir_list()
+
+print"unmounting yaffs:", yaffs_unmount("yaffs2/")