blob: 7fcdb836811d737b282d924b4adba85b361bedb1 [file] [log] [blame]
Erik Andersen42387e42000-02-21 17:27:17 +00001/* vi: set sw=4 ts=4: */
2/*
3 * Mini basename implementation for busybox
4 *
Eric Andersencb81e642003-07-14 21:21:08 +00005 * Copyright (C) 1999-2003 by Erik Andersen <andersen@codepoet.org>
Erik Andersen42387e42000-02-21 17:27:17 +00006 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 *
21 */
22
Manuel Novoa III cad53642003-03-19 09:13:01 +000023/* BB_AUDIT SUSv3 compliant */
24/* http://www.opengroup.org/onlinepubs/007904975/utilities/basename.html */
25
26
27/* Mar 16, 2003 Manuel Novoa III (mjn3@codepoet.org)
28 *
29 * Changes:
30 * 1) Now checks for too many args. Need at least one and at most two.
31 * 2) Don't check for options, as per SUSv3.
32 * 3) Save some space by using strcmp(). Calling strncmp() here was silly.
33 */
Mark Whitley827e45c2001-03-09 23:59:51 +000034
Eric Andersened3ef502001-01-27 08:24:39 +000035#include <stdlib.h>
Manuel Novoa III cad53642003-03-19 09:13:01 +000036#include <stdio.h>
Eric Andersened3ef502001-01-27 08:24:39 +000037#include <string.h>
Manuel Novoa III cad53642003-03-19 09:13:01 +000038#include "busybox.h"
Erik Andersen42387e42000-02-21 17:27:17 +000039
40extern int basename_main(int argc, char **argv)
41{
Manuel Novoa III cad53642003-03-19 09:13:01 +000042 size_t m, n;
Eric Andersena0053732000-07-10 20:08:09 +000043 char *s;
Erik Andersen42387e42000-02-21 17:27:17 +000044
Manuel Novoa III cad53642003-03-19 09:13:01 +000045 if (((unsigned int)(argc-2)) >= 2) {
46 bb_show_usage();
Erik Andersen42387e42000-02-21 17:27:17 +000047 }
Erik Andersen330fd2b2000-05-19 05:35:19 +000048
Manuel Novoa III cad53642003-03-19 09:13:01 +000049 s = bb_get_last_path_component(*++argv);
Erik Andersen42387e42000-02-21 17:27:17 +000050
Manuel Novoa III cad53642003-03-19 09:13:01 +000051 if (*++argv) {
Erik Andersenac130e12000-05-10 05:00:31 +000052 n = strlen(*argv);
53 m = strlen(s);
Manuel Novoa III cad53642003-03-19 09:13:01 +000054 if ((m > n) && ((strcmp)(s+m-n, *argv) == 0)) {
Erik Andersenac130e12000-05-10 05:00:31 +000055 s[m-n] = '\0';
Manuel Novoa III cad53642003-03-19 09:13:01 +000056 }
Erik Andersenac130e12000-05-10 05:00:31 +000057 }
Manuel Novoa III cad53642003-03-19 09:13:01 +000058
Matt Kraai59df6f72001-05-16 14:21:09 +000059 puts(s);
Manuel Novoa III cad53642003-03-19 09:13:01 +000060
61 bb_fflush_stdout_and_exit(EXIT_SUCCESS);
Erik Andersen42387e42000-02-21 17:27:17 +000062}