コード例 #1
0
static filepos_t Seek(filestream* p,filepos_t Pos,int SeekMode)
{
	int Pos = fileXioLseek(p->fd, Pos, SeekMode);
    if (Pos<0)
        return INVALID_FILEPOS_T;
    return Pos;
}
コード例 #2
0
ファイル: file.c プロジェクト: smiley22/myPS2
int FileSeek( FHANDLE handle, long offset, int whence )
{
	int ret = 0;

	if( handle.dt == DT_CD ) {
		ret = fioLseek( handle.fh, offset, whence );
	}
	else if( handle.dt == DT_HDD ) {
		ret = fileXioLseek( handle.fh, offset, whence );
	}
	else if( handle.dt == DT_MC ) {
		ret = fioLseek( handle.fh, offset, whence );
	}
	else if( handle.dt == DT_USB ) {
		ret = fioLseek( handle.fh, offset, whence );
	}
	else if( handle.dt == DT_HOST ) {
		ret = fioLseek( handle.fh, offset, whence );
	}
	else if( handle.dt == DT_SMB_SHARE ) {
		ret = smbc_lseek( handle.fh, offset, whence );
	}

	return ret;
}
コード例 #3
0
int AsyncFio::seek(int fd, int offset, int whence) {
	int res;
	WaitSema(_ioSema);
	checkSync();
	fileXioLseek(fd, offset, whence);
	fileXioWaitAsync(FXIO_WAIT, &res);
	SignalSema(_ioSema);
	return res;
}
コード例 #4
0
static err_t Open(filestream* p, const tchar_t* URL, int Flags)
{
	if (p->fd>=0)
		fileXioClose(p->fd);

    p->Length = INVALID_FILEPOS_T;
	p->fd = -1;

	if (URL && URL[0])
	{
        tchar_t Tmp[MAXPATH];
		int size;
        int mode = 0;

        URL = CdromPath(URL,Tmp,TSIZEOF(Tmp));

        if (Flags & SFLAG_WRONLY && !(Flags & SFLAG_RDONLY))
            mode = O_WRONLY;
        else if (Flags & SFLAG_RDONLY && !(Flags & SFLAG_WRONLY))
            mode = O_RDONLY;
        else
            mode = O_RDWR;

        if (Flags & SFLAG_CREATE)
            mode |= O_CREAT|O_TRUNC;

		p->fd = fileXioOpen(URL, mode, FIO_S_IRUSR | FIO_S_IWUSR | FIO_S_IXUSR | FIO_S_IRGRP | FIO_S_IWGRP | FIO_S_IXGRP | FIO_S_IROTH | FIO_S_IWOTH | FIO_S_IXOTH );
		if (p->fd<0)
		{
			if ((Flags & (SFLAG_REOPEN|SFLAG_SILENT))==0)
				NodeReportError(p,NULL,ERR_ID,ERR_FILE_NOT_FOUND,URL);
			return ERR_FILE_NOT_FOUND;
		}

		tcscpy_s(p->URL,TSIZEOF(p->URL),URL);

	    if ((size = fileXioLseek(p->fd, 0, SEEK_END)) >= 0)
        {
            fileXioLseek(p->fd, 0, SEEK_SET);
			p->Length = size;
        }
	}
	return ERR_NONE;
}
コード例 #5
0
ファイル: file.c プロジェクト: AzagraMac/PS2_SDK
/****************************************************************************
 * Universal file seek function.											*
 ****************************************************************************/
