diff options
author | Jim Meyering <jim@meyering.net> | 1995-12-05 23:50:43 +0000 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 1995-12-05 23:50:43 +0000 |
commit | e625640bd0870e6c0ba89fe2cfba788956d59065 (patch) | |
tree | 62f34a439c13a8d0706f59e10d40ef59ee83e69a /src | |
parent | a6a2dbc63ce365b5fc529c5176dff93e8e176330 (diff) | |
download | coreutils-e625640bd0870e6c0ba89fe2cfba788956d59065.tar.xz |
(main): Diagnose improper form of arguments to -k, then fail.
Diffstat (limited to 'src')
-rw-r--r-- | src/sort.c | 64 |
1 files changed, 54 insertions, 10 deletions
diff --git a/src/sort.c b/src/sort.c index 707df9cfb..95b324f5c 100644 --- a/src/sort.c +++ b/src/sort.c @@ -1782,15 +1782,34 @@ main (int argc, char **argv) badfieldspec (argv[i]); for (t = 0; digits[UCHAR (*s)]; ++s) t = 10 * t + *s - '0'; - if (t) - t--; + if (t == 0) + { + /* Provoke with `sort -k0' */ + error (0, 0, _("the starting field number argument \ +to the `-k' option must be positive")); + badfieldspec (argv[i]); + } + --t; t2 = 0; if (*s == '.') { + if (!digits[UCHAR (s[1])]) + { + /* Provoke with `sort -k1.' */ + error (0, 0, _("starting field spec has `.' but \ +lacks following character offset")); + badfieldspec (argv[i]); + } for (++s; digits[UCHAR (*s)]; ++s) t2 = 10 * t2 + *s - '0'; - if (t2) - t2--; + if (t2 == 0) + { + /* Provoke with `sort -k1.0' */ + error (0, 0, _("starting field character offset \ +argument to the `-k' option\nmust be positive")); + badfieldspec (argv[i]); + } + --t2; } if (t2 || t) { @@ -1800,20 +1819,45 @@ main (int argc, char **argv) else key->sword = -1; s = set_ordering (s, key, bl_start); - if (*s && *s != ',') + if (*s == 0) + { + key->eword = -1; + key->echar = 0; + } + else if (*s != ',') badfieldspec (argv[i]); - else if (*s++) + else if (*s == ',') { + /* Skip over comma. */ + ++s; + if (*s == 0) + { + /* Provoke with `sort -k1,' */ + error (0, 0, _("field specification has `,' but \ +lacks following field spec")); + badfieldspec (argv[i]); + } /* Get POS2. */ for (t = 0; digits[UCHAR (*s)]; ++s) t = t * 10 + *s - '0'; - if (t) - t--; + if (t == 0) + { + /* Provoke with `sort -k1,0' */ + error (0, 0, _("ending field number argument \ +to the `-k' option must be positive")); + badfieldspec (argv[i]); + } + --t; t2 = 0; - /* FIXME: It's an error to specify `.' without a - following char-spec. */ if (*s == '.') { + if (!digits[UCHAR (s[1])]) + { + /* Provoke with `sort -k1,1.' */ + error (0, 0, _("ending field spec has `.' \ +but lacks following character offset")); + badfieldspec (argv[i]); + } for (++s; digits[UCHAR (*s)]; ++s) t2 = t2 * 10 + *s - '0'; } |