📄 ffs_util.c
字号:
{ idir=_ffs_GetBit16Value(ffse2->inode); _ffs_prepend(appname,sizeof appname,"/"); cp=ffse2->data; for(j=0;(j<iFileNameLength2)&&(j<((sizeof dirname)-1));j++) dirname[j]=*cp++; dirname[j]=0; _ffs_prepend(appname,sizeof appname,dirname); } } ffse2=ffs_GetNextFileSystemEntry(ffse2); } } _ffs_prepend(appname,sizeof appname,"/"); AppCopyVectors(); argc=1; argv[0]=appname; gopc=progloader(argc,argv); init_env(); ResetMMS(); if (gopc) { dsts=ExeAt(gopc,argc,argv,(char **)env_vars); PrintfRestore(); } if (dsts&0x80000000) tsts=dsts; } } ffse=ffs_GetNextFileSystemEntry(ffse); } } return(tsts); }int ffs_autoload(void) { int i; for(i=0;i<ffs_iNumOfFlashMounts;i++) { _ffs_autoexecute(i,ffs_sFlashFileSystemsMounts[i].ffs_ptr); } return(0); }bit32u ffs_dumpfilesystem(int argc, char *argv[]) { int i,show_deleted; char *cp; show_deleted=FALSE; for(i=1;i<argc;i++) { cp=argv[i]; if (*cp=='-') { cp++; while(*cp) { switch(*cp) { case 'a': show_deleted=TRUE; break; default: break; } cp++; } } } for(i=0;i<ffs_iNumOfFlashMounts;i++) { _ffs_DumpFlashDisk(i,ffs_sFlashFileSystemsMounts[i].ffs_ptr,show_deleted); } return(0); }void ffs_ReportFFSInfo(void) { ffs_tEntry *ffse; int i,iSlot,iFlashFileSystemSize,iCurrentFreeSpace,iFreeSpaceAfterCleanUp; int iCurrentUsedSpace,iFileLength,iFileNameLength,iFileFlags; sys_printf("\n"); sys_printf("Mounted File Systems: %d.\n",ffs_iNumOfFlashMounts); for(i=0;i<ffs_iNumOfFlashMounts;i++) { ffse=ffs_sFlashFileSystemsMounts[i].ffs_ptr; iSlot=ffs_sFlashFileSystemsMounts[i].slot; ffse=(ffs_tEntry *)(((char *)ffse)+4); iFlashFileSystemSize=_ffs_GetBit32Value((char *)ffse); iCurrentFreeSpace=iFreeSpaceAfterCleanUp=iFlashFileSystemSize-10; iCurrentUsedSpace=0; ffse=(ffs_tEntry *)(((char *)ffse)+4); while(_ffs_GetBit16Value(ffse->inode)!=0xffff) { iFileLength=_ffs_GetBit24Value(ffse->flen); iFileNameLength=ffse->fnlen&0x0ff; iFileFlags=_ffs_GetBit16Value(ffse->flags); ffse=(ffs_tEntry *)(((char *)ffse)+(sizeof(ffs_tEntry)-1)+iFileLength+iFileNameLength); iCurrentFreeSpace-=(sizeof(ffs_tEntry)-1)+iFileLength+iFileNameLength; if (iFileFlags&FFS_F_DELETE) { iFreeSpaceAfterCleanUp-=(sizeof(ffs_tEntry)-1)+iFileLength+iFileNameLength; iCurrentUsedSpace+=iFileLength; } } sys_printf("Slot=%2d, Total=%8d, Used=%8d, Available=",iSlot,iFlashFileSystemSize-10,iCurrentUsedSpace); if (iCurrentFreeSpace==iFreeSpaceAfterCleanUp) sys_printf("%8d\n",iCurrentFreeSpace); else sys_printf("%8d / %d\n",iCurrentFreeSpace,iFreeSpaceAfterCleanUp); } }/*void ffs_find_new_ffs(void) *//* { *//* *//* *//* } *//*void ffs_findfirst(cbit8 uid,cbit8 gid,cbit8 *rstruct) *//* { *//* *//* *//* *//* } *//*void ffs_findnext(cbit8 uid,cbit8 gid,cbit8 *rstruct) *//* { *//* *//* *//* *//* } */ffs_tEntry *ffs_GetNextFileSystemEntry(ffs_tEntry *ffse) { int iFileNameLength; bit32 iFileLength; iFileLength=_ffs_GetBit24Value(ffse->flen); iFileNameLength=ffse->fnlen&0x0ff; return((ffs_tEntry *)(((char *)ffse)+(sizeof(ffs_tEntry)-1)+iFileLength+iFileNameLength)); }/*void ls(char filename) *//* { *//* *//* AceGetMyUidGid(&uid,&gid); *//* *//* *//* *//* *//* } */void get_cwd(char *tmpfile) { strcpy(tmpfile,"/tmp"); }void ffs_AbandonWrite(FFS_FILE *stream) { ffs_tEntry *ffse; if ((stream->_FileState&FILE_OPEN)==0) return; if (stream->_SubSystemType!=FILE_FLASH) return; if ((stream->_FileState&FILE_WRITE)==0) return; ffse=(ffs_tEntry *)stream->_BufferBase; stream->_FileState=FILE_FREE; sys_free(ffse); }static char RootFlash[]={'F','F','S',0,0x00,0x00,0x0e,0x00, 0,0,0xff,0x83,0x7e,0xff,0x34,0x12,0,0,3,2,0,0,0, 'e','t','c', 1,0, 0,0,0xff,0x83,0x7e,0xff,0x34,0x12,0,0,3,2,0,0,0, 'b','i','n', 2,0, 1,0,0xc0,0x81,0xda,0x3a,0,0,0,0,8,7,0,0,3, 0x68,0x6f,0x73,0x74,0x6e,0x61,0x6d,0x65, 0x6d,0x79,0x73,0x65,0x6c,0x66,0x0a, 0xff,0xff};int _ffs_FormatRootFlashDisk(int argc, char *argv[]) { int i,slot; bit32u adr1,bootblocksize,envblocksize; slot=0; sys_printf("Formating Flash Disk\n"); if (ffs_RemoveSlotMount(slot)==FFS_ERRS_NO_ERROR) sys_printf("Flash Disk Unmounted\n"); bootblocksize=FWBGetBlockSize(CS0_BASE); if (bootblocksize<MIN_BOOT_BLOCK_SIZE) bootblocksize=MIN_BOOT_BLOCK_SIZE; envblocksize=FWBGetBlockSize(CS0_BASE+CS0_SIZE-1); if (envblocksize<MIN_ENV_BLOCK_SIZE) envblocksize=MIN_ENV_BLOCK_SIZE; i=getflashsize(CS0_BASE,CS0_SIZE)/(1024*1024); sys_printf("Calculated Flash size: %d Mbytes\n",i); adr1=1024*1024*i; adr1-=bootblocksize+envblocksize; if (argc!=7) { if (!FWBErase(CS0_BASE+bootblocksize,adr1,1)) { sys_printf("\nFormatting Flash disk Failed!"); return(0); } } sys_printf("\n"); FWBOpen(CS0_BASE+bootblocksize); for(i=0;i<sizeof(RootFlash);i++) { if ((i>=4)&&(i<=7)) { FWBWriteByte(CS0_BASE+bootblocksize+i,(char)(adr1>>((i-4)*8))); } else FWBWriteByte(CS0_BASE+bootblocksize+i,RootFlash[i]); } FWBClose(); if (ffs_AddFileSystem(0,(void *)(CS0_BASE+bootblocksize))==FFS_ERRS_NO_ERROR) sys_printf("Flash Disk Mounted\n"); return(0); }ffs_tEntry *GetFfsBase(int ffs_index) { if(ffs_index<ffs_iNumOfFlashMounts) return(ffs_sFlashFileSystemsMounts[ffs_index].ffs_ptr); else return(0); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -