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);*/