Tue Jul 21 01:12:55 2009 UTC ()
Change to support multibyte characters.


(ahoka)
diff -r1.7 -r1.8 src/usr.bin/rev/rev.1
diff -r1.9 -r1.10 src/usr.bin/rev/rev.c

cvs diff -r1.7 -r1.8 src/usr.bin/rev/rev.1 (expand / switch to unified diff)

--- src/usr.bin/rev/rev.1 2008/11/28 20:30:05 1.7
+++ src/usr.bin/rev/rev.1 2009/07/21 01:12:55 1.8
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1.\" $NetBSD: rev.1,v 1.7 2008/11/28 20:30:05 reed Exp $ 1.\" $NetBSD: rev.1,v 1.8 2009/07/21 01:12:55 ahoka Exp $
2.\" 2.\"
3.\" Copyright (c) 1985, 1992, 1993 3.\" Copyright (c) 1985, 1992, 1993
4.\" The Regents of the University of California. All rights reserved. 4.\" The Regents of the University of California. All rights reserved.
5.\" 5.\"
6.\" Redistribution and use in source and binary forms, with or without 6.\" Redistribution and use in source and binary forms, with or without
7.\" modification, are permitted provided that the following conditions 7.\" modification, are permitted provided that the following conditions
8.\" are met: 8.\" are met:
9.\" 1. Redistributions of source code must retain the above copyright 9.\" 1. Redistributions of source code must retain the above copyright
10.\" notice, this list of conditions and the following disclaimer. 10.\" notice, this list of conditions and the following disclaimer.
11.\" 2. Redistributions in binary form must reproduce the above copyright 11.\" 2. Redistributions in binary form must reproduce the above copyright
12.\" notice, this list of conditions and the following disclaimer in the 12.\" notice, this list of conditions and the following disclaimer in the
13.\" documentation and/or other materials provided with the distribution. 13.\" documentation and/or other materials provided with the distribution.
14.\" 3. Neither the name of the University nor the names of its contributors 14.\" 3. Neither the name of the University nor the names of its contributors
@@ -19,28 +19,32 @@ @@ -19,28 +19,32 @@
19.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 21.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
22.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28.\" SUCH DAMAGE. 28.\" SUCH DAMAGE.
29.\" 29.\"
30.\" @(#)rev.1 8.1 (Berkeley) 6/9/93 30.\" @(#)rev.1 8.1 (Berkeley) 6/9/93
31.\" 31.\"
32.Dd January 21, 2001 32.Dd July 21, 2009
33.Dt REV 1 33.Dt REV 1
34.Os 34.Os
35.Sh NAME 35.Sh NAME
36.Nm rev 36.Nm rev
37.Nd reverse order of characters of lines in a file 37.Nd reverse order of characters of lines in a file
38.Sh SYNOPSIS 38.Sh SYNOPSIS
39.Nm 39.Nm
40.Op Ar 40.Op Ar
41.Sh DESCRIPTION 41.Sh DESCRIPTION
42The 42The
43.Nm 43.Nm
44utility copies the specified files to the standard output, reversing the 44utility copies the specified files to the standard output, reversing the
45order of characters in every line. 45order of characters in every line.
46If no files are specified, the standard input is read. 46If no files are specified, the standard input is read.
 47.Sh ENVIRONMENT
 48.Bl -tag -width indent
 49.It Ev LC_ALL
 50.El

cvs diff -r1.9 -r1.10 src/usr.bin/rev/rev.c (expand / switch to unified diff)

