Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}
Esempio n. 3
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;
}