Commit Diff


commit - 3f03529f911621de2dedee358e728d5ac49fbb74
commit + 17388298de0507aa98bcaaf59f77b736cf89920e
blob - 31864c7907dbaf020bfd191bfa18a0c983b4dd75
blob + 9f40434650acf1a315a006c174c168a56e80e5c3
--- ftp.c
+++ ftp.c
@@ -505,6 +505,28 @@ cmd_bye(int argc, const char **argv)
 }
 
 static void
+cmd_lcd(int argc, const char **argv)
+{
+	const char *dir;
+
+	if (argc > 1) {
+		printf("lcd takes only one argument\n");
+		return;
+	}
+
+	if (argc == 1)
+		dir = *argv;
+
+	if (argc == 0 && (dir = getenv("HOME")) == NULL) {
+		printf("HOME is not defined\n");
+		return;
+	}
+
+	if (chdir(dir) == -1)
+		printf("cd: %s: %s\n", dir, strerror(errno));
+}
+
+static void
 cmd_ls(int argc, const char **argv)
 {
 	uint64_t off = 0;
@@ -610,6 +632,7 @@ excmd(int argc, const char **argv)
 	} cmds[] = {
 		{"bell",	cmd_bell},
 		{"bye",		cmd_bye},
+		{"lcd",		cmd_lcd},
 		{"ls",		cmd_ls},
 		{"quit",	cmd_bye},
 		{"verbose",	cmd_verbose},