1/* tac.c - output lines in reverse order
2 *
3 * Copyright 2012 Rob Landley <rob@landley.net>
4
5USE_TAC(NEWTOY(tac, NULL, TOYFLAG_USR|TOYFLAG_BIN))
6
7config TAC
8  bool "tac"
9  default y
10  help
11    usage: tac [FILE...]
12
13    Output lines in reverse order.
14*/
15
16#include "toys.h"
17
18static void do_tac(int fd, char *name)
19{
20  struct arg_list *list = NULL;
21  char *c;
22
23  // Read in lines
24  for (;;) {
25    struct arg_list *temp;
26    long len;
27
28    if (!(c = get_rawline(fd, &len, '\n'))) break;
29
30    temp = xmalloc(sizeof(struct arg_list));
31    temp->next = list;
32    temp->arg = c;
33    list = temp;
34  }
35
36  // Play them back.
37  while (list) {
38    struct arg_list *temp = list->next;
39    xprintf("%s", list->arg);
40    free(list->arg);
41    free(list);
42    list = temp;
43  }
44}
45
46void tac_main(void)
47{
48  loopfiles(toys.optargs, do_tac);
49}
50