diff options
Diffstat (limited to '')
| -rw-r--r-- | strlib.c | 21 |
1 files changed, 13 insertions, 8 deletions
| @@ -3,7 +3,7 @@ | |||
| 3 | ** String library to LUA | 3 | ** String library to LUA |
| 4 | */ | 4 | */ |
| 5 | 5 | ||
| 6 | char *rcs_strlib="$Id: strlib.c,v 1.25 1996/08/01 14:55:33 roberto Exp roberto $"; | 6 | char *rcs_strlib="$Id: strlib.c,v 1.26 1996/08/05 20:55:24 roberto Exp roberto $"; |
| 7 | 7 | ||
| 8 | #include <string.h> | 8 | #include <string.h> |
| 9 | #include <stdio.h> | 9 | #include <stdio.h> |
| @@ -178,20 +178,25 @@ static void str_ascii (void) | |||
| 178 | #define ESC '%' | 178 | #define ESC '%' |
| 179 | #define SPECIALS "^$*?.([%" | 179 | #define SPECIALS "^$*?.([%" |
| 180 | 180 | ||
| 181 | static char *bracket_end (char *p) | ||
| 182 | { | ||
| 183 | return (*p == 0) ? NULL : strchr((*p=='^') ? p+2 : p+1, ']'); | ||
| 184 | } | ||
| 185 | |||
| 181 | char *item_end (char *p) | 186 | char *item_end (char *p) |
| 182 | { | 187 | { |
| 183 | switch (*p) { | 188 | switch (*p++) { |
| 184 | case '\0': return p; | 189 | case '\0': return p-1; |
| 185 | case ESC: | 190 | case ESC: |
| 186 | if (*(p+1) == 0) lua_error("incorrect pattern"); | 191 | if (*p == 0) lua_error("incorrect pattern"); |
| 187 | return p+2; | 192 | return p+1; |
| 188 | case '[': { | 193 | case '[': { |
| 189 | char *end = (*(p+1) == 0) ? NULL : strchr(p+2, ']'); | 194 | char *end = bracket_end(p); |
| 190 | if (end == NULL) lua_error("incorrect pattern"); | 195 | if (end == NULL) lua_error("incorrect pattern"); |
| 191 | return end+1; | 196 | return end+1; |
| 192 | } | 197 | } |
| 193 | default: | 198 | default: |
| 194 | return p+1; | 199 | return p; |
| 195 | } | 200 | } |
| 196 | } | 201 | } |
| 197 | 202 | ||
| @@ -219,7 +224,7 @@ int singlematch (int c, char *p) | |||
| 219 | case '.': return 1; | 224 | case '.': return 1; |
| 220 | case ESC: return matchclass(c, *(p+1)); | 225 | case ESC: return matchclass(c, *(p+1)); |
| 221 | case '[': { | 226 | case '[': { |
| 222 | char *end = strchr(p+2, ']'); | 227 | char *end = bracket_end(p+1); |
| 223 | int sig = *(p+1) == '^' ? (p++, 0) : 1; | 228 | int sig = *(p+1) == '^' ? (p++, 0) : 1; |
| 224 | while (++p < end) { | 229 | while (++p < end) { |
| 225 | if (*p == ESC) { | 230 | if (*p == ESC) { |
