1583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o/* 2583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 3583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o/usr/src/ext2ed/group_com.c 4583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 5583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oA part of the extended file system 2 disk editor. 6583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 7583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oGeneral user commands 8583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 9583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oFirst written on: April 17 1995 10583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 11583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oCopyright (C) 1995 Gadi Oxman 12583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 13583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o*/ 14583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 15583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o#include <stdio.h> 16583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o#include <stdlib.h> 17583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o#include <string.h> 18583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 19583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o#include "ext2ed.h" 20583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 21583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid type_ext2_group_desc___next (char *command_line) 22efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 23583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 24583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o long entry_offset=1; 25583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o char *ptr,buffer [80]; 26efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 27583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (command_line,buffer); 28583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*ptr!=0) { 29583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (ptr,buffer); 30583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o entry_offset=atol (buffer); 31583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 32583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 33583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sprintf (buffer,"entry %ld",group_info.group_num+entry_offset); 34583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o dispatch (buffer); 35583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 36583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 37583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid type_ext2_group_desc___prev (char *command_line) 38583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 39583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 40583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o long entry_offset=1; 41583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o char *ptr,buffer [80]; 42efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 43583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (command_line,buffer); 44583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*ptr!=0) { 45583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (ptr,buffer); 46583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o entry_offset=atol (buffer); 47583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 48583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 49583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sprintf (buffer,"entry %ld",group_info.group_num-entry_offset); 50583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o dispatch (buffer); 51583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 52583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 53583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid type_ext2_group_desc___entry (char *command_line) 54583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 55583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 56583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o long group_num; 57583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o char *ptr,buffer [80]; 58efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 59583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (command_line,buffer); 60583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*ptr==0) { 61583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - No argument specified\n");refresh_command_win ();return; 62583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 63583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (ptr,buffer); 64583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 65583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o group_num=atol (buffer); 66efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 67583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (group_num < 0 || group_num >= file_system_info.groups_count) { 68583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Entry number out of bounds\n");refresh_command_win ();return; 69583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 70efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 71583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o device_offset=file_system_info.first_group_desc_offset+group_num*sizeof (struct ext2_group_desc); 72583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 73583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sprintf (buffer,"setoffset %ld",device_offset);dispatch (buffer); 74583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o strcpy (buffer,"show");dispatch (buffer); 75583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o group_info.group_num=group_num; 76583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 77583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 78583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 79583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid type_ext2_group_desc___gocopy (char *command_line) 80583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 81583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 82583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o unsigned long copy_num,offset; 83583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o char *ptr,buffer [80]; 84efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 85583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (command_line,buffer); 86583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*ptr==0) { 87583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - No argument specified\n");refresh_command_win ();return; 88583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 89583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (ptr,buffer); 90583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 91583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o copy_num=atol (buffer); 92efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 93583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o offset=file_system_info.first_group_desc_offset+copy_num*file_system_info.super_block.s_blocks_per_group*file_system_info.block_size; 94efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 95583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (offset > file_system_info.file_system_size) { 96583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Copy number out of bounds\n");refresh_command_win ();return; 97efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o } 98583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 99583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o group_info.copy_num=copy_num; 100583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o device_offset=offset+group_info.group_num*sizeof (struct ext2_group_desc); 101583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 102583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sprintf (buffer,"setoffset %ld",device_offset);dispatch (buffer); 103583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o strcpy (buffer,"show");dispatch (buffer); 104583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 105583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 106583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 107583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid type_ext2_group_desc___show (char *command_line) 108583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 109583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 110583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o long group_num,temp; 111efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 112583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o temp=(device_offset-file_system_info.first_group_desc_offset) % (file_system_info.super_block.s_blocks_per_group*file_system_info.block_size); 113583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o group_num=temp/sizeof (struct ext2_group_desc); 114583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 115583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o show (command_line); 116efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 117583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wmove (show_win,1,0);wprintw (show_win,"\n");wmove (show_win,2,0); 118583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_win,"Group %ld of %ld ",group_num,file_system_info.groups_count-1); 119583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_win,"in copy %ld ",group_info.copy_num); 120583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (group_info.copy_num==0) wprintw (show_win,"(Main copy)"); 121583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_win,"\n");refresh_show_win (); 122583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 123583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (group_num==0) { 124583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Reached first group descriptor\n"); 125583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wrefresh (command_win); 126583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 127583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 128583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (group_num==file_system_info.groups_count-1) { 129583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Reached last group descriptor\n"); 130583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wrefresh (command_win); 131583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 132583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 133583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 134583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid type_ext2_group_desc___inode (char *command_line) 135583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 136583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 137583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o long inode_offset; 138583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o char buffer [80]; 139efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 140583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o inode_offset=type_data.u.t_ext2_group_desc.bg_inode_table; 141583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sprintf (buffer,"setoffset block %ld",inode_offset);dispatch (buffer); 142583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sprintf (buffer,"settype ext2_inode");dispatch (buffer); 143583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 144583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 145583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid type_ext2_group_desc___blockbitmap (char *command_line) 146583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 147583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 148583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o long block_bitmap_offset; 149583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o char buffer [80]; 150efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 151583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o block_bitmap_info.entry_num=0; 152583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o block_bitmap_info.group_num=group_info.group_num; 153efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 154583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o block_bitmap_offset=type_data.u.t_ext2_group_desc.bg_block_bitmap; 155583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sprintf (buffer,"setoffset block %ld",block_bitmap_offset);dispatch (buffer); 156583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sprintf (buffer,"settype block_bitmap");dispatch (buffer); 157583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 158583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 159583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid type_ext2_group_desc___inodebitmap (char *command_line) 160583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 161583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 162583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o long inode_bitmap_offset; 163583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o char buffer [80]; 164efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 165583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o inode_bitmap_info.entry_num=0; 166583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o inode_bitmap_info.group_num=group_info.group_num; 167efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 168583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o inode_bitmap_offset=type_data.u.t_ext2_group_desc.bg_inode_bitmap; 169583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sprintf (buffer,"setoffset block %ld",inode_bitmap_offset);dispatch (buffer); 170583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sprintf (buffer,"settype inode_bitmap");dispatch (buffer); 171583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 172583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 173583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid type_ext2_group_desc___setactivecopy (char *command_line) 174583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 175583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 176583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o struct ext2_group_desc gd; 177efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 178583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o gd=type_data.u.t_ext2_group_desc; 179583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o dispatch ("gocopy 0"); 180583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o type_data.u.t_ext2_group_desc=gd; 181583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o dispatch ("show"); 182583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 183