-
-static int user_stats_loop_function(struct osl_row *row, void *data)
-{
- struct user_stats_info *usi = data;
- struct osl_object obj;
- int ret, summary = usi->flags & USF_COMPUTE_SUMMARY;
- char formated_value[FORMATED_VALUE_SIZE];
-
- check_signals();
- if (!usi->count && !summary) {
- ret = -E_LOOP_COMPLETE;
- goto err;
- }
- if (summary || (usi->count && (usi->flags & USF_PRINT_FILES))) {
- uint64_t files;
- ret = osl(osl_get_object(usi->ui->table, row, UT_FILES, &obj));
- if (ret < 0)
- goto err;
- files = *(uint64_t *)obj.data;
- if (usi->count && (usi->flags & USF_PRINT_FILES)) {
- format_count_value(select_conf.count_unit_arg, files,
- select_conf.count_unit_arg == count_unit_arg_h,
- formated_value);
- ret = output("\t%s%s", formated_value,
- (usi->flags & (USF_PRINT_BYTES | USF_PRINT_DIRNAME))?
- "\t" : "\n");
- if (ret < 0)
- goto err;
- }
- if (summary)
- usi->ui->files += files;
- }
- if (summary || (usi->count && (usi->flags & USF_PRINT_BYTES))) {
- uint64_t bytes;
- ret = osl(osl_get_object(usi->ui->table, row, UT_BYTES, &obj));
- if (ret < 0)
- goto err;
- bytes = *(uint64_t *)obj.data;
- if (usi->count && (usi->flags & USF_PRINT_BYTES)) {
- format_size_value(select_conf.size_unit_arg, bytes,
- select_conf.size_unit_arg == size_unit_arg_h,
- formated_value);
- ret = output("%s%s%s",
- (usi->flags & USF_PRINT_FILES)? "" : "\t",
- formated_value,
- usi->flags & USF_PRINT_DIRNAME? "\t" : "\n"
- );
- if (ret < 0)
- goto err;
- }
- if (summary) {
- usi->ui->bytes += bytes;
- usi->ui->dirs++;
- }
-
- }
- if (usi->count && (usi->flags & USF_PRINT_DIRNAME)) {
- char *dirname;
- ret = osl(osl_get_object(usi->ui->table, row, UT_DIR_NUM, &obj));
- if (ret < 0)
- goto err;
- ret = get_dir_name_by_number((uint64_t *)obj.data, &dirname);
- if (ret < 0)
- goto err;
- ret = output("%s%s\n",
- (usi->flags & (USF_PRINT_BYTES | USF_PRINT_FILES))? "" : "\t",
- dirname);
- free(dirname);
- if (ret < 0)
- goto err;
- }
- if (usi->count > 0)
- usi->count--;
- return 1;
-err:
- usi->ret = ret;
- usi->osl_errno = (ret == -E_OSL)? osl_errno : 0;
- return -1;
-}
-