overleaf/services/clsi/app/coffee/SafeReader.coffee

28 lines
914 B
CoffeeScript
Raw Normal View History

fs = require "fs"
2017-09-07 06:55:50 -04:00
logger = require "logger-sharelatex"
module.exports = SafeReader =
# safely read up to size bytes from a file and return result as a
# string
readFile: (file, size, encoding, callback = (error, result) ->) ->
fs.open file, 'r', (err, fd) ->
return callback() if err? and err.code is 'ENOENT'
return callback(err) if err?
# safely return always closing the file
callbackWithClose = (err, result) ->
fs.close fd, (err1) ->
return callback(err) if err?
return callback(err1) if err1?
callback(null, result)
buff = new Buffer(size, 0) # fill with zeros
fs.read fd, buff, 0, buff.length, 0, (err, bytesRead, buffer) ->
return callbackWithClose(err) if err?
result = buffer.toString(encoding, 0, bytesRead)
2017-09-07 06:55:50 -04:00
if bytesRead is size
logger.error file:file, size:size, bytesRead:bytesRead, "file truncated"
callbackWithClose(null, result)