#include #include #include extern char __argv; extern char __path; const char* getfullpath(const char *path){ int i,j,relpath_pos,localpath_size; int filename_size; char local_path; char *programpath; char *newpath; i=0; local_path=1; //enable local path while((*(path+i)!='\0') || (*(path+i)!=0)) { if (*(path+i)=='.') { if (*(path+i+1)=='/') { //detected relative path relpath_pos=i+2; local_path=0; break; } } if (*(path+i)=='/') { //disabple local path local_path=0; return(path); } i++; } filename_size=i; programpath=&__path; if (local_path==1) { i=0x400; //find local path of program while(*(programpath+i)!='/') { i--; } localpath_size=i; newpath=malloc(0x400); //copy local path to the new path for(i=0;i<=localpath_size;i++) { *(newpath+i)=*(programpath+i); } //copy filename to the new path for(i=0;ibuffer=malloc(256); res->buffersize=256; res->filesize=0; res->filepos=0; res->mode=imode; res->filename=getfullpath(filename); if ((imode==FILE_OPEN_READ) || (imode==FILE_OPEN_APPEND)) { res->filesize=_ksys_get_filesize(res->filename); } return res; }