mirror of git://gcc.gnu.org/git/gcc.git
pex-common.c (temp_file): New function, containing guts of pex-style temporary file name generation.
2006-04-10 Jim Blandy <jimb@codesourcery.com> * pex-common.c (temp_file): New function, containing guts of pex-style temporary file name generation. (pex_run): Use it. From-SVN: r112882
This commit is contained in:
parent
79773478a6
commit
5ea49f9c39
|
@ -1,3 +1,9 @@
|
||||||
|
2006-04-10 Jim Blandy <jimb@codesourcery.com>
|
||||||
|
|
||||||
|
* pex-common.c (temp_file): New function, containing guts of
|
||||||
|
pex-style temporary file name generation.
|
||||||
|
(pex_run): Use it.
|
||||||
|
|
||||||
2006-04-06 Carlos O'Donell <carlos@codesourcery.com>
|
2006-04-06 Carlos O'Donell <carlos@codesourcery.com>
|
||||||
|
|
||||||
* Makefile.in: Add install-html, install-html-am, and
|
* Makefile.in: Add install-html, install-html-am, and
|
||||||
|
|
|
@ -91,6 +91,56 @@ pex_add_remove (struct pex_obj *obj, const char *name, int allocated)
|
||||||
obj->remove[obj->remove_count - 1] = add;
|
obj->remove[obj->remove_count - 1] = add;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Generate a temporary file name based on OBJ, FLAGS, and NAME.
|
||||||
|
Return NULL if we were unable to reserve a temporary filename.
|
||||||
|
|
||||||
|
If non-NULL, the result is either allocated with malloc, or the
|
||||||
|
same pointer as NAME. */
|
||||||
|
static char *
|
||||||
|
temp_file (struct pex_obj *obj, int flags, char *name)
|
||||||
|
{
|
||||||
|
if (name == NULL)
|
||||||
|
{
|
||||||
|
if (obj->tempbase == NULL)
|
||||||
|
{
|
||||||
|
name = make_temp_file (NULL);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int len = strlen (obj->tempbase);
|
||||||
|
int out;
|
||||||
|
|
||||||
|
if (len >= 6
|
||||||
|
&& strcmp (obj->tempbase + len - 6, "XXXXXX") == 0)
|
||||||
|
name = xstrdup (obj->tempbase);
|
||||||
|
else
|
||||||
|
name = concat (obj->tempbase, "XXXXXX", NULL);
|
||||||
|
|
||||||
|
out = mkstemps (name, 0);
|
||||||
|
if (out < 0)
|
||||||
|
{
|
||||||
|
free (name);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This isn't obj->funcs->close because we got the
|
||||||
|
descriptor from mkstemps, not from a function in
|
||||||
|
obj->funcs. Calling close here is just like what
|
||||||
|
make_temp_file does. */
|
||||||
|
close (out);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ((flags & PEX_SUFFIX) != 0)
|
||||||
|
{
|
||||||
|
if (obj->tempbase == NULL)
|
||||||
|
name = make_temp_file (name);
|
||||||
|
else
|
||||||
|
name = concat (obj->tempbase, name, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
/* Run a program. */
|
/* Run a program. */
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
|
@ -161,49 +211,16 @@ pex_run (struct pex_obj *obj, int flags, const char *executable,
|
||||||
}
|
}
|
||||||
else if ((obj->flags & PEX_USE_PIPES) == 0)
|
else if ((obj->flags & PEX_USE_PIPES) == 0)
|
||||||
{
|
{
|
||||||
if (outname == NULL)
|
outname = temp_file (obj, flags, outname);
|
||||||
{
|
if (! outname)
|
||||||
if (obj->tempbase == NULL)
|
|
||||||
{
|
|
||||||
outname = make_temp_file (NULL);
|
|
||||||
outname_allocated = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int len = strlen (obj->tempbase);
|
|
||||||
|
|
||||||
if (len >= 6
|
|
||||||
&& strcmp (obj->tempbase + len - 6, "XXXXXX") == 0)
|
|
||||||
outname = xstrdup (obj->tempbase);
|
|
||||||
else
|
|
||||||
outname = concat (obj->tempbase, "XXXXXX", NULL);
|
|
||||||
|
|
||||||
outname_allocated = 1;
|
|
||||||
|
|
||||||
out = mkstemps (outname, 0);
|
|
||||||
if (out < 0)
|
|
||||||
{
|
{
|
||||||
*err = 0;
|
*err = 0;
|
||||||
errmsg = "could not create temporary output file";
|
errmsg = "could not create temporary file";
|
||||||
goto error_exit;
|
goto error_exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This isn't obj->funcs->close because we got the
|
if (outname != orig_outname)
|
||||||
descriptor from mkstemps, not from a function in
|
|
||||||
obj->funcs. Calling close here is just like what
|
|
||||||
make_temp_file does. */
|
|
||||||
close (out);
|
|
||||||
out = -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ((flags & PEX_SUFFIX) != 0)
|
|
||||||
{
|
|
||||||
if (obj->tempbase == NULL)
|
|
||||||
outname = make_temp_file (outname);
|
|
||||||
else
|
|
||||||
outname = concat (obj->tempbase, outname, NULL);
|
|
||||||
outname_allocated = 1;
|
outname_allocated = 1;
|
||||||
}
|
|
||||||
|
|
||||||
if ((obj->flags & PEX_SAVE_TEMPS) == 0)
|
if ((obj->flags & PEX_SAVE_TEMPS) == 0)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue