summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-07-30 08:16:20 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-07-30 08:16:20 +0000
commit09adba0dc177f2dd09da8ebb93f2f521200c67cb (patch)
tree2b243d298fb15481f5547a7406ace21de16b45fb
parent6be21c1de0162fe39efe1f6850ad94a7fc6696c1 (diff)
sprintf.c: QUOTE flag
* sprintf.c (ruby__sfvextra): add QUOTE flag to escape unprintable characters. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42251 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog10
-rw-r--r--ext/-test-/printf/printf.c7
-rw-r--r--sprintf.c1
-rw-r--r--test/-ext-/test_printf.rb6
4 files changed, 24 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index cd15e2d47a..c67fdc0cfc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+Tue Jul 30 17:16:15 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * sprintf.c (ruby__sfvextra): add QUOTE flag to escape unprintable
+ characters.
+
+Tue Jul 30 17:09:51 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * sprintf.c (ruby__sfvextra): add QUOTE flag to escape unprintable
+ characters.
+
Tue Jul 30 11:00:52 2013 Zachary Scott <e@zzak.io>
* ext/curses/extconf.rb: [DOC] nodoc to reduce Object pollution
diff --git a/ext/-test-/printf/printf.c b/ext/-test-/printf/printf.c
index 775eb33dc7..28a158beb4 100644
--- a/ext/-test-/printf/printf.c
+++ b/ext/-test-/printf/printf.c
@@ -21,6 +21,12 @@ printf_test_v(VALUE self, VALUE obj)
return rb_enc_sprintf(rb_usascii_encoding(), "{%+"PRIsVALUE"}", obj);
}
+static VALUE
+printf_test_q(VALUE self, VALUE obj)
+{
+ return rb_enc_sprintf(rb_usascii_encoding(), "[% "PRIsVALUE"]", obj);
+}
+
void
Init_printf(void)
{
@@ -28,4 +34,5 @@ Init_printf(void)
rb_define_singleton_method(m, "i", printf_test_i, 1);
rb_define_singleton_method(m, "s", printf_test_s, 1);
rb_define_singleton_method(m, "v", printf_test_v, 1);
+ rb_define_singleton_method(m, "q", printf_test_q, 1);
}
diff --git a/sprintf.c b/sprintf.c
index 09876bf812..97b2126422 100644
--- a/sprintf.c
+++ b/sprintf.c
@@ -1171,6 +1171,7 @@ ruby__sfvextra(rb_printf_buffer *fp, size_t valsize, void *valp, long *sz, int s
}
else {
value = rb_obj_as_string(value);
+ if (sign == ' ') value = QUOTE(value);
}
enc = rb_enc_compatible(result, value);
if (enc) {
diff --git a/test/-ext-/test_printf.rb b/test/-ext-/test_printf.rb
index 29f384b1d7..4532c371b4 100644
--- a/test/-ext-/test_printf.rb
+++ b/test/-ext-/test_printf.rb
@@ -22,6 +22,12 @@ class Test_SPrintf < Test::Unit::TestCase
assert_equal("{<#{self.class}:#{object_id}>}", Bug::Printf.v(self))
end
+ def test_quote
+ assert_equal('["\n"]', Bug::Printf.q("\n"))
+ assert_equal('[aaa]', Bug::Printf.q('aaa'))
+ assert_equal('[a a]', Bug::Printf.q('a a'))
+ end
+
def test_encoding
def self.to_s
"\u{3042 3044 3046 3048 304a}"