summaryrefslogtreecommitdiff
path: root/pack.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2021-10-21 21:52:17 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2021-10-22 12:47:34 +0900
commit4446942f1ab79b9687b009936d5365cfa846258f (patch)
treefd899b67c3a49c630dec0aec8165441bd1568be7 /pack.c
parent6469038ae2ca8a5f0ea8c1274030996240e7df70 (diff)
downloadruby-4446942f1ab79b9687b009936d5365cfa846258f.tar.gz
Extract UNPACK_FETCH
Diffstat (limited to 'pack.c')
-rw-r--r--pack.c28
1 files changed, 10 insertions, 18 deletions
diff --git a/pack.c b/pack.c
index 280d45280d..031071b440 100644
--- a/pack.c
+++ b/pack.c
@@ -962,6 +962,8 @@ pack_unpack_internal(VALUE str, VALUE fmt, int mode)
p = RSTRING_PTR(fmt);
pend = p + RSTRING_LEN(fmt);
+#define UNPACK_FETCH(var, type) (memcpy((var), s, sizeof(type)), s += sizeof(type))
+
ary = mode == UNPACK_ARRAY ? rb_ary_new() : Qnil;
while (p < pend) {
int explicit_endian = 0;
@@ -1271,8 +1273,7 @@ pack_unpack_internal(VALUE str, VALUE fmt, int mode)
PACK_LENGTH_ADJUST_SIZE(sizeof(float));
while (len-- > 0) {
float tmp;
- memcpy(&tmp, s, sizeof(float));
- s += sizeof(float);
+ UNPACK_FETCH(&tmp, float);
UNPACK_PUSH(DBL2NUM((double)tmp));
}
PACK_ITEM_ADJUST();
@@ -1282,8 +1283,7 @@ pack_unpack_internal(VALUE str, VALUE fmt, int mode)
PACK_LENGTH_ADJUST_SIZE(sizeof(float));
while (len-- > 0) {
FLOAT_CONVWITH(tmp);
- memcpy(tmp.buf, s, sizeof(float));
- s += sizeof(float);
+ UNPACK_FETCH(tmp.buf, float);
VTOHF(tmp);
UNPACK_PUSH(DBL2NUM(tmp.f));
}
@@ -1294,8 +1294,7 @@ pack_unpack_internal(VALUE str, VALUE fmt, int mode)
PACK_LENGTH_ADJUST_SIZE(sizeof(double));
while (len-- > 0) {
DOUBLE_CONVWITH(tmp);
- memcpy(tmp.buf, s, sizeof(double));
- s += sizeof(double);
+ UNPACK_FETCH(tmp.buf, double);
VTOHD(tmp);
UNPACK_PUSH(DBL2NUM(tmp.d));
}
@@ -1307,8 +1306,7 @@ pack_unpack_internal(VALUE str, VALUE fmt, int mode)
PACK_LENGTH_ADJUST_SIZE(sizeof(double));
while (len-- > 0) {
double tmp;
- memcpy(&tmp, s, sizeof(double));
- s += sizeof(double);
+ UNPACK_FETCH(&tmp, double);
UNPACK_PUSH(DBL2NUM(tmp));
}
PACK_ITEM_ADJUST();
@@ -1318,8 +1316,7 @@ pack_unpack_internal(VALUE str, VALUE fmt, int mode)
PACK_LENGTH_ADJUST_SIZE(sizeof(float));
while (len-- > 0) {
FLOAT_CONVWITH(tmp);
- memcpy(tmp.buf, s, sizeof(float));
- s += sizeof(float);
+ UNPACK_FETCH(tmp.buf, float);
NTOHF(tmp);
UNPACK_PUSH(DBL2NUM(tmp.f));
}
@@ -1330,8 +1327,7 @@ pack_unpack_internal(VALUE str, VALUE fmt, int mode)
PACK_LENGTH_ADJUST_SIZE(sizeof(double));
while (len-- > 0) {
DOUBLE_CONVWITH(tmp);
- memcpy(tmp.buf, s, sizeof(double));
- s += sizeof(double);
+ UNPACK_FETCH(tmp.buf, double);
NTOHD(tmp);
UNPACK_PUSH(DBL2NUM(tmp.d));
}
@@ -1542,9 +1538,7 @@ pack_unpack_internal(VALUE str, VALUE fmt, int mode)
VALUE tmp = Qnil;
char *t;
- memcpy(&t, s, sizeof(char *));
- s += sizeof(char *);
-
+ UNPACK_FETCH(&t, char *);
if (t) {
VALUE a;
const VALUE *p, *pend;
@@ -1585,9 +1579,7 @@ pack_unpack_internal(VALUE str, VALUE fmt, int mode)
VALUE tmp = Qnil;
char *t;
- memcpy(&t, s, sizeof(char *));
- s += sizeof(char *);
-
+ UNPACK_FETCH(&t, char *);
if (t) {
VALUE a;
const VALUE *p, *pend;