119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/*
219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/usr/src/ext2ed/super_com.c
419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source ProjectA part of the extended file system 2 disk editor.
619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project----------------------
819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source ProjectHandles the superblock
919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project----------------------
1019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
1119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source ProjectFirst written on: April 9 1995
1219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
1319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source ProjectCopyright (C) 1995 Gadi Oxman
1419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
1519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project*/
1619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
1719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <stdio.h>
1819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <stdlib.h>
1919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <string.h>
2019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <time.h>
2119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
2219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include "ext2ed.h"
2319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
2419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid type_ext2_super_block___show (char *command_line)
2519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
2619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
2719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	struct ext2_super_block *super;
2819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	super=&type_data.u.t_ext2_super_block;
293984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
3019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	show (command_line);
3119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
3219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (super->s_blocks_count != 0) {
3319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		wmove (show_pad,2,40);wprintw (show_pad,"%2.2f%%",100*(float) super->s_r_blocks_count/ (float) super->s_blocks_count);
3419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		wmove (show_pad,3,40);wprintw (show_pad,"%2.2f%%",100*(float) super->s_free_blocks_count/ (float) super->s_blocks_count);
3519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
363984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
3719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (super->s_inodes_count != 0) {
3819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		wmove (show_pad,4,40);wprintw (show_pad,"%2.2f%%",100*(float) super->s_free_inodes_count/ (float) super->s_inodes_count);
3919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
4019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
4119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	wmove (show_pad,6,40);
4219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	switch (super->s_log_block_size) {
4319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		case 0:	wprintw (show_pad,"1024 bytes");break;
4419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		case 1: wprintw (show_pad,"2048 bytes");break;
4519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		case 2: wprintw (show_pad,"4096 bytes");break;
4619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
4719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	wmove (show_pad,11,40);wprintw (show_pad,"%s",ctime ((time_t *) &type_data.u.t_ext2_super_block.s_mtime));
4819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	wmove (show_pad,12,40);wprintw (show_pad,"%s",ctime ((time_t *) &type_data.u.t_ext2_super_block.s_wtime));
4919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	wmove (show_pad,19,40);wprintw (show_pad,"%s",ctime ((time_t *) &type_data.u.t_ext2_super_block.s_lastcheck));
5019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	wmove (show_pad,15,40);
5119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
5219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	switch (type_data.u.t_ext2_super_block.s_magic) {
5319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		case EXT2_SUPER_MAGIC:
5419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			wprintw (show_pad,"ext2 >= 0.2B");
5519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			break;
5619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		case EXT2_PRE_02B_MAGIC:
5719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			wprintw (show_pad,"ext2 < 0.2B (not supported)");
5819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			break;
5919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		default:
6019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			wprintw (show_pad,"Unknown");
6119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			break;
6219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
633984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
6419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	wmove (show_pad,16,40);
6519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (type_data.u.t_ext2_super_block.s_state & 0x1)
6619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		wprintw (show_pad,"clean ");
6719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	else
6819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		wprintw (show_pad,"not clean ");
6919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
7019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (type_data.u.t_ext2_super_block.s_state & 0x2)
7119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		wprintw (show_pad,"with errors ");
7219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	else
7319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		wprintw (show_pad,"with no errors");
743984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
7519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	wmove (show_pad,17,40);
763984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
7719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	switch (type_data.u.t_ext2_super_block.s_errors) {
7819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		case EXT2_ERRORS_CONTINUE:
7919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			wprintw (show_pad,"Continue");
8019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			break;
8119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		case EXT2_ERRORS_RO:
8219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			wprintw (show_pad,"Remount read only");
8319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			break;
8419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		case EXT2_ERRORS_PANIC:
8519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			wprintw (show_pad,"Issue kernel panic");
8619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			break;
8719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		default:
8819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			wprintw (show_pad,"Unknown");
8919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			break;
9019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
9119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
9219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	wmove (show_pad,21,40);
933984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
9419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	switch (type_data.u.t_ext2_super_block.s_creator_os) {
9519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
9619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		case EXT2_OS_LINUX:
9719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			wprintw (show_pad,"Linux :-)");
9819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			break;
9919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
10019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		case EXT2_OS_HURD:
10119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			wprintw (show_pad,"Hurd");
10219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			break;
10319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
10419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		default:
10519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			wprintw (show_pad,"Unknown");
10619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			break;
10719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
1083984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
10919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	refresh_show_pad ();
11019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
11119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	wmove (show_win,1,0);wprintw (show_win,"\n");wmove (show_win,2,0);
11219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	wprintw (show_win,"Superblock copy %ld ",super_info.copy_num);
11319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (super_info.copy_num==0)
11419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		wprintw (show_win,"(main copy)");
11519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	wprintw (show_win,"\n");
11619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	refresh_show_win ();
11719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
11819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
11919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid type_ext2_super_block___gocopy (char *command_line)
12019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
12119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
12219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	unsigned long copy_num,offset;
12319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	char *ptr,buffer [80];
1243984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
12519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	ptr=parse_word (command_line,buffer);
12619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (*ptr==0) {
12719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		wprintw (command_win,"Error - No argument specified\n");refresh_command_win ();return;
12819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
12919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	ptr=parse_word (ptr,buffer);
13019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
13119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	copy_num=atol (buffer);
1323984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
13319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	offset=file_system_info.super_block_offset+copy_num*file_system_info.no_blocks_in_group*file_system_info.block_size;
1343984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
13519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (offset > file_system_info.file_system_size) {
13619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		wprintw (command_win,"Error - Copy number out of bounds\n");refresh_command_win ();return;
1373984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt	}
13819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
13919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	super_info.copy_num=copy_num;
14019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	device_offset=offset;
14119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
14219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	sprintf (buffer,"setoffset %ld",device_offset);dispatch (buffer);
14319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	strcpy (buffer,"show");dispatch (buffer);
14419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
14519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
14619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid type_ext2_super_block___setactivecopy (char *command_line)
14719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
14819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
14919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	struct ext2_super_block sb;
1503984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
15119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	sb=type_data.u.t_ext2_super_block;
15219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	dispatch ("gocopy 0");
15319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	type_data.u.t_ext2_super_block=sb;
15419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	dispatch ("show");
15519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
156