diff -aur dev86-0.16.17.orig/bcc/bcc.c dev86-0.16.17/bcc/bcc.c --- dev86-0.16.17.orig/bcc/bcc.c 2006-10-15 04:40:27 +0400 +++ dev86-0.16.17/bcc/bcc.c 2007-07-17 13:41:50 +0400 @@ -122,11 +122,7 @@ int dyn_count = 0; int error_count = 0; char * progname = "C"; -#ifdef MSDOS char * tmpdir = ""; -#else -char * tmpdir = "/tmp/"; -#endif int main P((int argc, char **argv)); void getargs P((int argc, char **argv)); @@ -195,6 +191,18 @@ if ((temp = getenv("BCC_PREFIX")) != 0 ) localprefix = copystr(temp); +#ifndef MSDOS + /* XXX: this brings bcc behaviour in sync with the manual page which + states that bcc uses TMPDIR for the temporary directory name. + However, temporary file handling in this package is totally + insecure and I see no easy way how to fix it. :( + -- (GM) + */ + tmpdir = __secure_getenv("TMPDIR"); + if (!tmpdir || !*tmpdir) + tmpdir = "/tmp"; +#endif + getargs(argc, argv); validate_link_opts(); @@ -727,9 +735,9 @@ { char buf[16]; #ifdef MSDOS - sprintf(buf, "$$%05d$", dyn_count++); + sprintf(buf, "/$$%05d$", dyn_count++); #else - sprintf(buf, "$$%04d%05d", dyn_count++, getpid()); + sprintf(buf, "/$$%04d%05d", dyn_count++, getpid()); #endif file->file = catstr(tmpdir, buf); } @@ -750,9 +758,9 @@ char buf[16]; char * p; #ifdef MSDOS - sprintf(buf, "$$%05d$", i); + sprintf(buf, "/$$%05d$", i); #else - sprintf(buf, "$$%04d%05d", i, getpid()); + sprintf(buf, "/$$%04d%05d", i, getpid()); #endif p = catstr(tmpdir, buf); if (opt_v>1) Только в dev86-0.16.17/bcc: bcc.c~