Sfoglia il codice sorgente

[msh] try to complete module path

Msh can execute module directly. So try to auto-complete the path when
user press TAB. There is a chance that the path is a module.
Grissiom 11 anni fa
parent
commit
f9659283c0
1 ha cambiato i file con 14 aggiunte e 5 eliminazioni
  1. 14 5
      components/finsh/msh.c

+ 14 - 5
components/finsh/msh.c

@@ -316,7 +316,7 @@ void msh_auto_complete_path(char *path)
     if (full_path == RT_NULL) return; /* out of memory */
 
     ptr = full_path;
-    if (*path != '/') 
+    if (*path != '/')
     {
         getcwd(full_path, 256);
         if (full_path[rt_strlen(full_path) - 1]  != '/')
@@ -336,7 +336,7 @@ void msh_auto_complete_path(char *path)
         char *dest = index;
 
         /* fill the parent path */
-        ptr = full_path; 
+        ptr = full_path;
         while (*ptr) ptr ++;
 
         for (index = path; index != dest;)
@@ -361,7 +361,7 @@ void msh_auto_complete_path(char *path)
         {
             dirent = readdir(dir);
             if (dirent == RT_NULL) break;
-            
+
             rt_kprintf("%s\n", dirent->d_name);
         }
     }
@@ -450,12 +450,21 @@ void msh_auto_complete(char *prefix)
                 msh_auto_complete_path(ptr + 1);
                 break;
             }
-            
+
             ptr --;
         }
+#ifdef RT_USING_MODULE
+        /* There is a chance that the user want to run the module directly. So
+         * try to complete the file names. If the completed path is not a
+         * module, the system won't crash anyway. */
+        if (ptr == prefix)
+        {
+            msh_auto_complete_path(ptr);
+        }
+#endif
     }
 #endif
-    
+
     /* checks in internal command */
     {
         for (index = _syscall_table_begin; index < _syscall_table_end; FINSH_NEXT_SYSCALL(index))