Make asar work with internalModuleReadFile and internalModuleStat
This commit is contained in:
parent
132c13a11b
commit
605722c397
1 changed files with 32 additions and 0 deletions
|
@ -310,6 +310,38 @@ exports.wrapFsWithAsar = (fs) ->
|
||||||
|
|
||||||
files
|
files
|
||||||
|
|
||||||
|
internalModuleReadFile = process.binding('fs').internalModuleReadFile
|
||||||
|
process.binding('fs').internalModuleReadFile = (p) ->
|
||||||
|
[isAsar, asarPath, filePath] = splitPath p
|
||||||
|
return internalModuleReadFile p unless isAsar
|
||||||
|
|
||||||
|
archive = getOrCreateArchive asarPath
|
||||||
|
return undefined unless archive
|
||||||
|
|
||||||
|
info = archive.getFileInfo filePath
|
||||||
|
return undefined unless info
|
||||||
|
return '' if info.size is 0
|
||||||
|
|
||||||
|
buffer = new Buffer(info.size)
|
||||||
|
fd = archive.getFd()
|
||||||
|
retrun undefined unless fd >= 0
|
||||||
|
|
||||||
|
fs.readSync fd, buffer, 0, info.size, info.offset
|
||||||
|
buffer.toString 'utf8'
|
||||||
|
|
||||||
|
internalModuleStat = process.binding('fs').internalModuleStat
|
||||||
|
process.binding('fs').internalModuleStat = (p) ->
|
||||||
|
[isAsar, asarPath, filePath] = splitPath p
|
||||||
|
return internalModuleStat p unless isAsar
|
||||||
|
|
||||||
|
archive = getOrCreateArchive asarPath
|
||||||
|
return -34 unless archive # -ENOENT
|
||||||
|
|
||||||
|
stats = archive.stat filePath
|
||||||
|
return -34 unless stats # -ENOENT
|
||||||
|
|
||||||
|
if stats.isDirectory then return 1 else return 0
|
||||||
|
|
||||||
overrideAPI fs, 'open'
|
overrideAPI fs, 'open'
|
||||||
overrideAPI child_process, 'execFile'
|
overrideAPI child_process, 'execFile'
|
||||||
overrideAPISync process, 'dlopen', 1
|
overrideAPISync process, 'dlopen', 1
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue