|
@@ -6,7 +6,6 @@
|
|
|
|
|
|
#include <AK/LexicalPath.h>
|
|
#include <AK/LexicalPath.h>
|
|
#include <LibCore/ArgsParser.h>
|
|
#include <LibCore/ArgsParser.h>
|
|
-#include <LibCore/DeprecatedFile.h>
|
|
|
|
#include <LibCore/System.h>
|
|
#include <LibCore/System.h>
|
|
#include <LibFileSystem/FileSystem.h>
|
|
#include <LibFileSystem/FileSystem.h>
|
|
#include <LibMain/Main.h>
|
|
#include <LibMain/Main.h>
|
|
@@ -18,7 +17,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
|
TRY(Core::System::pledge("stdio rpath wpath cpath fattr chown"));
|
|
TRY(Core::System::pledge("stdio rpath wpath cpath fattr chown"));
|
|
|
|
|
|
bool link = false;
|
|
bool link = false;
|
|
- auto preserve = Core::DeprecatedFile::PreserveMode::Nothing;
|
|
|
|
|
|
+ auto preserve = FileSystem::PreserveMode::Nothing;
|
|
bool recursion_allowed = false;
|
|
bool recursion_allowed = false;
|
|
bool verbose = false;
|
|
bool verbose = false;
|
|
Vector<StringView> sources;
|
|
Vector<StringView> sources;
|
|
@@ -34,7 +33,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
|
"attributes",
|
|
"attributes",
|
|
[&preserve](StringView s) {
|
|
[&preserve](StringView s) {
|
|
if (s.is_empty()) {
|
|
if (s.is_empty()) {
|
|
- preserve = Core::DeprecatedFile::PreserveMode::Permissions | Core::DeprecatedFile::PreserveMode::Ownership | Core::DeprecatedFile::PreserveMode::Timestamps;
|
|
|
|
|
|
+ preserve = FileSystem::PreserveMode::Permissions | FileSystem::PreserveMode::Ownership | FileSystem::PreserveMode::Timestamps;
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -42,11 +41,11 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
|
|
|
|
|
s.for_each_split_view(',', SplitBehavior::Nothing, [&](StringView value) {
|
|
s.for_each_split_view(',', SplitBehavior::Nothing, [&](StringView value) {
|
|
if (value == "mode"sv) {
|
|
if (value == "mode"sv) {
|
|
- preserve |= Core::DeprecatedFile::PreserveMode::Permissions;
|
|
|
|
|
|
+ preserve |= FileSystem::PreserveMode::Permissions;
|
|
} else if (value == "ownership"sv) {
|
|
} else if (value == "ownership"sv) {
|
|
- preserve |= Core::DeprecatedFile::PreserveMode::Ownership;
|
|
|
|
|
|
+ preserve |= FileSystem::PreserveMode::Ownership;
|
|
} else if (value == "timestamps"sv) {
|
|
} else if (value == "timestamps"sv) {
|
|
- preserve |= Core::DeprecatedFile::PreserveMode::Timestamps;
|
|
|
|
|
|
+ preserve |= FileSystem::PreserveMode::Timestamps;
|
|
} else {
|
|
} else {
|
|
warnln("cp: Unknown or unimplemented --preserve attribute: '{}'", value);
|
|
warnln("cp: Unknown or unimplemented --preserve attribute: '{}'", value);
|
|
values_ok = false;
|
|
values_ok = false;
|
|
@@ -64,7 +63,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
|
args_parser.add_positional_argument(destination, "Destination file path", "destination");
|
|
args_parser.add_positional_argument(destination, "Destination file path", "destination");
|
|
args_parser.parse(arguments);
|
|
args_parser.parse(arguments);
|
|
|
|
|
|
- if (has_flag(preserve, Core::DeprecatedFile::PreserveMode::Permissions)) {
|
|
|
|
|
|
+ if (has_flag(preserve, FileSystem::PreserveMode::Permissions)) {
|
|
umask(0);
|
|
umask(0);
|
|
} else {
|
|
} else {
|
|
TRY(Core::System::pledge("stdio rpath wpath cpath fattr"));
|
|
TRY(Core::System::pledge("stdio rpath wpath cpath fattr"));
|
|
@@ -77,15 +76,15 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
|
? DeprecatedString::formatted("{}/{}", destination, LexicalPath::basename(source))
|
|
? DeprecatedString::formatted("{}/{}", destination, LexicalPath::basename(source))
|
|
: destination;
|
|
: destination;
|
|
|
|
|
|
- auto result = Core::DeprecatedFile::copy_file_or_directory(
|
|
|
|
|
|
+ auto result = FileSystem::copy_file_or_directory(
|
|
destination_path, source,
|
|
destination_path, source,
|
|
- recursion_allowed ? Core::DeprecatedFile::RecursionMode::Allowed : Core::DeprecatedFile::RecursionMode::Disallowed,
|
|
|
|
- link ? Core::DeprecatedFile::LinkMode::Allowed : Core::DeprecatedFile::LinkMode::Disallowed,
|
|
|
|
- Core::DeprecatedFile::AddDuplicateFileMarker::No,
|
|
|
|
|
|
+ recursion_allowed ? FileSystem::RecursionMode::Allowed : FileSystem::RecursionMode::Disallowed,
|
|
|
|
+ link ? FileSystem::LinkMode::Allowed : FileSystem::LinkMode::Disallowed,
|
|
|
|
+ FileSystem::AddDuplicateFileMarker::No,
|
|
preserve);
|
|
preserve);
|
|
|
|
|
|
if (result.is_error()) {
|
|
if (result.is_error()) {
|
|
- if (result.error().tried_recursing)
|
|
|
|
|
|
+ if (result.error().code() == EISDIR)
|
|
warnln("cp: -R not specified; omitting directory '{}'", source);
|
|
warnln("cp: -R not specified; omitting directory '{}'", source);
|
|
else
|
|
else
|
|
warnln("cp: unable to copy '{}' to '{}': {}", source, destination_path, strerror(result.error().code()));
|
|
warnln("cp: unable to copy '{}' to '{}': {}", source, destination_path, strerror(result.error().code()));
|