Răsfoiți Sursa

Merge pull request #5 from Loquicom/cd_function

cd_without_err_redirection
Loquicom 6 ani în urmă
părinte
comite
570bfef498
2 a modificat fișierele cu 58 adăugiri și 3 ștergeri
  1. 40 3
      mysh.c
  2. 18 0
      mysh.h

+ 40 - 3
mysh.c

@@ -8,17 +8,19 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include "parser.h"
+#include "mysh.h"
 
-
+/* --- Fonctions privées --- */
 void test_write(){
     char* a = "azerty\n";
     int tmp = write(1, a, strlen(a));
     printf("%d\n", tmp);
 }
 
+/* --- Main --- */
 int main(int argc, char* argv[]) {
 
-    CommandTab ct;
+    /*CommandTab ct;
     char str[500];
     int a;
     //Recup ligne
@@ -42,7 +44,42 @@ int main(int argc, char* argv[]) {
         printf("Commande en fond : %d\n\n", ct.bck);
     }
     //Supprime
-    clean_command(&ct);
+    clean_command(&ct); */
+    cd(argc, argv);
     return (EXIT_SUCCESS);
+
+}
+
+/* --- Commandes internes --- */
+void cd(int argc, char** argv){
+    //Si trop d'arguments
+    if(argc > 2) {
+        printf("too many arguments : 1 required, %d given\n", argc-1);
+    }
+    else {
+        //Si aucun argument on vas à la racine
+        if(argc == 1) {
+            if(chdir("/") == ERR){
+                perror("Erreur chdir() : ");
+            }
+        }
+        //Sinon on va dans le dossier indiqué par l'utilisateur
+        else {
+            if(chdir(argv[1]) == ERR){
+                printf("path does not exist\n");
+            }
+        }
+    }
+    //show_current_dir("current working directory is: ", "\n");
 }
 
+/* --- Fonctions utilitaires --- */
+void show_current_dir(const char* before, const char* after){
+    char buffer[512];
+    if (getcwd(buffer, sizeof(buffer)) == NULL){
+        perror("Erreur getcwd() : ");
+    }
+    else {
+        printf("%s%s%s", before, buffer, after);
+    }
+}

+ 18 - 0
mysh.h

@@ -0,0 +1,18 @@
+/* 
+ * File:   mysh.h
+ * Author: Arthur Brandao
+ *
+ * Created on 6 novembre 2018
+ */
+
+#ifndef MYSH_H
+#define MYSH_H
+
+/* --- Fonctions utilitaires --- */
+void show_current_dir(const char*, const char*);
+
+/* --- Commandes internes --- */
+void cd(int, char**);
+
+#endif /* MYSH_H */
+