aboutsummaryrefslogtreecommitdiffstats
path: root/sway/stringop.c
diff options
context:
space:
mode:
authorLibravatar taiyu <taiyu.len@gmail.com>2015-09-08 10:27:09 -0700
committerLibravatar taiyu <taiyu.len@gmail.com>2015-09-08 10:27:09 -0700
commitaa22dc31132fb7ef504bc90a03a14cc122fcc4e1 (patch)
tree24bf819a50ae2ff908ca68fd8f32868a7de39ecb /sway/stringop.c
parentfix missing symbol bug (diff)
downloadsway-aa22dc31132fb7ef504bc90a03a14cc122fcc4e1.tar.gz
sway-aa22dc31132fb7ef504bc90a03a14cc122fcc4e1.tar.zst
sway-aa22dc31132fb7ef504bc90a03a14cc122fcc4e1.zip
var replacement changes
Diffstat (limited to 'sway/stringop.c')
-rw-r--r--sway/stringop.c46
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
254char *join_args(char **argv, int argc) { 260char *join_args(char **argv, int argc) {