diff options
author | Mole Shang <[email protected]> | 2023-08-08 14:36:34 +0800 |
---|---|---|
committer | Mole Shang <[email protected]> | 2023-08-08 14:37:43 +0800 |
commit | 4eada1b4a5f4bb96b13a49791e97fb59f5cc2936 (patch) | |
tree | 77a5ac8e0d839955b3a35bcba8922bb152116785 | |
parent | bd141e0ac144c1ec2494d5dceeb6ca013f0da58f (diff) | |
download | hinata-4eada1b4a5f4bb96b13a49791e97fb59f5cc2936.tar.gz hinata-4eada1b4a5f4bb96b13a49791e97fb59f5cc2936.tar.bz2 hinata-4eada1b4a5f4bb96b13a49791e97fb59f5cc2936.zip |
process_url: change strings to be dynamic allocated
-rw-r--r-- | src/process_url.c | 11 | ||||
-rw-r--r-- | src/process_url.h | 2 |
2 files changed, 7 insertions, 6 deletions
diff --git a/src/process_url.c b/src/process_url.c index 1bb411a..30b7f71 100644 --- a/src/process_url.c +++ b/src/process_url.c @@ -212,11 +212,12 @@ static int parse_url(const char *URL, const char *outdir, char *fn) { for (unsigned short i = 0; i < results.n; i++) { if (results.str[i]) { DEBUG_PRINT("[%d] %s\n", i, results.str[i]); + curl_c->outfn = malloc(strlen(outdir) + strlen(results.str[i]) + 2); gen_fullpathfn(curl_c->outfn, outdir, results.str[i]); } } free_str_array(&results); - if (curl_c->outfn[0] == '\0') { + if (!curl_c->outfn || curl_c->outfn[0] == '\0') { // sprintf(curl_c->outfn, "%s%c%s", outdir, SPLITTER, // "test"); LOG("libcurl", @@ -227,9 +228,8 @@ static int parse_url(const char *URL, const char *outdir, char *fn) { return 1; } } else { - sprintf(curl_c->outfn, "%s%s%s", outdir, - outdir[strlen(outdir) - 1] == SPLITTER_CHAR ? "" : SPLITTER_STR, - fn); + curl_c->outfn = malloc(strlen(outdir) + strlen(fn) + 2); + gen_fullpathfn(curl_c->outfn, outdir, fn); free_and_nullify(fn); } DEBUG_PRINT("File will be saved as: %s\n", curl_c->outfn); @@ -365,11 +365,13 @@ static int merge_and_cleanup(curl_conf_t *curl_c) { append_log("Error deleting file %s\n", curl_c->outfn); } } + append_log("Download %s finished.\n", curl_conf->outfn); // Reset stat corrupted = false; curl_c->success_thrd = 0; curl_c->total_thrd = 0; free_and_nullify(curl_c->URL); + free_and_nullify(curl_c->outfn); return 0; } @@ -505,7 +507,6 @@ void poll_status(status_t *stat) { thrd_join(tid[i], &r); } merge_and_cleanup(curl_conf); - append_log("Download %s finished.\n", curl_conf->outfn); free_and_nullify(curl_conf); // Perform the callback if (is_empty_queue(&dl_queue) && callback_g) { diff --git a/src/process_url.h b/src/process_url.h index e33d8cf..3edfdd9 100644 --- a/src/process_url.h +++ b/src/process_url.h @@ -22,7 +22,7 @@ typedef struct curl_conf { unsigned char success_thrd; unsigned char total_thrd; char *URL; - char outfn[USHRT_MAX]; + char *outfn; str_array_t partfn; FILE *fplist[MAX_THREAD]; } curl_conf_t; |