int recvfile(int socket_e, const char filename[512], int rest)
{
	int ret = -1;
	Lv2FsFile fd;

	char *buf = (char*)malloc(BUFFER_SIZE);

	if(buf != NULL && lv2FsOpen(filename, LV2_O_WRONLY | LV2_O_CREAT, &fd, 0644, NULL, 0) == 0)
	{
		u64 read_e, write_e = 0, pos;

		if(rest > 0)
		{
			lv2FsLSeek64(fd, (s64)rest, SEEK_SET, &pos);
		}
		else
		{
			lv2FsFtruncate(fd, 0);
		}

		ret = 0;

		while((read_e = (u64)recv(socket_e, buf, BUFFER_SIZE, MSG_WAITALL)) > 0)
		{
			if(lv2FsWrite(fd, buf, read_e, &write_e) != 0 || write_e < read_e)
			{
				// write error
				ret = -1;
				break;
			}
		}
		lv2FsClose(fd);
	}
	
	if(buf) {
		free(buf);
		*&buf = NULL;
	}

	return ret;
}
Example #2
0
int psl1ght_ftruncate_r(struct _reent* r, int fd, off_t length)
{
	return lv2ErrnoReentrant(r, lv2FsFtruncate(fd, length));
}
Example #3
0
int ftruncate(int fd, off_t length)
{
	return lv2Errno(lv2FsFtruncate(fd, length));
}