wswietse@eutrc3.UUCP (Wietse Venema) (02/18/88)
The following patch avoids a division by zero error when mount points have long names as in /usr/users(/dev/dsk/0s6): xxxx blocks yyyy i-nodes The patch also solves a problem for 16-bit systems caused by the use of plain integers for block and inode counts instead of long ones. Wietse Venema *** bdf.c.orig Wed Feb 17 22:46:57 1988 --- bdf.c Wed Feb 17 23:07:38 1988 *************** *** 57,63 **** void output_part1(), output_part2(), output_part3(); void header_part1(), header_part2(), header_part3(); char filesys[50], device[50]; ! int fblocks, finodes, tblocks, tinodes; FILE *df; if (!(df = popen(df_command, "r"))) { --- 57,63 ---- void output_part1(), output_part2(), output_part3(); void header_part1(), header_part2(), header_part3(); char filesys[50], device[50]; ! long int fblocks, finodes, tblocks, tinodes; FILE *df; if (!(df = popen(df_command, "r"))) { *************** *** 70,78 **** if (iflag) header_part2(); header_part3(); ! while (EOF != fscanf(df, "%s (%s ): %d blocks %d i-nodes", filesys, device, &fblocks, &finodes)) { ! if (EOF == fscanf(df, " total: %d blocks %d i-nodes", &tblocks, &tinodes)) { perror("fscanf#2"); exit(2); --- 70,78 ---- if (iflag) header_part2(); header_part3(); ! while (EOF != fscanf(df, " %[^( ] (%[^) ] ): %ld blocks %ld i-nodes", filesys, device, &fblocks, &finodes)) { ! if (EOF == fscanf(df, " total: %ld blocks %ld i-nodes", &tblocks, &tinodes)) { perror("fscanf#2"); exit(2); *************** *** 106,128 **** static void output_part1(device, free_kb, total_kb) char *device; ! int free_kb, total_kb; { ! int used_kb = total_kb - free_kb; int capacity = (100 * used_kb) / total_kb; ! printf("%12s %7d %7d %7d %3d%% ", device, total_kb, used_kb, free_kb, capacity); } static void output_part2(free_inodes, total_inodes) ! int free_inodes, total_inodes; { ! int used_inodes = total_inodes - free_inodes; int percent_used = (100 * used_inodes) / total_inodes; ! printf("%6d %6d %3d%% ", used_inodes, free_inodes, percent_used); } static void --- 106,128 ---- static void output_part1(device, free_kb, total_kb) char *device; ! long int free_kb, total_kb; { ! long int used_kb = total_kb - free_kb; int capacity = (100 * used_kb) / total_kb; ! printf("%12s %7ld %7ld %7ld %3d%% ", device, total_kb, used_kb, free_kb, capacity); } static void output_part2(free_inodes, total_inodes) ! long int free_inodes, total_inodes; { ! long int used_inodes = total_inodes - free_inodes; int percent_used = (100 * used_inodes) / total_inodes; ! printf("%6ld %6ld %3d%% ", used_inodes, free_inodes, percent_used); } static void -- uucp: mcvax!eutrc3!wswietse | Eindhoven University of Technology bitnet: wswietse@heithe5 | Dept. of Mathematics and Computer Science surf: tuerc5::wswietse | Eindhoven, The Netherlands.