From 05c1d9e4d94289519ae3a69a1c7a6a94eda10a04 Mon Sep 17 00:00:00 2001 From: Angelo Esguerra Date: Wed, 6 May 2015 16:32:32 -0700 Subject: [PATCH 1/5] rmdir is set --- src/rm.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/rm.cpp b/src/rm.cpp index 2ee92c8..4311cd6 100644 --- a/src/rm.cpp +++ b/src/rm.cpp @@ -80,12 +80,18 @@ int rmMain(int argc, char** argv) errno=0; continue; } + rmdir(v.at(i)); + if (errno) { + perror("rmdir"); + errno=0; + continue; + } } else { cerr< Date: Wed, 6 May 2015 16:36:20 -0700 Subject: [PATCH 2/5] rm now exits on errors --- src/rm.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/rm.cpp b/src/rm.cpp index 4311cd6..0437e9c 100644 --- a/src/rm.cpp +++ b/src/rm.cpp @@ -44,7 +44,7 @@ int rmMain(int argc, char** argv) if (errno) { perror("stat"); errno=0; - continue; + exit(1); } if (s.st_mode&S_IFDIR) { if (flag_r) { @@ -52,7 +52,7 @@ int rmMain(int argc, char** argv) if (dirp==NULL) { perror("opendir"); errno=0; - continue; + exit(1); } struct dirent *f; while ((f=readdir(dirp))) @@ -78,13 +78,13 @@ int rmMain(int argc, char** argv) if (errno) { perror("closedir"); errno=0; - continue; + exit(1); } rmdir(v.at(i)); if (errno) { perror("rmdir"); errno=0; - continue; + exit(1); } } else { @@ -94,7 +94,7 @@ int rmMain(int argc, char** argv) else if (-1==unlink(v.at(i))) { perror("unlink"); errno=0; - continue; + exit(1); } } return 0; From 564a5d2aee066671a0e5565bf4ac04990da723b9 Mon Sep 17 00:00:00 2001 From: Angelo Esguerra Date: Wed, 6 May 2015 18:34:12 -0700 Subject: [PATCH 3/5] all binary executables are now gdb compatible --- Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 4284dfe..d1136c5 100644 --- a/Makefile +++ b/Makefile @@ -5,19 +5,19 @@ all: rshell ls rm mv rshell: mkdir -p bin - g++ $(FLAGS) -o bin/rshell src/main.cpp + g++ $(FLAGS) -g -o bin/rshell src/main.cpp ls: mkdir -p bin - g++ $(FLAGS) -o bin/ls src/ls.cpp + g++ $(FLAGS) -g -o bin/ls src/ls.cpp rm: mkdir -p bin - g++ $(FLAGS) -o bin/rm src/rm.cpp + g++ $(FLAGS) -g -o bin/rm src/rm.cpp mv: mkdir -p bin - g++ $(FLAGS) -o bin/mv src/mv.cpp + g++ $(FLAGS) -g -o bin/mv src/mv.cpp clean: rm -rf bin From 5d604fe77427ca79157cbcd14c78097a8fbd442c Mon Sep 17 00:00:00 2001 From: Angelo Esguerra Date: Wed, 6 May 2015 21:49:34 -0700 Subject: [PATCH 4/5] fixed recursion error --- src/rm.cpp | 123 +++++++++++++++++++++++++---------------------------- 1 file changed, 58 insertions(+), 65 deletions(-) diff --git a/src/rm.cpp b/src/rm.cpp index 0437e9c..5258498 100644 --- a/src/rm.cpp +++ b/src/rm.cpp @@ -20,81 +20,74 @@ using namespace std; -int rmMain(int argc, char** argv) -{ - bool flag_r=false; - vector v; - for (int i=1;id_name,".")==0||strcmp(filespecs->d_name,"..")==0) + continue; + string file_name=dir_name; + file_name+="/"; + file_name.append(filespecs->d_name); + struct stat s; + if (-1==stat(file_name.c_str(),&s)) { + perror("stat"); + continue; + } + if (s.st_mode&S_IFDIR) + rm_dirs(file_name.c_str()); + else if (-1==unlink(file_name.c_str())) { + perror("unlink"); + continue; } - else v.push_back(argv[i]); } - if (v.empty()) { - cerr << "rm: missing operand\n"; + if (errno) { + perror("readdir"); + return; + } + if (-1==rmdir(dir_name)) { + perror("rmdir"); + return; + } +} + +int rmMain(int argc, char** argv) +{ + if (argc<2) { + cerr<<"rm: missing operand\n"; return 1; } - for (unsigned i=0;id_name); - char* recursArgs[3]; - recursArgs[0] = recursMain; - recursArgs[1] = recursFlags; - recursArgs[2] = recursFile; - rmMain(3,recursArgs); - } - closedir(dirp); - if (errno) { - perror("closedir"); - errno=0; - exit(1); - } - rmdir(v.at(i)); - if (errno) { - perror("rmdir"); - errno=0; - exit(1); - } - } - else { - cerr< Date: Wed, 6 May 2015 22:21:16 -0700 Subject: [PATCH 5/5] fixed directory issue --- src/mv.cpp | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/src/mv.cpp b/src/mv.cpp index 981c97b..a8faec3 100644 --- a/src/mv.cpp +++ b/src/mv.cpp @@ -27,34 +27,27 @@ int mvMain(int argc, char** argv) return 1; } struct stat s2; - stat(argv[2],&s2); - if (errno) { - errno = 0; - link(argv[1],argv[2]); - if (errno) { + if (-1==stat(argv[2],&s2)) { + errno=0; + if (-1==link(argv[1],argv[2])) { perror("link"); return 1; } - unlink(argv[1]); - if (errno) { + if (-1==unlink(argv[1])) { perror("unlink"); return 1; } } - else - { + else { if (s2.st_mode&S_IFDIR) { - char c[PATH_MAX]; - strcpy(c, argv[2]); - strcat(c, "/"); - strcat(c, argv[1]); - link(argv[1], c); - if (errno) { + string file_name=argv[2]; + file_name+="/"; + file_name.append(argv[1]); + if (-1==link(argv[1],file_name.c_str())) { perror("link"); return 1; } - unlink(argv[1]); - if (errno) { + if (-1==(unlink(argv[1]))) { perror("unlink"); return 1; }