LCOV - code coverage report
Current view: top level - gio/tests - gio-du.c (source / functions) Coverage Total Hit
Test: unnamed Lines: 0.0 % 65 0
Test Date: 2024-11-26 05:23:01 Functions: 0.0 % 4 0
Branches: - 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 2.0-1