X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/tripe-android/blobdiff_plain/7eb3f62e2ea97fab63080e92ebf95a65c95714a1..ad64fbfa301eaddc1a067e78743adcd4c1d1dd8d:/sys.scala diff --git a/sys.scala b/sys.scala index c449414..43487b5 100644 --- a/sys.scala +++ b/sys.scala @@ -32,6 +32,7 @@ import scala.collection.mutable.{HashMap, HashSet}; import java.io.{BufferedReader, BufferedWriter, Closeable, File, FileDescriptor, FileInputStream, FileOutputStream, + FileReader, FileWriter, InputStream, InputStreamReader, OutputStream, OutputStreamWriter}; import java.nio.{ByteBuffer, CharBuffer}; @@ -409,6 +410,8 @@ def unlink(path: String) { unlink(path.toCString); } def rmdir(path: String) { rmdir(path.toCString); } @native protected def mkdir(path: CString, mode: Int); def mkdir(path: String, mode: Int) { mkdir(path.toCString, mode); } +@native protected def chmod(path: CString, mode: Int); +def chmod(path: String, mode: Int) { chmod(path.toCString, mode); } @native protected def mkfile(path: CString, mode: Int); def mkfile(path: String, mode: Int) { mkfile(path.toCString, mode); } @native protected def rename(from: CString, to: CString); @@ -608,6 +611,7 @@ object FileImplicits { def rmdir_!() { rmdir(file.getPath); } def mkdir_!(mode: Int) { mkdir(file.getPath, mode); } def mkdir_!() { mkdir_!(0x1ff); } + def chmod_!(mode: Int) { chmod(file.getPath, mode); } def mkfile_!(mode: Int) { mkfile(file.getPath, mode); } def mkfile_!() { mkfile_!(0x1b6); } def rename_!(to: File) { rename(file.getPath, to.getPath); } @@ -681,10 +685,8 @@ object FileImplicits { /* Opening files. Again, I'm surprised this isn't here already. */ def open(): FileInputStream = new FileInputStream(file); def openForOutput(): FileOutputStream = new FileOutputStream(file); - def reader(): BufferedReader = - new BufferedReader(new InputStreamReader(open())); - def writer(): BufferedWriter = - new BufferedWriter(new OutputStreamWriter(openForOutput())); + def reader(): BufferedReader = new BufferedReader(new FileReader(file)); + def writer(): BufferedWriter = new BufferedWriter(new FileWriter(file)); def withInput[T](body: FileInputStream => T): T = { val in = open(); try { body(in) } @@ -694,13 +696,15 @@ object FileImplicits { val out = openForOutput(); try { body(out) } finally { out.close(); } } - def withReader[T](body: BufferedReader => T): T = withInput { in => - body(new BufferedReader(new InputStreamReader(in))) - }; - def withWriter[T](body: BufferedWriter => T): T = withOutput { out => - val w = new BufferedWriter(new OutputStreamWriter(out)); - /* Do this the hard way, so that we flush the `BufferedWriter'. */ - try { body(w) } finally { w.close(); } + def withReader[T](body: BufferedReader => T): T = { + val r = reader(); + try { body(r) } + finally { r.close(); } + } + def withWriter[T](body: BufferedWriter => T): T = { + val w = writer(); + try { body(w) } + finally { w.close(); } } } }