| 246 | } |
| 247 | |
| 248 | int parse_range_arg(const char *arg, nth_line_fn_t nth_line_cb, |
| 249 | void *cb_data, long lines, long anchor, |
| 250 | long *begin, long *end, |
| 251 | const char *path, struct index_state *istate) |
| 252 | { |
| 253 | *begin = *end = 0; |
| 254 | |
| 255 | if (anchor < 1) |
| 256 | anchor = 1; |
| 257 | if (anchor > lines) |
| 258 | anchor = lines + 1; |
| 259 | |
| 260 | if (*arg == ':' || (*arg == '^' && *(arg + 1) == ':')) { |
| 261 | arg = parse_range_funcname(arg, nth_line_cb, cb_data, |
| 262 | lines, anchor, begin, end, |
| 263 | path, istate); |
| 264 | if (!arg || *arg) |
| 265 | return -1; |
| 266 | return 0; |
| 267 | } |
| 268 | |
| 269 | arg = parse_loc(arg, nth_line_cb, cb_data, lines, -anchor, begin); |
| 270 | |
| 271 | if (*arg == ',') |
| 272 | arg = parse_loc(arg + 1, nth_line_cb, cb_data, lines, *begin + 1, end); |
| 273 | |
| 274 | if (*arg) |
| 275 | return -1; |
| 276 | |
| 277 | if (*begin && *end && *end < *begin) { |
| 278 | SWAP(*end, *begin); |
| 279 | } |
| 280 | |
| 281 | return 0; |
| 282 | } |
| 283 | |
| 284 | const char *skip_range_arg(const char *arg, struct index_state *istate) |
| 285 | { |
no test coverage detected