--- cscope-15.5.orig/src/main.c +++ cscope-15.5/src/main.c @@ -330,9 +330,31 @@ } /* create the temporary file names */ - pid = getpid(); - (void) sprintf(temp1, "%s/cscope%d.1", tmpdir, pid); - (void) sprintf(temp2, "%s/cscope%d.2", tmpdir, pid); + do { + char *tempfile = tempnam(tmpdir, "cscope1"); + if (!tempfile) { + fputs ("Can't create tempfile\n", stderr); + exit (1); + } + if (strlen(tempfile) >= sizeof(temp1)) { + fputs ("TMPDIR path is too long\n", stderr); + exit(1); + } + strncpy (temp1, tempfile, sizeof (temp1)); + } while (open (temp1, O_CREAT|O_EXCL|O_WRONLY, 0600) < 0); + do { + char *tempfile = tempnam(tmpdir, "cscope2"); + if (!tempfile) { + fputs ("Can't create tempfile\n", stderr); + exit (1); + } + if (strlen(tempfile) >= sizeof(temp2)) { + fputs ("TMPDIR path is too long\n", stderr); + exit(1); + } + strncpy (temp2, tempfile, sizeof (temp2)); + } while (open (temp2, O_CREAT|O_EXCL|O_WRONLY, 0600) < 0); + /* if running in the foreground */ if (signal(SIGINT, SIG_IGN) != SIG_IGN) {