summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--pack.c23
2 files changed, 20 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index efaf430c25..ed1e534f7d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Fri Jun 21 19:18:48 2013 Tanaka Akira <akr@fsij.org>
+
+ * pack.c (pack_pack): Move the implementation for 'c' directive after
+ pack_integer label.
+
Fri Jun 21 19:11:56 2013 Koichi Sasada <ko1@atdot.net>
* include/ruby/ruby.h, re.c: support write barrier for T_REGEXP.
diff --git a/pack.c b/pack.c
index 8712afa548..afeb843e1b 100644
--- a/pack.c
+++ b/pack.c
@@ -669,14 +669,9 @@ pack_pack(VALUE ary, VALUE fmt)
case 'c': /* signed char */
case 'C': /* unsigned char */
- while (len-- > 0) {
- char c;
-
- from = NEXTFROM;
- c = (char)num2i32(from);
- rb_str_buf_cat(res, &c, sizeof(char));
- }
- break;
+ integer_size = 1;
+ bigendian_p = BIGENDIAN_P(); /* not effective */
+ goto pack_integer;
case 's': /* s for int16_t, s! for signed short */
integer_size = NATINT_LEN(short, 2);
@@ -744,6 +739,18 @@ pack_pack(VALUE ary, VALUE fmt)
}
switch (integer_size) {
+#if !defined(FORCE_BIG_PACK)
+ case 1:
+ while (len-- > 0) {
+ char c;
+
+ from = NEXTFROM;
+ c = (char)num2i32(from);
+ rb_str_buf_cat(res, &c, sizeof(char));
+ }
+ break;
+#endif
+
#if defined(HAVE_INT16_T) && !defined(FORCE_BIG_PACK)
case SIZEOF_INT16_T:
while (len-- > 0) {