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; }
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; }
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; }
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; }
/**************************************************************************** * 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; }
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; }