Mercurial > hg > toybox
diff toys/other/rev.c @ 753:7d258f3c13dc
Adding implementation of rev including tests
author | Elie De Brauwer <eliedebrauwer@gmail.com> |
---|---|
date | Sun, 16 Dec 2012 12:31:15 +0100 |
parents | |
children | 06c32155cb95 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/toys/other/rev.c Sun Dec 16 12:31:15 2012 +0100 @@ -0,0 +1,44 @@ +/* rev.c - reverse lines of a set of given input files + * + * Copyright 2012 Elie De Brauwer <eliedebrauwer@gmail.com> + +USE_REV(NEWTOY(rev, NULL, TOYFLAG_USR|TOYFLAG_BIN)) + +config REV + bool "rev" + default y + help + usage: rev [FILE...] + + Output lines reversed, when no files are given stdin is used. +*/ + +#include "toys.h" + +void do_rev(int fd, char *name) +{ + char *c; + + for (;;) { + int len; + int i; + if (!(c = get_line(fd))) break; + len = strlen(c) - 1; + i = 0; + while ( i <= len/2) + { + char tmp; + tmp = c[i]; + c[i] = c[len-i]; + c[len-i] = tmp; + i++; + } + xputs(c); + free(c); + } +} + +void rev_main(void) +{ + loopfiles(toys.optargs, do_rev); +}