Mercurial > repo
view bin/gccrun @ 5375:9489512c414d
<Jafet> ` (echo \'\xe2\x80\x8b#!/bin/sh\'; echo \'echo "$@" | sed \'\\\'\'s/\\\\/\\n/g\'\\\'\' >/tmp/a.c && gcc -w -Wfatal-errors -std=c11 -O2 /tmp/a.c -o /tmp/a.out && /tmp/a.out\') >bin/cc && chmod +x bin/cc
author | HackBot |
---|---|
date | Thu, 28 May 2015 21:05:03 +0000 |
parents | 7f957c1f4661 |
children |
line wrap: on
line source
#!/bin/sh if [ "$#" = 0 ]; then echo "usage: $0 [-w wrapper] <C code...>" >&2 exit 1 fi if [ "$1" = -w ]; then wrapper="$2" shift 2 fi f=$(mktemp -d -t gccrun.XXXXXXXX) || exit 1 cat > "$f/command.c" << EOF #define _GNU_SOURCE #include <sys/types.h> #include <sys/stat.h> #include <sys/mman.h> #include <sys/ptrace.h> #include <sys/syscall.h> #include <arpa/inet.h> #include <errno.h> #include <fcntl.h> #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <math.h> int main(int argc, char *argv[], char *envp[]) { $1; return 0; } EOF shift if ! gcc -o "$f/command" "$f/command.c" $@ -lm; then exit 1 fi if [ -n "$wrapper" ]; then $wrapper "$f/command" else "$f/command" fi r=$? rm -r "$f" exit $r