diff --git a/src/utils.c b/src/utils.c index 7df013edc516a22f3fc1e5b08355d95640056610..77c5a966d66379657757cc9326457b0a141d69c0 100644 --- a/src/utils.c +++ b/src/utils.c @@ -81,28 +81,24 @@ bool parse_num(const char *str, ssize_t *val) * *line and *column. Return FALSE on error, and TRUE otherwise. */ bool parse_line_column(const char *str, ssize_t *line, ssize_t *column) { - bool retval = TRUE; - const char *comma; - - assert(str != NULL); + bool retval; + char *firstpart; + const char *comma = strchr(str, ','); - comma = strchr(str, ','); + if (comma == NULL) + return parse_num(str, line); - if (comma != NULL) { - if (!parse_num(comma + 1, column)) - return FALSE; - } + if (!parse_num(comma + 1, column)) + return FALSE; - if (comma != NULL) { - char *str_line = mallocstrncpy(NULL, str, comma - str + 1); - str_line[comma - str] = '\0'; + if (comma == str) + return TRUE; - if (str_line[0] != '\0' && !parse_num(str_line, line)) - retval = FALSE; + firstpart = strdup(str); + firstpart[comma - str] = '\0'; - free(str_line); - } else - return parse_num(str, line); + retval = parse_num(firstpart, line); + free(firstpart); return retval; }