10f66f451Sopenharmony_ci/* basename.c - Return non-directory portion of a pathname
20f66f451Sopenharmony_ci *
30f66f451Sopenharmony_ci * Copyright 2012 Tryn Mirell <tryn@mirell.org>
40f66f451Sopenharmony_ci *
50f66f451Sopenharmony_ci * See http://opengroup.org/onlinepubs/9699919799/utilities/basename.html
60f66f451Sopenharmony_ci
70f66f451Sopenharmony_ci
80f66f451Sopenharmony_ciUSE_BASENAME(NEWTOY(basename, "^<1as:", TOYFLAG_USR|TOYFLAG_BIN))
90f66f451Sopenharmony_ci
100f66f451Sopenharmony_ciconfig BASENAME
110f66f451Sopenharmony_ci  bool "basename"
120f66f451Sopenharmony_ci  default y
130f66f451Sopenharmony_ci  help
140f66f451Sopenharmony_ci    usage: basename [-a] [-s SUFFIX] NAME... | NAME [SUFFIX]
150f66f451Sopenharmony_ci
160f66f451Sopenharmony_ci    Return non-directory portion of a pathname removing suffix.
170f66f451Sopenharmony_ci
180f66f451Sopenharmony_ci    -a		All arguments are names
190f66f451Sopenharmony_ci    -s SUFFIX	Remove suffix (implies -a)
200f66f451Sopenharmony_ci*/
210f66f451Sopenharmony_ci
220f66f451Sopenharmony_ci#define FOR_basename
230f66f451Sopenharmony_ci#include "toys.h"
240f66f451Sopenharmony_ci
250f66f451Sopenharmony_ciGLOBALS(
260f66f451Sopenharmony_ci  char *s;
270f66f451Sopenharmony_ci)
280f66f451Sopenharmony_ci
290f66f451Sopenharmony_civoid basename_main(void)
300f66f451Sopenharmony_ci{
310f66f451Sopenharmony_ci  char **arg;
320f66f451Sopenharmony_ci
330f66f451Sopenharmony_ci  if (toys.optflags&FLAG_s) toys.optflags |= FLAG_a;
340f66f451Sopenharmony_ci
350f66f451Sopenharmony_ci  if (!(toys.optflags&FLAG_a)) {
360f66f451Sopenharmony_ci    if (toys.optc > 2) error_exit("too many args");
370f66f451Sopenharmony_ci    TT.s = toys.optargs[1];
380f66f451Sopenharmony_ci    toys.optargs[1] = NULL;
390f66f451Sopenharmony_ci  }
400f66f451Sopenharmony_ci
410f66f451Sopenharmony_ci  for (arg = toys.optargs; *arg; ++arg) {
420f66f451Sopenharmony_ci    char *base = basename(*arg), *p;
430f66f451Sopenharmony_ci
440f66f451Sopenharmony_ci    // Chop off the suffix if provided.
450f66f451Sopenharmony_ci    if (TT.s && *TT.s && (p = strend(base, TT.s))) *p = 0;
460f66f451Sopenharmony_ci    puts(base);
470f66f451Sopenharmony_ci  }
480f66f451Sopenharmony_ci}
49