# Main program file # # Copyright (C) 2013, 2014 Patrick McDermott # # This file is part of the ProteanOS Development Kit. # # The ProteanOS Development Kit 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, either version 3 of the # License, or (at your option) any later version. # # The ProteanOS Development Kit is distributed in the hope that it # will be useful, but WITHOUT ANY WARRANTY; without even the implied # warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with the ProteanOS Development Kit. If not, see # . set -eu # Constant global variables HT=' ' LF=' ' OPTSTRING='hV' if [ -f "${0%/*}/.builddirstamp" ]; then in_place=true builddir="${0%/*}" else in_place=false builddir='' fi unixtime() { # Based on code from by Rich # Felker, with whitespace added for readability. printf '%d' $(($(TZ=UTC0 date "+ ( (%Y - 1600) * 365 + (%Y - 1600) / 4 - (%Y - 1600) / 100 + (%Y - 1600) / 400 + 1%j - 1000 - 135140 ) * 86400 + (1%H - 100) * 3600 + (1%M - 100) * 60 + (1%S - 100)"))) } main() { local cmd= local es= if ! load_locale; then return 2 fi if ! get_options "${@}"; then cmd_help_main >&2 return 1 fi shift $((${OPTIND} - 1)) if ${opt_h:-false}; then cmd='help' elif ${opt_V:-false}; then cmd='version' elif [ ${#} -lt 1 ]; then cmd_help_main >&2 return 1 else cmd="${1}" shift 1 fi srand $((${$} + $(unixtime))) if ! init_vardata; then return 2 fi case "${cmd}" in 'help'|'version') ;; *) if ! check_uid; then error "$(get_msg 'uid_0_req')" return 1 fi ;; esac es=0 run_cmd "${cmd}" "${@}" || es=${?} if ! fini_vardata; then return 2 fi return ${es} } check_uid() { local uname_s= local uid= uname_s="$( (uname -s) 2>/dev/null)" || uname_s='unknown' uid="$(id -u)" case "${uname_s}" in 'Linux') if [ ${uid} -ne 0 ]; then return 1 fi ;; esac return 0 }