# This program is copyright 2011 Percona Inc.
# Feedback and improvements are welcome.
#
# THIS PROGRAM IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
# MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation, version 2; OR the Perl Artistic License.  On UNIX and similar
# systems, you can issue `man perlgpl' or `man perlartistic' to read these
# licenses.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
# Place, Suite 330, Boston, MA  02111-1307  USA.
# ###########################################################################
# alt_cmds package
# ###########################################################################

# Package: alt_cmds
# alt_cmds provides alternatives to commands that aren't on all systems.

set -u

# seq N, return 1, ..., 5
_seq() {
   local i="$1"
   awk "BEGIN { for(i=1; i<=$i; i++) print i; }"
}

_pidof() {
   local cmd="$1"
   if ! pidof "$cmd" 2>/dev/null; then
      ps -eo pid,ucomm | awk -v comm="$cmd" '$2 == comm { print $1 }'
   fi
}

_lsof() {
   local pid="$1"
   if ! lsof -p $pid 2>/dev/null; then
      /bin/ls -l /proc/$pid/fd 2>/dev/null
   fi
}


# We don't get things like "which: command not found", so for the pathological
# case where /usr/bin/which isn't installed, we check that "which which" and
# if which really isn't there then just return the command passed in and hope
# they are somewhere

# TODO:
#  we just need to redirect STDERR when we execute
#  "which" and check it. Some shells are really weird this way. We
#  can't check "which"'s exit status because it will be nonzero if
#  the sought-for command doesn't exist.
#
_which() {
   # which on CentOS is aliased to a cmd that prints extra stuff.
   # Also, if the cmd isn't found, a msg is printed to stderr.
   if [ -x /usr/bin/which ]; then
      /usr/bin/which "$1" 2>/dev/null | awk '{print $1}'
   elif which which 1>/dev/null 2>&1; then
      # Well, this is bizarre. /usr/bin/which either doesn't exist or
      # isn't executable, but the shell can use which just fine.
      # So we bite the bullet, hope that it doesn't do anything
      # insane, and use it.
      which "$1" 2>/dev/null | awk '{print $1}'
   else
      # We don't have which. Just return the command that was
      # originally passed in.
      echo "$1"
   fi
}

# ###########################################################################
# End alt_cmds package
# ###########################################################################
