diff options
author | Ruslan Ermilov <ru@FreeBSD.org> | 2010-01-10 08:02:07 +0000 |
---|---|---|
committer | Ruslan Ermilov <ru@FreeBSD.org> | 2010-01-10 08:02:07 +0000 |
commit | d98dd8e5f94cc104f78cf1827ec1a012274f85d5 (patch) | |
tree | f4923317980c5c94957c3b5a4b1c4906654e92d1 /contrib/one-true-awk/main.c | |
parent | 97507d71831d84ea349d884da5ab0a6ba11967ee (diff) | |
download | src-d98dd8e5f94cc104f78cf1827ec1a012274f85d5.tar.gz src-d98dd8e5f94cc104f78cf1827ec1a012274f85d5.zip |
Apply patches directly to sources. Their effect is as follows:
- Make one-true-awk respect locale's collating order in [a-z]
bracket expressions, until a more complete fix (like handing
BREs) is ready.
- Don't require a space between -[fv] and its argument.
Notes
Notes:
svn path=/head/; revision=201989
Diffstat (limited to 'contrib/one-true-awk/main.c')
-rw-r--r-- | contrib/one-true-awk/main.c | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/contrib/one-true-awk/main.c b/contrib/one-true-awk/main.c index 3bc25a579fec..d78a8511e79b 100644 --- a/contrib/one-true-awk/main.c +++ b/contrib/one-true-awk/main.c @@ -22,7 +22,10 @@ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ****************************************************************/ -const char *version = "version 20091126"; +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +const char *version = "version 20091126 (FreeBSD)"; #define DEBUG #include <stdio.h> @@ -58,6 +61,7 @@ int main(int argc, char *argv[]) const char *fs = NULL; setlocale(LC_CTYPE, ""); + setlocale(LC_COLLATE, ""); setlocale(LC_NUMERIC, "C"); /* for parsing cmdline & prog */ cmdname = argv[0]; if (argc == 1) { @@ -86,13 +90,18 @@ int main(int argc, char *argv[]) safe = 1; break; case 'f': /* next argument is program filename */ - argc--; - argv++; - if (argc <= 1) - FATAL("no program filename"); - if (npfile >= MAX_PFILE - 1) - FATAL("too many -f options"); - pfile[npfile++] = argv[1]; + if (argv[1][2] != 0) { /* arg is -fsomething */ + if (npfile >= MAX_PFILE - 1) + FATAL("too many -f options"); + pfile[npfile++] = &argv[1][2]; + } else { /* arg is -f something */ + argc--; argv++; + if (argc <= 1) + FATAL("no program filename"); + if (npfile >= MAX_PFILE - 1) + FATAL("too many -f options"); + pfile[npfile++] = argv[1]; + } break; case 'F': /* set field separator */ if (argv[1][2] != 0) { /* arg is -Fsomething */ @@ -111,8 +120,14 @@ int main(int argc, char *argv[]) WARNING("field separator FS is empty"); break; case 'v': /* -v a=1 to be done NOW. one -v for each */ - if (argv[1][2] == '\0' && --argc > 1 && isclvar((++argv)[1])) - setclvar(argv[1]); + if (argv[1][2] != 0) { /* arg is -vsomething */ + if (argv[1][2] != 0) + setclvar(&argv[1][2]); + } else { /* arg is -v something */ + argc--; argv++; + if (argc > 1 && isclvar(argv[1])) + setclvar(argv[1]); + } break; case 'd': dbg = atoi(&argv[1][2]); |