diff --git a/src/utils.c b/src/utils.c index 4411499..2e0233e 100644 --- a/src/utils.c +++ b/src/utils.c @@ -77,27 +77,40 @@ bool parse_num(const char *str, ssize_t *val) return TRUE; } -/* Read two ssize_t's, separated by a comma, from str, and store them in +/* Read two ssize_t's, separated by a separator, from str, and store them in * *line and *column (if they're not both NULL). Return FALSE on error, * or TRUE otherwise. */ bool parse_line_column(const char *str, ssize_t *line, ssize_t *column) { bool retval = TRUE; - const char *comma; + const char *separator; + int i; assert(str != NULL); - comma = strchr(str, ','); - - if (comma != NULL && column != NULL) { - if (!parse_num(comma + 1, column)) + /* If we have any character other than '+', '-' or alphabets, it is + * separator between line and column number. */ + for (i = 0; i < strlen(str) - 1; ++i) + if (! (str[i] == '+' || str[i] == '-')) + if (! (str[i] >= 'A' && str[i] <= 'Z')) + if (! (str[i] >= 'a' && str[i] <= 'z')) + if (! (str[i] >= '0' && str[i] <= '9')) { + separator = strchr(str, str[i]); + break; + } + + if (i >= (strlen(str) - 1)) + separator = NULL; + + if (separator != NULL && column != NULL) { + if (!parse_num(separator + 1, column)) retval = FALSE; } if (line != NULL) { - if (comma != NULL) { - char *str_line = mallocstrncpy(NULL, str, comma - str + 1); - str_line[comma - str] = '\0'; + if (separator != NULL) { + char *str_line = mallocstrncpy(NULL, str, separator - str + 1); + str_line[separator - str] = '\0'; if (str_line[0] != '\0' && !parse_num(str_line, line)) retval = FALSE;