function mozexWriteFile(data, filename) { try { var file = Components.classes["@mozilla.org/file/local;1"]. createInstance(Components.interfaces.nsILocalFile); file.initWithPath(filename); try { /* raises an error if the file already exists */ file.create(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0600); } catch (e) { mozexError("cannot create temporary file '" + filename + "': " + e); return false; } var uc = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]. createInstance(Components.interfaces.nsIScriptableUnicodeConverter); uc.charset = "UTF-8"; var data_stream = uc.ConvertFromUnicode( data ); var stream = Components.classes["@mozilla.org/network/file-output-stream;1"]. createInstance(Components.interfaces.nsIFileOutputStream); var PR_WRONLY = 0x02; stream.init(file, PR_WRONLY, 0600, 0); stream.write(data_stream, data_stream.length); stream.flush() stream.close(); } catch (e) { mozexError("cannot write to file '" + filename + "':" + e); return false; } return true; } function mozexReadFile(filename) { var MODE_RDONLY = 0x01; var PERM_IRUSR = 00400; try { var file = Components.classes["@mozilla.org/file/local;1"]. createInstance(Components.interfaces.nsILocalFile); file.initWithPath(filename); if (file.exists() && file.isReadable()) { var is = Components.classes["@mozilla.org/network/file-input-stream;1"]. createInstance(Components.interfaces.nsIFileInputStream); is.init(file, MODE_RDONLY, PERM_IRUSR, 0); var sis = Components.classes["@mozilla.org/scriptableinputstream;1"]. createInstance(Components.interfaces.nsIScriptableInputStream); sis.init(is); var data = sis.read(sis.available()); sis.close(); is.close(); var uc = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]. createInstance(Components.interfaces.nsIScriptableUnicodeConverter); uc.charset = "UTF-8"; return uc.ConvertToUnicode( data ); } else { mozexError("temporary file '" + filename + "' does not exist or is not readable"); return null; } } catch (e) { mozexError("cannot read from temporary file '" + filename + "': " + e); } return null; }