X-Git-Url: http://git.jankratochvil.net/?p=ntfsprogs.git;a=blobdiff_plain;f=ntfsprogs%2Fntfscluster.c;h=a80206a768670e372999923f00089cacd19f8889;hp=8dd4d9210914054a9c079c36ed793b14c8468adf;hb=refs%2Fheads%2Fmaster;hpb=4abffda2cd1cad459fc0a61d79e8cd234e207b17 diff --git a/ntfsprogs/ntfscluster.c b/ntfsprogs/ntfscluster.c index 8dd4d92..a80206a 100644 --- a/ntfsprogs/ntfscluster.c +++ b/ntfsprogs/ntfscluster.c @@ -67,7 +67,7 @@ void version (void) void usage (void) { printf ("\nUsage: %s [options] device\n" - " -i --info Print information about the volume\n" + " -i --info Print information about the volume (default)\n" " -c range --cluster range Look for objects in this range of clusters\n" " -s range --sector range Look for objects in this range of sectors\n" /* " -l --last Find the last file on the volume\n" */ @@ -204,7 +204,8 @@ int parse_options (int argc, char **argv) } if (opts.action == act_error) { - Eprintf ("You may only specify one action: --info, --cluster, --sector or --last.\n"); + //Eprintf ("You may only specify one action: --info, --cluster, --sector or --last.\n"); + Eprintf ("You may only specify one action: --info, --cluster or --sector.\n"); err++; } else if (opts.range_begin > opts.range_end) { Eprintf ("The range must be in ascending order.\n"); @@ -220,6 +221,79 @@ int parse_options (int argc, char **argv) return (!err && !help && !ver); } + +/** + * free_space - Calculate the amount of space which isn't in use + */ +u64 free_space (ntfs_volume *vol) +{ + return 0; +} + +/** + * user_space - Calculate the amount of space of the user's files + */ +u64 user_space (ntfs_volume *vol) +{ + return 0; +} + +/** + * meta_space - Calculate the amount of space used by the filesystem structures + */ +u64 meta_space (ntfs_volume *vol) +{ + return 0; +} + +/** + * info - Display information about the volume + */ +int info (ntfs_volume *vol) +{ + u64 a, b, c, d, e, f, g, h, i, j, k, l, m, n; + int cps; + u64 fs, us, ms; + + cps = vol->cluster_size_bits - vol->sector_size_bits; + fs = free_space (vol); + ms = meta_space (vol); + us = user_space (vol); + + a = vol->sector_size; + b = vol->cluster_size; + c = 1 << cps; + d = vol->nr_clusters >> cps; + e = vol->nr_clusters; + f = fs / a; + g = fs / b; + h = fs * 100 / a / d; + i = us / a; + j = us / b; + k = us * 100 / a / d; + l = ms / a; + m = ms / b; + n = ms * 100 / a / d; + + printf ("bytes per sector : %lld\n", a); + printf ("bytes per cluster : %lld\n", b); + printf ("sectors per cluster : %lld\n", c); + printf ("sectors per volume : %lld\n", d); + printf ("clusters per volume : %lld\n", e); + printf ("sectors of free space : %lld\n", f); + printf ("clusters of free space : %lld\n", g); + printf ("percentage free space : %lld\n", h); + printf ("sectors of user data : %lld\n", i); + printf ("clusters of user data : %lld\n", j); + printf ("percentage user data : %lld\n", k); + printf ("sectors of metadata : %lld\n", l); + printf ("clusters of metadata : %lld\n", m); + printf ("percentage metadata : %lld\n", n); + + return 0; +} + + /** * cluster_find */ @@ -247,10 +321,11 @@ int cluster_find (ntfs_volume *vol, LCN s_begin, LCN s_end) if (!in_use) { if (s_begin == s_end) - printf ("clusters isn't in use\n"); + printf ("cluster isn't in use\n"); else printf ("clusters aren't in use\n"); - return 0; + result = 0; + goto free; } // first, is the cluster in use in $Bitmap? @@ -260,7 +335,7 @@ int cluster_find (ntfs_volume *vol, LCN s_begin, LCN s_end) ntfs_attr_search_ctx *ctx; if (!utils_mftrec_in_use (vol, i)) { - //printf ("%d skipped\n", i); + //printf ("%lld skipped\n", i); continue; } @@ -325,9 +400,8 @@ int cluster_find (ntfs_volume *vol, LCN s_begin, LCN s_end) printf ("inode %lld %s", i, buffer); utils_attr_get_name (vol, ctx->attr, buffer, sizeof (buffer)); printf ("%c%s\n", PATH_SEP, buffer); - //printf ("\n"); } - break; + break; // XXX if verbose, we should list all matching runs } } @@ -343,6 +417,7 @@ free: return result; } + /** * main - Begin here * @@ -372,8 +447,8 @@ int main (int argc, char *argv[]) else Qprintf ("Searching for sector range %lld-%lld\n", opts.range_begin, opts.range_end); /* Convert to clusters */ - opts.range_begin <<= (vol->cluster_size_bits - vol->sector_size_bits); - opts.range_end <<= (vol->cluster_size_bits - vol->sector_size_bits); + opts.range_begin >>= (vol->cluster_size_bits - vol->sector_size_bits); + opts.range_end >>= (vol->cluster_size_bits - vol->sector_size_bits); result = cluster_find (vol, opts.range_begin, opts.range_end); break; case act_cluster: @@ -390,7 +465,7 @@ int main (int argc, char *argv[]) */ case act_info: default: - printf ("Info\n"); + info (vol); break; }