4
0
mirror of git://sourceware.org/git/newlib-cygwin.git synced 2025-02-21 00:07:36 +08:00

* dtable.cc: Mark some const variables as static.

* environ.cc (conv_start_chars): Move to shared cygwin region and initialize at
compile time.
(match_first_char): New generic function for querying conv_start_chars.
(posify_maybe): Rename from posify.
(environ_init): Remove conv_envvars initialization.  Don't check
conv_start_chars, just allow posify_maybe to make the decision.
* fhandler_console.cc (__vt100_conv): Fix formatting.  Mark as const.
This commit is contained in:
Christopher Faylor 2011-08-19 18:19:22 +00:00
parent 34dc27f95d
commit c8a66289e4
4 changed files with 65 additions and 18 deletions

View File

@ -1,3 +1,14 @@
2011-08-19 Christopher Faylor <me.cygwin2011@cgf.cx>
* dtable.cc: Mark some const variables as static.
* environ.cc (conv_start_chars): Move to shared cygwin region and
initialize at compile time.
(match_first_char): New generic function for querying conv_start_chars.
(posify_maybe): Rename from posify.
(environ_init): Remove conv_envvars initialization. Don't check
conv_start_chars, just allow posify_maybe to make the decision.
* fhandler_console.cc (__vt100_conv): Fix formatting. Mark as const.
2011-08-19 Corinna Vinschen <corinna@vinschen.de> 2011-08-19 Corinna Vinschen <corinna@vinschen.de>
* fhandler_console.cc (fhandler_console::read): Recognize backspace key * fhandler_console.cc (fhandler_console::read): Recognize backspace key

View File

