APR_DECLARE(apr_status_t) apr_filepath_set(const char *rootpath, apr_pool_t *p) { if (chdir2(rootpath) != 0) return errno; return APR_SUCCESS; }
void cmdChdir(void) { // get first parameter => pathname char *token = strtok(NULL," \t"); if (token==NULL) { printf ("Missing parameter\n"); return; } // change working dir int err = chdir2(token); if (err<0) { printf ("Error: %d\n", err); return; } printf ("Working Directory changed\n"); }
void bash (char *file_name){ /* ls: lista todas as entradas do diretório corrente. Parâmetro extra "-l": lista o tamanho dos arquivos(num_blocks*tam_blocks), as permissões e o time stamp. chmod <permissões> <nome_arquivo>: troca as permissões de nome_arquivo. As permissões respeitam a ordem RWE, onde chmod 111 representa permissão total, e chmod 100 apenas leitura. mkdir <nome_dir>: cria um diretório chamado nome_dir. chdir <nome_dir>: troca o diretório corrente para o nome_dir. rm <alvo>: remove alvo do sistema de arquivos, seja arquivo ou diretório. Caso diretório, ele deve visitar cada filho e remove-lo. echo <dado> <alvo>: cria um arquivo alvo e insere dado. Caso alvo exista, seus blocos devem ser removidos e dado adicionado na nova lista de blocos. Alvo deve ser um arquivo no diretório corrente. Caso dado contenha espaços, '"' deve ser usado, p.ex.: echo "uma frase de exemplo" arquivo1. cat <alvo>: o conteúdo arquivo alvo é lido e impresso na tela. exit: termina o bash mode e sai da ferramenta. */ //char command_line[COMMAND_SIZE]; //char command[COMMAND_SIZE]; //char last; //int i = 0; //printf("Entrei no Bash! %s\n", file_name); Filesystem fs = fileToFilesystem (file_name); int32_t nb = fs->superblock->number_of_blocks; int32_t ni = fs->superblock->number_of_inodes; int32_t nd = fs->superblock->number_of_dir; int32_t block_size = fs->superblock->block_size; FILE* file = fopen(file_name, "r+"); int32_t fib = fs->first_inodeblock; int32_t fdb = fs->first_datablock; char ib[1024]; char dbb[FILE_SIZE/512]; int32_t i = 0; for(i=0;i<FILE_SIZE/block_size;i++) dbb[i] = fs->datablock_bitmap->map[i]; ib[0] = 1; for(i=1;i<1024;i++) ib[i] = fs->inode_bitmap->map[i]; inode current_dir; current_dir.number = 0; current_dir.permition = 111; current_dir.father = -1; current_dir.number_of_blocks = 0; current_dir.dir = 1; strcpy(current_dir.name,""); strcpy(current_dir.type,""); free(fs); char input[256]; char* tok; printf("Comandos funcionando: mkdir, chdir, ls (-l)"); while(1) { // Tratando entrada printf("bash.fs >"); char c = getchar(); int i = 0; while (c != '\n') { input[i] = c; c = getchar (); i++; } input[i] = '\0'; //printf ("%s\n", input); tok = strtok (input, " "); if(strcmp(tok, "ls") == 0) { //ls //printf("Comando ls\n"); tok = strtok (NULL, " "); ls2(block_size, fib, file, ¤t_dir, tok); } else if(strcmp(tok, "chmod") == 0) { //chmod //printf("Comando chmod\n"); } else if(strcmp(tok, "mkdir") == 0){ tok = strtok (NULL, " "); if (tok == NULL) printf ("Wrong parameters for mkdir"); else { //mkdir (fs, fs->inodes[fs->current_dir], tok); mkdir2 (ib, fib, &ni, &nd, block_size, file, ¤t_dir, tok); update(file, block_size, fib, ni, nb, nd, ib, dbb); //filesystemToFile (fs, file_name); //printFilesystem (fs); } } else if(strcmp(tok, "chdir") == 0){ //chdir //printf("Comando chdir\n"); tok = strtok (NULL, " "); chdir2(¤t_dir, tok, ib, block_size, file, fib); //for (int i = 0; i < MAX_INODES; i++) { // if (fs->inodes[i] != NULL) { // if (fs->inodes[i]->dir == 1) { // if (strcmp (fs->inodes[i]->name, tok) == 0) // chdir (fs, fs->inodes[i]); /* } } } }*/ } /*else if(strcmp(tok, "rm") == 0){ //rm //printf("Comando rm\n"); tok = strtok (NULL, " "); if (tok == NULL) printf ("Wrong parameter for rm"); else { for (int i = 0; i < MAX_INODES; i++) { // if (fs->inodes[i] != NULL) { char* tok2 = strtok (tok, "."); char* name = tok2; tok2 = strtok (NULL, "."); if (tok2 == NULL) { if (strcmp (fs->inodes[i]->name, name) == 0){ rm (fs, fs->inodes[i]); } } else { if (strcmp (fs->inodes[i]->name, name) == 0){ rm (fs, fs->inodes[i]); } } } } } } else if(strcmp(tok, "echo") == 0){ //echo //printf("Comando echo\n"); } else if(strcmp(tok, "cat") == 0){ //cat //printf("Comando cat\n"); tok = strtok (NULL, " "); if (tok == NULL) printf ("Wrong parameter for cat"); else { char* tok2 = strtok (NULL, "."); Inode inode = searchInodeOnDirByName (fs, fs->inodes[fs->current_dir], tok2); if (inode != NULL) cat (fs, inode); } } */ else if(strcmp(tok, "exit") == 0){ //exit //printf("Comando exit\n"); return; } else { warning ("Comando invalido!"); } for(i=0;i<256;i++) input[i] = '\0'; } }