static RmOff rm_tm_calc_file_size(RmDirectory *directory) { RmOff acc = 0; for(GList *iter = directory->known_files.head; iter; iter = iter->next) { RmFile *file = iter->data; acc += file->file_size; } /* Recursively propagate to children */ for(GList *iter = directory->children.head; iter; iter = iter->next) { acc += rm_tm_calc_file_size((RmDirectory *)iter->data); } return acc; }
static void rm_directory_to_file(RmTreeMerger *merger, const RmDirectory *self, RmFile *file) { memset(file, 0, sizeof(RmFile)); /* Need to set session first, since set_path expects that */ file->session = merger->session; rm_file_set_path(file, self->dirname); file->lint_type = RM_LINT_TYPE_DUPE_DIR_CANDIDATE; file->digest = self->digest; /* Set these to invalid for now */ file->mtime = self->metadata.dir_mtime; file->inode = self->metadata.dir_inode; file->dev = self->metadata.dir_dev; file->depth = rm_util_path_depth(self->dirname); /* Recursively calculate the file size */ file->file_size = rm_tm_calc_file_size(self); file->is_prefd = (self->prefd_files >= self->dupe_count); }
static RmFile *rm_directory_as_file(RmTreeMerger *merger, RmDirectory *self) { /* Masquerades a RmDirectory as RmFile for purpose of output */ RmFile *file = g_malloc0(sizeof(RmFile)); /* Need to set session first, since set_path expects that */ file->session = merger->session; rm_file_set_path(file, self->dirname, strlen(self->dirname)); file->lint_type = RM_LINT_TYPE_DUPE_DIR_CANDIDATE; file->digest = self->digest; /* Set these to invalid for now */ file->mtime = self->metadata.dir_mtime; file->inode = self->metadata.dir_inode; file->dev = self->metadata.dir_dev; /* Recursively calculate the file size */ file->file_size = rm_tm_calc_file_size(self); file->is_prefd = (self->prefd_files >= self->dupe_count); return file; }