119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* 219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/usr/src/ext2ed/group_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 ProjectGeneral user commands 819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source ProjectFirst written on: April 17 1995 1019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 1119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source ProjectCopyright (C) 1995 Gadi Oxman 1219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 1319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project*/ 1419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 1519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <stdio.h> 1619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <stdlib.h> 1719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <string.h> 1819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 1919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include "ext2ed.h" 2019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 2119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid type_ext2_group_desc___next (char *command_line) 223984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 2319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{ 2419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project long entry_offset=1; 2519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project char *ptr,buffer [80]; 263984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 2719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ptr=parse_word (command_line,buffer); 2819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (*ptr!=0) { 2919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ptr=parse_word (ptr,buffer); 3019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project entry_offset=atol (buffer); 3119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 3219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 3319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project sprintf (buffer,"entry %ld",group_info.group_num+entry_offset); 3419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project dispatch (buffer); 3519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 3619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 3719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid type_ext2_group_desc___prev (char *command_line) 3819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 3919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{ 4019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project long entry_offset=1; 4119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project char *ptr,buffer [80]; 423984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 4319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ptr=parse_word (command_line,buffer); 4419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (*ptr!=0) { 4519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ptr=parse_word (ptr,buffer); 4619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project entry_offset=atol (buffer); 4719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 4819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 4919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project sprintf (buffer,"entry %ld",group_info.group_num-entry_offset); 5019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project dispatch (buffer); 5119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 5219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 5319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid type_ext2_group_desc___entry (char *command_line) 5419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 5519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{ 5619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project long group_num; 5719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project char *ptr,buffer [80]; 583984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 5919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ptr=parse_word (command_line,buffer); 6019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (*ptr==0) { 6119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project wprintw (command_win,"Error - No argument specified\n");refresh_command_win ();return; 6219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 6319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ptr=parse_word (ptr,buffer); 6419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 6519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project group_num=atol (buffer); 663984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 6719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (group_num < 0 || group_num >= file_system_info.groups_count) { 6819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project wprintw (command_win,"Error - Entry number out of bounds\n");refresh_command_win ();return; 6919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 703984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 7119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project device_offset=file_system_info.first_group_desc_offset+group_num*sizeof (struct ext2_group_desc); 7219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 7319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project sprintf (buffer,"setoffset %ld",device_offset);dispatch (buffer); 7419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project strcpy (buffer,"show");dispatch (buffer); 7519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project group_info.group_num=group_num; 7619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 7719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 7819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 7919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid type_ext2_group_desc___gocopy (char *command_line) 8019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 8119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{ 8219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project unsigned long copy_num,offset; 8319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project char *ptr,buffer [80]; 843984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 8519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ptr=parse_word (command_line,buffer); 8619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (*ptr==0) { 8719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project wprintw (command_win,"Error - No argument specified\n");refresh_command_win ();return; 8819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 8919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ptr=parse_word (ptr,buffer); 9019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 9119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project copy_num=atol (buffer); 923984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 9319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project offset=file_system_info.first_group_desc_offset+copy_num*file_system_info.super_block.s_blocks_per_group*file_system_info.block_size; 943984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 9519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (offset > file_system_info.file_system_size) { 9619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project wprintw (command_win,"Error - Copy number out of bounds\n");refresh_command_win ();return; 973984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt } 9819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 9919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project group_info.copy_num=copy_num; 10019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project device_offset=offset+group_info.group_num*sizeof (struct ext2_group_desc); 10119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 10219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project sprintf (buffer,"setoffset %ld",device_offset);dispatch (buffer); 10319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project strcpy (buffer,"show");dispatch (buffer); 10419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 10519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 10619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 10719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid type_ext2_group_desc___show (char *command_line) 10819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 10919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{ 11019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project long group_num,temp; 1113984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 11219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project temp=(device_offset-file_system_info.first_group_desc_offset) % (file_system_info.super_block.s_blocks_per_group*file_system_info.block_size); 11319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project group_num=temp/sizeof (struct ext2_group_desc); 11419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 11519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project show (command_line); 1163984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 11719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project wmove (show_win,1,0);wprintw (show_win,"\n");wmove (show_win,2,0); 11819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project wprintw (show_win,"Group %ld of %ld ",group_num,file_system_info.groups_count-1); 11919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project wprintw (show_win,"in copy %ld ",group_info.copy_num); 12019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (group_info.copy_num==0) wprintw (show_win,"(Main copy)"); 12119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project wprintw (show_win,"\n");refresh_show_win (); 12219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 12319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (group_num==0) { 12419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project wprintw (command_win,"Reached first group descriptor\n"); 12519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project wrefresh (command_win); 12619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 12719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 12819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (group_num==file_system_info.groups_count-1) { 12919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project wprintw (command_win,"Reached last group descriptor\n"); 13019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project wrefresh (command_win); 13119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 13219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 13319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 13419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid type_ext2_group_desc___inode (char *command_line) 13519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 13619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{ 13719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project long inode_offset; 13819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project char buffer [80]; 1393984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 14019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project inode_offset=type_data.u.t_ext2_group_desc.bg_inode_table; 14119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project sprintf (buffer,"setoffset block %ld",inode_offset);dispatch (buffer); 14219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project sprintf (buffer,"settype ext2_inode");dispatch (buffer); 14319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 14419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 14519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid type_ext2_group_desc___blockbitmap (char *command_line) 14619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 14719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{ 14819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project long block_bitmap_offset; 14919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project char buffer [80]; 1503984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 15119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project block_bitmap_info.entry_num=0; 15219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project block_bitmap_info.group_num=group_info.group_num; 1533984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 15419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project block_bitmap_offset=type_data.u.t_ext2_group_desc.bg_block_bitmap; 15519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project sprintf (buffer,"setoffset block %ld",block_bitmap_offset);dispatch (buffer); 15619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project sprintf (buffer,"settype block_bitmap");dispatch (buffer); 15719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 15819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 15919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid type_ext2_group_desc___inodebitmap (char *command_line) 16019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 16119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{ 16219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project long inode_bitmap_offset; 16319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project char buffer [80]; 1643984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 16519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project inode_bitmap_info.entry_num=0; 16619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project inode_bitmap_info.group_num=group_info.group_num; 1673984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 16819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project inode_bitmap_offset=type_data.u.t_ext2_group_desc.bg_inode_bitmap; 16919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project sprintf (buffer,"setoffset block %ld",inode_bitmap_offset);dispatch (buffer); 17019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project sprintf (buffer,"settype inode_bitmap");dispatch (buffer); 17119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 17219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 17319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid type_ext2_group_desc___setactivecopy (char *command_line) 17419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 17519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{ 17619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project struct ext2_group_desc gd; 1773984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 17819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project gd=type_data.u.t_ext2_group_desc; 17919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project dispatch ("gocopy 0"); 18019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project type_data.u.t_ext2_group_desc=gd; 18119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project dispatch ("show"); 18219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 183