blob: a047c936c023c7c7c0ae0da38d5b52dc85e0992c (
plain)
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
|
#!/usr/bin/env bash
set -e
# Parse this file according to systemd.exec(5), EnvironmentFile=
exec 3< /etc/default/lasuite-meet
nl='
'
feed() {
if [[ "${quote}" != no && "$value" = "" ]]; then
IFS= read -r value <&3 && value="${nl}${value}" || return 1
fi
}
peek_next() {
next=
feed || return
next="${value:0:1}"
return $(( ${#next} == 0 ))
}
consume() {
value="${value:${#next}}"
local n="${#next}"
next=""
return $(( n == 0 ))
}
get_next() {
peek_next
value="${value:1}"
return $(( ${#next} == 0 ))
}
get_next_until() {
next=
feed || return
next="${value%%["$1"]*}"
value="${value:${#next}}"
return $(( ${#next} == 0 ))
}
while true; do
IFS= read -r line <&3 || break
if ! [[ "$line" =~ ^[^#\;].*= ]]; then
continue
fi
key="${line%%=*}"
value="${line#*=}"
parsed_value=
quote=no
while true; do
peek_next || break
case "$quote" in
no)
case "$next" in
\')
quote=single
consume
;;
\")
quote=double
consume
;;
\\)
consume
get_next || :
parsed_value+="$next"
;;
*)
get_next_until \'\"\\
parsed_value+="$next"
;;
esac
;;
single)
case "$next" in
\')
quote=no
consume
;;
*)
get_next_until \'
parsed_value+="$next"
;;
esac
;;
double)
case "$next" in
\")
quote=no
consume
;;
\\)
consume
get_next
case "$next" in
\"|\\|\'|\$)
parsed_value+="$next"
;;
"$nl")
;;
*)
parsed_value+="\\$next"
;;
esac
;;
*)
get_next_until \"\\
parsed_value+="$next"
;;
esac
;;
esac
done
export "${key}=${parsed_value}"
done
exec 3<&-
exec /usr/libexec/lasuite-meet/manage.py "${@}"
|