Imported BSD-licensed rev(1) from FreeBSD (uses brand new getopt())
This commit is contained in:
		
							parent
							
								
									b05fa195d6
								
							
						
					
					
						commit
						1e6bc8c583
					
				| @ -140,6 +140,7 @@ ALL	= \ | ||||
| 	rcp \
 | ||||
| 	rdate \
 | ||||
| 	readall \
 | ||||
| 	rev \
 | ||||
| 	readfs \
 | ||||
| 	remsync \
 | ||||
| 	rget \
 | ||||
| @ -601,6 +602,10 @@ rdate:	rdate.c | ||||
| 	$(CCLD) -o $@ rdate.c | ||||
| 	@install -S 8kw $@ | ||||
| 
 | ||||
| rev:	rev.c | ||||
| 	$(CCLD) -o $@ rev.c | ||||
| 	@install -S 8kw $@ | ||||
| 
 | ||||
| readall:	readall.c | ||||
| 	$(CCLD) -o $@ $? | ||||
| 	@install -S 4kw $@ | ||||
| @ -820,7 +825,8 @@ install:	\ | ||||
| 		/usr/bin/del_route \
 | ||||
| 	/usr/bin/at \
 | ||||
| 	/usr/bin/backup \
 | ||||
| 		/usr/bin/restore \
 | ||||
| 	/usr/bin/restore \
 | ||||
| 	/usr/bin/rev \
 | ||||
| 	/usr/bin/badblocks \
 | ||||
| 	/usr/bin/banner \
 | ||||
| 	/usr/bin/basename \
 | ||||
| @ -1364,6 +1370,9 @@ install:	\ | ||||
| /usr/bin/remsync:	remsync | ||||
| 	install -cs -o bin $? $@ | ||||
| 
 | ||||
| /usr/bin/rev:	rev | ||||
| 	install -cs -o bin $? $@ | ||||
| 
 | ||||
| /usr/bin/rget:	rget | ||||
| 	install -cs -o bin $? $@ | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										108
									
								
								commands/simple/rev.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								commands/simple/rev.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,108 @@ | ||||
| /*-
 | ||||
|  * Copyright (c) 1987, 1992, 1993 | ||||
|  *	The Regents of the University of California.  All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions | ||||
|  * are met: | ||||
|  * 1. Redistributions of source code must retain the above copyright | ||||
|  *    notice, this list of conditions and the following disclaimer. | ||||
|  * 2. Redistributions in binary form must reproduce the above copyright | ||||
|  *    notice, this list of conditions and the following disclaimer in the | ||||
|  *    documentation and/or other materials provided with the distribution. | ||||
|  * 3. All advertising materials mentioning features or use of this software | ||||
|  *    must display the following acknowledgement: | ||||
|  *	This product includes software developed by the University of | ||||
|  *	California, Berkeley and its contributors. | ||||
|  * 4. Neither the name of the University nor the names of its contributors | ||||
|  *    may be used to endorse or promote products derived from this software | ||||
|  *    without specific prior written permission. | ||||
|  * | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | ||||
|  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||||
|  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||||
|  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | ||||
|  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||||
|  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||||
|  * SUCH DAMAGE. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef lint | ||||
| static const char copyright[] = | ||||
| "@(#) Copyright (c) 1987, 1992, 1993\n\
 | ||||
| 	The Regents of the University of California.  All rights reserved.\n"; | ||||
| #endif /* not lint */ | ||||
| 
 | ||||
| #include <sys/types.h> | ||||
| 
 | ||||
| #include <errno.h> | ||||
| #include <locale.h> | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
| #include <unistd.h> | ||||
| 
 | ||||
| void usage(void); | ||||
| 
 | ||||
| int | ||||
| main(int argc, char *argv[]) | ||||
| { | ||||
| 	const char *filename; | ||||
| 	char p[2000], *t; | ||||
| 	FILE *fp; | ||||
| 	size_t len; | ||||
| 	int ch, rval; | ||||
| 
 | ||||
| 	setlocale(LC_ALL, ""); | ||||
| 
 | ||||
| 	while ((ch = getopt(argc, argv, "")) != -1) | ||||
| 		switch(ch) { | ||||
| 		case '?': | ||||
| 		default: | ||||
| 			usage(); | ||||
| 		} | ||||
| 
 | ||||
| 	argc -= optind; | ||||
| 	argv += optind; | ||||
| 
 | ||||
| 	fp = stdin; | ||||
| 	filename = "stdin"; | ||||
| 	rval = 0; | ||||
| 	do { | ||||
| 		if (*argv) { | ||||
| 			if ((fp = fopen(*argv, "r")) == NULL) { | ||||
| 				perror(*argv); | ||||
| 				rval = 1; | ||||
| 				++argv; | ||||
| 				continue; | ||||
| 			} | ||||
| 			filename = *argv++; | ||||
| 		} | ||||
| 		while ((fgets(p, sizeof(p)-1, fp)) != NULL) { | ||||
| 			len = strlen(p); | ||||
| 			if (p[len - 1] == '\n') | ||||
| 				--len; | ||||
| 			t = p + len - 1; | ||||
| 			for (t = p + len - 1; t >= p; --t) | ||||
| 				putchar(*t); | ||||
| 			putchar('\n'); | ||||
| 		} | ||||
| 		if (ferror(fp)) { | ||||
| 			perror(filename); | ||||
| 			rval = 1; | ||||
| 		} | ||||
| 		(void)fclose(fp); | ||||
| 	} while(*argv); | ||||
| 	exit(rval); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| usage(void) | ||||
| { | ||||
| 	(void)fprintf(stderr, "usage: rev [file ...]\n"); | ||||
| 	exit(1); | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Ben Gras
						Ben Gras