commit - 7764059ff3c1c138d9e3728db75131d1f7e9243b
commit + 688f54f0798e0ebdcf02b114f0b862b8931893e1
blob - 59fec4c0abfa887c81a880e6de646b4176ab5c4e
blob + 2f861369cbf8c14b96bec6bf471f6ea5d22d69c7
--- configure.ac
+++ configure.ac
# 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
#include <tls.h>
#include <unistd.h>
+#if HAVE_READLINE
#include <readline/readline.h>
#include <readline/history.h>
+#endif
#include "9pclib.h"
#include "kamid.h"
#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)
{
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");