/* -*- Mode: Linux-C -*
 *
 * Reads the super block of an LFS file system and prints out what it
 * finds.
 */

#include <stdio.h>
#include <fcntl.h>
#include <sys/types.h>
#include <linux/lfs_fs.h>

int
main(int argc, char* argv[])
{
	struct lfs_super_block sb_info;
	int fd;

	if (argc != 2) {
		fprintf(stderr, "usage: %s <special>\n", argv[0]);
		exit(1);
	}

	if ((fd = open(argv[1], O_RDONLY)) < 0) {
		perror("open failed");
		exit(1);
	}

	if (read(fd, &sb_info, sizeof(sb_info)) < 0) {
		perror("read failed");
		close(fd);
		exit(1);
	}

	printf("s_segments          = %d (total number of segments in the fs)\n", sb_info.s_segments);
	printf("s_free_segments     = %d (number of free segments in the fs)\n", sb_info.s_free_segments);
	printf("s_next_free_segment = %d (the next free segment)\n", sb_info.s_next_free_segment);
	printf("s_segment_size      = %d (segment size in blocks)\n", sb_info.s_segment_size);
	printf("s_segment_map       = %ld (block addr of segment map)\n", sb_info.s_segment_map);
	printf("s_inode_map         = %ld (block addr of the inode map)\n", sb_info.s_inode_map);
	printf("s_inodes            = %d (number of inodes in the inode map)\n", sb_info.s_inodes);
	printf("s_segment_one       = %ld (block addr of the first segment)\n", sb_info.s_segment_one);

	close(fd);
}

