--- sort.c | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/sort.c b/sort.c index 4b98cd9..be1f699 100644 --- a/sort.c +++ b/sort.c _AT_@ -29,6 +29,7 @@ static int linecmp(const char **, const char **); static char *next_nonblank(char *); static char *next_blank(char *); static int parse_keydef(struct keydef *, char *); +static char *skip_columns(char *, size_t); static char *columns(char *, const struct keydef *); static bool rflag = false; _AT_@ -194,6 +195,20 @@ next_blank(char *s) } static char * +skip_columns(char *s, size_t n) +{ + size_t i; + + for(i = 0; i < n; i++) { + if(i != 0) + s = next_blank(s); + s = next_nonblank(s); + } + + return s; +} + +static char * columns(char *line, const struct keydef *kd) { char *rest; _AT_@ -201,31 +216,23 @@ columns(char *line, const struct keydef *kd) char *res; unsigned int i; - rest = line; - for(i = 0; i < kd->start_column; i++) { - if(i != 0) - rest = next_blank(rest); - rest = next_nonblank(rest); - } + rest = skip_columns(line, kd->start_column); for(i = 1; i < kd->start_char && *rest && !isblank(*rest); i++) rest++; start = rest; if(kd->end_column) { - rest = line; - for(i = 0; i < kd->end_column; i++) { - if(i != 0) - rest = next_blank(rest); - rest = next_nonblank(rest); - } + rest = skip_columns(line, kd->end_column); if(kd->end_char) for(i = 1; i < kd->end_char && *rest && !isblank(*rest); i++) rest++; else rest = next_blank(rest); end = rest - 1; - } else + } else { end = rest + strlen(rest); + } + if((res = strndup(start, end - start)) == NULL) enprintf(2, "strndup:"); return res; -- 1.8.5.1 --/04w6evG8XlLl3ft Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0003-sort-remove-rest-variable.patch"Received on Mon Sep 17 2001 - 00:00:00 CEST
This archive was generated by hypermail 2.3.0 : Sat May 03 2014 - 21:36:07 CEST