int CopyFile(char* path, char* path2) { int ret = 0; s32 fd = -1; s32 fd2 = -1; u64 lenght = 0LL; u64 pos = 0ULL; u64 readed = 0, writed = 0; char *mem = NULL; sysFSStat stat; ret= sysLv2FsStat(path, &stat); if(ret) goto skip; if(!memcmp(path, "/dev_hdd0/", 10) && !memcmp(path2, "/dev_hdd0/", 10)) { if(strcmp(path, path2)==0) return ret; sysLv2FsUnlink(path2); return sysLv2FsLink(path, path2); } lenght = stat.st_size; ret = sysLv2FsOpen(path, 0, &fd, S_IRWXU | S_IRWXG | S_IRWXO, NULL, 0); if(ret) goto skip; ret = sysLv2FsOpen(path2, SYS_O_WRONLY | SYS_O_CREAT | SYS_O_TRUNC, &fd2, 0777, NULL, 0); if(ret) {sysLv2FsClose(fd);goto skip;} mem = malloc(0x100000); if (mem == NULL) return FAILED; while(pos < lenght) { readed = lenght - pos; if(readed > 0x100000ULL) readed = 0x100000ULL; ret=sysLv2FsRead(fd, mem, readed, &writed); if(ret<0) goto skip; if(readed != writed) {ret = 0x8001000C; goto skip;} ret=sysLv2FsWrite(fd2, mem, readed, &writed); if(ret<0) goto skip; if(readed != writed) {ret = 0x8001000C; goto skip;} pos += readed; } skip: if(mem) free(mem); if(fd >=0) sysLv2FsClose(fd); if(fd2>=0) sysLv2FsClose(fd2); if(ret>0) ret = SUCCESS; return ret; }
int WriteToLog(char *str) { if(fd_log < 0 ) return FAILED; if(!str) return SUCCESS; u64 size = strlen(str); if(size == 0) return SUCCESS; u64 ret_size = 0; sprintf(str,"%s", str); if(sysLv2FsWrite(fd_log, str, size, &ret_size) || ret_size!=size) { return FAILED; } return SUCCESS; }
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; }