#!/bin/bash

usage () {
cat >&2 <<EOF
failmalloc, memory allocation failure crash-test tool.
   usage: failmalloc [-p|--probability probability] [-t|--times times]
                     [-i|--interval interval] [-s|--space space]
                     [-h|--help] [-v|--version]
                     [--] [command]
EOF
  exit 1
}

if [ ! -n "$1" ]; then
	usage
fi

GETOPTEST=`getopt --version`
case $GETOPTEST in
getopt*) # GNU getopt
    FAIL_TEMP=`getopt -l probability: -l interval: -l times: -l space: -l version -l help -- +p:i:t:s:vh "$@"`
    ;;
*) # POSIX getopt ?
    FAIL_TEMP=`getopt p:i:t:s:vh "$@"`
    ;;
esac

if test "$?" -ne 0; then
  usage
fi

eval set -- $FAIL_TEMP

while test "X$1" != "X--"; do
  case "$1" in
    -p|--probability)
       shift
       export FAILMALLOC_PROBABILITY="$1"
       ;;
    -i|--interval)
       shift
       export FAILMALLOC_INTERVAL="$1"
       ;;
    -t|--times)
       shift
       export FAILMALLOC_TIMES="$1"
       ;;
    -s|--space)
       shift
       export FAILMALLOC_SPACE="$1"
       ;;
    -v|--version)
       echo "failmalloc version 1.0"
       exit 0
       ;;
    -h|--help)
       usage
       ;;
  esac
  shift
done

shift

LD_PRELOAD="/usr/lib/libfailmalloc/libfailmalloc.so${LD_PRELOAD:+ $LD_PRELOAD}"
export LD_PRELOAD

exec "$@"