--- src/usr.bin/rev/rev.c 2009/04/13 04:36:34 1.9
+++ src/usr.bin/rev/rev.c 2009/07/21 01:12:55 1.10
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1/* $NetBSD: rev.c,v 1.9 2009/04/13 04:36:34 lukem Exp $ */ 1/* $NetBSD: rev.c,v 1.10 2009/07/21 01:12:55 ahoka Exp $ */
2 2
3/*- 3/*-
4 * Copyright (c) 1987, 1992, 1993 4 * Copyright (c) 1987, 1992, 1993
5 * The Regents of the University of California. All rights reserved. 5 * The Regents of the University of California. All rights reserved.
6 * 6 *
7 * Redistribution and use in source and binary forms, with or without 7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions 8 * modification, are permitted provided that the following conditions
9 * are met: 9 * are met:
10 * 1. Redistributions of source code must retain the above copyright 10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer. 11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright 12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the 13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution. 14 * documentation and/or other materials provided with the distribution.
@@ -29,83 +29,86 @@ @@ -29,83 +29,86 @@
29 * SUCH DAMAGE. 29 * SUCH DAMAGE.
30 */ 30 */
31 31
32#include <sys/cdefs.h> 32#include <sys/cdefs.h>
33#ifndef lint 33#ifndef lint
34__COPYRIGHT("@(#) Copyright (c) 1987, 1992, 1993\ 34__COPYRIGHT("@(#) Copyright (c) 1987, 1992, 1993\
35 The Regents of the University of California. All rights reserved."); 35 The Regents of the University of California. All rights reserved.");
36#endif /* not lint */ 36#endif /* not lint */
37 37
38#ifndef lint 38#ifndef lint
39#if 0 39#if 0
40static char sccsid[] = "@(#)rev.c 8.3 (Berkeley) 5/4/95"; 40static char sccsid[] = "@(#)rev.c 8.3 (Berkeley) 5/4/95";
41#else 41#else
42__RCSID("$NetBSD: rev.c,v 1.9 2009/04/13 04:36:34 lukem Exp $"); 42__RCSID("$NetBSD: rev.c,v 1.10 2009/07/21 01:12:55 ahoka Exp $");
43#endif 43#endif
44#endif /* not lint */ 44#endif /* not lint */
45 45
46#include <sys/types.h> 46#include <sys/types.h>
47 47
48#include <err.h> 48#include <err.h>
49#include <errno.h> 49#include <errno.h>
 50#include <locale.h>
50#include <stdio.h> 51#include <stdio.h>
51#include <stdlib.h> 52#include <stdlib.h>
52#include <string.h> 
53#include <unistd.h> 53#include <unistd.h>
 54#include <wchar.h>
54 55
55int main __P((int, char **)); 56int main __P((int, char **));
56void usage __P((void)); 57void usage __P((void));
57 58
58int 59int
59main(argc, argv) 60main(argc, argv)
60 int argc; 61 int argc;
61 char *argv[]; 62 char *argv[];
62{ 63{
63 const char *filename; 64 const char *filename;
64 char *p, *t; 65 wchar_t *p, *t;
65 FILE *fp; 66 FILE *fp;
66 size_t len; 67 size_t len;
67 int ch, rval; 68 int ch, rval;
68 69
 70 setlocale(LC_ALL, "");
 71
69 while ((ch = getopt(argc, argv, "")) != -1) 72 while ((ch = getopt(argc, argv, "")) != -1)
70 switch(ch) { 73 switch(ch) {
71 case '?': 74 case '?':
72 default: 75 default:
73 usage(); 76 usage();
74 } 77 }
75 78
76 argc -= optind; 79 argc -= optind;
77 argv += optind; 80 argv += optind;
78 81
79 fp = stdin; 82 fp = stdin;
80 filename = "stdin"; 83 filename = "stdin";
81 rval = 0; 84 rval = 0;
82 do { 85 do {
83 if (*argv) { 86 if (*argv) {
84 if ((fp = fopen(*argv, "r")) == NULL) { 87 if ((fp = fopen(*argv, "r")) == NULL) {
85 warn("%s", *argv); 88 warn("%s", *argv);
86 rval = 1; 89 rval = 1;
87 ++argv; 90 ++argv;
88 continue; 91 continue;
89 } 92 }
90 filename = *argv++; 93 filename = *argv++;
91 } 94 }
92 while ((p = fgetln(fp, &len)) != NULL) { 95 while ((p = fgetwln(fp, &len)) != NULL) {
93 if (p[len - 1] == '\n') 96 if (p[len - 1] == L'\n')
94 --len; 97 --len;
95 t = p + len - 1; 98 t = p + len - 1;
96 for (t = p + len - 1; t >= p; --t) 99 for (t = p + len - 1; t >= p; --t)
97 putchar(*t); 100 putwchar(*t);
98 putchar('\n'); 101 putwchar(L'\n');
99 } 102 }
100 if (ferror(fp)) { 103 if (ferror(fp)) {
101 warn("%s", filename); 104 warn("%s", filename);
102 rval = 1; 105 rval = 1;
103 } 106 }
104 (void)fclose(fp); 107 (void)fclose(fp);
105 } while(*argv); 108 } while(*argv);
106 exit(rval); 109 exit(rval);
107} 110}
108 111
109void 112void
110usage() 113usage()
111{ 114{