コード例 #1
0
ファイル: commands.cpp プロジェクト: ddsun95/projects
void fn_cd (inode_state& state, const wordvec& words){
   DEBUGF ('c', state);
   DEBUGF ('c', words);
   /*
   if(words.size() > 1) {
      wordvec nav_path = split(words[1], "/");
      state.final_cd(nav_path);
   } else {
      wordvec root_dir{};
      state.final_cd(root_dir);
   }
   */
   if(words.size() > 2){
      complain() << "cd: Too many arguments" << endl;
      return;
   }
   if(words.size() > 1) path_name_set(words.at(1));
   if(words.size() == 1){
      state.setCwd(state.get_root());
      return;
   } else if(words.at(1).at(0) == '/'){
      state.setCwd(state.get_root());
   }
   wordvec nav_path = split(words.at(1), "/");
   state.final_cd(nav_path);
}
コード例 #2
0
ファイル: commands.cpp プロジェクト: ddsun95/projects
void fn_rmr (inode_state& state, const wordvec& words){
   DEBUGF ('c', state);
   DEBUGF ('c', words);
   if(words.size() == 1){
      complain() << "rmr: Specify file name" << endl;
   } else if(words.size() > 2){
      complain() << "rmr: Too many arguments" << endl;
   } else if(words.at(1) == "." or words.at(1) == ".." or 
      (words.at(1).at(0) == '/' and words.at(1).length() == 1)){
      complain() << "rmr: Cannot remove directory" << endl;
   } else {
      path_name_set(words.at(1));
      const auto placeholder = state.get_cwd();
      if(words.at(1).at(0) == '/') state.setCwd(state.get_root());
      wordvec navpath = split(words[1], "/");
      string ffname = navpath.back();
      if(navpath.size() == 1){
         state.function_rmr(state.get_cwd(), ffname);
         return;
      }
      wordvec filepath(&navpath[0], &navpath[navpath.size() - 1]);
      state.function_final_rmr(ffname, filepath);
      state.setCwd(placeholder);
   }
}
コード例 #3
0
ファイル: commands.cpp プロジェクト: ddsun95/projects
void fn_cat (inode_state& state, const wordvec& words){
   DEBUGF ('c', state);
   DEBUGF ('c', words);
   if(words.size() < 2){
      complain() << "cat: Too few arguments" << endl;
   } else {
      const string firstword = words.at(1);
      path_name_set(firstword);
      if(firstword.at(0) == '/' and firstword.length() > 1){
         string navname = firstword.substr(1, firstword.length());
         cout << navname << endl;
         const auto placeholder = state.get_cwd();
         wordvec nav_path {};
         nav_path = split(navname, "/");
         state.setCwd(state.get_root());
         state.final_func_cat(nav_path);
         state.setCwd(placeholder);
         return;
      } else if(firstword.length() == 1 and firstword.at(0) == '/'){
          complain() << "cat: /: File is Directory" << endl;
          return;
      }
      wordvec nav_path = split(firstword, "/");
      state.final_func_cat(nav_path);
   }
}
コード例 #4
0
ファイル: commands.cpp プロジェクト: coltonUCSC/cs109
void fn_cd (inode_state& state, const wordvec& words){
   DEBUGF ('c', state);
   DEBUGF ('c', words);
   inode_ptr ogcwd = state.getCwd();
   if (words.size() == 1){
      state.setCwd(state.getRoot()->getContents()->getNode("/"));
      return;
   }
   if (words.size() > 2) return;
   if (ogcwd == state.getRoot()->getContents()->getNode("/") && words[1] == "..") return;
   inode_ptr res = resolvePath(words[1], state.getCwd());
   if (res == nullptr) return;
   if (!res->isDirectory()) return;
   state.setCwd(res);
}
コード例 #5
0
ファイル: commands.cpp プロジェクト: ddsun95/projects
void fn_make (inode_state& state, const wordvec& words){
   DEBUGF ('c', state);
   DEBUGF ('c', words);
   if(words.size() < 2){
      complain() << "make: Specify pathname" << endl;
      return;
   }
   const auto placeholder = state.get_cwd();
   if(words.at(1).at(0) == '/'){
      state.setCwd(state.get_root());
   }
   wordvec nav_path  = split(words[1], "/");
   wordvec insertion(&words[2], &words[words.size()]);
   state.final_make_file(nav_path, insertion);
   state.setCwd(placeholder);
}
コード例 #6
0
ファイル: commands.cpp プロジェクト: coltonUCSC/cs109
void fn_ls (inode_state& state, const wordvec& words){
   DEBUGF ('c', state);
   DEBUGF ('c', words);
   inode_ptr ogcwd = state.getCwd();
   inode_ptr res = ogcwd;
   if(words.size() > 1)
      res = resolvePath(words[1], state.getCwd());
   if (res == nullptr) return;
   auto pathList = res->getContents()->getAllPaths();
   state.setCwd(res);
   fn_pwd(state, words);
   for (size_t i = 0; i < pathList.size(); i++){
      cout << pathList[i] << endl;
   }
   state.setCwd(ogcwd);
}
コード例 #7
0
ファイル: commands.cpp プロジェクト: coltonUCSC/cs109
void fn_lsr (inode_state& state, const wordvec& words){
   DEBUGF ('c', state);
   DEBUGF ('c', words);

   inode_ptr ogcwd = state.getCwd();
   inode_ptr newCwd = ogcwd;
   if (words.size() > 0){
      newCwd = resolvePath(words[1], state.getCwd());
      state.setCwd(newCwd);
   }
   auto pathList = newCwd->getContents()->getAllDirs();
   wordvec ls {"ls"};
   fn_ls(state, ls);
   for(int i = 0; i < pathList.size(); i++){
      DFS(pathList[i], state);
   }
   state.setCwd(ogcwd);
}
コード例 #8
0
ファイル: commands.cpp プロジェクト: ddsun95/projects
void fn_mkdir (inode_state& state, const wordvec& words){
   DEBUGF ('c', state);
   DEBUGF ('c', words);
   //NEED TO CHECK IF THE DIR IS ALREADY IN THE DIR.
   if(words.size() < 2){
      complain() << "mkdir: Too few arguments" << endl;
   } else if(words.size() > 2) {
      complain() << "mkdir: Too many arguments" << endl;
   } else {
      path_name_set(words.at(1));
      const auto placeholder = state.get_cwd();
      if(words.at(1).at(0) == '/') {
         state.setCwd(state.get_root());
      }
      path_name_set(words.at(1));
      wordvec nav_path = split(words.at(1), "/");
      state.final_mkdir(nav_path);
      state.setCwd(placeholder);
   }
}
コード例 #9
0
ファイル: commands.cpp プロジェクト: coltonUCSC/cs109
void DFS(string s, inode_state& state){
   wordvec newLs {"ls", s};
   fn_ls(state, newLs);
   auto dirList = state.getCwd()->getContents()->getAllDirs();
   if (dirList.size() == 0)
      return;
   map<string, int> disc;
   for (int i = 0; i < dirList.size(); i++){
      disc[dirList[i]] = 0;
   }
   for (auto it = disc.begin(); it != disc.end(); ++it){
      if (it->second == 0){
     	disc[it->first] = 1;
     	inode_ptr ogcwd = state.getCwd();
     	state.setCwd(state.getCwd()->getContents()->getNode(it->first));
     	DFS(it->first, state);
     	state.setCwd(ogcwd);
      }
 	}
}
コード例 #10
0
ファイル: commands.cpp プロジェクト: ddsun95/projects
void fn_lsr (inode_state& state, const wordvec& words){
   DEBUGF ('c', state);
   DEBUGF ('c', words);
   if(words.size() > 2){
      complain() << "lsr: Too many arguments" << endl;
      return;
   } else if(words.size() == 1){
      state.function_list_r(state.get_cwd());
   } else if(words.at(1).at(0) == '/'){
      if(words.at(1).length() == 1){
         state.function_list_r(state.get_root());
         return;
      }
      const auto placeholder = state.get_cwd();
      state.setCwd(state.get_root());
      wordvec nav_path = split(words.at(1), "/");
      state.function_list_r(state.get_working_ptr(nav_path));
      state.setCwd(placeholder);
   } else {
      wordvec nav_path = split(words[1], "/");
      state.function_list_r(state.get_working_ptr(nav_path));
   }
}