diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2008-03-11 12:34:08 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2008-03-11 12:34:08 +0000 |
commit | 6c968f611bfa7045711f9844de2a5129257fbc1a (patch) | |
tree | eaa7145edbd8a70303895b6a275898e9ad25d75d /winsup/cygwin/spawn.cc | |
parent | becf251f67689f14e1f9f3ba04b4b2ad586fc77e (diff) | |
download | cygnal-6c968f611bfa7045711f9844de2a5129257fbc1a.tar.gz cygnal-6c968f611bfa7045711f9844de2a5129257fbc1a.tar.bz2 cygnal-6c968f611bfa7045711f9844de2a5129257fbc1a.zip |
* path.cc (cwdstuff::set): Make sure drive_length is 0 for virtual
paths. Add comments.
* spawn.cc (spawn_guts): Don't allow to start a native Win32 application
from a long path or a virtual path. Print an error message to stderr.
Diffstat (limited to 'winsup/cygwin/spawn.cc')
-rw-r--r-- | winsup/cygwin/spawn.cc | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/winsup/cygwin/spawn.cc b/winsup/cygwin/spawn.cc index 4ea04d934..9d6b25261 100644 --- a/winsup/cygwin/spawn.cc +++ b/winsup/cygwin/spawn.cc @@ -361,6 +361,21 @@ spawn_guts (const char * prog_arg, const char *const *argv, wascygexec = real_path.iscygexec (); res = newargv.fixup (prog_arg, real_path, ext); + + if (!real_path.iscygexec () + && (cygheap->cwd.drive_length == 0 + || cygheap->cwd.win32.Length >= MAX_PATH * sizeof (WCHAR))) + { + small_printf ("Error: Current working directory is a %s.\n" + "Can't start native Windows application from here.\n\n", + cygheap->cwd.drive_length == 0 + ? "virtual Cygwin directory" + : "path longer than allowed for a\n" + "Win32 working directory"); + set_errno (ENAMETOOLONG); + res = -1; + goto out; + } if (res) goto out; |