1 /* based on busybox code */
16 struct mntent
*find_mount_point(const char *name
, const char *table
)
21 struct mntent
*mountEntry
;
23 if (stat(name
, &s
) != 0)
26 if ((s
.st_mode
& S_IFMT
) == S_IFBLK
)
27 mountDevice
= s
.st_rdev
;
29 mountDevice
= s
.st_dev
;
32 mountTable
= setmntent(table
? table
: "/etc/mtab", "r");
36 while ((mountEntry
= getmntent(mountTable
)) != 0) {
37 if (strcmp(name
, mountEntry
->mnt_dir
) == 0
38 || strcmp(name
, mountEntry
->mnt_fsname
) == 0
39 ) { /* String match. */
42 if (stat(mountEntry
->mnt_fsname
, &s
) == 0 && s
.st_rdev
== mountDevice
) /* Match the device. */
44 if (stat(mountEntry
->mnt_dir
, &s
) == 0 && s
.st_dev
== mountDevice
) /* Match the directory's mount point. */
47 endmntent(mountTable
);
51 static unsigned long kscale(unsigned long b
, unsigned long bs
)
53 return (b
* (unsigned long long) bs
+ 1024/2) / 1024;
58 unsigned long blocks_used
;
59 unsigned blocks_percent_used
;
61 struct mntent
*mount_entry
= 0;
63 /* default display is kilobytes */
64 const char *disp_units_hdr
= "1k-blocks";
66 printf("Filesystem %-15sUsed Available Use%% Mounted on\n",
70 mount_table
= setmntent("/etc/mtab", "r");
74 const char *mount_point
;
77 mount_entry
= getmntent(mount_table
);
79 endmntent(mount_table
);
84 device
= mount_entry
->mnt_fsname
;
85 mount_point
= mount_entry
->mnt_dir
;
87 if (statfs(mount_point
, &s
) != 0) {
92 if ((s
.f_blocks
> 0) || !mount_table
)
94 blocks_used
= s
.f_blocks
- s
.f_bfree
;
95 blocks_percent_used
= 0;
96 if (blocks_used
+ s
.f_bavail
)
98 blocks_percent_used
= (blocks_used
* 100ULL + (blocks_used
+ s
.f_bavail
) / 2 )
99 / (blocks_used
+ s
.f_bavail
);
101 lua_pushinteger(L
, ++cnt
);
104 add_table_entry_int(L
, "blocks", kscale(s
.f_blocks
, s
.f_bsize
));
105 add_table_entry_int(L
, "used", kscale(s
.f_blocks
-s
.f_bfree
, s
.f_bsize
));
106 add_table_entry_int(L
, "avail", kscale(s
.f_bavail
, s
.f_bsize
));
107 add_table_entry_int(L
, "percent", blocks_percent_used
);
108 add_table_entry(L
, "device", device
);
109 add_table_entry(L
, "mountpoint", mount_point
);
110 add_table_entry_int(L
, "blocksize", s
.f_bsize
);
113 /*printf("\n%-20s" + 1, device)
114 printf(" %9lu %9lu %9lu %3u%% %s\n",
115 kscale(s.f_blocks, s.f_bsize),
116 kscale(s.f_blocks-s.f_bfree, s.f_bsize),
117 kscale(s.f_bavail, s.f_bsize),
118 blocks_percent_used, mount_point);*/