about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/io/mem.rs10
-rw-r--r--src/libstd/io/mod.rs8
2 files changed, 18 insertions, 0 deletions
diff --git a/src/libstd/io/mem.rs b/src/libstd/io/mem.rs
index 5096e9237e3..aaba3232aa0 100644
--- a/src/libstd/io/mem.rs
+++ b/src/libstd/io/mem.rs
@@ -420,6 +420,16 @@ mod test {
     }
 
     #[test]
+    fn test_write_char() {
+        let mut writer = MemWriter::new();
+        writer.write_char('a');
+        writer.write_char('\n');
+        writer.write_char('ệ');
+        let mut r = BufReader::new(*writer.inner_ref());
+        assert_eq!(r.read_to_str(), ~"a\nệ");
+    }
+
+    #[test]
     fn test_read_whole_string_bad() {
         let buf = [0xff];
         let mut r = BufReader::new(buf);
diff --git a/src/libstd/io/mod.rs b/src/libstd/io/mod.rs
index 9c181aa56c2..b7e185f8ed5 100644
--- a/src/libstd/io/mod.rs
+++ b/src/libstd/io/mod.rs
@@ -290,6 +290,7 @@ Out of scope
 #[allow(missing_doc)];
 
 use cast;
+use char::Char;
 use condition::Guard;
 use container::Container;
 use int;
@@ -914,6 +915,13 @@ pub trait Writer {
         self.write(['\n' as u8]);
     }
 
+    /// Write a single char, encoded as UTF-8.
+    fn write_char(&mut self, c: char) {
+        let mut buf = [0u8, ..4];
+        let n = c.encode_utf8(buf.as_mut_slice());
+        self.write(buf.slice_to(n));
+    }
+
     /// Write the result of passing n through `int::to_str_bytes`.
     fn write_int(&mut self, n: int) {
         int::to_str_bytes(n, 10u, |bytes| self.write(bytes))