summaryrefslogtreecommitdiff
path: root/mjit.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-02-18 05:10:52 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-02-18 05:10:52 +0000
commit0f0c32f24e9556cf3d605df2891841659e6293f6 (patch)
treed8120fdd026402a40f915ac68c1ff92b5c032965 /mjit.c
parentecd2c08a4c8f9e3881d93131456d3ff066bc5de1 (diff)
mjit.c: no va_copy
* mjit.c (form_args): do not use va_copy, which cannot detect appropriate way to simulate when cross compiling. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62463 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'mjit.c')
-rw-r--r--mjit.c20
1 files changed, 7 insertions, 13 deletions
diff --git a/mjit.c b/mjit.c
index 9abc27fbe7..a17f61cdcb 100644
--- a/mjit.c
+++ b/mjit.c
@@ -286,27 +286,21 @@ args_len(char *const *args)
static char **
form_args(int num, ...)
{
- va_list argp, argp2;
- size_t len, disp;
+ va_list argp;
+ size_t len, n;
int i;
char **args, **res;
va_start(argp, num);
- va_copy(argp2, argp);
+ res = NULL;
for (i = len = 0; i < num; i++) {
args = va_arg(argp, char **);
- len += args_len(args);
+ n = args_len(args);
+ REALLOC_N(res, char *, len + n + 1);
+ MEMCPY(res + len, args, char *, n + 1);
+ len += n;
}
va_end(argp);
- res = xmalloc((len + 1) * sizeof(char *));
- for (i = disp = 0; i < num; i++) {
- args = va_arg(argp2, char **);
- len = args_len(args);
- memmove(res + disp, args, len * sizeof(char *));
- disp += len;
- }
- res[disp] = NULL;
- va_end(argp2);
return res;
}