}
-void cmd_cd(const char **cmd_argv,GError **errp)
+void cmd_cd_internal(const gchar *targetdir,GError **errp)
{
CaptiveDirectoryObject *captive_directory_object;
+ g_return_if_fail(targetdir!=NULL);
g_return_if_fail(!errp || !*errp);
- if (cmd_argv[0]) {
-const gchar *targetdir=cmdline_path_from_cwd(cmd_argv[0]);
+ if (!errvfsresult_to_gerr(errp,captive_directory_new_open(
+ &captive_directory_object, /* captive_directory_object_return */
+ cmdline_captive_vfs_object, /* captive_vfs_object */
+ targetdir))) { /* pathname */
+ err_cleanup(errp);
+ g_set_error(errp,CMDLINE_CMD_CD_ERROR,CMDLINE_CMD_CD_ERROR_CANNOT_OPEN_DIRECTORY,
+ _("Cannot open directory: %s"),targetdir);
+ return;
+ }
- if (!errvfsresult_to_gerr(errp,captive_directory_new_open(
- &captive_directory_object, /* captive_directory_object_return */
- cmdline_captive_vfs_object, /* captive_vfs_object */
- targetdir))) { /* pathname */
- err_cleanup(errp);
- g_set_error(errp,CMDLINE_CMD_CD_ERROR,CMDLINE_CMD_CD_ERROR_CANNOT_OPEN_DIRECTORY,
- _("Cannot open directory: %s"),targetdir);
- return;
- }
+ g_object_unref(captive_directory_object);
- g_object_unref(captive_directory_object);
+ g_free((/*de-const*/ gchar *)cmdline_cwd);
+ cmdline_cwd=g_strdup(targetdir);
+ g_assert(g_path_is_absolute(cmdline_cwd));
+}
- g_free((/*de-const*/ gchar *)cmdline_cwd);
- cmdline_cwd=g_strdup(targetdir);
- g_assert(g_path_is_absolute(cmdline_cwd));
- }
+
+void cmd_cd(const char **cmd_argv,GError **errp)
+{
+ g_return_if_fail(!errp || !*errp);
+
+ if (cmd_argv[0])
+ cmd_cd_internal(cmdline_path_from_cwd(cmd_argv[0]),errp);
printf("Guest-OS CWD: %s\n",cmdline_cwd);
}
int errint,line_argc;
const char **line_argv=NULL;
gchar *prompt;
+const char *cmd_cd_args[]={NULL};
g_return_if_fail(!errp || !*errp);
puts(_("Line editing not available, please recompile with readline library installed"));
#endif /* HAVE_LIBREADLINE */
+ cmd_cd(cmd_cd_args,errp); /* Show current directory. */
+ if (errp && *errp)
+ return;
+
for (;;) {
prompt=g_strdup_printf(PROMPT_STRING,cmdline_cwd);
#ifdef HAVE_LIBREADLINE
const char **cmd_argv,**csp;
int cmd_argc;
GError *gerr=NULL;
-const char *cmd_cd_root_args[]={"/",NULL};
struct captive_options options;
/* Do not set g_log_set_always_fatal() here as we would not be able
}
captive_options_free(&options);
- cmd_cd(cmd_cd_root_args,&gerr);
+ cmd_cd_internal("/",&gerr);
if (gerr) {
err_cleanup(&gerr);
return EXIT_FAILURE;