view bin/gccrun @ 3028:773ae9c82f6a

<shachaf> addquote <mnoqy> the theory\'s probably not \x02bad\x0f, but calculus is one of those things that\'s so dang applicable that everyone only ever talks about how to apply it and compute with it and uuuuurgh(barf) <mnoqy> so i stay away from it
author HackBot
date Sun, 02 Jun 2013 04:43:34 +0000
parents a52927edc8be
children 92909601a36d
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>

int
main(int argc, char *argv[], char *envp[])
{
	$1;
	return 0;
}
EOF
shift
if ! gcc -o "$f/command" "$f/command.c" $@; then
    exit 1
fi
if [ -n "$wrapper" ]; then
    $wrapper "$f/command"
else
    "$f/command"
fi
r=$?
rm -r "$f"
exit $r