- Resolve conflicts

- Our changes in lib_termcap.c is now merged in upstream
This commit is contained in:
Rong-En Fan 2007-12-30 11:15:46 +00:00
parent 45ed6d05ba
commit 4454585cdd
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=174998
3 changed files with 54 additions and 41 deletions

View File

@ -1,5 +1,5 @@
/**************************************************************************** /****************************************************************************
* Copyright (c) 1998,2000,2002 Free Software Foundation, Inc. * * Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. *
* * * *
* Permission is hereby granted, free of charge, to any person obtaining a * * Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the * * copy of this software and associated documentation files (the *
@ -29,6 +29,7 @@
/**************************************************************************** /****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 * * Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> * * and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
****************************************************************************/ ****************************************************************************/
/* $FreeBSD$ */ /* $FreeBSD$ */
@ -41,6 +42,9 @@
#include <curses.priv.h> #include <curses.priv.h>
#include <term.h> /* cur_term, pad_char */ #include <term.h> /* cur_term, pad_char */
#include <termcap.h> /* ospeed */ #include <termcap.h> /* ospeed */
#if defined(__FreeBSD__)
#include <sys/param.h>
#endif
/* /*
* These systems use similar header files, which define B1200 as 1200, etc., * These systems use similar header files, which define B1200 as 1200, etc.,
@ -48,7 +52,7 @@
* of the indices up to B115200 fit nicely in a 'short', allowing us to retain * of the indices up to B115200 fit nicely in a 'short', allowing us to retain
* ospeed's type for compatibility. * ospeed's type for compatibility.
*/ */
#if defined(__NetBSD__) || defined(__OpenBSD__) #if (defined(__FreeBSD__) && (__FreeBSD_version < 700000)) || defined(__NetBSD__) || defined(__OpenBSD__)
#undef B0 #undef B0
#undef B50 #undef B50
#undef B75 #undef B75
@ -78,7 +82,7 @@
#undef USE_OLD_TTY #undef USE_OLD_TTY
#endif /* USE_OLD_TTY */ #endif /* USE_OLD_TTY */
MODULE_ID("$Id: lib_baudrate.c,v 1.22 2002/01/19 23:07:53 Andrey.A.Chernov Exp $") MODULE_ID("$Id: lib_baudrate.c,v 1.25 2007/10/20 15:00:41 Rong-En.Fan Exp $")
/* /*
* int * int
@ -143,16 +147,20 @@ static struct speed const speeds[] =
NCURSES_EXPORT(int) NCURSES_EXPORT(int)
_nc_baudrate(int OSpeed) _nc_baudrate(int OSpeed)
{ {
#if !USE_REENTRANT
static int last_OSpeed; static int last_OSpeed;
static int last_baudrate; static int last_baudrate;
#endif
int result; int result = ERR;
unsigned i; unsigned i;
#if !USE_REENTRANT
if (OSpeed == last_OSpeed) { if (OSpeed == last_OSpeed) {
result = last_baudrate; result = last_baudrate;
} else { }
result = ERR; #endif
if (result == ERR) {
if (OSpeed >= 0) { if (OSpeed >= 0) {
for (i = 0; i < SIZEOF(speeds); i++) { for (i = 0; i < SIZEOF(speeds); i++) {
if (speeds[i].s == OSpeed) { if (speeds[i].s == OSpeed) {
@ -161,7 +169,12 @@ _nc_baudrate(int OSpeed)
} }
} }
} }
last_baudrate = result; #if !USE_REENTRANT
if (OSpeed == last_OSpeed) {
last_OSpeed = OSpeed;
last_baudrate = result;
}
#endif
} }
return (result); return (result);
} }

View File

@ -1,5 +1,5 @@
/**************************************************************************** /****************************************************************************
* Copyright (c) 1998-2001,2002 Free Software Foundation, Inc. * * Copyright (c) 1998-2002,2007 Free Software Foundation, Inc. *
* * * *
* Permission is hereby granted, free of charge, to any person obtaining a * * Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the * * copy of this software and associated documentation files (the *
@ -51,7 +51,7 @@
#include <curses.priv.h> #include <curses.priv.h>
#include <term.h> /* cur_term */ #include <term.h> /* cur_term */
MODULE_ID("$Id: lib_raw.c,v 1.13 2002/07/06 22:00:45 tom Exp $") MODULE_ID("$Id: lib_raw.c,v 1.14 2007/09/29 21:50:22 tom Exp $")
#if SVR4_TERMIO && !defined(_POSIX_SOURCE) #if SVR4_TERMIO && !defined(_POSIX_SOURCE)
#define _POSIX_SOURCE #define _POSIX_SOURCE
@ -71,8 +71,8 @@ MODULE_ID("$Id: lib_raw.c,v 1.13 2002/07/06 22:00:45 tom Exp $")
#define COOKED_INPUT (IXON|BRKINT|PARMRK) #define COOKED_INPUT (IXON|BRKINT|PARMRK)
#ifdef TRACE #ifdef TRACE
#define BEFORE(N) if (_nc_tracing&TRACE_BITS) _tracef("%s before bits: %s", N, _nc_tracebits()) #define BEFORE(N) if (USE_TRACEF(TRACE_BITS)) _nc_locked_tracef("%s before bits: %s", N, _nc_tracebits())
#define AFTER(N) if (_nc_tracing&TRACE_BITS) _tracef("%s after bits: %s", N, _nc_tracebits()) #define AFTER(N) if (USE_TRACEF(TRACE_BITS)) _nc_locked_tracef("%s after bits: %s", N, _nc_tracebits())
#else #else
#define BEFORE(s) #define BEFORE(s)
#define AFTER(s) #define AFTER(s)

