diff --git a/Base/usr/share/man/man1/base64.md b/Base/usr/share/man/man1/base64.md index 7d1bff291e8..c02df51df91 100644 --- a/Base/usr/share/man/man1/base64.md +++ b/Base/usr/share/man/man1/base64.md @@ -5,7 +5,7 @@ base64 - encode and decode to base64 ## Synopsis ```**sh -$ base64 [-d|--decode] [file] +$ base64 [--decode] [--wrap column] [file] ``` ## Description @@ -15,15 +15,18 @@ file is not specified or file is `-`. ## Options -* `-d|--decode`: Decode data +* `-d`, `--decode`: Decode data +* `-w column`, `--wrap column`: When encoding, wrap output after `column` characters ## Examples ```sh -# base64 encode the text 'foo' +# base64 encode the text 'A' $ echo 'A' | base64 -# base64 encode the content of foo.txt +# base64 encode the content of hi.txt $ base64 hi.txt +# base64 encode the content of baz.txt and wrap after 4 columns +$ base64 -w 4 baz.txt # base64 decode the text 'Zm9v' $ echo 'Zm9v' | base64 -d # base64 decode the content of foo.txt diff --git a/Userland/Utilities/base64.cpp b/Userland/Utilities/base64.cpp index fd07bf310eb..2ff1ed7cdb1 100644 --- a/Userland/Utilities/base64.cpp +++ b/Userland/Utilities/base64.cpp @@ -10,15 +10,29 @@ #include #include +static void print_wrapped_output(size_t column, StringView encoded) +{ + VERIFY(column > 0); + + while (!encoded.is_empty()) { + auto segment_length = min(column, encoded.length()); + + outln("{}", encoded.substring_view(0, segment_length)); + encoded = encoded.substring_view(segment_length); + } +} + ErrorOr serenity_main(Main::Arguments arguments) { TRY(Core::System::pledge("stdio rpath")); bool decode = false; + Optional maybe_column; StringView filepath = {}; Core::ArgsParser args_parser; args_parser.add_option(decode, "Decode data", "decode", 'd'); + args_parser.add_option(maybe_column, "When encoding, wrap output after column characters", "wrap", 'w', "column"); args_parser.add_positional_argument(filepath, "", "file", Core::ArgsParser::Required::No); args_parser.parse(arguments); @@ -34,6 +48,12 @@ ErrorOr serenity_main(Main::Arguments arguments) } auto encoded = TRY(encode_base64(buffer)); + + if (maybe_column.has_value() && *maybe_column > 0) { + print_wrapped_output(*maybe_column, encoded); + return 0; + } + outln("{}", encoded); return 0; }