You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mod_dtcl-cvs@tcl.apache.org by da...@apache.org on 2001/06/04 11:54:46 UTC

cvs commit: tcl-moddtcl apache_request.c apache_request.h

davidw      01/06/04 02:54:46

  Modified:    .        apache_request.c apache_request.h
  Log:
  Added changes from apreq, Mikhail Teterin.
  Submitted by: mi@aldan.algebra.com
  
  Revision  Changes    Path
  1.6       +25 -15    tcl-moddtcl/apache_request.c
  
  Index: apache_request.c
  ===================================================================
  RCS file: /home/cvs/tcl-moddtcl/apache_request.c,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- apache_request.c	2001/03/19 17:36:42	1.5
  +++ apache_request.c	2001/06/04 09:54:46	1.6
  @@ -268,9 +268,8 @@
   int ApacheRequest___parse(ApacheRequest *req)
   {
       request_rec *r = req->r;
  +    int result;
   
  -    req->parsed = 1;
  -
       if (r->args) {
           split_to_parms(req, r->args);
       }
  @@ -278,20 +277,24 @@
       if (r->method_number == M_POST) { 
   	const char *ct = ap_table_get(r->headers_in, "Content-type"); 
   	if (ct && strcaseEQN(ct, DEFAULT_ENCTYPE, DEFAULT_ENCTYPE_LENGTH)) {
  -	    return ApacheRequest_parse_urlencoded(req); 
  +	    result = ApacheRequest_parse_urlencoded(req); 
   	}
   	else if (ct && strcaseEQN(ct, MULTIPART_ENCTYPE, MULTIPART_ENCTYPE_LENGTH)) {
  -	   return ApacheRequest_parse_multipart(req); 
  +	   result = ApacheRequest_parse_multipart(req); 
   	}
   	else {
   	    ap_log_rerror(REQ_ERROR, 
   			  "[libapreq] unknown content-type: `%s'", ct); 
  -	    return HTTP_INTERNAL_SERVER_ERROR;
  +	    result = HTTP_INTERNAL_SERVER_ERROR;
   	}
       } 
       else {
  -	return ApacheRequest_parse_urlencoded(req); 
  +	result = ApacheRequest_parse_urlencoded(req); 
       }
  +
  +    req->parsed = 1;
  +    return result;
  +
   }
   
   int ApacheRequest_parse_urlencoded(ApacheRequest *req)
  @@ -319,8 +322,17 @@
   }
   
   static void remove_tmpfile(void *data) {
  -    remove((char *) data);
  -    free((char *) data);
  +    ApacheUpload *upload = (ApacheUpload *) data;
  +    ApacheRequest *req = upload->req;
  +
  +    if( ap_pfclose(req->r->pool, upload->fp) )
  +	ap_log_rerror(REQ_ERROR,
  +		      "[libapreq] close error on '%s'", upload->tempname);	
  +    if( remove(upload->tempname) )
  +	ap_log_rerror(REQ_ERROR,
  +		      "[libapreq] remove error on '%s'", upload->tempname);
  +
  +    free(upload->tempname);
   }
   
   FILE *ApacheRequest_tmpfile(ApacheRequest *req, ApacheUpload *upload)
  @@ -332,7 +344,8 @@
       int fd, tries = 100;
       
       while (--tries > 0) {
  -	if ( (name = tempnam(req->temp_dir, prefix)) == NULL ) continue;
  +	if ( (name = tempnam(req->temp_dir, prefix)) == NULL )
  +	    continue;
   	fd = ap_popenf(r->pool, name, O_CREAT|O_EXCL|O_RDWR, 0600);
   	if ( fd >= 0 )
   	    break; /* success */
  @@ -340,7 +353,7 @@
   	    free(name);
       }
       
  -    if ( tries == 0  || (fp = ap_pfdopen(r->pool, fd, "w+") ) == NULL ) {
  +    if ( tries == 0  || (fp = ap_pfdopen(r->pool, fd, "wb+") ) == NULL ) {
   	ap_log_rerror(REQ_ERROR,
   		      "[libapreq] could not open temp file '%s'", name); 	
   	if ( fd >= 0 ) { remove(name); free(name); }
  @@ -349,7 +362,7 @@
   
       upload->fp = fp;
       upload->tempname = name;
  -    ap_register_cleanup(r->pool, (void *)upload->tempname, 
  +    ap_register_cleanup(r->pool, (void *)upload, 
   			remove_tmpfile, ap_null_cleanup);
       return fp;
   
  @@ -462,11 +475,8 @@
   		upload->size += wlen;
   	    }
   
  -	    if (upload->size > 0 && (req->upload_hook == NULL)) {
  +	    if (upload->size > 0 && (upload->fp != NULL)) {
   		fseek(upload->fp, 0, 0);
  -	    }
  -	    else {
  -		upload->fp = NULL;
   	    }
   	}
       }
  
  
  
  1.5       +23 -1     tcl-moddtcl/apache_request.h
  
  Index: apache_request.h
  ===================================================================
  RCS file: /home/cvs/tcl-moddtcl/apache_request.h,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- apache_request.h	2001/03/15 19:36:57	1.4
  +++ apache_request.h	2001/06/04 09:54:46	1.5
  @@ -10,6 +10,28 @@
   #include "http_protocol.h"
   #include "util_script.h"
   
  +#ifdef  SFIO
  +#include "sfio.h"
  +
  +/* sfio 2000 changed _stdopen to _stdfdopen */
  +#if SFIO_VERSION >= 20000101L
  +#define _stdopen _stdfdopen
  +#endif
  +
  +extern Sfio_t*  _stdopen _ARG_((int, const char*)); /*1999*/
  +
  +#undef  FILE
  +#define FILE 			Sfio_t
  +#undef  fwrite
  +#define fwrite(p,s,n,f)		sfwrite((f),(p),(s)*(n))
  +#undef  fseek
  +#define fseek(f,a,b)		sfseek((f),(a),(b))
  +#undef  ap_pfdopen
  +#define ap_pfdopen(p,q,r) 	_stdopen((q),(r))
  +#undef  ap_pfclose
  +#define ap_pfclose(p,q)		sfclose(q)
  +#endif /*SFIO*/
  +
   typedef struct ApacheUpload ApacheUpload;
   
   typedef struct {
  @@ -19,7 +41,7 @@
       int parsed;
       int post_max;
       int disable_uploads;
  -    int (*upload_hook)(void *ptr, char *buf, int len, const ApacheUpload *upload);
  +    int (*upload_hook)(void *ptr, char *buf, int len, ApacheUpload *upload);
       void *hook_data;
       char* temp_dir;
       request_rec *r;