diff options
author | taiyu <taiyu.len@gmail.com> | 2015-09-08 10:27:09 -0700 |
---|---|---|
committer | taiyu <taiyu.len@gmail.com> | 2015-09-08 10:27:09 -0700 |
commit | aa22dc31132fb7ef504bc90a03a14cc122fcc4e1 (patch) | |
tree | 24bf819a50ae2ff908ca68fd8f32868a7de39ecb /sway/stringop.c | |
parent | fix missing symbol bug (diff) | |
download | sway-aa22dc31132fb7ef504bc90a03a14cc122fcc4e1.tar.gz sway-aa22dc31132fb7ef504bc90a03a14cc122fcc4e1.tar.zst sway-aa22dc31132fb7ef504bc90a03a14cc122fcc4e1.zip |
var replacement changes
Diffstat (limited to 'sway/stringop.c')
-rw-r--r-- | sway/stringop.c | 46 |
1 files changed, 26 insertions, 20 deletions
diff --git a/sway/stringop.c b/sway/stringop.c index 1ba54ec6..7de6eded 100644 --- a/sway/stringop.c +++ b/sway/stringop.c | |||
@@ -179,76 +179,82 @@ int unescape_string(char *string) { | |||
179 | int i; | 179 | int i; |
180 | for (i = 0; string[i]; ++i) { | 180 | for (i = 0; string[i]; ++i) { |
181 | if (string[i] == '\\') { | 181 | if (string[i] == '\\') { |
182 | --len; | ||
183 | int shift = 0; | ||
184 | switch (string[++i]) { | 182 | switch (string[++i]) { |
185 | case '0': | 183 | case '0': |
186 | string[i - 1] = '\0'; | 184 | string[i - 1] = '\0'; |
187 | shift = 1; | 185 | return i - 1; |
188 | break; | ||
189 | case 'a': | 186 | case 'a': |
190 | string[i - 1] = '\a'; | 187 | string[i - 1] = '\a'; |
191 | shift = 1; | 188 | string[i] = '\0'; |
192 | break; | 189 | break; |
193 | case 'b': | 190 | case 'b': |
194 | string[i - 1] = '\b'; | 191 | string[i - 1] = '\b'; |
195 | shift = 1; | 192 | string[i] = '\0'; |
196 | break; | 193 | break; |
197 | case 'f': | 194 | case 'f': |
198 | string[i - 1] = '\f'; | 195 | string[i - 1] = '\f'; |
199 | shift = 1; | 196 | string[i] = '\0'; |
200 | break; | 197 | break; |
201 | case 'n': | 198 | case 'n': |
202 | string[i - 1] = '\n'; | 199 | string[i - 1] = '\n'; |
203 | shift = 1; | 200 | string[i] = '\0'; |
204 | break; | 201 | break; |
205 | case 'r': | 202 | case 'r': |
206 | string[i - 1] = '\r'; | 203 | string[i - 1] = '\r'; |
207 | shift = 1; | 204 | string[i] = '\0'; |
208 | break; | 205 | break; |
209 | case 't': | 206 | case 't': |
210 | string[i - 1] = '\t'; | 207 | string[i - 1] = '\t'; |
211 | shift = 1; | 208 | string[i] = '\0'; |
212 | break; | 209 | break; |
213 | case 'v': | 210 | case 'v': |
214 | string[i - 1] = '\v'; | 211 | string[i - 1] = '\v'; |
215 | shift = 1; | 212 | string[i] = '\0'; |
216 | break; | 213 | break; |
217 | case '\\': | 214 | case '\\': |
218 | shift = 1; | 215 | string[i] = '\0'; |
219 | break; | 216 | break; |
220 | case '\'': | 217 | case '\'': |
221 | string[i - 1] = '\''; | 218 | string[i - 1] = '\''; |
222 | shift = 1; | 219 | string[i] = '\0'; |
223 | break; | 220 | break; |
224 | case '\"': | 221 | case '\"': |
225 | string[i - 1] = '\"'; | 222 | string[i - 1] = '\"'; |
226 | shift = 1; | 223 | string[i] = '\0'; |
227 | break; | 224 | break; |
228 | case '?': | 225 | case '?': |
229 | string[i - 1] = '?'; | 226 | string[i - 1] = '?'; |
230 | shift = 1; | 227 | string[i] = '\0'; |
231 | break; | 228 | break; |
232 | case 'x': | 229 | case 'x': |
233 | { | 230 | { |
234 | unsigned char c = 0; | 231 | unsigned char c = 0; |
235 | shift = 1; | ||
236 | if (string[i+1] >= '0' && string[i+1] <= '9') { | 232 | if (string[i+1] >= '0' && string[i+1] <= '9') { |
237 | shift = 2; | ||
238 | c = string[i+1] - '0'; | 233 | c = string[i+1] - '0'; |
239 | if (string[i+2] >= '0' && string[i+2] <= '9') { | 234 | if (string[i+2] >= '0' && string[i+2] <= '9') { |
240 | shift = 3; | ||
241 | c *= 0x10; | 235 | c *= 0x10; |
242 | c += string[i+2] - '0'; | 236 | c += string[i+2] - '0'; |
237 | string[i+2] = '\0'; | ||
243 | } | 238 | } |
239 | string[i+1] = '\0'; | ||
244 | } | 240 | } |
241 | string[i] = '\0'; | ||
245 | string[i - 1] = c; | 242 | string[i - 1] = c; |
246 | } | 243 | } |
247 | } | 244 | } |
248 | memmove(string + i, string + i + shift, len - i + 1); | ||
249 | } | 245 | } |
250 | } | 246 | } |
251 | return len; | 247 | // Shift characters over nullspaces |
248 | int shift = 0; | ||
249 | for (i = 0; i < len; ++i) { | ||
250 | if (string[i] == 0) { | ||
251 | shift++; | ||
252 | continue; | ||
253 | } | ||
254 | string[i-shift] = string[i]; | ||
255 | } | ||
256 | string[len - shift] = 0; | ||
257 | return len - shift; | ||
252 | } | 258 | } |
253 | 259 | ||
254 | char *join_args(char **argv, int argc) { | 260 | char *join_args(char **argv, int argc) { |