From 1bf52d4735fded85e3412c1fff6f393c6fc50c36 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 4 Jun 2007 16:42:42 +0200 Subject: Bug#10218 Command line recall rolls into Segmentation Fault(coredump)' - Declare 'tgoto' if not already declared in system header files. cmd-line-utils/libedit/el_term.h: Declare 'tgoto' if not already declared in system header files. Failing to declare it will cause the pointer returned to be truncated to 32-bit integer which is no a valid pointer - in most cases. configure.in: Add check to see if 'tgoto' is declared in system header files --- cmd-line-utils/libedit/el_term.h | 10 ++++++++++ configure.in | 13 +++++++++++++ 2 files changed, 23 insertions(+) diff --git a/cmd-line-utils/libedit/el_term.h b/cmd-line-utils/libedit/el_term.h index 9e5588ee96f..00ca48e38e2 100644 --- a/cmd-line-utils/libedit/el_term.h +++ b/cmd-line-utils/libedit/el_term.h @@ -90,6 +90,16 @@ extern char* tgoto(const char*, int, int); extern char* tgetstr(char*, char**); #endif + +#if !HAVE_DECL_TGOTO +/* + 'tgoto' is not declared in the system header files, this causes + problems on 64-bit systems. The function returns a 64 bit pointer + but caller see it as "int" and it's thus truncated to 32-bit +*/ +extern char* tgoto(const char*, int, int); +#endif + protected void term_move_to_line(EditLine *, int); protected void term_move_to_char(EditLine *, int); protected void term_clear_EOL(EditLine *, int); diff --git a/configure.in b/configure.in index b9f84086e28..dd3b449f9c8 100644 --- a/configure.in +++ b/configure.in @@ -1954,6 +1954,19 @@ else fi AC_SUBST(TERMCAP_LIB) +# Check if the termcap function 'tgoto' is already declared in +# system header files or if it need to be declared locally +AC_CHECK_DECLS(tgoto,,,[ +#ifdef HAVE_CURSES_H +# include +#elif HAVE_NCURSES_H +# include +#endif +#ifdef HAVE_TERM_H +# include +#endif +]) + LIBEDIT_LOBJECTS="" AC_CHECK_FUNC(strunvis, ,[LIBEDIT_LOBJECTS="$LIBEDIT_LOBJECTS unvis.o"]) AC_CHECK_FUNC(strvis, ,[LIBEDIT_LOBJECTS="$LIBEDIT_LOBJECTS vis.o"]) -- cgit v1.2.1