Commit Diff


commit - 7764059ff3c1c138d9e3728db75131d1f7e9243b
commit + 688f54f0798e0ebdcf02b114f0b862b8931893e1
blob - 59fec4c0abfa887c81a880e6de646b4176ab5c4e
blob + 2f861369cbf8c14b96bec6bf471f6ea5d22d69c7
--- configure.ac
+++ configure.ac
@@ -107,7 +107,7 @@ AC_CHECK_LIB(tls, tls_init, [], [
 # small hack to avoid linking *everything* to readline.
 libs_orig="${LIBS}"
 AC_CHECK_LIB(readline, readline, [], [
-	AC_MSG_ERROR([requires readline])
+	AC_DEFINE([HAVE_READLINE], 0, [1 if readline is found])
 ])
 KAMIFTP_LIBS="${LIBS}"
 LIBS="${libs_orig}"
blob - 129010356d8a295c8cf9db62edd696b4cc0fdecc
blob + 3a6aea1c9deb36a0bfc46be36e40311420f2faa6
--- ftp.c
+++ ftp.c
@@ -28,8 +28,10 @@
 #include <tls.h>
 #include <unistd.h>
 
+#if HAVE_READLINE
 #include <readline/readline.h>
 #include <readline/history.h>
+#endif
 
 #include "9pclib.h"
 #include "kamid.h"
@@ -48,6 +50,42 @@ int			 sock;
 
 #define PWDFID		0
 
+#if HAVE_READLINE
+static char *
+read_line(const char *prompt)
+{
+	char *line;
+
+again:
+	if ((line = readline(prompt)) == NULL)
+		return NULL;
+	/* XXX: trim spaces? */
+	if (*line == '\0') {
+		free(line);
+		goto again;
+	}
+
+	add_history(line);
+	return line;
+}
+#else
+static char *
+read_line(const char *prompt)
+{
+	char *ch, *line = NULL;
+	size_t linesize = 0;
+	ssize_t linelen;
+
+	linelen = getline(&line, &linesize, stdin);
+	if (linelen == -1)
+		return NULL;
+
+	if ((ch = strchr(line, '\n')) != NULL)
+		*ch = '\0';
+	return line;
+}
+#endif
+
 static void ATTR_DEAD
 usage(int ret)
 {
@@ -165,12 +203,9 @@ main(int argc, char **argv)
 	for (;;) {
 		char *line;
 
-		if ((line = readline("ftp> ")) == NULL)
+		if ((line = read_line("ftp> ")) == NULL)
 			break;
-		/* XXX: trim spaces */
-		if (*line == '\0')
-			continue;
-		add_history(line);
+		printf("read: %s\n", line);
 	}
 
 	printf("\n");