* spawn.cc (av::error): Eliminate.
(av::av): Remove reference to error. (av::replace0_maybe): Ditto. (av::dup_maybe): Ditto. (av::dup_all): Ditto. (av::unshift): Ditto. (spawn_guts): On a fault, return E2BIG only if ENOMEM has been set. Otherwise return EFAULT.
This commit is contained in:
parent
c9629cefe9
commit
ae37cc1218
|
@ -1,3 +1,14 @@
|
|||
2005-09-14 Christopher Faylor <cgf@timesys.com>
|
||||
|
||||
* spawn.cc (av::error): Eliminate.
|
||||
(av::av): Remove reference to error.
|
||||
(av::replace0_maybe): Ditto.
|
||||
(av::dup_maybe): Ditto.
|
||||
(av::dup_all): Ditto.
|
||||
(av::unshift): Ditto.
|
||||
(spawn_guts): On a fault, return E2BIG only if ENOMEM has been set.
|
||||
Otherwise return EFAULT.
|
||||
|
||||
2005-09-14 Christopher Faylor <cgf@timesys.com>
|
||||
|
||||
* cygtls.h (san): New structure.
|
||||
|
|
|
@ -289,11 +289,10 @@ class av
|
|||
char **argv;
|
||||
int calloced;
|
||||
public:
|
||||
int error;
|
||||
int argc;
|
||||
bool win16_exe;
|
||||
av (): argv (NULL) {}
|
||||
av (int ac_in, const char * const *av_in) : calloced (0), error (false), argc (ac_in), win16_exe (false)
|
||||
av (int ac_in, const char * const *av_in) : calloced (0), argc (ac_in), win16_exe (false)
|
||||
{
|
||||
argv = (char **) cmalloc (HEAP_1_ARGV, (argc + 5) * sizeof (char *));
|
||||
memcpy (argv, av_in, (argc + 1) * sizeof (char *));
|
||||
|
@ -316,23 +315,21 @@ class av
|
|||
void replace0_maybe (const char *arg0)
|
||||
{
|
||||
/* Note: Assumes that argv array has not yet been "unshifted" */
|
||||
if (!calloced
|
||||
&& (argv[0] = cstrdup1 (arg0)))
|
||||
if (!calloced)
|
||||
{
|
||||
argv[0] = cstrdup1 (arg0);
|
||||
calloced = true;
|
||||
else
|
||||
error = errno;
|
||||
}
|
||||
}
|
||||
void dup_maybe (int i)
|
||||
{
|
||||
if (i >= calloced
|
||||
&& !(argv[i] = cstrdup1 (argv[i])))
|
||||
error = errno;
|
||||
if (i >= calloced)
|
||||
argv[i] = cstrdup1 (argv[i]);
|
||||
}
|
||||
void dup_all ()
|
||||
{
|
||||
for (int i = calloced; i < argc; i++)
|
||||
if (!(argv[i] = cstrdup1 (argv[i])))
|
||||
error = errno;
|
||||
argv[i] = cstrdup1 (argv[i]);
|
||||
}
|
||||
int fixup (child_info_types, const char *, path_conv&, const char *);
|
||||
};
|
||||
|
@ -356,10 +353,9 @@ av::unshift (const char *what, int conv)
|
|||
*p = '\0';
|
||||
what = buf;
|
||||
}
|
||||
if (!(*argv = cstrdup1 (what)))
|
||||
error = errno;
|
||||
argc++;
|
||||
*argv = cstrdup1 (what);
|
||||
calloced++;
|
||||
argc++;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -433,8 +429,12 @@ spawn_guts (const char * prog_arg, const char *const *argv,
|
|||
STARTUPINFO si = {0, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL};
|
||||
|
||||
myfault efault;
|
||||
if (efault.faulted (E2BIG))
|
||||
if (efault.faulted ())
|
||||
{
|
||||
if (get_errno () == ENOMEM)
|
||||
set_errno (E2BIG);
|
||||
else
|
||||
set_errno (EFAULT);
|
||||
res = -1;
|
||||
goto out;
|
||||
}
|
||||
|
@ -552,12 +552,6 @@ spawn_guts (const char * prog_arg, const char *const *argv,
|
|||
|
||||
char *envblock;
|
||||
newargv.all_calloced ();
|
||||
if (newargv.error)
|
||||
{
|
||||
set_errno (newargv.error);
|
||||
return -1;
|
||||
}
|
||||
|
||||
moreinfo->argc = newargv.argc;
|
||||
moreinfo->argv = newargv;
|
||||
|
||||
|
|
Loading…
Reference in New Issue