From 27ac64346fa0231a6a9a6e986ca460923f6b4b65 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Mon, 25 Jan 2010 11:21:56 +0000 Subject: [PATCH] * spawn.cc (spawn_guts): Only try to remove long path prefix from runpath if runpath is not NULL. --- winsup/cygwin/ChangeLog | 5 +++++ winsup/cygwin/spawn.cc | 35 ++++++++++++++++++----------------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 89b3252bc..518d0e3a5 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +2010-01-25 Corinna Vinschen + + * spawn.cc (spawn_guts): Only try to remove long path prefix from + runpath if runpath is not NULL. + 2010-01-25 Corinna Vinschen * nlsfuncs.cc (__get_lcid_from_locale): Fix a comment. Handle special diff --git a/winsup/cygwin/spawn.cc b/winsup/cygwin/spawn.cc index fdbab76aa..c1033376c 100644 --- a/winsup/cygwin/spawn.cc +++ b/winsup/cygwin/spawn.cc @@ -489,23 +489,24 @@ spawn_guts (const char *prog_arg, const char *const *argv, } runpath = null_app_name ? NULL : real_path.get_wide_win32_path (runpath); - { /* If the executable path length is < MAX_PATH, make sure the long path - win32 prefix is removed from the path to make subsequent native Win32 - child processes happy which are not long path aware. */ - USHORT len = real_path.get_nt_native_path ()->Length; - if (len < (MAX_PATH + 4) * sizeof (WCHAR) - || (runpath[5] != L':' /* UNC path */ - && len < (MAX_PATH + 6) * sizeof (WCHAR))) - { - PWCHAR r = runpath + 4; - if (r[1] != L':') /* UNC path */ - *(r += 2) = L'\\'; - if (!RtlIsDosDeviceName_U (r)) - runpath = r; - else if (*r == L'\\') - *r = L'C'; - } - } + if (runpath) + { /* If the executable path length is < MAX_PATH, make sure the long path + win32 prefix is removed from the path to make subsequent native Win32 + child processes happy which are not long path aware. */ + USHORT len = real_path.get_nt_native_path ()->Length; + if (len < (MAX_PATH + 4) * sizeof (WCHAR) + || (runpath[5] != L':' /* UNC path */ + && len < (MAX_PATH + 6) * sizeof (WCHAR))) + { + PWCHAR r = runpath + 4; + if (r[1] != L':') /* UNC path */ + *(r += 2) = L'\\'; + if (!RtlIsDosDeviceName_U (r)) + runpath = r; + else if (*r == L'\\') + *r = L'C'; + } + } syscall_printf ("null_app_name %d (%W, %.9500W)", null_app_name, runpath, wone_line);