]> Nishi Git Mirror - odl.git/commitdiff
1つ以上のファイルがダウンロードに失敗する場合、正しく状況を知らせる様に
author諏訪子 <suwako@076.moe>
Sun, 12 May 2024 04:35:48 +0000 (13:35 +0900)
committer諏訪子 <suwako@076.moe>
Sun, 12 May 2024 04:35:48 +0000 (13:35 +0900)
CHANGELOG.md
main.c

index bbc19088d6253cafcd0fa0ade0be5774bb96f51e..349752d9094050fd9ceb4e8abe87bcaab341d35f 100644 (file)
@@ -4,6 +4,7 @@
 * NetBSDは「/usr/pkg」→「/usr/local」
 * HTTPステータス200だけの場合をダウンロードする様に
 * ダウンロードに失敗する場合、ファイルを消す
+* 1つ以上のファイルがダウンロードに失敗する場合、正しく状況を知らせる様に
 
 # 0.2.0
 * ファイル名はパラメートルを付いたら、ファイル名は拡張子に
diff --git a/main.c b/main.c
index ee4b234efa1df50a800e90aeff31ea30068c4c9c..107522f78c353354af698ffa750576aa1425ddc4 100644 (file)
--- a/main.c
+++ b/main.c
@@ -16,6 +16,8 @@ int output_flag = 0;
 int version_flag = 0;
 int already_flag = 0;
 int err_flag = 0;
+int dlstat = 0;
+int onedlsuc = 0;
 
 char* get_filename(const char* url) {
   char* fn_start = strrchr(url, '/');
@@ -157,14 +159,12 @@ int downloader(CURL* curl, char* filename, const char* url) {
   if (res != CURLE_OK) {
     unlink(filename);
     fprintf(stderr, "\nダウンロードに失敗: %s\n", curl_easy_strerror(res));
-    curl_easy_cleanup(curl);
     return -1;
   }
 
   if (res == CURLE_ABORTED_BY_CALLBACK || httpcode != 200) {
     unlink(filename);
-    fprintf(stderr, "\nダウンロードに失敗: HTTP CODE: %ld\n", httpcode);
-    curl_easy_cleanup(curl);
+    fprintf(stderr, "\n%sをダウンロードに失敗: HTTP CODE: %ld\n", filename, httpcode);
     return -1;
   }
 
@@ -212,12 +212,16 @@ int main(int argc, char* argv[]) {
 
     filename = argv[optind];
     const char* url = argv[optind+1];
-    downloader(curl, filename, url);
+    dlstat = downloader(curl, filename, url);
+    if (dlstat == 0) onedlsuc = 1;
 
     curl_easy_cleanup(curl);
-    printf("\nダウンロードに完了しました。\n");
+    if (onedlsuc == 1) {
+      printf("\nダウンロードに完了しました。\n");
+      return 0;
+    }
 
-    return 0;
+    return 1;
   }
 
   // 複数ファイル名可能
@@ -229,11 +233,15 @@ int main(int argc, char* argv[]) {
       continue;
     }
 
-    downloader(curl, filename, url);
+    dlstat = downloader(curl, filename, url);
+    if (dlstat == 0) onedlsuc = 1;
   }
 
   curl_easy_cleanup(curl);
-  printf("\nダウンロードに完了しました。\n");
+  if (onedlsuc == 1) {
+    printf("\nダウンロードに完了しました。\n");
+    return 0;
+  }
 
-  return 0;
+  return 1;
 }