You are viewing a plain text version of this content. The canonical link for it is here.
Posted to rivet-dev@tcl.apache.org by mx...@apache.org on 2007/10/18 16:48:35 UTC

svn commit: r585989 - /tcl/rivet/trunk/src/apache-2/TclWebapache.c

Author: mxmanghi
Date: Thu Oct 18 07:48:33 2007
New Revision: 585989

URL: http://svn.apache.org/viewvc?rev=585989&view=rev
Log:
TclWeb_UploadSave in a more robust way using apr_* calls 

Modified:
    tcl/rivet/trunk/src/apache-2/TclWebapache.c

Modified: tcl/rivet/trunk/src/apache-2/TclWebapache.c
URL: http://svn.apache.org/viewvc/tcl/rivet/trunk/src/apache-2/TclWebapache.c?rev=585989&r1=585988&r2=585989&view=diff
==============================================================================
--- tcl/rivet/trunk/src/apache-2/TclWebapache.c (original)
+++ tcl/rivet/trunk/src/apache-2/TclWebapache.c Thu Oct 18 07:48:33 2007
@@ -540,7 +540,7 @@
 		fileno(ApacheUpload_FILE(req->upload))), TCL_READABLE);
 #else
 	*chan = Tcl_MakeFileChannel(
-	    (ClientData)fileno(ApacheUpload_FILE(req->upload)), TCL_READABLE);
+	    (ClientData)fileno((FILE*)ApacheUpload_FILE(req->upload)), TCL_READABLE);
 #endif
 	Tcl_RegisterChannel(req->interp, *chan);
 	return TCL_OK;
@@ -551,45 +551,13 @@
 
 int TclWeb_UploadSave(char *varname, Tcl_Obj *filename, TclWebRequest *req)
 {
-    int sz;
-    char savebuffer[BUFSZ];
-    Tcl_Channel chan;
-    Tcl_Channel savechan;
-
-    savechan = Tcl_OpenFileChannel(req->interp, Tcl_GetString(filename),
-				   "w", 0600);
-    if (savechan == NULL) {
-	return TCL_ERROR;
-    } else {
-	Tcl_SetChannelOption(req->interp, savechan,
-			     "-translation", "binary");
-    }
-
-#ifdef __MINGW32__
-    chan = Tcl_MakeFileChannel(
-	(ClientData)_get_osfhandle(
-	    fileno(ApacheUpload_FILE(req->upload))), TCL_READABLE);
-#else
-    chan = Tcl_MakeFileChannel(
-	(ClientData)fileno(ApacheUpload_FILE(req->upload)), TCL_READABLE);
-#endif
-    Tcl_SetChannelOption(req->interp, chan, "-translation", "binary");
-
-    while ((sz = Tcl_Read(chan, savebuffer, BUFSZ)))
-    {
-	if (sz == -1)
-	{
-	    Tcl_AddErrorInfo(req->interp, Tcl_PosixError(req->interp));
-	    return TCL_ERROR;
+	apr_status_t	status;
+	status = apr_file_copy(req->upload->tempname ,Tcl_GetString(filename),APR_FILE_SOURCE_PERMS,req->req->pool);
+	if ( status == 0 ) {
+	    return TCL_OK;
+	} else {
+		return TCL_ERROR;
 	}
-
-	Tcl_Write(savechan, savebuffer, sz);
-	if (sz < 4096) {
-	    break;
-	}
-    }
-    Tcl_Close(req->interp, savechan);
-    return TCL_OK;
 }
 
 int TclWeb_UploadData(char *varname, Tcl_Obj *data, TclWebRequest *req)
@@ -611,7 +579,7 @@
 		fileno(ApacheUpload_FILE(req->upload))), TCL_READABLE);
 #else
 	chan = Tcl_MakeFileChannel(
-	    (ClientData)fileno(ApacheUpload_FILE(req->upload)), TCL_READABLE);
+	    (ClientData)fileno((FILE *)ApacheUpload_FILE(req->upload)), TCL_READABLE);
 #endif
 	Tcl_SetChannelOption(req->interp, chan,
 			     "-translation", "binary");



---------------------------------------------------------------------
To unsubscribe, e-mail: rivet-cvs-unsubscribe@tcl.apache.org
For additional commands, e-mail: rivet-cvs-help@tcl.apache.org