static int dir_mdu(direntry_t *entry, MainParam_t *mp) { Arg_t *parentArg = (Arg_t *) (mp->arg); Arg_t arg; int ret; arg = *parentArg; arg.mp.arg = (void *) &arg; arg.parent = parentArg; arg.inDir = 1; /* account for the space occupied by the directory itself */ if(!isRootDir(entry->Dir)) { arg.blocks = countBlocks(entry->Dir, getStart(entry->Dir, &entry->dir)); } else { arg.blocks = 0; } /* recursion */ ret = mp->loop(mp->File, &arg.mp, "*"); if(!arg.summary || !parentArg->inDir) { printf("%-7d ", arg.blocks); fprintPwd(stdout, entry,0); fputc('\n', stdout); } arg.parent->blocks += arg.blocks; return ret; }
static int flush_file(Stream_t *Stream) { DeclareThis(File_t); direntry_t *entry = &This->direntry; if(isRootDir(Stream)) { return 0; } if(This->FirstAbsCluNr != getStart(entry->Dir, &entry->dir)) { set_word(entry->dir.start, This->FirstAbsCluNr & 0xffff); set_word(entry->dir.startHi, This->FirstAbsCluNr >> 16); dir_write(entry); }