On Fri, Jul 10, 2009 at 06:22:41PM +0200, Paolo Bonzini wrote:
+static int
+cmdCd(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
+{
+ const char *dir;
+ int found;
+
+ if (!ctl->imode) {
+ vshError(ctl, FALSE, _("cd: command valid only in interactive
mode"));
+ return -1;
+ }
+
+ dir = vshCommandOptString(cmd, "dir", &found);
+ if (!found)
+ dir = getenv ("HOME");
It is perhaps more reliable to use virGetUserDirectory()
here, since that gets the home dir out of /etc/passwd using
getpwuid, not relying on potentially missing environment
variables.
+ if (!dir)
+ dir = "/";
+
+ if (chdir (dir) == -1) {
+ vshError(ctl, FALSE, _("cd: %s: %s"), strerror (errno), dir);
+ return -1;
+ }
+
+ return 0;
+}
+
+/*
+ * "pwd" command
+ */
+static const vshCmdInfo info_pwd[] = {
+ {"help", gettext_noop("print the current directory")},
+ {"desc", gettext_noop("Print the current directory.")},
+ {NULL, NULL}
+};
+
+static int
+cmdPwd(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
+{
+ char *cwd;
+ size_t path_max;
+ int err = TRUE;
+
+ path_max = (size_t) PATH_MAX + 2;
+ cwd = vshMalloc (ctl, path_max);
+ while (cwd) {
+ err = getcwd (cwd, path_max) == NULL;
+ if (!err || errno != ERANGE)
+ break;
+
+ path_max *= 2;
+ cwd = vshRealloc (ctl, cwd, path_max);
+ }
+
+ if (err)
+ vshError(ctl, FALSE, _("pwd: cannot get current directory: %s"),
strerror (errno));
+ else
+ vshPrint (ctl, _("%s\n"), cwd);
+
+ free (cwd);
+ return !err;
+}
+
+/*
Daniel
--
|: Red Hat, Engineering, London -o-
http://people.redhat.com/berrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org -o-
http://ovirt.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|