Skip to content

Commit

Permalink
Implemented sceResmgr_9DC14891()
Browse files Browse the repository at this point in the history
  • Loading branch information
gid15 committed Jan 9, 2019
1 parent 76e3b57 commit af7d237
Showing 1 changed file with 61 additions and 11 deletions.
72 changes: 61 additions & 11 deletions src/jpcsp/HLE/modules/sceResmgr.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,25 +23,75 @@
import jpcsp.HLE.BufferInfo.Usage;
import jpcsp.HLE.HLEFunction;
import jpcsp.HLE.HLEModule;
import jpcsp.HLE.HLEUnimplemented;
import jpcsp.HLE.Modules;
import jpcsp.HLE.TPointer;
import jpcsp.HLE.TPointer32;
import jpcsp.HLE.VFS.IVirtualFile;
import jpcsp.HLE.VFS.IVirtualFileSystem;
import jpcsp.HLE.kernel.types.SceIoStat;
import jpcsp.crypto.CryptoEngine;

public class sceResmgr extends HLEModule {
public static Logger log = Modules.getLogger("sceResmgr");

@HLEUnimplemented
@HLEFunction(nid = 0x9DC14891, version = 150)
@Override
public void start() {
createDummyIndexDat();

super.start();
}

private static void createDummyIndexDat() {
String fileName = "flash0:/vsh/etc/index_01g.dat";
StringBuilder localFileName = new StringBuilder();
IVirtualFileSystem vfs = Modules.IoFileMgrForUserModule.getVirtualFileSystem(fileName, localFileName);
if (vfs == null) {
return;
}

SceIoStat stat = new SceIoStat();
int result = vfs.ioGetstat(localFileName.toString(), stat);
if (result == 0 && stat.size > 0L) {
// File already exists
return;
}

vfs.ioMkdir("vsh", 0777);
vfs.ioMkdir("vsh/etc", 0777);
IVirtualFile vFile = vfs.ioOpen(localFileName.toString(), IoFileMgrForUser.PSP_O_WRONLY, 0777);

String dummyContent = "release:6.60:\n";
dummyContent += "build:5455,0,3,1,0:builder@vsh-build6\n";
dummyContent += "system:57716@release_660,0x06060010:\n";
dummyContent += "vsh:p6616@release_660,v58533@release_660,20110727:\n";
dummyContent += "target:1:WorldWide\n";

byte[] bytes = dummyContent.getBytes();
vFile.ioWrite(bytes, 0, bytes.length);
vFile.ioClose();
}

@HLEFunction(nid = 0x9DC14891, version = 150)
public int sceResmgr_9DC14891(@BufferInfo(lengthInfo=LengthInfo.nextParameter, usage=Usage.inout) TPointer buffer, int bufferSize, @BufferInfo(usage=Usage.out) TPointer32 resultLengthAddr) {
String result = "release:6.60:\n";
result += "build:5455,0,3,1,0:builder@vsh-build6\n";
result += "system:57716@release_660,0x06060010:\n";
result += "vsh:p6616@release_660,v58533@release_660,20110727:\n";
result += "target:1:WorldWide\n";

buffer.setStringZ(result);
resultLengthAddr.setValue(result.length());
int resultLength;

// Nothing to do ff the buffer is already decrypted
if ("release:".equals(buffer.getStringNZ(0, 8))) {
resultLength = bufferSize;
} else {
byte[] buf = buffer.getArray8(bufferSize);

int result = new CryptoEngine().getPRXEngine().DecryptPRX(buf, bufferSize, 9, null, null);
if (result < 0) {
log.error(String.format("sceResmgr_9DC14891 returning error 0x%08X", result));
return result;
}

resultLength = result;
buffer.setArray(buf, resultLength);
}

resultLengthAddr.setValue(resultLength);

return 0;
}
Expand Down

0 comments on commit af7d237

Please sign in to comment.