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 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; } diff --git a/src/rm.cpp b/src/rm.cpp index 2ee92c8..5258498 100644 --- a/src/rm.cpp +++ b/src/rm.cpp @@ -20,74 +20,73 @@ 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; } - else v.push_back(argv[i]); + if (s.st_mode&S_IFDIR) + rm_dirs(file_name.c_str()); + else if (-1==unlink(file_name.c_str())) { + perror("unlink"); + continue; + } + } + if (errno) { + perror("readdir"); + return; + } + if (-1==rmdir(dir_name)) { + perror("rmdir"); + return; } - if (v.empty()) { - cerr << "rm: missing operand\n"; +} + +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; - continue; - } - } - else { - cerr<