Quellcode durchsuchen

split display dir and file + gestion no argv

MaxenceBacquet vor 6 Jahren
Ursprung
Commit
c0dbdea9eb
1 geänderte Dateien mit 76 neuen und 27 gelöschten Zeilen
  1. 76 27
      myls.c

+ 76 - 27
myls.c

@@ -10,14 +10,51 @@
 #include "color.h"
 #include "constante.h"
 
+int printDir(struct dirent** contentsDir, char* path, int nbFile, struct stat info,
+                    boolean hiddenFile){
 
-void lsBasics(int argc, char* argv[]){
+    //char permission[10] = "----------";
+    int j = 0;
+
+    //enleve les fichiers caches
+    while(j < nbFile && !hiddenFile && *contentsDir[j]->d_name == '.') j++;
+
+    //Affiche les fichiers
+    while(j < nbFile){
+        /*switch(info.st_mode){
+            case S_IRUSR:
+                permission[1] = 'r';
+            case S_IWUSR:
+                permission[2] = 'w';
+            case S_IXUSR:
+                permission[3] = 'x';
+            case S_IRGRP:
+                permission[4] = 'r';
+            case S_IWGRP:
+                permission[5] = 'w';
+            case S_IXGRP:
+                permission[6] = 'x';
+            case S_IROTH:
+                permission[7] = 'r';
+            case S_IWOTH:
+                permission[8] = 'w';
+            case S_IXOTH:
+                permission[9] = 'x';
+        }*/
+        printf("%d  %ld  %s\n", info.st_mode, info.st_size, contentsDir[j]->d_name);
+        //printf("%s", permission);
+        j++;
+    }
+    printf("\n");
+    return 1;
+}
+
+void ls(int argc, char* argv[]){
     char buffer[BUFFER_SIZE];
+    char path[BUFFER_SIZE];
     struct dirent** contentsDir;
     struct stat info;
-    char path[BUFFER_SIZE];
-    char permission[10] = "----------";
-    int i = 0, nbFile, opt;
+    int i = 1, j = 0, displayed = 0, nbFile, opt;
     boolean hiddenFile = false;
     boolean checksubDir = false;
 
@@ -27,19 +64,6 @@ void lsBasics(int argc, char* argv[]){
         return;
     }
 
-    //Ouverture et lecture DIR - inutile
-    /*if((path = opendir(buffer)) == NULL){
-        addperror("Erreur opendir()")
-        return;
-    }*/
-
-    //Recup la liste des fichiers dans le dossier courant
-    nbFile = scandir(".", &contentsDir, 0, alphasort);
-    if (nbFile < 0) {
-        addperror("Erreur scandir()");
-        return;
-    }
-
     //Gestion des options
     while((opt = getopt(argc, argv, "aR")) != ERR){
         switch(opt){
@@ -54,18 +78,43 @@ void lsBasics(int argc, char* argv[]){
         }
     }
 
-    //enleve les fichiers caches
-    while(i < nbFile && !hiddenFile && *contentsDir[i]->d_name == '.') i++;
+    //Time to display
+    for(i = 1; i < argc; i++){
+        if(argv[i][0] != '-'){
+            strcpy(path, buffer);
+            strcat(path, "/");
+            strcat(path, argv[i]);
+            if(stat(path, &info) == ERR)
+                addperror("Erreur stat");
+            if(S_ISDIR(info.st_mode)){
+                nbFile = scandir(argv[i], &contentsDir, 0, alphasort);
+                if (nbFile < 0) {
+                    addperror("Erreur scandir()");
+                    return;
+                }
+                printf("%s : \n\n", argv[i]);
+                strcpy(path, buffer);
+                strcat(path, "/");
+                strcat(path, contentsDir[j]->d_name);
+                displayed = printDir(contentsDir, path, nbFile, info, hiddenFile);
+            }
+            else{
+                printf("%d  %ld  %s\n", info.st_mode, info.st_size, argv[i]);
+                displayed = 1;
+            }
+        }
+    }
 
-    //Affiche les fichiers
-    while(i < nbFile){
+    if(!displayed){
+        nbFile = scandir(".", &contentsDir, 0, alphasort);
+        if (nbFile < 0) {
+            addperror("Erreur scandir()");
+            return;
+        }
         strcpy(path, buffer);
         strcat(path, "/");
-        strcat(path, contentsDir[i]->d_name);
-        if(stat(path, &info) == ERR)
-            addperror("Erreur stat");
-        printf("%d  %ld  %s\n", info.st_mode, info.st_size, contentsDir[i]->d_name);
-        i++;
+        strcat(path, contentsDir[j]->d_name);
+        displayed = printDir(contentsDir, path, nbFile, info, hiddenFile);
     }
 
     printf("%d   %d\n", hiddenFile, checksubDir);
@@ -75,6 +124,6 @@ void lsBasics(int argc, char* argv[]){
 
 
 int main(int argc, char* argv[]){
-    lsBasics(argc, argv);
+    ls(argc, argv);
     printf(RESET);
 }