From 9388cf327f10c191490d0b9ee2493d950f88a2f6 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Tue, 1 Jun 2021 09:05:15 +0200 Subject: [PATCH] basename: Support suffix stripping Allow passing an optional suffix argument to `basename` which is then stripped from the resulting basename (unless the resulting basename is identical to the suffix.) https://pubs.opengroup.org/onlinepubs/9699919799/utilities/basename.html --- Userland/Utilities/basename.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Userland/Utilities/basename.cpp b/Userland/Utilities/basename.cpp index aacf2548ab..9932190c62 100644 --- a/Userland/Utilities/basename.cpp +++ b/Userland/Utilities/basename.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2020, Andreas Kling + * Copyright (c) 2018-2021, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ @@ -16,12 +16,18 @@ int main(int argc, char** argv) return 1; } - const char* path = nullptr; + StringView path; + StringView suffix; Core::ArgsParser args_parser; args_parser.add_positional_argument(path, "Path to get basename from", "path"); + args_parser.add_positional_argument(suffix, "Suffix to strip from name", "suffix", Core::ArgsParser::Required::No); args_parser.parse(argc, argv); - printf("%s\n", LexicalPath(path).basename().characters()); + auto basename = LexicalPath(path).basename(); + if (!suffix.is_null() && basename.length() != suffix.length() && basename.ends_with(suffix)) + outln("{}", basename.substring_view(0, basename.length() - suffix.length())); + else + outln("{}", basename); return 0; }