X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=hivex%2Fhivexsh.c;h=1bd3b8be8d68d53d9fd2fbd618ade45622aaa77b;hb=3932b383869a1029457fac172827ef2b538d77de;hp=6f33f41cc19c53b8907e1cbdf07ad999de724556;hpb=d9d885e7c8d93f0623cb0525e725f86969bb1033;p=libguestfs.git diff --git a/hivex/hivexsh.c b/hivex/hivexsh.c index 6f33f41..1bd3b8b 100644 --- a/hivex/hivexsh.c +++ b/hivex/hivexsh.c @@ -79,6 +79,7 @@ static int dispatch (char *cmd, char *args); static int cmd_cd (char *path); static int cmd_close (char *path); static int cmd_commit (char *path); +static int cmd_del (char *args); static int cmd_help (char *args); static int cmd_load (char *hivefile); static int cmd_ls (char *args); @@ -416,6 +417,8 @@ dispatch (char *cmd, char *args) return cmd_close (args); else if (STRCASEEQ (cmd, "commit")) return cmd_commit (args); + else if (STRCASEEQ (cmd, "del")) + return cmd_del (args); else if (STRCASEEQ (cmd, "ls")) return cmd_ls (args); else if (STRCASEEQ (cmd, "lsval")) @@ -556,10 +559,14 @@ cmd_cd (char *path) continue; } + errno = 0; new_cwd = hivex_node_get_child (h, new_cwd, elem); if (new_cwd == 0) { - fprintf (stderr, _("hivexsh: cd: subkey '%s' not found\n"), - elem); + if (errno) + perror ("hivexsh: cd"); + else + fprintf (stderr, _("hivexsh: cd: subkey '%s' not found\n"), + elem); return -1; } } @@ -777,7 +784,7 @@ cmd_lsval (char *key) case hive_t_dword: case hive_t_dword_be: { int32_t j = hivex_value_dword (h, values[i]); - printf ("dword:%08" PRIx32 "\"", j); + printf ("dword:%08" PRIx32, j); break; } @@ -1044,3 +1051,29 @@ cmd_setval (char *nrvals_str) return ret; } + +static int +cmd_del (char *args) +{ + if (STRNEQ (args, "")) { + fprintf (stderr, _("hivexsh: '%s' command should not be given arguments\n"), + "del"); + return -1; + } + + if (cwd == hivex_root (h)) { + fprintf (stderr, _("hivexsh: del: the root node cannot be deleted\n")); + return -1; + } + + hive_node_h new_cwd = hivex_node_parent (h, cwd); + + if (hivex_node_delete_child (h, cwd) == -1) { + perror ("del"); + return -1; + } + + cwd = new_cwd; + set_prompt_string (); + return 0; +}