|
|
@@ -0,0 +1,24 @@
|
|
|
+fs = require "fs"
|
|
|
+
|
|
|
+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)
|
|
|
+ callbackWithClose(null, result)
|