diff options
author | Andreas Kling <awesomekling@gmail.com> | 2019-04-07 23:35:26 +0200 |
---|---|---|
committer | Andreas Kling <awesomekling@gmail.com> | 2019-04-07 23:35:26 +0200 |
commit | 37ae00a4dd20e095ca58cf00d666ed5ab373f004 (patch) | |
tree | db6143d4dc52e747bd48b3c95b548e417ba93f3a /Userland | |
parent | 71b643655282309d347e464806e4ca1cd1115797 (diff) | |
download | serenity-37ae00a4dd20e095ca58cf00d666ed5ab373f004.zip |
Kernel+Userland: Add the rename() syscall along with a basic /bin/mv.
Diffstat (limited to 'Userland')
-rw-r--r-- | Userland/.gitignore | 1 | ||||
-rw-r--r-- | Userland/Makefile | 5 | ||||
-rw-r--r-- | Userland/mv.cpp | 32 |
3 files changed, 38 insertions, 0 deletions
diff --git a/Userland/.gitignore b/Userland/.gitignore index 3d207bf5d7..25f4c5d2b5 100644 --- a/Userland/.gitignore +++ b/Userland/.gitignore @@ -42,3 +42,4 @@ uc tc host qs +mv diff --git a/Userland/Makefile b/Userland/Makefile index c79a319a94..66707b88a0 100644 --- a/Userland/Makefile +++ b/Userland/Makefile @@ -38,6 +38,7 @@ OBJS = \ tc.o \ host.o \ qs.o \ + mv.o \ rm.o APPS = \ @@ -81,6 +82,7 @@ APPS = \ tc \ host \ qs \ + mv \ rm ARCH_FLAGS = @@ -223,6 +225,9 @@ host: host.o qs: qs.o $(LD) -o $@ $(LDFLAGS) -L../LibGUI $< -lgui -lc +mv: mv.o + $(LD) -o $@ $(LDFLAGS) -L../LibGUI $< -lgui -lc + .cpp.o: @echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $< diff --git a/Userland/mv.cpp b/Userland/mv.cpp new file mode 100644 index 0000000000..486761c00e --- /dev/null +++ b/Userland/mv.cpp @@ -0,0 +1,32 @@ +#include <stdio.h> +#include <unistd.h> +#include <sys/stat.h> +#include <AK/AKString.h> +#include <AK/FileSystemPath.h> + +int main(int argc, char** argv) +{ + if (argc != 3) { + printf("usage: mv <old-path> <new-path>\n"); + return 1; + } + + String old_path = argv[1]; + String new_path = argv[2]; + + struct stat st; + int rc = lstat(new_path.characters(), &st); + if (rc == 0) { + if (S_ISDIR(st.st_mode)) { + auto old_basename = FileSystemPath(old_path).basename(); + new_path = String::format("%s/%s", new_path.characters(), old_basename.characters()); + } + } + + rc = rename(old_path.characters(), new_path.characters()); + if (rc < 0) { + perror("rename"); + return 1; + } + return 0; +} |