summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--commands/partition.c2
-rw-r--r--fs/devfs-core.c19
-rw-r--r--include/complete.h1
3 files changed, 22 insertions, 0 deletions
diff --git a/commands/partition.c b/commands/partition.c
index 4892261885..6cce0423d3 100644
--- a/commands/partition.c
+++ b/commands/partition.c
@@ -32,6 +32,7 @@
#include <common.h>
#include <command.h>
+#include <complete.h>
#include <driver.h>
#include <malloc.h>
#include <partition.h>
@@ -225,5 +226,6 @@ BAREBOX_CMD_START(delpart)
.cmd = do_delpart,
.usage = "delete partition(s)",
BAREBOX_CMD_HELP(cmd_delpart_help)
+ BAREBOX_CMD_COMPLETE(devfs_partition_complete)
BAREBOX_CMD_END
diff --git a/fs/devfs-core.c b/fs/devfs-core.c
index 3014d0ebff..ff6a97627a 100644
--- a/fs/devfs-core.c
+++ b/fs/devfs-core.c
@@ -20,6 +20,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <common.h>
+#include <complete.h>
#include <driver.h>
#include <errno.h>
#include <malloc.h>
@@ -29,6 +30,24 @@
LIST_HEAD(cdev_list);
+#ifdef CONFIG_AUTO_COMPLETE
+int devfs_partition_complete(struct string_list *sl, char *instr)
+{
+ struct cdev *cdev;
+ int len;
+
+ len = strlen(instr);
+
+ list_for_each_entry(cdev, &cdev_list, list) {
+ if (cdev->flags & DEVFS_IS_PARTITION &&
+ !strncmp(instr, cdev->name, len)) {
+ string_list_add_asprintf(sl, "%s ", cdev->name);
+ }
+ }
+ return COMPLETE_CONTINUE;
+}
+#endif
+
struct cdev *cdev_by_name(const char *filename)
{
struct cdev *cdev;
diff --git a/include/complete.h b/include/complete.h
index 1365803539..8248c64d0c 100644
--- a/include/complete.h
+++ b/include/complete.h
@@ -16,6 +16,7 @@ int device_complete(struct string_list *sl, char *instr);
int empty_complete(struct string_list *sl, char *instr);
int eth_complete(struct string_list *sl, char *instr);
int cammand_var_complete(struct string_list *sl, char *instr);
+int devfs_partition_complete(struct string_list *sl, char *instr);
#endif /* __COMPLETE_ */