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