From a22af4a956ce1926fb69c8f522ecf3111ee372f4 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Sat, 9 May 2009 15:08:16 +0000 Subject: [PATCH] * sec_auth.cc (str2uni_cat): Move from here... * path.cc (str2uni_cat): ...to here. Simplify. Make static inline. (get_nt_native_path): Use RtlAppendUnicodeToString rather than str2uni_cat for constant strings for speed. * security.h (str2uni_cat): Drop declaration. --- winsup/cygwin/ChangeLog | 8 ++++++++ winsup/cygwin/path.cc | 16 +++++++++++++--- winsup/cygwin/sec_auth.cc | 12 ------------ winsup/cygwin/security.h | 3 --- 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index f0beeccd6..c48073f63 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,11 @@ +2009-05-09 Corinna Vinschen + + * sec_auth.cc (str2uni_cat): Move from here... + * path.cc (str2uni_cat): ...to here. Simplify. Make static inline. + (get_nt_native_path): Use RtlAppendUnicodeToString rather than + str2uni_cat for constant strings for speed. + * security.h (str2uni_cat): Drop declaration. + 2009-05-08 Corinna Vinschen IWAMURO Motonori diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc index e39a4b2fb..ec5c40b5c 100644 --- a/winsup/cygwin/path.cc +++ b/winsup/cygwin/path.cc @@ -428,6 +428,16 @@ transform_chars (PUNICODE_STRING upath, USHORT start_idx) upath->Buffer + upath->Length / sizeof (WCHAR) - 1); } +static inline void +str2uni_cat (UNICODE_STRING &tgt, const char *srcstr) +{ + int len = sys_mbstowcs (tgt.Buffer + tgt.Length / sizeof (WCHAR), + (tgt.MaximumLength - tgt.Length) / sizeof (WCHAR), + srcstr); + if (len) + tgt.Length += (len - 1) * sizeof (WCHAR); +} + PUNICODE_STRING get_nt_native_path (const char *path, UNICODE_STRING& upath) { @@ -438,7 +448,7 @@ get_nt_native_path (const char *path, UNICODE_STRING& upath) { if (path[1] == ':') /* X:\... */ { - str2uni_cat (upath, "\\??\\"); + RtlAppendUnicodeToString (&upath, L"\\??\\"); str2uni_cat (upath, path); /* The drive letter must be upper case. */ upath.Buffer[4] = towupper (upath.Buffer[4]); @@ -452,13 +462,13 @@ get_nt_native_path (const char *path, UNICODE_STRING& upath) else if ((path[2] != '.' && path[2] != '?') || path[3] != '\\') /* \\server\share\... */ { - str2uni_cat (upath, "\\??\\UNC\\"); + RtlAppendUnicodeToString (&upath, L"\\??\\UNC\\"); str2uni_cat (upath, path + 2); transform_chars (&upath, 8); } else /* \\.\device or \\?\foo */ { - str2uni_cat (upath, "\\??\\"); + RtlAppendUnicodeToString (&upath, L"\\??\\"); str2uni_cat (upath, path + 4); } return &upath; diff --git a/winsup/cygwin/sec_auth.cc b/winsup/cygwin/sec_auth.cc index a456eac26..82fa144fe 100644 --- a/winsup/cygwin/sec_auth.cc +++ b/winsup/cygwin/sec_auth.cc @@ -126,18 +126,6 @@ str2buf2lsa (LSA_STRING &tgt, char *buf, const char *srcstr) memcpy (buf, srcstr, tgt.MaximumLength); } -void -str2uni_cat (UNICODE_STRING &tgt, const char *srcstr) -{ - int len = sys_mbstowcs (tgt.Buffer + tgt.Length / sizeof (WCHAR), - (tgt.MaximumLength - tgt.Length) / sizeof (WCHAR), - srcstr); - if (len) - tgt.Length += (len - 1) * sizeof (WCHAR); - else - tgt.Length = tgt.MaximumLength = 0; -} - HANDLE open_local_policy (ACCESS_MASK access) { diff --git a/winsup/cygwin/security.h b/winsup/cygwin/security.h index 9d306feb0..7b09bc0ad 100644 --- a/winsup/cygwin/security.h +++ b/winsup/cygwin/security.h @@ -366,9 +366,6 @@ extern "C" int acl32 (const char *, int, int, __acl32 *); int getacl (HANDLE, path_conv &, int, __acl32 *); int setacl (HANDLE, path_conv &, int, __acl32 *, bool &); -struct _UNICODE_STRING; -void __stdcall str2uni_cat (_UNICODE_STRING &, const char *) __attribute__ ((regparm (2))); - /* Function creating a token by calling NtCreateToken. */ HANDLE create_token (cygsid &usersid, user_groups &groups, struct passwd * pw); /* LSA authentication function. */