subcommand: Move up gsu_getopts().
[gsu.git] / common
diff --git a/common b/common
index cd07252fa1d6917905b41d868fcdbcb67d54f89b..ec7b8e2cfd816f1faadc6b2ffd8c45c2da37fc28 100644 (file)
--- a/common
+++ b/common
@@ -1,5 +1,6 @@
 #!/bin/bash
-# (C) 2006-2011 Andre Noll
+# Copyright (C) 2006 Andre Noll
+# Licensed under the LGPL, version 3. See COPYING and COPYING.LESSER.
 
 _gsu_init_errors()
 {
@@ -18,7 +19,7 @@ E_GSU_GETOPTS                 getopts error
 E_GSU_DIALOG                   dialog error
 E_GSU_MKTEMP                   mktemp error
 E_GSU_MENU_TREE                        invalid menu tree
-$gsu_errors
+${gsu_errors:-}
 "
        local a b i=0
        while read a b; do
@@ -38,7 +39,7 @@ EOF
 gsu_is_a_number()
 {
        result="$1"
-       if (("$1" == "$1")) &> /dev/null; then
+       if [ "$1" -eq "$1" ] &> /dev/null; then
                ret=$GSU_SUCCESS
        else
                ret=-$E_GSU_NOT_A_NUMBER
@@ -89,3 +90,35 @@ _gsu_setup()
        gsu_banner_txt="${gsu_banner_txt:-set \$gsu_banner_txt to customize this message}"
        _gsu_init_errors
 }
+
+# We'd love to use mktemp -t here, but on Linux -t is deprecated in favor of
+# --tempdir, which is not supported on *BSD. Hence we have to implement our own
+# logic for -t.
+#
+# The second parameter to this function is optional. It is ignored if the
+# template ($1) is an absolute path. Conversely, if the template is a relative
+# path and a second parameter is given, $2 is assumed to be the directory in
+# which the temporary file should be created.
+gsu_make_tempfile()
+{
+       local template="$1"
+       local dir
+
+       if [[ "${template:0:1}" != '/' ]]; then # relative path
+               if (($# > 1)); then
+                       dir="$2"
+               elif [[ -n "${TMPDIR:-}" ]]; then
+                       dir="$TMPDIR"
+               else
+                       dir="/tmp"
+               fi
+               template="$dir/$template"
+       fi
+       result="$(mktemp "$template")"
+       if (($? != 0)); then
+               ret=-$E_GSU_MKTEMP
+               result="template: $template"
+               return
+       fi
+       ret=$GSU_SUCCESS
+}