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 :| -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list