pack.c: refine warning
* pack.c (unknown_directive): refine warning message at unknown directive in unpack too, and quote unprintable characters. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65748 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
6a6d03791b
commit
027cf467a4
35
pack.c
35
pack.c
@ -127,6 +127,27 @@ str_associated(VALUE str)
|
|||||||
return rb_ivar_lookup(str, id_associated, Qfalse);
|
return rb_ivar_lookup(str, id_associated, Qfalse);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
unknown_directive(const char *mode, char type, VALUE fmt)
|
||||||
|
{
|
||||||
|
VALUE f;
|
||||||
|
char unknown[5];
|
||||||
|
|
||||||
|
if (ISPRINT(type)) {
|
||||||
|
unknown[0] = type;
|
||||||
|
unknown[1] = '\0';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
snprintf(unknown, sizeof(unknown), "\\x%.2x", type & 0xff);
|
||||||
|
}
|
||||||
|
f = rb_str_quote_unprintable(fmt);
|
||||||
|
if (f != fmt) {
|
||||||
|
fmt = rb_str_subseq(f, 1, RSTRING_LEN(f) - 2);
|
||||||
|
}
|
||||||
|
rb_warning("unknown %s directive '%s' in '%"PRIsVALUE"'",
|
||||||
|
mode, unknown, fmt);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* call-seq:
|
* call-seq:
|
||||||
* arr.pack( aTemplateString ) -> aBinaryString
|
* arr.pack( aTemplateString ) -> aBinaryString
|
||||||
@ -849,16 +870,7 @@ pack_pack(int argc, VALUE *argv, VALUE ary)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
char unknown[5];
|
unknown_directive("pack", type, fmt);
|
||||||
if (ISPRINT(type)) {
|
|
||||||
unknown[0] = type;
|
|
||||||
unknown[1] = '\0';
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
snprintf(unknown, sizeof(unknown), "\\x%.2x", type & 0xff);
|
|
||||||
}
|
|
||||||
rb_warning("unknown pack directive '%s' in '% "PRIsVALUE"'",
|
|
||||||
unknown, fmt);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1748,8 +1760,7 @@ pack_unpack_internal(VALUE str, VALUE fmt, int mode)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
rb_warning("unknown unpack directive '%c' in '%s'",
|
unknown_directive("unpack", type, fmt);
|
||||||
type, RSTRING_PTR(fmt));
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -802,6 +802,13 @@ EXPECTED
|
|||||||
assert_warning(/\A(.* in '\u{3042}'\n)+\z/) {
|
assert_warning(/\A(.* in '\u{3042}'\n)+\z/) {
|
||||||
[].pack("\u{3042}")
|
[].pack("\u{3042}")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assert_warning(/\A.* in '.*U'\Z/) {
|
||||||
|
assert_equal "\000", [0].pack("\0U")
|
||||||
|
}
|
||||||
|
assert_warning(/\A.* in '.*U'\Z/) {
|
||||||
|
"\000".unpack("\0U")
|
||||||
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_pack_resize
|
def test_pack_resize
|
||||||
|
Loading…
x
Reference in New Issue
Block a user