blob: dd0ddcef82f4967ca8399b51a8ff8009db2d2a52 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
#!/bin/bash
_E_WIDTH=15
_E_COUNT=0
_E_FLAGS=0
_E_FLAGS_STR=""
_E_FLAG_FAILURE=1
_E_FLAG_EXIT_STANDARD=2
_E_FLAG_EXIT_NONSTANDARD=4
_E_FLAG_EXIT_SIGNALED=8
_E_FLAG_EXIT_PEBKAC=16
_E_FLAG_HALT_AND_CATCH_FIRE=32
_E_FLAG_BAD_ARGUMENT=64
_E_FLAG_BAD_RETVAL=128
_E_FLAG_BAD_PACKAGE=256
_E_FLAG_RES4=512
_E_FLAG_RES5=1024
_E_FLAG_RES6=2048
_E_FLAG_RES7=4096
_E_FLAG_RES8=8192
_E_FLAG_RES9=16384
_E_FLAG_INTERNAL=32768
#_E_FLAG_UNUSED=65536
function error_mask_report
{
local flags=$1
for (( i=${_E_WIDTH}; i>=0; i-- ))
do
(( mask = flags & ( 1 << i ) ))
case $mask in
$_E_FLAG_FAILURE)
echo "Script failed."
;;
$_E_FLAG_EXIT_STANDARD)
echo "Normal exit."
;;
$_E_FLAG_EXIT_NONSTANDARD)
echo "Non-standard exit."
;;
$_E_FLAG_EXIT_SIGNALED)
echo "Recievied signal."
;;
$_E_FLAG_EXIT_PEBCAC)
echo "Problem exists between keyboard and chair."
;;
$_E_FLAG_HALT_AND_CATCH_FIRE)
echo "A fatal error occurred."
;;
$_E_FLAG_BAD_ARGUMENT)
echo "Bad argument."
;;
$_E_FLAG_BAD_RETVAL)
echo "An external program exited abnormally."
;;
$_E_FLAG_BAD_PACKAGE)
echo "A package failed to build."
;;
$_E_FLAG_RES4)
echo "Reserved"
;;
$_E_FLAG_RES5)
echo "Reserved"
;;
$_E_FLAG_RES6)
echo "Reserved"
;;
$_E_FLAG_RES7)
echo "Reserved"
;;
$_E_FLAG_RES8)
echo "Reserved"
;;
$_E_FLAG_RES9)
echo "Reserved"
;;
$_E_FLAG_INTERNAL)
echo "Error handler experienced an internal error."
;;
*)
;;
esac
done
}
function error_report
{
local flags=`error_mask_string`
printf "Error count: %16s\n" $_E_COUNT
printf "Error mask: %16s\n" $_E_FLAGS
printf "Error flags: %16s\n" $flags
echo "Error message(s):"
while read line
do
echo "* $line"
done< <(error_mask_report $_E_FLAGS)
}
function error_set
{
local flag=$1
if [[ -z $flag ]]; then
echo "error.sh: Unable to set error flag: '$flag'"
flag=$_E_FLAG_INTERNAL
fi
(( _E_FLAGS |= $flag ))
(( _E_COUNT++ ))
#echo "Error flag modified: $_E_FLAGS_STR"
}
function error_mask_string
{
declare -a -i bits
local flags=$_E_FLAGS
local output=""
for i in $(seq 0 $_E_WIDTH)
do
(( bits[i] = 0 ))
(( bit = flags >> i ))
if (( flags & ( 1 << i ) )); then
(( bits[i] = 1 ))
fi
done
for (( x=${_E_WIDTH}; x>=0; x-- ))
do
output+=$(( bits[x] ))
done
echo $output
}
|