Implement 'debug ls' and 'debug ll' commands.
authorRichard Jones <rjones@trick.home.annexia.org>
Tue, 18 Aug 2009 07:56:18 +0000 (08:56 +0100)
committerRichard Jones <rjones@trick.home.annexia.org>
Tue, 18 Aug 2009 07:56:18 +0000 (08:56 +0100)
These commands can be used to list files in the appliance.

daemon/debug.c
daemon/ls.c

index b428588..8daa032 100644 (file)
@@ -47,6 +47,8 @@ struct cmd {
 static char *debug_help (const char *subcmd, int argc, char *const *const argv);
 static char *debug_env (const char *subcmd, int argc, char *const *const argv);
 static char *debug_fds (const char *subcmd, int argc, char *const *const argv);
+static char *debug_ls (const char *subcmd, int argc, char *const *const argv);
+static char *debug_ll (const char *subcmd, int argc, char *const *const argv);
 static char *debug_segv (const char *subcmd, int argc, char *const *const argv);
 static char *debug_sh (const char *subcmd, int argc, char *const *const argv);
 
@@ -54,6 +56,8 @@ static struct cmd cmds[] = {
   { "help", debug_help },
   { "env", debug_env },
   { "fds", debug_fds },
+  { "ls", debug_ls },
+  { "ll", debug_ll },
   { "segv", debug_segv },
   { "sh", debug_sh },
   { NULL, NULL }
@@ -259,4 +263,64 @@ debug_env (const char *subcmd, int argc, char *const *const argv)
   return out;
 }
 
+/* List files in the appliance. */
+static char *
+debug_ls (const char *subcmd, int argc, char *const *const argv)
+{
+  int len = count_strings (argv);
+  const char *cargv[len+3];
+  int i;
+
+  cargv[0] = "ls";
+  cargv[1] = "-a";
+  for (i = 0; i < len; ++i)
+    cargv[2+i] = argv[i];
+  cargv[2+len] = NULL;
+
+  int r;
+  char *out, *err;
+
+  r = commandv (&out, &err, (void *) cargv);
+  if (r == -1) {
+    reply_with_error ("ls: %s", err);
+    free (out);
+    free (err);
+    return NULL;
+  }
+
+  free (err);
+
+  return out;
+}
+
+/* List files in the appliance. */
+static char *
+debug_ll (const char *subcmd, int argc, char *const *const argv)
+{
+  int len = count_strings (argv);
+  const char *cargv[len+3];
+  int i;
+
+  cargv[0] = "ls";
+  cargv[1] = "-la";
+  for (i = 0; i < len; ++i)
+    cargv[2+i] = argv[i];
+  cargv[2+len] = NULL;
+
+  int r;
+  char *out, *err;
+
+  r = commandv (&out, &err, (void *) cargv);
+  if (r == -1) {
+    reply_with_error ("ll: %s", err);
+    free (out);
+    free (err);
+    return NULL;
+  }
+
+  free (err);
+
+  return out;
+}
+
 #endif /* ENABLE_DEBUG_COMMAND */
index 9d2ca89..3e3183a 100644 (file)
@@ -75,9 +75,6 @@ do_ls (const char *path)
  * necessarily exist in the chroot), this command can be used to escape
  * from the sysroot (eg. 'll /..').  This command is not meant for
  * serious use anyway, just for quick interactive sessions.
- *
- * FIXME: eventually, provide a "debug ll" command that would list files
- * in the appliance.
  */
 
 char *