int bdemu_version(s32* bdemu_fd) { s32 fd, fd_mm; u64 size = 0, size_mm = 0; //Open possible BDEMU.BIN files. if(sysLv2FsOpen(BDEMU, SYS_O_RDONLY, &fd, 0660, NULL, 0) == 0) { sysFSStat stat; sysLv2FsFStat(fd, &stat); size = stat.st_size; } if(sysLv2FsOpen(BDEMU_MM, SYS_O_RDONLY, &fd_mm, 0660, NULL, 0) == 0) { sysFSStat stat; sysLv2FsFStat(fd_mm, &stat); size_mm = stat.st_size; } //Try to get newest version. if(size == BDEMU2_SIZE || size_mm == BDEMU2_SIZE) { if(size == BDEMU2_SIZE) { *bdemu_fd = fd; } else if(size_mm == BDEMU2_SIZE) { *bdemu_fd = fd_mm; } return 2; } else if(size == BDEMU1_SIZE || size_mm == BDEMU1_SIZE) { if(size == BDEMU1_SIZE) { *bdemu_fd = fd; } else if(size_mm == BDEMU1_SIZE) { *bdemu_fd = fd_mm; } return 1; } else { return 0; } }
int CopyFile(const char *source, const char *dest){ s32 src = -1; s32 dst = -1; sysFSStat stats; char buffer[BLOCK_SIZE]; u64 i; s32 ret; ret = sysLv2FsOpen(source, SYS_O_RDONLY, &src, 0, NULL, 0); if (ret) goto out; ret = sysLv2FsOpen(dest, SYS_O_WRONLY | SYS_O_CREAT | SYS_O_TRUNC, &dst, 0, NULL, 0); if (ret) goto out; sysLv2FsChmod(dest, S_IFMT | 0777); sysLv2FsFStat(src, &stats); for (i = 0; i < stats.st_size;) { u64 pos, read, written; sysLv2FsLSeek64(src, i, 0, &pos); sysLv2FsLSeek64(dst, i, 0, &pos); ret = sysLv2FsRead(src, buffer, sizeof(buffer), &read); if (ret || !read) break; ret = sysLv2FsWrite(dst, buffer, read, &written); if (ret || !written) break; i += written; } out: if (src >= 0) sysLv2FsClose(src); if (dst >= 0) sysLv2FsClose(dst); return ret; }
dst->st_ctime = src->st_ctime; dst->st_size = src->st_size; dst->st_blksize = src->st_blksize; } int _DEFUN(__librt_fstat_r,(r,fd,st), struct _reent *r _AND int fd _AND struct stat *st) { s32 ret = 0; sysFSStat stat; ret = sysLv2FsFStat(fd,&stat); if(!ret && st) convertLv2Stat(st,&stat); return lv2errno_r(r,ret); } int _DEFUN(__librt_fstat64_r,(r,fd,st), struct _reent *r _AND int fd _AND struct stat *st) { s32 ret = 0; sysFSStat stat; ret = sysLv2FsFStat(fd,&stat);