LCOV - code coverage report
Current view: top level - glib/gio/tests - gio-du.c (source / functions) Hit Total Coverage
Test: unnamed Lines: 0 65 0.0 %
Date: 2024-04-23 05:16:05 Functions: 0 4 0.0 %
Branches: 0 34 0.0 %

           Branch data     Line data    Source code
       1                 :            : #include <gio/gio.h>
       2                 :            : #include <locale.h>
       3                 :            : 
       4                 :            : static gboolean option_use_async;
       5                 :            : static gint     option_format_size;
       6                 :            : 
       7                 :            : static gint     outstanding_asyncs;
       8                 :            : 
       9                 :            : static void
      10                 :          0 : print_result (const gchar *filename,
      11                 :            :               guint64      disk_usage,
      12                 :            :               guint64      num_dirs,
      13                 :            :               guint64      num_files,
      14                 :            :               GError      *error,
      15                 :            :               gchar        nl)
      16                 :            : {
      17         [ #  # ]:          0 :   if (!error)
      18                 :            :     {
      19         [ #  # ]:          0 :       if (option_format_size)
      20                 :            :         {
      21                 :            :           GFormatSizeFlags format_flags;
      22                 :            :           gchar *str;
      23                 :            : 
      24                 :          0 :           format_flags = (option_format_size > 1) ? G_FORMAT_SIZE_LONG_FORMAT : G_FORMAT_SIZE_DEFAULT;
      25                 :          0 :           str = g_format_size_full (disk_usage, format_flags);
      26                 :          0 :           g_print ("%s: %s (%"G_GUINT64_FORMAT" dirs, %"G_GUINT64_FORMAT" files)%c",
      27                 :            :                    filename, str, num_dirs, num_files, nl);
      28                 :          0 :           g_free (str);
      29                 :            :         }
      30                 :            :       else
      31                 :          0 :         g_print ("%s: %"G_GUINT64_FORMAT" (%"G_GUINT64_FORMAT" dirs, %"G_GUINT64_FORMAT" files)%c",
      32                 :            :                  filename, disk_usage, num_dirs, num_files, nl);
      33                 :            :     }
      34                 :            :   else
      35                 :            :     {
      36                 :          0 :       g_printerr ("%s: %s\n", filename, error->message);
      37                 :          0 :       g_error_free (error);
      38                 :            :     }
      39                 :          0 : }
      40                 :            : 
      41                 :            : static void
      42                 :          0 : async_ready_func (GObject      *source,
      43                 :            :                   GAsyncResult *result,
      44                 :            :                   gpointer      user_data)
      45                 :            : {
      46                 :          0 :   gchar *filename = user_data;
      47                 :          0 :   GError *error = NULL;
      48                 :            :   guint64 disk_usage;
      49                 :            :   guint64 num_dirs;
      50                 :            :   guint64 num_files;
      51                 :            : 
      52                 :          0 :   g_file_measure_disk_usage_finish (G_FILE (source), result, &disk_usage, &num_dirs, &num_files, &error);
      53                 :          0 :   print_result (filename, disk_usage, num_dirs, num_files, error, '\n');
      54                 :          0 :   outstanding_asyncs--;
      55                 :          0 :   g_free (filename);
      56                 :          0 : }
      57                 :            : 
      58                 :            : static void
      59                 :          0 : report_progress (gboolean reporting,
      60                 :            :                  guint64  disk_usage,
      61                 :            :                  guint64  num_dirs,
      62                 :            :                  guint64  num_files,
      63                 :            :                  gpointer user_data)
      64                 :            : {
      65                 :          0 :   const gchar *filename = user_data;
      66                 :            : 
      67         [ #  # ]:          0 :   if (!reporting)
      68                 :          0 :     g_printerr ("%s: warning: does not support progress reporting\n", filename);
      69                 :            : 
      70                 :          0 :   print_result (filename, disk_usage, num_dirs, num_files, NULL, '\r');
      71                 :          0 : }
      72                 :            : 
      73                 :            : int
      74                 :          0 : main (int argc, char **argv)
      75                 :            : {
      76                 :          0 :   GFileMeasureProgressCallback progress = NULL;
      77                 :          0 :   GFileMeasureFlags flags = 0;
      78                 :            :   gint i;
      79                 :            : 
      80                 :            : #ifdef G_OS_WIN32
      81                 :            :   argv = g_win32_get_command_line ();
      82                 :            : #endif
      83                 :            : 
      84                 :          0 :   setlocale (LC_ALL, "");
      85                 :            : 
      86                 :            : 
      87                 :            : 
      88   [ #  #  #  # ]:          0 :   for (i = 1; argv[i] && argv[i][0] == '-'; i++)
      89                 :            :     {
      90         [ #  # ]:          0 :       if (g_str_equal (argv[i], "--"))
      91                 :          0 :         break;
      92                 :            : 
      93         [ #  # ]:          0 :       if (g_str_equal (argv[i], "--help"))
      94                 :            :         {
      95                 :          0 :           g_print ("usage: du [--progress] [--async] [-x] [-h] [-h] [--apparent-size] [--any-error] [--] files...\n");
      96                 :            : #ifdef G_OS_WIN32
      97                 :            :           g_strfreev (argv);
      98                 :            : #endif
      99                 :          0 :           return 0;
     100                 :            :         }
     101         [ #  # ]:          0 :       else if (g_str_equal (argv[i], "-x"))
     102                 :          0 :         flags |= G_FILE_MEASURE_NO_XDEV;
     103         [ #  # ]:          0 :       else if (g_str_equal (argv[i], "-h"))
     104                 :          0 :         option_format_size++;
     105         [ #  # ]:          0 :       else if (g_str_equal (argv[i], "--apparent-size"))
     106                 :          0 :         flags |= G_FILE_MEASURE_APPARENT_SIZE;
     107         [ #  # ]:          0 :       else if (g_str_equal (argv[i], "--any-error"))
     108                 :          0 :         flags |= G_FILE_MEASURE_REPORT_ANY_ERROR;
     109         [ #  # ]:          0 :       else if (g_str_equal (argv[i], "--async"))
     110                 :          0 :         option_use_async = TRUE;
     111         [ #  # ]:          0 :       else if (g_str_equal (argv[i], "--progress"))
     112                 :          0 :         progress = report_progress;
     113                 :            :       else
     114                 :            :         {
     115                 :          0 :           g_printerr ("unrecognized flag %s\n", argv[i]);
     116                 :            :         }
     117                 :            :     }
     118                 :            : 
     119         [ #  # ]:          0 :   if (!argv[i])
     120                 :            :     {
     121                 :          0 :       g_printerr ("usage: du [--progress] [--async] [-x] [-h] [-h] [--apparent-size] [--any-error] [--] files...\n");
     122                 :            : #ifdef G_OS_WIN32
     123                 :            :       g_strfreev (argv);
     124                 :            : #endif
     125                 :          0 :       return 1;
     126                 :            :     }
     127                 :            : 
     128         [ #  # ]:          0 :   while (argv[i])
     129                 :            :   {
     130                 :          0 :     GFile *file = g_file_new_for_commandline_arg (argv[i]);
     131                 :            : 
     132         [ #  # ]:          0 :     if (option_use_async)
     133                 :            :     {
     134                 :          0 :       g_file_measure_disk_usage_async (file, flags, G_PRIORITY_DEFAULT, NULL,
     135                 :          0 :                                        progress, argv[i], async_ready_func, argv[i]);
     136                 :          0 :       outstanding_asyncs++;
     137                 :            :     }
     138                 :            :     else
     139                 :            :     {
     140                 :          0 :       GError *error = NULL;
     141                 :            :       guint64 disk_usage;
     142                 :            :       guint64 num_dirs;
     143                 :            :       guint64 num_files;
     144                 :            : 
     145                 :          0 :       g_file_measure_disk_usage (file, flags, NULL, progress, argv[i],
     146                 :            :                                  &disk_usage, &num_dirs, &num_files, &error);
     147                 :          0 :       print_result (argv[i], disk_usage, num_dirs, num_files, error, '\n');
     148                 :            :     }
     149                 :            : 
     150                 :          0 :     g_object_unref (file);
     151                 :            : 
     152                 :          0 :     i++;
     153                 :            :   }
     154                 :            : 
     155         [ #  # ]:          0 :   while (outstanding_asyncs)
     156                 :          0 :     g_main_context_iteration (NULL, TRUE);
     157                 :            : 
     158                 :            : #ifdef G_OS_WIN32
     159                 :            :   g_strfreev (argv);
     160                 :            : #endif
     161                 :            : 
     162                 :          0 :   return 0;
     163                 :            : }

Generated by: LCOV version 1.14