View File

@ -1,5 +1,5 @@
/**************************************************************************** /****************************************************************************
* Copyright (c) 1998-2005,2006 Free Software Foundation, Inc. * * Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. *
* * * *
* Permission is hereby granted, free of charge, to any person obtaining a * * Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the * * copy of this software and associated documentation files (the *
@ -47,7 +47,7 @@
#include <term_entry.h> #include <term_entry.h>
MODULE_ID("$Id: lib_termcap.c,v 1.58 2006/09/02 19:39:46 Miroslav.Lichvar Exp $") MODULE_ID("$Id: lib_termcap.c,v 1.61 2007/06/02 19:36:03 tom Exp $")
NCURSES_EXPORT_VAR(char *) UP = 0; NCURSES_EXPORT_VAR(char *) UP = 0;
NCURSES_EXPORT_VAR(char *) BC = 0; NCURSES_EXPORT_VAR(char *) BC = 0;
@ -56,21 +56,15 @@ NCURSES_EXPORT_VAR(char *) BC = 0;
extern char _nc_termcap[]; /* buffer to copy out */ extern char _nc_termcap[]; /* buffer to copy out */
#endif #endif
typedef struct { #define MyCache _nc_globals.tgetent_cache
long sequence; #define CacheInx _nc_globals.tgetent_index
char *fix_sgr0; /* this holds the filtered sgr0 string */ #define CacheSeq _nc_globals.tgetent_sequence
char *last_bufp; /* help with fix_sgr0 leak */
TERMINAL *last_term;
} CACHE;
#define MAX_CACHE 4 #define FIX_SGR0 MyCache[CacheInx].fix_sgr0
static CACHE cache[MAX_CACHE]; #define LAST_TRM MyCache[CacheInx].last_term
static int in_cache = 0; #define LAST_BUF MyCache[CacheInx].last_bufp
#define LAST_USE MyCache[CacheInx].last_used
#define FIX_SGR0 cache[in_cache].fix_sgr0 #define LAST_SEQ MyCache[CacheInx].sequence
#define LAST_TRM cache[in_cache].last_term
#define LAST_BUF cache[in_cache].last_bufp
#define LAST_SEQ cache[in_cache].sequence
/*************************************************************************** /***************************************************************************
* *
@ -90,8 +84,6 @@ static int in_cache = 0;
NCURSES_EXPORT(int) NCURSES_EXPORT(int)
tgetent(char *bufp, const char *name) tgetent(char *bufp, const char *name)
{ {
static long sequence;
int errcode; int errcode;
int n; int n;
bool found_cache = FALSE; bool found_cache = FALSE;
@ -106,11 +98,17 @@ tgetent(char *bufp, const char *name)
* caller, but if tgetent() is called with the same buffer, that is * caller, but if tgetent() is called with the same buffer, that is
* good enough, since the previous data would be invalidated by the * good enough, since the previous data would be invalidated by the
* current call. * current call.
*
* bufp may be a null pointer, e.g., GNU termcap. That allocates data,
* which is good until the next tgetent() call. The conventional termcap
* is inconvenient because of the fixed buffer size, but because it uses
* caller-supplied buffers, can have multiple terminal descriptions in
* use at a given time.
*/ */
for (n = 0; n < MAX_CACHE; ++n) { for (n = 0; n < TGETENT_MAX; ++n) {
bool same_result = (bufp != 0 && cache[n].last_bufp == bufp); bool same_result = (MyCache[n].last_used && MyCache[n].last_bufp == bufp);
if (same_result) { if (same_result) {
in_cache = n; CacheInx = n;
if (FIX_SGR0 != 0) { if (FIX_SGR0 != 0) {
FreeAndNull(FIX_SGR0); FreeAndNull(FIX_SGR0);
} }
@ -120,10 +118,10 @@ tgetent(char *bufp, const char *name)
if (LAST_TRM != 0 && LAST_TRM != cur_term) { if (LAST_TRM != 0 && LAST_TRM != cur_term) {
TERMINAL *trm = LAST_TRM; TERMINAL *trm = LAST_TRM;
del_curterm(LAST_TRM); del_curterm(LAST_TRM);
for (in_cache = 0; in_cache < MAX_CACHE; ++in_cache) for (CacheInx = 0; CacheInx < TGETENT_MAX; ++CacheInx)
if (LAST_TRM == trm) if (LAST_TRM == trm)
LAST_TRM = 0; LAST_TRM = 0;
in_cache = n; CacheInx = n;
} }
found_cache = TRUE; found_cache = TRUE;
break; break;
@ -132,15 +130,15 @@ tgetent(char *bufp, const char *name)
if (!found_cache) { if (!found_cache) {
int best = 0; int best = 0;
for (in_cache = 0; in_cache < MAX_CACHE; ++in_cache) { for (CacheInx = 0; CacheInx < TGETENT_MAX; ++CacheInx) {
if (LAST_SEQ < cache[best].sequence) { if (LAST_SEQ < MyCache[best].sequence) {
best = in_cache; best = CacheInx;
} }
} }
in_cache = best; CacheInx = best;
} }
LAST_TRM = cur_term; LAST_TRM = cur_term;
LAST_SEQ = ++sequence; LAST_SEQ = ++CacheSeq;
PC = 0; PC = 0;
UP = 0; UP = 0;
@ -170,6 +168,7 @@ tgetent(char *bufp, const char *name)
} }
} }
LAST_BUF = bufp; LAST_BUF = bufp;
LAST_USE = TRUE;
(void) baudrate(); /* sets ospeed as a side-effect */ (void) baudrate(); /* sets ospeed as a side-effect */
@ -298,9 +297,10 @@ tgetstr(NCURSES_CONST char *id, char **area)
NCURSES_EXPORT(void) NCURSES_EXPORT(void)
_nc_tgetent_leaks(void) _nc_tgetent_leaks(void)
{ {
for (in_cache = 0; in_cache < MAX_CACHE; ++in_cache) { for (CacheInx = 0; CacheInx < TGETENT_MAX; ++CacheInx) {
FreeIfNeeded(FIX_SGR0); FreeIfNeeded(FIX_SGR0);
del_curterm(LAST_TRM); if (LAST_TRM != 0)
del_curterm(LAST_TRM);
} }
} }
#endif #endif