int SeekFile(int handle, int pos, int rel, int media)
{
	int sr=0;
	switch (media)
	{
	case 0:
		{
			sr = fileXioLseek(handle, pos, rel);
			break;
		}
	case 1:
		{
			sr = fioLseek(handle, pos, rel);
			break;
		}
	case 2:
		{
			//sr = fioLseek(handle, pos, rel);
			sr = fileXioLseek(handle, pos, rel);
			break;
		}
	case 3:
		{
			//sr = fioLseek(handle, pos, rel);
			sr = fileXioLseek(handle, pos, rel);
			break;
		}
	case 4:
		{
			sr = fioLseek(handle, pos, rel);
			break;
		}
	case 5:
		{
			sr = fileXioLseek(handle, pos, rel);
			break;
		}
	}
	return sr;
}
コード例 #6
0
static int ethPrepareMcemu(base_game_info_t* game) {
	char vmc[2][32];
	char vmc_path[255];
	u32 vmc_size;
	int i, j, fd, size_mcemu_irx = 0;
	smb_vmc_infos_t smb_vmc_infos;
	vmc_superblock_t vmc_superblock;

	configGetVMC(game->startup, vmc[0], ETH_MODE, 0);
	configGetVMC(game->startup, vmc[1], ETH_MODE, 1);

	for(i=0; i<2; i++) {
		if(!vmc[i][0]) // skip if empty
			continue;

		memset(&smb_vmc_infos, 0, sizeof(smb_vmc_infos_t));
		memset(&vmc_superblock, 0, sizeof(vmc_superblock_t));

		snprintf(vmc_path, 255, "%s\\VMC\\%s.bin", ethPrefix, vmc[i]);

		fd = fileXioOpen(vmc_path, O_RDONLY, 0666);
		if (fd >= 0) {
			size_mcemu_irx = -1;
			LOG("%s open\n", vmc_path);

			vmc_size = fileXioLseek(fd, 0, SEEK_END);
			fileXioLseek(fd, 0, SEEK_SET);
			fileXioRead(fd, (void*)&vmc_superblock, sizeof(vmc_superblock_t));

			LOG("File size : 0x%X\n", vmc_size);
			LOG("Magic     : %s\n", vmc_superblock.magic);
			LOG("Card type : %d\n", vmc_superblock.mc_type);

			if(!strncmp(vmc_superblock.magic, "Sony PS2 Memory Card Format", 27) && vmc_superblock.mc_type == 0x2) {
				smb_vmc_infos.flags            = vmc_superblock.mc_flag & 0xFF;
				smb_vmc_infos.flags           |= 0x100;
				smb_vmc_infos.specs.page_size  = vmc_superblock.page_size;                                       
				smb_vmc_infos.specs.block_size = vmc_superblock.pages_per_block;                                 
				smb_vmc_infos.specs.card_size  = vmc_superblock.pages_per_cluster * vmc_superblock.clusters_per_card;

				LOG("flags            : 0x%X\n", smb_vmc_infos.flags           );
				LOG("specs.page_size  : 0x%X\n", smb_vmc_infos.specs.page_size );
				LOG("specs.block_size : 0x%X\n", smb_vmc_infos.specs.block_size);
				LOG("specs.card_size  : 0x%X\n", smb_vmc_infos.specs.card_size );

				if(vmc_size == smb_vmc_infos.specs.card_size * smb_vmc_infos.specs.page_size) {
					smb_vmc_infos.active = 1;
					smb_vmc_infos.fid    = 0xFFFF;
					snprintf(vmc_path, 255, "VMC\\%s.bin", vmc[i]);
					strncpy(smb_vmc_infos.fname, vmc_path, 32); // maybe a too small size here ...

					LOG("%s is a valid Vmc file\n", smb_vmc_infos.fname );
				}
			}
			fileXioClose(fd);
		}
		for (j=0; j<size_smb_mcemu_irx; j++) {
			if (((u32*)&smb_mcemu_irx)[j] == (0xC0DEFAC0 + i)) {
				if(smb_vmc_infos.active)
					size_mcemu_irx = size_smb_mcemu_irx;
				memcpy(&((u32*)&smb_mcemu_irx)[j], &smb_vmc_infos, sizeof(smb_vmc_infos_t));
				break;
			}
		}
	}
	return size_mcemu_irx;
}