//opens/create file bool __SYSCALL OpenFile(FILE* file, const char* filename, bool bCreate) { COMPILE_TIME_CHECK(sizeof(FILE)==sizeof(HANDLE)); HANDLE hFile = CreateFile(filename, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, bCreate ? OPEN_ALWAYS : OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) return false; memcpy(file, &hFile, 4); return true; }
//__SYSCALL return length written int __SYSCALL AppendFile(FILE* file, char* buf, int len) { COMPILE_TIME_CHECK(sizeof(FILE)==sizeof(HANDLE)); HANDLE hFile; memcpy(&hFile, file, sizeof(FILE)); if (!SetEndOfFile(hFile)) return 0; return WriteFile(file, buf, len); }
//__SYSCALL returns length written int __SYSCALL WriteFile(FILE* file, char* buf, int len) { DWORD retlen; COMPILE_TIME_CHECK(sizeof(FILE)==sizeof(HANDLE)); HANDLE hFile; memcpy(&hFile, file, sizeof(FILE)); if (len < 0) return 0; BOOL res = ::WriteFile( hFile, buf, len, &retlen, NULL); if (res) return retlen; return 0; }
int cfs_opendir (struct cfs_dir *dirp, const char *name) { DirList *dirs; COMPILE_TIME_CHECK(sizeof(DirList*) <= sizeof(struct cfs_dir)); if (sdcard_efs.myCard.sectorCount == 0) return -1; dirs = find_free_dir_list(); if (!dirs) return -1; if (ls_openDir(dirs, &sdcard_efs.myFs, (eint8*)name) != 0) { dirs->fs = NULL; return -1; } *(DirList**)dirp = dirs; return 0; }