altsvc: use Curl_fopen()

This commit is contained in:
Daniel Stenberg 2022-05-25 10:09:53 +02:00
parent 20f9dd6bae
commit fab970a5d1
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2

View File

@ -36,7 +36,7 @@
#include "parsedate.h" #include "parsedate.h"
#include "sendf.h" #include "sendf.h"
#include "warnless.h" #include "warnless.h"
#include "rand.h" #include "fopen.h"
#include "rename.h" #include "rename.h"
/* The last 3 #include files should be in this order */ /* The last 3 #include files should be in this order */
@ -337,8 +337,7 @@ CURLcode Curl_altsvc_save(struct Curl_easy *data,
struct Curl_llist_element *n; struct Curl_llist_element *n;
CURLcode result = CURLE_OK; CURLcode result = CURLE_OK;
FILE *out; FILE *out;
char *tempstore; char *tempstore = NULL;
unsigned char randsuffix[9];
if(!altsvc) if(!altsvc)
/* no cache activated */ /* no cache activated */
@ -352,17 +351,8 @@ CURLcode Curl_altsvc_save(struct Curl_easy *data,
/* marked as read-only, no file or zero length file name */ /* marked as read-only, no file or zero length file name */
return CURLE_OK; return CURLE_OK;
if(Curl_rand_hex(data, randsuffix, sizeof(randsuffix))) result = Curl_fopen(data, file, &out, &tempstore);
return CURLE_FAILED_INIT; if(!result) {
tempstore = aprintf("%s.%s.tmp", file, randsuffix);
if(!tempstore)
return CURLE_OUT_OF_MEMORY;
out = fopen(tempstore, FOPEN_WRITETEXT);
if(!out)
result = CURLE_WRITE_ERROR;
else {
fputs("# Your alt-svc cache. https://curl.se/docs/alt-svc.html\n" fputs("# Your alt-svc cache. https://curl.se/docs/alt-svc.html\n"
"# This file was generated by libcurl! Edit at your own risk.\n", "# This file was generated by libcurl! Edit at your own risk.\n",
out); out);
@ -374,10 +364,10 @@ CURLcode Curl_altsvc_save(struct Curl_easy *data,
break; break;
} }
fclose(out); fclose(out);
if(!result && Curl_rename(tempstore, file)) if(!result && tempstore && Curl_rename(tempstore, file))
result = CURLE_WRITE_ERROR; result = CURLE_WRITE_ERROR;
if(result) if(result && tempstore)
unlink(tempstore); unlink(tempstore);
} }
free(tempstore); free(tempstore);