X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftinfo%2Fname_match.c;h=c648535526d2f012d0351e5eb39eed40a8a6d97d;hp=c8d728faa7c4bf1c650f1f4d4c371efee94a2de6;hb=d3aaa2f7ce1fec732af0f6c0396719cbc846ac18;hpb=7a27c7d49c2e8b4a1ecbe85b4423d647cbc75ea5 diff --git a/ncurses/tinfo/name_match.c b/ncurses/tinfo/name_match.c index c8d728fa..c6485355 100644 --- a/ncurses/tinfo/name_match.c +++ b/ncurses/tinfo/name_match.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1999-2005,2007 Free Software Foundation, Inc. * + * Copyright (c) 1999-2012,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * @@ -27,53 +27,69 @@ ****************************************************************************/ /**************************************************************************** - * Author: Thomas E. Dickey 1999 * + * Author: Thomas E. Dickey 1999-on * ****************************************************************************/ #include -#include #include -MODULE_ID("$Id: name_match.c,v 1.16 2007/04/21 21:28:13 tom Exp $") +MODULE_ID("$Id: name_match.c,v 1.23 2013/05/25 20:20:08 tom Exp $") -/* - * _nc_first_name(char *names) - * - * Extract the primary name from a compiled entry. - */ #define FirstName _nc_globals.first_name +#if NCURSES_USE_TERMCAP && NCURSES_XNAMES +static const char * +skip_index(const char *name) +{ + if ((_nc_syntax == SYN_TERMCAP) && _nc_user_definable) { + const char *bar = strchr(name, '|'); + if (bar != 0 && (bar - name) == 2) + name = bar + 1; + } + return name; +} +#endif + +/* + * Get the primary name from the given name list. For terminfo, this is the + * first name. For termcap, this may be the second name, if the first one + * happens to be two characters. + */ NCURSES_EXPORT(char *) _nc_first_name(const char *const sp) -/* get the first name from the given name list */ { unsigned n; #if NO_LEAKS if (sp == 0) { - if (FirstName != 0) + if (FirstName != 0) { FreeAndNull(FirstName); - return 0; - } + } + } else #endif + { + if (FirstName == 0) + FirstName = typeMalloc(char, MAX_NAME_SIZE + 1); - if (FirstName == 0) - FirstName = typeMalloc(char, MAX_NAME_SIZE + 1); - for (n = 0; n < MAX_NAME_SIZE; n++) { - if ((FirstName[n] = sp[n]) == '\0' - || (FirstName[n] == '|')) - break; + if (FirstName != 0) { + const char *src = sp; +#if NCURSES_USE_TERMCAP && NCURSES_XNAMES + src = skip_index(sp); +#endif + for (n = 0; n < MAX_NAME_SIZE; n++) { + if ((FirstName[n] = src[n]) == '\0' + || (FirstName[n] == '|')) + break; + } + FirstName[n] = '\0'; + } } - FirstName[n] = '\0'; return (FirstName); } /* - * int _nc_name_match(namelist, name, delim) - * - * Is the given name matched in namelist? + * Is the given name matched in namelist? */ - NCURSES_EXPORT(int) _nc_name_match(const char *const namelst, const char *const name, const char *const delim) {