1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-11-28 01:06:17 +00:00
freebsd-ports/www/mod_dtcl/files/patch-tmp
Mikhail Teterin 97d3f9d9d8 Upgrade to 0.11.1... The contents of the patch-tmp should really be
submitted  to the  libapreq  developers --  the  mod_dtcl author  simply
bundles a couple of their source files with mod_dtcl...
2001-08-08 03:23:35 +00:00

49 lines
1.5 KiB
Plaintext

--- apache_request.c Sat Jun 23 10:11:03 2001
+++ apache_request.c Tue Aug 7 22:37:51 2001
@@ -341,22 +341,33 @@
{
request_rec *r = req->r;
FILE *fp;
- char prefix[] = "apreq";
+#define PREFIX "apreq"
char *name = NULL;
- int fd = 0;
- int tries = 100;
+ int fd;
+ char *dirs[5], **dir;
- while (--tries > 0) {
- if ( (name = tempnam(req->temp_dir, prefix)) == NULL )
- continue;
- fd = ap_popenf(r->pool, name, O_CREAT|O_EXCL|O_RDWR|O_BINARY, 0600);
- if ( fd >= 0 )
- break; /* success */
- else
- free(name);
+ dirs[0] = getenv("TMPDIR"); dirs[1] = req->temp_dir;
+ dirs[2] = P_tmpdir; dirs[3] = "/tmp"; dirs[4] = NULL;
+
+ /*
+ * Look for the non-NULL directory. The order
+ * above is dictated by the tempnam(3) spec
+ */
+ for (dir = dirs; *dir == NULL; dir++) /* Nothing */;
+
+ /* Now, try to create the temporary file in one of the directories: */
+ for (fd = -1; fd == -1 && *dir; dir++) {
+ name = malloc(strlen(*dir) + sizeof PREFIX + 8);
+ if (!name) {
+ ap_log_rerror(REQ_ERROR, "[libapreq] could not allocate memory");
+ return(NULL);
+ }
+ sprintf(name, "%s/%s.XXXXXX", *dir, PREFIX);
+ fd = mkstemp(name);
+ if (fd == -1) free(name);
}
- if ( tries == 0 || (fp = ap_pfdopen(r->pool, fd, "w+" "b") ) == NULL ) {
+ if ( fd == -1 || (fp = ap_pfdopen(r->pool, fd, "w+" "b") ) == NULL ) {
ap_log_rerror(REQ_ERROR, "[libapreq] could not create/open temp file");
if ( fd >= 0 ) { remove(name); free(name); }
return NULL;