1 /* rev.c - reverse lines of a set of given input files
2  *
3  * Copyright 2012 Elie De Brauwer <eliedebrauwer@gmail.com>
4 
5 USE_REV(NEWTOY(rev, NULL, TOYFLAG_USR|TOYFLAG_BIN))
6 
7 config REV
8   bool "rev"
9   default y
10   help
11     usage: rev [FILE...]
12 
13     Output each line reversed, when no files are given stdin is used.
14 */
15 
16 #include "toys.h"
17 
do_rev(int fd,char * name)18 static void do_rev(int fd, char *name)
19 {
20   char *c;
21 
22   for (;;) {
23     int len, i;
24 
25     if (!(c = get_line(fd))) break;
26     len = strlen(c) - 1;
27     for (i = 0; i <= len/2; i++) {
28       char tmp = c[i];
29 
30       c[i] = c[len-i];
31       c[len-i] = tmp;
32     }
33     xputs(c);
34     free(c);
35   }
36 }
37 
rev_main(void)38 void rev_main(void)
39 {
40   loopfiles(toys.optargs, do_rev);
41 }
42