- }
- if (usi->count)
- usi->count--;
- return 1;
-}
-
-static void print_user_stats(void)
-{
- struct user_info *ui;
-
- FOR_EACH_USER(ui) {
- struct user_stats_info usi = {
- .count = 10,
- .ui = ui
- };
- if (!ui->table)
- continue;
- usi.flags = USF_PRINT_DIRNAME | USF_PRINT_BYTES | USF_COMPUTE_SUMMARY;
- printf("************************************************ uid %u\n",
- (unsigned) ui->uid);
- if (!ui->table)
- continue;
- printf("----------------- Largest dirs -------------------\n");
- osl_rbtree_loop_reverse(ui->table, UT_BYTES, &usi,
- user_stats_loop_function);
- printf("---------- dirs containing most files ------------\n");
- usi.count = 10;
- usi.flags = USF_PRINT_DIRNAME | USF_PRINT_FILES;
- osl_rbtree_loop_reverse(ui->table, UT_FILES, &usi,
- user_stats_loop_function);
- }
-}
-
-static int print_statistics(void)
-{
- int ret;
- struct global_stats_info gsi = {
- .count = 10,
- .flags = GSF_PRINT_DIRNAME | GSF_PRINT_BYTES | GSF_COMPUTE_SUMMARY
- };
-
- printf("----------------- Largest dirs -------------------\n");
- ret = osl_rbtree_loop_reverse(dir_table, DT_BYTES, &gsi,
- global_stats_loop_function);
- if (ret < 0 && ret != -E_LOOP_COMPLETE)
- return ret;
- gsi.count = 10;
-
- gsi.flags = GSF_PRINT_DIRNAME | GSF_PRINT_FILES;
- printf("---------- dirs containing most files ------------\n");
- ret = osl_rbtree_loop_reverse(dir_table, DT_FILES, &gsi,
- global_stats_loop_function);
- if (ret < 0 && ret != -E_LOOP_COMPLETE)
- return ret;
-
- printf("------------------ Global summary (dirs/files/bytes)\n"
- "%llu\t%llu\t%llu\n",
- (long long unsigned)num_dirs, (long long unsigned)num_files,
- (long long unsigned)num_bytes);
- print_user_stats();
- print_id_stats();
- return 1;
-}
-
-static int write_uid_list(void)
-{
- char *buf;
- uint32_t count = 0;
- struct user_info *ui;
- size_t size = num_uids * sizeof(uint32_t);
- int ret;
-
- if (!num_uids)
- return 0;
- buf = para_malloc(size);
- FOR_EACH_USER(ui) {
- if (!ui->table)
- continue;
- write_u32(buf + count++ * sizeof(uint32_t), ui->uid);
- }
- ret = para_write_file(UID_LIST, buf, size);
- free(buf);
- return ret;
-}
-
-static int open_dir_table(void)
-{
- return osl_open_table(&dir_table_desc, &dir_table);
-}
-
-static void close_dir_table(void)
-{
- int ret;