@ -38,12 +38,12 @@ static const NO_COPY DWORD std_consts[] = {STD_INPUT_HANDLE, STD_OUTPUT_HANDLE,
static bool handle_to_fn (HANDLE, char *); static bool handle_to_fn (HANDLE, char *);
#define WCLEN(x) ((sizeof (x) / sizeof (WCHAR)) - 1) #define WCLEN(x) ((sizeof (x) / sizeof (WCHAR)) - 1)
char unknown_file[] = "some disk file"; static const char unknown_file[] = "some disk file";
const WCHAR DEV_NULL[] = L"\\Device\\Null"; static const WCHAR DEV_NULL[] = L"\\Device\\Null";
static const WCHAR DEV_SOCKET[] = L"\\Device\\Afd"; static const WCHAR DEV_SOCKET[] = L"\\Device\\Afd";
const WCHAR DEVICE_PREFIX[] = L"\\device\\"; static const WCHAR DEVICE_PREFIX[] = L"\\device\\";
const size_t DEVICE_PREFIX_LEN WCLEN (DEVICE_PREFIX); static const size_t DEVICE_PREFIX_LEN WCLEN (DEVICE_PREFIX);
static const WCHAR DEV_NAMED_PIPE[] = L"\\Device\\NamedPipe\\"; static const WCHAR DEV_NAMED_PIPE[] = L"\\Device\\NamedPipe\\";
static const size_t DEV_NAMED_PIPE_LEN = WCLEN (DEV_NAMED_PIPE); static const size_t DEV_NAMED_PIPE_LEN = WCLEN (DEV_NAMED_PIPE);

View File

@ -268,7 +268,49 @@ static win_env conv_envvars[] =
{NULL, 0, NULL, NULL, 0, 0} {NULL, 0, NULL, NULL, 0, 0}
}; };
static unsigned char conv_start_chars[256] = {0}; #define WC ((unsigned char) 1)
/* Note: You *must* fill in this array setting the ordinal value of the first
character of the above environment variable names to 1.
This table is intended to speed up lookup of these variables. */
static const unsigned char conv_start_chars[256]
__attribute__((section (".cygwin_dll_common"), shared)) =
{
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
/* A B C D E F G */
0, 0, 0, 0, 0, 0, 0, 0,
/* 72 */
/* H I J K L M N O */
WC, 0, 0, 0, WC, 0, 0, 0,
/* 80 */
/* P Q R S T U V W */
WC, 0, 0, 0, WC, 0, 0, 0,
/* 88 */
/* x Y Z */
0, 0, 0, 0, 0, 0, 0, 0,
/* 96 */
/* a b c d e f g */
0, 0, 0, 0, 0, 0, 0, 0,
/* 104 */
/* h i j k l m n o */
WC, 0, 0, 0, WC, 0, 0, 0,
/* 112 */
/* p q r s t u v w */
WC, 0, 0, 0, WC, 0, 0, 0,
};
static inline char
match_first_char (const char *s, unsigned char m)
{
return conv_start_chars[(unsigned) *s] & m;
}
struct win_env& struct win_env&
win_env::operator = (struct win_env& x) win_env::operator = (struct win_env& x)
@ -332,7 +374,7 @@ win_env::add_cache (const char *in_posix, const char *in_native)
win_env * __stdcall win_env * __stdcall
getwinenv (const char *env, const char *in_posix, win_env *temp) getwinenv (const char *env, const char *in_posix, win_env *temp)
{ {
if (!conv_start_chars[(unsigned char)*env]) if (!match_first_char (env, WC))
return NULL; return NULL;
for (int i = 0; conv_envvars[i].name != NULL; i++) for (int i = 0; conv_envvars[i].name != NULL; i++)
@ -359,8 +401,8 @@ getwinenv (const char *env, const char *in_posix, win_env *temp)
/* Convert windows path specs to POSIX, if appropriate. /* Convert windows path specs to POSIX, if appropriate.
*/ */
static void __stdcall inline static void
posify (char **here, const char *value, char *outenv) posify_maybe (char **here, const char *value, char *outenv)
{ {
char *src = *here; char *src = *here;
win_env *conv; win_env *conv;
@ -653,6 +695,7 @@ static struct renv {
{ NL("WINDIR=") } // 22 { NL("WINDIR=") } // 22
}; };
#define RENV_SIZE (sizeof (renv_arr) / sizeof (renv_arr[0])) #define RENV_SIZE (sizeof (renv_arr) / sizeof (renv_arr[0]))
/* Set of first characters of the above list of variables. */ /* Set of first characters of the above list of variables. */
static const char idx_arr[] = "ACHNOPSTW"; static const char idx_arr[] = "ACHNOPSTW";
/* Index into renv_arr at which the variables with this specific character /* Index into renv_arr at which the variables with this specific character
@ -729,13 +772,6 @@ environ_init (char **envp, int envc)
if (efault.faulted ()) if (efault.faulted ())
api_fatal ("internal error reading the windows environment - too many environment variables?"); api_fatal ("internal error reading the windows environment - too many environment variables?");
if (!conv_start_chars[0])
for (int i = 0; conv_envvars[i].name != NULL; i++)
{
conv_start_chars[(int) cyg_tolower (conv_envvars[i].name[0])] = 1;
conv_start_chars[(int) cyg_toupper (conv_envvars[i].name[0])] = 1;
}
char *tmpbuf = tp.t_get (); char *tmpbuf = tp.t_get ();
got_something_from_registry = regopt (L"default", tmpbuf); got_something_from_registry = regopt (L"default", tmpbuf);
if (myself->progname[0]) if (myself->progname[0])
@ -795,8 +831,8 @@ environ_init (char **envp, int envc)
sawTERM = 1; sawTERM = 1;
else if (*newp == 'C' && strncmp (newp, "CYGWIN=", 7) == 0) else if (*newp == 'C' && strncmp (newp, "CYGWIN=", 7) == 0)
parse_options (newp + 7); parse_options (newp + 7);
if (*eq && conv_start_chars[(unsigned char) envp[i][0]]) if (*eq)
posify (envp + i, *++eq ? eq : --eq, tmpbuf); posify_maybe (envp + i, *++eq ? eq : --eq, tmpbuf);
debug_printf ("%p: %s", envp[i], envp[i]); debug_printf ("%p: %s", envp[i], envp[i]);
} }

View File

@ -1208,7 +1208,7 @@ fhandler_console::cursor_get (int *x, int *y)
/* VT100 line drawing graphics mode maps `abcdefghijklmnopqrstuvwxyz{|}~ to /* VT100 line drawing graphics mode maps `abcdefghijklmnopqrstuvwxyz{|}~ to
graphical characters */ graphical characters */
static wchar_t __vt100_conv [31] = { static const wchar_t __vt100_conv[31] = {
0x25C6, /* Black Diamond */ 0x25C6, /* Black Diamond */
0x2592, /* Medium Shade */ 0x2592, /* Medium Shade */
0x2409, /* Symbol for Horizontal Tabulation */ 0x2409, /* Symbol for Horizontal Tabulation */