/* basename.c - Return non-directory portion of a pathname
 *
 * Copyright 2012 Tryn Mirell <tryn@mirell.org>
 *
 * See http://opengroup.org/onlinepubs/9699919799/utilities/basename.html


USE_BASENAME(NEWTOY(basename, "<1as:", TOYFLAG_USR|TOYFLAG_BIN))

config BASENAME
  bool "basename"
  default y
  help
    usage: basename [-a] [-s SUFFIX] NAME... | NAME [SUFFIX]

    Return non-directory portion of a pathname removing suffix.

    -a		All arguments are names
    -s SUFFIX	Remove suffix (implies -a)
*/

#define FOR_basename
#include "toys.h"

GLOBALS(
  char *s;
)

void basename_main(void)
{
  char **arg;

  if (toys.optflags&FLAG_s) toys.optflags |= FLAG_a;

  if (!(toys.optflags&FLAG_a)) {
    if (toys.optc > 2) error_exit("too many args");
    TT.s = toys.optargs[1];
    toys.optargs[1] = NULL;
  }

  for (arg = toys.optargs; *arg; ++arg) {
    char *base = basename(*arg), *p;

    // Chop off the suffix if provided.
    if (TT.s && *TT.s && (p = strend(base, TT.s))) *p = 0;
    puts(base);
  }
}
