From 1fd1b4178a083f4821d0c45723605824fbcdb017 Mon Sep 17 00:00:00 2001 From: Sven Hoexter Date: Sun, 14 Aug 2016 16:01:31 +0200 Subject: [PATCH] Close the file handle in time in case -file option is used Origin: https://www.androwish.org/index.html/vpatch?from=9afc8918cdeec6d7&to=e4864fde820aac71 Author: Christian Werner --- generic/tclcurl.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/generic/tclcurl.c b/generic/tclcurl.c index 5bd7dda..5e0a851 100755 --- a/generic/tclcurl.c +++ b/generic/tclcurl.c @@ -465,6 +465,12 @@ curlSetOpts(Tcl_Interp *interp, struct curlObjData *curlData, case 1: Tcl_Free(curlData->outFile); curlData->outFile=curlstrdup(Tcl_GetString(objv)); + if (curlData->outFlag) { + if (curlData->outHandle!=NULL) { + fclose(curlData->outHandle); + curlData->outHandle=NULL; + } + } if ((strcmp(curlData->outFile,""))&&(strcmp(curlData->outFile,"stdout"))) { curlData->outFlag=1; } else { @@ -1064,6 +1070,14 @@ curlSetOpts(Tcl_Interp *interp, struct curlObjData *curlData, case 62: Tcl_Free(curlData->bodyVarName); curlData->bodyVarName=curlstrdup(Tcl_GetString(objv)); + if (curlData->outFlag) { + if (curlData->outHandle!=NULL) { + fclose(curlData->outHandle); + curlData->outHandle=NULL; + } + curl_easy_setopt(curlHandle,CURLOPT_WRITEDATA,NULL); + } + curlData->outFlag=0; if (curl_easy_setopt(curlHandle,CURLOPT_WRITEFUNCTION, curlBodyReader)) { return TCL_ERROR; @@ -1101,6 +1115,13 @@ curlSetOpts(Tcl_Interp *interp, struct curlObjData *curlData, break; case 65: curlData->writeProc=curlstrdup(Tcl_GetString(objv)); + if (curlData->outFlag) { + if (curlData->outHandle!=NULL) { + fclose(curlData->outHandle); + curlData->outHandle=NULL; + } + curl_easy_setopt(curlHandle,CURLOPT_WRITEDATA,NULL); + } curlData->outFlag=0; if (curl_easy_setopt(curlHandle,CURLOPT_WRITEFUNCTION, curlWriteProcInvoke)) {