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