コード例 #1
0
ファイル: pfs_fioctl.c プロジェクト: scuriumk/ps2sdk
int devctlFsckStat(pfs_mount_t *pfsMount, int mode)
{
	int rv;
	pfs_cache_t *clink;

	if((clink=cacheAllocClean(&rv))!=NULL){
		rv=fsckStat(pfsMount, clink->u.superblock, FSCK_STAT_ERROR_0x02, mode);
		cacheAdd(clink);
	}
	return rv;
}
コード例 #2
0
ファイル: journal.c プロジェクト: AzagraMac/PS2_SDK
int journalResetore(pfs_mount_t *pfsMount)
{ 
	int rv;
	int result;
	pfs_cache_t *clink;
	u32 i;


	// Read journal buffer from disk
	rv = pfsMount->blockDev->transfer(pfsMount->fd, &journalBuf, 0,
		(pfsMount->log.number << pfsMount->sector_scale), 2, IOCTL2_TMODE_READ);

	if(rv || (journalBuf.magic != PFS_JOUNRNAL_MAGIC) || 
		(journalBuf.checksum != (u16)journalCheckSum(&journalBuf)))
		{
			printf("ps2fs: Error: cannot read log/invalid log\n");
			return journalReset(pfsMount);
		}

	if(journalBuf.num == 0)
	{
		dprintf("ps2fs: System cleanly un-mounted, no journal restore needed\n");
		return journalReset(pfsMount);
	}

	clink = cacheAllocClean(&result);
	if(!clink)
		return result;

	for(i = 0; i < journalBuf.num; i++)
	{
		printf("ps2fs: Log overwrite %d:%08lx\n", journalBuf.log[i].sub, journalBuf.log[i].sector);

		// Read data in from log section on disk into cache buffer
		rv = pfsMount->blockDev->transfer(pfsMount->fd, clink->u.data, 0, 
			(pfsMount->log.number << pfsMount->sector_scale) + journalBuf.log[i].logSector, 2,
			IOCTL2_TMODE_READ);

		// Write from cache buffer into destination location on disk
		if(!rv)
			pfsMount->blockDev->transfer(pfsMount->fd, clink->u.data, journalBuf.log[i].sub,
				journalBuf.log[i].sector, 2, IOCTL2_TMODE_WRITE);
	}

	cacheAdd(clink);
	return journalReset(pfsMount); 
}