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