toybox/toys/other/tac.c
<<
>>
Prefs
   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