diff options
Diffstat (limited to 'sway/stringop.c')
-rw-r--r-- | sway/stringop.c | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/sway/stringop.c b/sway/stringop.c index b944a43d..0f8577ae 100644 --- a/sway/stringop.c +++ b/sway/stringop.c | |||
@@ -53,8 +53,9 @@ char *strip_comments(char *str) { | |||
53 | list_t *split_string(const char *str, const char *delims) { | 53 | list_t *split_string(const char *str, const char *delims) { |
54 | list_t *res = create_list(); | 54 | list_t *res = create_list(); |
55 | int i, j; | 55 | int i, j; |
56 | for (i = 0, j = 0; i < strlen(str) + 1; ++i) { | 56 | int len = strlen(str); |
57 | if (strchr(delims, str[i]) || i == strlen(str)) { | 57 | for (i = 0, j = 0; i < len + 1; ++i) { |
58 | if (strchr(delims, str[i]) || i == len) { | ||
58 | if (i - j == 0) { | 59 | if (i - j == 0) { |
59 | continue; | 60 | continue; |
60 | } | 61 | } |
@@ -63,7 +64,7 @@ list_t *split_string(const char *str, const char *delims) { | |||
63 | left[i - j] = 0; | 64 | left[i - j] = 0; |
64 | list_add(res, left); | 65 | list_add(res, left); |
65 | j = i + 1; | 66 | j = i + 1; |
66 | while (j <= strlen(str) && str[j] && strchr(delims, str[j])) { | 67 | while (j <= len && str[j] && strchr(delims, str[j])) { |
67 | j++; | 68 | j++; |
68 | i++; | 69 | i++; |
69 | } | 70 | } |
@@ -111,40 +112,44 @@ int unescape_string(char *string) { | |||
111 | for (i = 0; string[i]; ++i) { | 112 | for (i = 0; string[i]; ++i) { |
112 | if (string[i] == '\\') { | 113 | if (string[i] == '\\') { |
113 | --len; | 114 | --len; |
115 | int shift = 0; | ||
114 | switch (string[++i]) { | 116 | switch (string[++i]) { |
115 | case '0': | 117 | case '0': |
116 | string[i - 1] = '\0'; | 118 | string[i - 1] = '\0'; |
117 | memmove(string + i, string + i + 1, len - i); | 119 | shift = 1; |
118 | break; | 120 | break; |
119 | case 'a': | 121 | case 'a': |
120 | string[i - 1] = '\a'; | 122 | string[i - 1] = '\a'; |
121 | memmove(string + i, string + i + 1, len - i); | 123 | shift = 1; |
122 | break; | 124 | break; |
123 | case 'b': | 125 | case 'b': |
124 | string[i - 1] = '\b'; | 126 | string[i - 1] = '\b'; |
125 | memmove(string + i, string + i + 1, len - i); | 127 | shift = 1; |
126 | break; | 128 | break; |
127 | case 't': | 129 | case 't': |
128 | string[i - 1] = '\t'; | 130 | string[i - 1] = '\t'; |
129 | memmove(string + i, string + i + 1, len - i); | 131 | shift = 1; |
130 | break; | 132 | break; |
131 | case 'n': | 133 | case 'n': |
132 | string[i - 1] = '\n'; | 134 | string[i - 1] = '\n'; |
133 | memmove(string + i, string + i + 1, len - i); | 135 | shift = 1; |
134 | break; | 136 | break; |
135 | case 'v': | 137 | case 'v': |
136 | string[i - 1] = '\v'; | 138 | string[i - 1] = '\v'; |
137 | memmove(string + i, string + i + 1, len - i); | 139 | shift = 1; |
138 | break; | 140 | break; |
139 | case 'f': | 141 | case 'f': |
140 | string[i - 1] = '\f'; | 142 | string[i - 1] = '\f'; |
141 | memmove(string + i, string + i + 1, len - i); | 143 | shift = 1; |
142 | break; | 144 | break; |
143 | case 'r': | 145 | case 'r': |
144 | string[i - 1] = '\r'; | 146 | string[i - 1] = '\r'; |
145 | memmove(string + i, string + i + 1, len - i); | 147 | shift = 1; |
146 | break; | 148 | break; |
147 | } | 149 | } |
150 | if (shift) { | ||
151 | memmove(string + i, string + i + shift, len - i); | ||
152 | } | ||
148 | } | 153 | } |
149 | } | 154 | } |
150 | return len; | 155 | return len; |