mirror of
https://github.com/curl/curl.git
synced 2026-08-04 17:26:18 +03:00
parent
e0c6f4d4d6
commit
c2b050e4e4
4 changed files with 67 additions and 118 deletions
|
|
@ -268,6 +268,60 @@ void clear_advisor_read_lock(const char *filename)
|
|||
}
|
||||
}
|
||||
|
||||
/* store the entire request in a file */
|
||||
void storerequest(const char *reqbuf, size_t totalsize, const char *filename)
|
||||
{
|
||||
int error = 0;
|
||||
char errbuf[STRERROR_LEN];
|
||||
size_t written;
|
||||
size_t writeleft;
|
||||
FILE *dump;
|
||||
char dumpfile[256];
|
||||
|
||||
snprintf(dumpfile, sizeof(dumpfile), "%s/%s", logdir, filename);
|
||||
|
||||
if(!reqbuf)
|
||||
return;
|
||||
if(totalsize == 0)
|
||||
return;
|
||||
|
||||
do {
|
||||
dump = curlx_fopen(dumpfile, "ab");
|
||||
/* !checksrc! disable ERRNOVAR 1 */
|
||||
} while(!dump && ((error = errno) == EINTR));
|
||||
if(!dump) {
|
||||
logmsg("storerequest: Error opening file %s error (%d) %s", dumpfile,
|
||||
error, curlx_strerror(error, errbuf, sizeof(errbuf)));
|
||||
return;
|
||||
}
|
||||
|
||||
writeleft = totalsize;
|
||||
do {
|
||||
written = fwrite(&reqbuf[totalsize - writeleft], 1, writeleft, dump);
|
||||
if(got_exit_signal)
|
||||
goto storerequest_cleanup;
|
||||
if(written > 0)
|
||||
writeleft -= written;
|
||||
error = errno;
|
||||
/* !checksrc! disable ERRNOVAR 1 */
|
||||
} while((writeleft > 0) && (error == EINTR));
|
||||
|
||||
if(writeleft == 0)
|
||||
logmsg("Wrote request (%zu bytes) input to %s", totalsize, dumpfile);
|
||||
else if(writeleft > 0) {
|
||||
logmsg("Error writing file %s error (%d) %s", dumpfile,
|
||||
error, curlx_strerror(error, errbuf, sizeof(errbuf)));
|
||||
logmsg("Wrote only (%zu bytes) of (%zu bytes) request input to %s",
|
||||
totalsize - writeleft, totalsize, dumpfile);
|
||||
}
|
||||
|
||||
storerequest_cleanup:
|
||||
|
||||
if(curlx_fclose(dump))
|
||||
logmsg("Error closing file %s error (%d) %s", dumpfile,
|
||||
errno, curlx_strerror(errno, errbuf, sizeof(errbuf)));
|
||||
}
|
||||
|
||||
/* vars used to keep around previous signal handlers */
|
||||
|
||||
typedef void (*SIGHANDLER_T)(int);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue