+#error Don t know how to define S_ISDIR
+#endif
+#endif
+
+#if SIZEOF_SIZE_T == SIZEOF_INT
+# define SIZE_T_FMT "%u"
+# define SIZE_T_FMT_TYPE unsigned
+# define SIZE_T_ATOI (size_t)atoi
+# ifndef SIZE_MAX
+# define SIZE_MAX UINT_MAX
+# endif
+#else
+# define SIZE_T_FMT "%lu"
+# define SIZE_T_FMT_TYPE unsigned long
+# define SIZE_T_ATOI (size_t)atol
+# ifndef SIZE_MAX
+# define SIZE_MAX ULONG_MAX
+# endif
+#endif
+
+#if SIZEOF_SSIZE_T == SIZEOF_INT
+# define SSIZE_T_FMT "%d"
+# define SSIZE_T_FMT_TYPE int
+# define SSIZE_T_ATOI (ssize_t)atoi
+# ifndef SSIZE_MAX
+# define SSIZE_MAX INT_MAX
+# endif
+# ifndef SSIZE_MIN
+# define SSIZE_MIN INT_MIN
+# endif
+#else
+# define SSIZE_T_FMT "%ld"
+# define SSIZE_T_FMT_TYPE long
+# define SSIZE_T_ATOI (ssize_t)atol
+# ifndef SSIZE_MAX
+# define SSIZE_MAX LONG_MAX
+# endif
+# ifndef SSIZE_MIN
+# define SSIZE_MIN LONG_MIN
+# endif
+#endif
+
+#if SIZEOF_TIME_T == SIZEOF_INT
+# define TIME_T_FMT "%u"
+# define TIME_T_FMT_TYPE unsigned
+# define TIME_T_ATOI (time_t)atoi
+# ifndef TIME_MAX
+# define TIME_MAX UINT_MAX
+# endif
+#else
+# define TIME_T_FMT "%lu"
+# define TIME_T_FMT_TYPE unsigned long
+# define TIME_T_ATOI (time_t)atol
+# ifndef TIME_MAX
+# define TIME_MAX ULONG_MAX
+# endif
+#endif
+
+#if SIZEOF_OFF_T > SIZEOF_LONG
+# define OFF_T_FMT LL_FMT
+# define OFF_T_RFMT LL_RFMT
+# define OFF_T_FMT_TYPE long long
+# ifdef HAVE_ATOLL
+# define OFF_T_ATOI (off_t)atoll
+# else
+# define OFF_T_ATOI (off_t)atol
+# endif
+# ifdef HAVE_STRTOLL
+# define OFF_T_STRTOL (off_t)strtoll
+# else
+# define OFF_T_STRTOL (off_t)strtol
+# endif
+#else
+# if SIZEOF_OFF_T == SIZEOF_LONG
+# define OFF_T_FMT "%ld"
+# define OFF_T_RFMT "ld"
+# define OFF_T_FMT_TYPE long
+# define OFF_T_ATOI (off_t)atol
+# define OFF_T_STRTOL (off_t)strtol
+# else
+# define OFF_T_FMT "%d"
+# define OFF_T_RFMT "d"
+# define OFF_T_FMT_TYPE int
+# define OFF_T_ATOI (off_t)atoi
+# define OFF_T_STRTOL (off_t)strtol
+# endif
+#endif
+
+#if SIZEOF_OFF_T == 8
+# ifdef OFF_MAX
+# define AM64_MAX (off_t)(OFF_MAX)
+# else
+# define AM64_MAX (off_t)(9223372036854775807LL)
+# endif
+# ifdef OFF_MIN
+# define AM64_MIN (off_t)(OFF_MIN)
+# else
+# define AM64_MIN (off_t)(-9223372036854775807LL -1LL)
+# endif
+# define AM64_FMT OFF_T_FMT
+#else
+#if SIZEOF_LONG == 8
+# ifdef LONG_MAX
+# define AM64_MAX (off_t)(LONG_MAX)
+# else
+# define AM64_MAX (off_t)9223372036854775807L
+# endif
+# ifdef LONG_MIN
+# define AM64_MIN (off_t)(LONG_MIN)
+# else
+# define AM64_MIN (off_t)(-9223372036854775807L -1L)
+# endif
+# define AM64_FMT "%ld"
+#else
+#if SIZEOF_LONG_LONG == 8
+# ifdef LONG_LONG_MAX
+# define AM64_MAX (off_t)(LONG_LONG_MAX)
+# else
+# define AM64_MAX (off_t)9223372036854775807LL
+# endif
+# ifdef LONG_LONG_MIN
+# define AM64_MIN (off_t)(LONG_LONG_MIN)
+# else
+# define AM64_MIN (off_t)(-9223372036854775807LL -1LL)
+# endif
+# define AM64_FMT LL_FMT
+#else
+#if SIZEOF_INTMAX_T == 8
+# ifdef INTMAX_MAX
+# define AM64_MAX (off_t)(INTMAX_MAX)
+# else
+# define AM64_MAX (off_t)9223372036854775807LL
+# endif
+# ifdef INTMAX_MIN
+# define AM64_MIN (off_t)(INTMAX_MIN)
+# else
+# define AM64_MIN (off_t)(-9223372036854775807LL -1LL)
+# endif
+# define AM64_FMT LL_FMT
+#else /* no 64 bits type found, use long. */
+# ifdef LONG_MAX
+# define AM64_MAX (off_t)(LONG_MAX)
+# else
+# define AM64_MAX (off_t)2147483647
+# endif
+# ifdef LONG_MIN
+# define AM64_MIN (off_t)(LONG_MIN)
+# else
+# define AM64_MIN (off_t)(-2147483647 -1)
+# endif
+# define AM64_FMT "%ld"
+#endif
+#endif
+#endif
+#endif
+
+#ifdef HAVE_LIBREADLINE
+# ifdef HAVE_READLINE_READLINE_H
+# include <readline/readline.h>
+# ifdef HAVE_READLINE_HISTORY_H
+# include <readline/history.h>
+# endif
+# else
+# ifdef HAVE_READLINE_H
+# include <readline.h>
+# ifdef HAVE_HISTORY_H
+# include <history.h>
+# endif
+# else
+# undef HAVE_LIBREADLINE
+# endif
+# endif
+#else
+
+char * readline(const char *prompt);
+void add_history(const char *line);
+