SafeReader.coffee 827 B

12345678910111213141516171819202122232425
  1. fs = require "fs"
  2. logger = require "logger-sharelatex"
  3. module.exports = SafeReader =
  4. # safely read up to size bytes from a file and return result as a
  5. # string
  6. readFile: (file, size, encoding, callback = (error, result) ->) ->
  7. fs.open file, 'r', (err, fd) ->
  8. return callback() if err? and err.code is 'ENOENT'
  9. return callback(err) if err?
  10. # safely return always closing the file
  11. callbackWithClose = (err, result...) ->
  12. fs.close fd, (err1) ->
  13. return callback(err) if err?
  14. return callback(err1) if err1?
  15. callback(null, result...)
  16. buff = new Buffer(size, 0) # fill with zeros
  17. fs.read fd, buff, 0, buff.length, 0, (err, bytesRead, buffer) ->
  18. return callbackWithClose(err) if err?
  19. result = buffer.toString(encoding, 0, bytesRead)
  20. callbackWithClose(null, result, bytesRead)