tac.c 644 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. /* tac.c - output lines in reverse order
  2. *
  3. * Copyright 2012 Rob Landley <rob@landley.net>
  4. USE_TAC(NEWTOY(tac, NULL, TOYFLAG_USR|TOYFLAG_BIN))
  5. config TAC
  6. bool "tac"
  7. default y
  8. help
  9. usage: tac [FILE...]
  10. Output lines in reverse order.
  11. */
  12. #define FOR_tac
  13. #include "toys.h"
  14. GLOBALS(
  15. struct double_list *dl;
  16. )
  17. static void do_tac(char **pline, long len)
  18. {
  19. if (pline) {
  20. dlist_add(&TT.dl, *pline);
  21. *pline = 0;
  22. } else while (TT.dl) {
  23. struct double_list *dl = dlist_lpop(&TT.dl);
  24. xprintf("%s", dl->data);
  25. free(dl->data);
  26. free(dl);
  27. }
  28. }
  29. void tac_main(void)
  30. {
  31. loopfiles_lines(toys.optargs, do_tac);
  32. }