Skip to content

Instantly share code, notes, and snippets.

@msporleder
Last active August 2, 2017 14:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save msporleder/62d5bbd5dda6dd23d81d83730e8c77de to your computer and use it in GitHub Desktop.
Save msporleder/62d5bbd5dda6dd23d81d83730e8c77de to your computer and use it in GitHub Desktop.
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char *argv[]) {
char *execn;
asprintf(&execn, "%s%s", "--execname=", argv[0]);
/* libpaths need to be generated at perl6 compile time */
char *margs[] = {
execn,
"--libpath=/usr/pkg/share/nqp/lib",
"--libpath=/usr/pkg/share/perl6/lib",
"--libpath=/usr/pkg/share/perl6/runtime",
"/usr/pkg/share/perl6/runtime/perl6.moarvm",
};
int i;
size_t argvsz = 0;
for (i = 0; i < argc; i++) {
argvsz += strlen(argv[i]);
}
char **margs2 = malloc(sizeof(margs) + argvsz + sizeof(*argv));
size_t idx = sizeof(margs)/sizeof(*margs) - 1;
for (i = 0; i <= idx ; i++) {
margs2[i] = margs[i];
}
for (i = 1; i < argc; i++) {
margs2[idx+i] = argv[i];
}
execv("/usr/pkg/bin/moar", margs2);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment