diff options
Diffstat (limited to 'winsup/cygwin/spawn.cc')
-rw-r--r-- | winsup/cygwin/spawn.cc | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/winsup/cygwin/spawn.cc b/winsup/cygwin/spawn.cc index c4f116728..dc1c4ac17 100644 --- a/winsup/cygwin/spawn.cc +++ b/winsup/cygwin/spawn.cc @@ -351,9 +351,8 @@ child_info_spawn::worker (const char *prog_arg, const char *const *argv, We need to quote any argument that has whitespace or embedded "'s. */ int ac; - size_t arg_len = 0; for (ac = 0; argv[ac]; ac++) - arg_len += strlen (argv[ac]) + 1; + ; int err; const char *ext; @@ -522,12 +521,6 @@ child_info_spawn::worker (const char *prog_arg, const char *const *argv, __leave; } set (chtype, real_path.iscygexec ()); - if (iscygwin () && arg_len > (size_t) sysconf (_SC_ARG_MAX)) - { - set_errno (E2BIG); - res = -1; - __leave; - } __stdin = in__stdin; __stdout = in__stdout; record_children (); @@ -1130,11 +1123,16 @@ spawnvpe (int mode, const char *file, const char * const *argv, int av::setup (const char *prog_arg, path_conv& real_path, const char *ext, - int argc, const char *const *argv, bool p_type_exec) + int ac_in, const char *const *av_in, bool p_type_exec) { const char *p; bool exeext = ascii_strcasematch (ext, ".exe"); - new (this) av (argc, argv); + new (this) av (ac_in, av_in); + if (!argc) + { + set_errno (E2BIG); + return -1; + } if ((exeext && real_path.iscygexec ()) || ascii_strcasematch (ext, ".bat") || (!*ext && ((p = ext - 4) > real_path.get_win32 ()) && (ascii_strcasematch (p, ".bat") || ascii_strcasematch (p, ".cmd") |