commit
c84ca2968e
1 changed files with 11 additions and 9 deletions
|
@ -416,7 +416,7 @@ u32 sceIoChstat(const char *filename, u32 iostatptr, u32 changebits) {
|
||||||
|
|
||||||
u32 npdrmRead(FileNode *f, u8 *data, int size) {
|
u32 npdrmRead(FileNode *f, u8 *data, int size) {
|
||||||
PGD_DESC *pgd = f->pgdInfo;
|
PGD_DESC *pgd = f->pgdInfo;
|
||||||
u32 block, offset;
|
u32 block, offset, blockPos;
|
||||||
u32 remain_size, copy_size;
|
u32 remain_size, copy_size;
|
||||||
|
|
||||||
block = pgd->file_offset/pgd->block_size;
|
block = pgd->file_offset/pgd->block_size;
|
||||||
|
@ -427,6 +427,8 @@ u32 npdrmRead(FileNode *f, u8 *data, int size) {
|
||||||
while(remain_size){
|
while(remain_size){
|
||||||
|
|
||||||
if(pgd->current_block!=block){
|
if(pgd->current_block!=block){
|
||||||
|
blockPos = block*pgd->block_size;
|
||||||
|
pspFileSystem.SeekFile(f->handle, (s32)pgd->data_offset+blockPos, FILEMOVE_BEGIN);
|
||||||
pspFileSystem.ReadFile(f->handle, pgd->block_buf, pgd->block_size);
|
pspFileSystem.ReadFile(f->handle, pgd->block_buf, pgd->block_size);
|
||||||
pgd_decrypt_block(pgd, block);
|
pgd_decrypt_block(pgd, block);
|
||||||
pgd->current_block = block;
|
pgd->current_block = block;
|
||||||
|
@ -599,7 +601,7 @@ u32 sceIoCancel(int id)
|
||||||
|
|
||||||
u32 npdrmLseek(FileNode *f, s32 where, FileMove whence)
|
u32 npdrmLseek(FileNode *f, s32 where, FileMove whence)
|
||||||
{
|
{
|
||||||
u32 newPos;
|
u32 newPos, blockPos;
|
||||||
|
|
||||||
if(whence==FILEMOVE_BEGIN){
|
if(whence==FILEMOVE_BEGIN){
|
||||||
newPos = where;
|
newPos = where;
|
||||||
|
@ -614,7 +616,8 @@ u32 npdrmLseek(FileNode *f, s32 where, FileMove whence)
|
||||||
}
|
}
|
||||||
|
|
||||||
f->pgdInfo->file_offset = newPos;
|
f->pgdInfo->file_offset = newPos;
|
||||||
pspFileSystem.SeekFile(f->handle, (s32)f->pgdInfo->data_offset+newPos, whence);
|
blockPos = newPos&~(f->pgdInfo->block_size-1);
|
||||||
|
pspFileSystem.SeekFile(f->handle, (s32)f->pgdInfo->data_offset+blockPos, whence);
|
||||||
|
|
||||||
return newPos;
|
return newPos;
|
||||||
}
|
}
|
||||||
|
@ -639,15 +642,14 @@ s64 __IoLseek(SceUID id, s64 offset, int whence) {
|
||||||
seek = FILEMOVE_END;
|
seek = FILEMOVE_END;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(f->npdrm)
|
||||||
|
return npdrmLseek(f, (s32)offset, seek);
|
||||||
|
|
||||||
// Yes, -1 is the correct return code for this case.
|
// Yes, -1 is the correct return code for this case.
|
||||||
if (newPos < 0)
|
if (newPos < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if(f->npdrm){
|
|
||||||
return npdrmLseek(f, (s32)offset, seek);
|
|
||||||
}else{
|
|
||||||
return pspFileSystem.SeekFile(f->handle, (s32) offset, seek);
|
return pspFileSystem.SeekFile(f->handle, (s32) offset, seek);
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
return (s32) error;
|
return (s32) error;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue