Make get_image_name static
[deliverable/binutils-gdb.git] / gdb / debuginfod-support.c
index a7c76ab6134c22129945b4d88b076b1896ea4700..9778e2e4cfe7da46ba568b0cd6d4085665619830 100644 (file)
@@ -1,5 +1,5 @@
 /* debuginfod utilities for GDB.
-   Copyright (C) 2020 Free Software Foundation, Inc.
+   Copyright (C) 2020-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -21,6 +21,7 @@
 #include "cli/cli-style.h"
 #include "gdbsupport/scoped_fd.h"
 #include "debuginfod-support.h"
+#include "gdbsupport/gdb_optional.h"
 
 #ifndef HAVE_LIBDEBUGINFOD
 scoped_fd
@@ -46,12 +47,12 @@ debuginfod_debuginfo_query (const unsigned char *build_id,
 struct user_data
 {
   user_data (const char *desc, const char *fname)
-    : desc (desc), fname (fname), has_printed (false)
+    : desc (desc), fname (fname)
   { }
 
   const char * const desc;
   const char * const fname;
-  bool has_printed;
+  gdb::optional<ui_out::progress_meter> meter;
 };
 
 /* Deleter for a debuginfod_client.  */
@@ -80,15 +81,25 @@ progressfn (debuginfod_client *c, long cur, long total)
       return 1;
     }
 
-  if (!data->has_printed && total != 0)
+  if (total == 0)
+    return 0;
+
+  if (!data->meter.has_value ())
     {
-      /* Print this message only once.  */
-      data->has_printed = true;
-      printf_filtered ("Downloading %s %ps...\n",
-                      data->desc,
-                      styled_string (file_name_style.style (), data->fname));
+      float size_in_mb = 1.0f * total / (1024 * 1024);
+      string_file styled_filename (current_uiout->can_emit_style_escape ());
+      fprintf_styled (&styled_filename,
+                     file_name_style.style (),
+                     "%s",
+                     data->fname);
+      std::string message
+       = string_printf ("Downloading %.2f MB %s %s", size_in_mb, data->desc,
+                        styled_filename.c_str());
+      data->meter.emplace (current_uiout, message, 1);
     }
 
+  current_uiout->progress ((double)cur / (double)total);
+
   return 0;
 }
 
@@ -134,7 +145,8 @@ debuginfod_source_query (const unsigned char *build_id,
     printf_filtered (_("Download failed: %s.  Continuing without source file %ps.\n"),
                     safe_strerror (-fd.get ()),
                     styled_string (file_name_style.style (),  srcpath));
-  else
+
+  if (fd.get () >= 0)
     *destname = make_unique_xstrdup (srcpath);
 
   return fd;
@@ -169,7 +181,8 @@ debuginfod_debuginfo_query (const unsigned char *build_id,
                     safe_strerror (-fd.get ()),
                     styled_string (file_name_style.style (),  filename));
 
-  destname->reset (dname);
+  if (fd.get () >= 0)
+    destname->reset (dname);
 
   return fd;
 }
This page took 0.024626 seconds and 4 git commands to generate.