1*6a54128fSAndroid Build Coastguard Worker /*
2*6a54128fSAndroid Build Coastguard Worker
3*6a54128fSAndroid Build Coastguard Worker /usr/src/ext2ed/group_com.c
4*6a54128fSAndroid Build Coastguard Worker
5*6a54128fSAndroid Build Coastguard Worker A part of the extended file system 2 disk editor.
6*6a54128fSAndroid Build Coastguard Worker
7*6a54128fSAndroid Build Coastguard Worker General user commands
8*6a54128fSAndroid Build Coastguard Worker
9*6a54128fSAndroid Build Coastguard Worker First written on: April 17 1995
10*6a54128fSAndroid Build Coastguard Worker
11*6a54128fSAndroid Build Coastguard Worker Copyright (C) 1995 Gadi Oxman
12*6a54128fSAndroid Build Coastguard Worker
13*6a54128fSAndroid Build Coastguard Worker */
14*6a54128fSAndroid Build Coastguard Worker
15*6a54128fSAndroid Build Coastguard Worker #include "config.h"
16*6a54128fSAndroid Build Coastguard Worker #include <stdio.h>
17*6a54128fSAndroid Build Coastguard Worker #include <stdlib.h>
18*6a54128fSAndroid Build Coastguard Worker #include <string.h>
19*6a54128fSAndroid Build Coastguard Worker
20*6a54128fSAndroid Build Coastguard Worker #include "ext2ed.h"
21*6a54128fSAndroid Build Coastguard Worker
type_ext2_group_desc___next(char * command_line)22*6a54128fSAndroid Build Coastguard Worker void type_ext2_group_desc___next (char *command_line)
23*6a54128fSAndroid Build Coastguard Worker
24*6a54128fSAndroid Build Coastguard Worker {
25*6a54128fSAndroid Build Coastguard Worker long entry_offset=1;
26*6a54128fSAndroid Build Coastguard Worker char *ptr,buffer [80];
27*6a54128fSAndroid Build Coastguard Worker
28*6a54128fSAndroid Build Coastguard Worker ptr=parse_word (command_line,buffer);
29*6a54128fSAndroid Build Coastguard Worker if (*ptr!=0) {
30*6a54128fSAndroid Build Coastguard Worker ptr=parse_word (ptr,buffer);
31*6a54128fSAndroid Build Coastguard Worker entry_offset=atol (buffer);
32*6a54128fSAndroid Build Coastguard Worker }
33*6a54128fSAndroid Build Coastguard Worker
34*6a54128fSAndroid Build Coastguard Worker sprintf (buffer,"entry %ld",group_info.group_num+entry_offset);
35*6a54128fSAndroid Build Coastguard Worker dispatch (buffer);
36*6a54128fSAndroid Build Coastguard Worker }
37*6a54128fSAndroid Build Coastguard Worker
type_ext2_group_desc___prev(char * command_line)38*6a54128fSAndroid Build Coastguard Worker void type_ext2_group_desc___prev (char *command_line)
39*6a54128fSAndroid Build Coastguard Worker
40*6a54128fSAndroid Build Coastguard Worker {
41*6a54128fSAndroid Build Coastguard Worker long entry_offset=1;
42*6a54128fSAndroid Build Coastguard Worker char *ptr,buffer [80];
43*6a54128fSAndroid Build Coastguard Worker
44*6a54128fSAndroid Build Coastguard Worker ptr=parse_word (command_line,buffer);
45*6a54128fSAndroid Build Coastguard Worker if (*ptr!=0) {
46*6a54128fSAndroid Build Coastguard Worker ptr=parse_word (ptr,buffer);
47*6a54128fSAndroid Build Coastguard Worker entry_offset=atol (buffer);
48*6a54128fSAndroid Build Coastguard Worker }
49*6a54128fSAndroid Build Coastguard Worker
50*6a54128fSAndroid Build Coastguard Worker sprintf (buffer,"entry %ld",group_info.group_num-entry_offset);
51*6a54128fSAndroid Build Coastguard Worker dispatch (buffer);
52*6a54128fSAndroid Build Coastguard Worker }
53*6a54128fSAndroid Build Coastguard Worker
type_ext2_group_desc___entry(char * command_line)54*6a54128fSAndroid Build Coastguard Worker void type_ext2_group_desc___entry (char *command_line)
55*6a54128fSAndroid Build Coastguard Worker
56*6a54128fSAndroid Build Coastguard Worker {
57*6a54128fSAndroid Build Coastguard Worker long group_num;
58*6a54128fSAndroid Build Coastguard Worker char *ptr,buffer [80];
59*6a54128fSAndroid Build Coastguard Worker
60*6a54128fSAndroid Build Coastguard Worker ptr=parse_word (command_line,buffer);
61*6a54128fSAndroid Build Coastguard Worker if (*ptr==0) {
62*6a54128fSAndroid Build Coastguard Worker wprintw (command_win,"Error - No argument specified\n");refresh_command_win ();return;
63*6a54128fSAndroid Build Coastguard Worker }
64*6a54128fSAndroid Build Coastguard Worker ptr=parse_word (ptr,buffer);
65*6a54128fSAndroid Build Coastguard Worker
66*6a54128fSAndroid Build Coastguard Worker group_num=atol (buffer);
67*6a54128fSAndroid Build Coastguard Worker
68*6a54128fSAndroid Build Coastguard Worker if (group_num < 0 || group_num >= file_system_info.groups_count) {
69*6a54128fSAndroid Build Coastguard Worker wprintw (command_win,"Error - Entry number out of bounds\n");refresh_command_win ();return;
70*6a54128fSAndroid Build Coastguard Worker }
71*6a54128fSAndroid Build Coastguard Worker
72*6a54128fSAndroid Build Coastguard Worker device_offset=file_system_info.first_group_desc_offset+group_num*sizeof (struct ext2_group_desc);
73*6a54128fSAndroid Build Coastguard Worker
74*6a54128fSAndroid Build Coastguard Worker sprintf (buffer,"setoffset %ld",device_offset);dispatch (buffer);
75*6a54128fSAndroid Build Coastguard Worker strcpy (buffer,"show");dispatch (buffer);
76*6a54128fSAndroid Build Coastguard Worker group_info.group_num=group_num;
77*6a54128fSAndroid Build Coastguard Worker }
78*6a54128fSAndroid Build Coastguard Worker
79*6a54128fSAndroid Build Coastguard Worker
type_ext2_group_desc___gocopy(char * command_line)80*6a54128fSAndroid Build Coastguard Worker void type_ext2_group_desc___gocopy (char *command_line)
81*6a54128fSAndroid Build Coastguard Worker
82*6a54128fSAndroid Build Coastguard Worker {
83*6a54128fSAndroid Build Coastguard Worker unsigned long copy_num,offset;
84*6a54128fSAndroid Build Coastguard Worker char *ptr,buffer [80];
85*6a54128fSAndroid Build Coastguard Worker
86*6a54128fSAndroid Build Coastguard Worker ptr=parse_word (command_line,buffer);
87*6a54128fSAndroid Build Coastguard Worker if (*ptr==0) {
88*6a54128fSAndroid Build Coastguard Worker wprintw (command_win,"Error - No argument specified\n");refresh_command_win ();return;
89*6a54128fSAndroid Build Coastguard Worker }
90*6a54128fSAndroid Build Coastguard Worker ptr=parse_word (ptr,buffer);
91*6a54128fSAndroid Build Coastguard Worker
92*6a54128fSAndroid Build Coastguard Worker copy_num=atol (buffer);
93*6a54128fSAndroid Build Coastguard Worker
94*6a54128fSAndroid Build Coastguard Worker offset=file_system_info.first_group_desc_offset+copy_num*file_system_info.super_block.s_blocks_per_group*file_system_info.block_size;
95*6a54128fSAndroid Build Coastguard Worker
96*6a54128fSAndroid Build Coastguard Worker if (offset > file_system_info.file_system_size) {
97*6a54128fSAndroid Build Coastguard Worker wprintw (command_win,"Error - Copy number out of bounds\n");refresh_command_win ();return;
98*6a54128fSAndroid Build Coastguard Worker }
99*6a54128fSAndroid Build Coastguard Worker
100*6a54128fSAndroid Build Coastguard Worker group_info.copy_num=copy_num;
101*6a54128fSAndroid Build Coastguard Worker device_offset=offset+group_info.group_num*sizeof (struct ext2_group_desc);
102*6a54128fSAndroid Build Coastguard Worker
103*6a54128fSAndroid Build Coastguard Worker sprintf (buffer,"setoffset %ld",device_offset);dispatch (buffer);
104*6a54128fSAndroid Build Coastguard Worker strcpy (buffer,"show");dispatch (buffer);
105*6a54128fSAndroid Build Coastguard Worker }
106*6a54128fSAndroid Build Coastguard Worker
107*6a54128fSAndroid Build Coastguard Worker
type_ext2_group_desc___show(char * command_line)108*6a54128fSAndroid Build Coastguard Worker void type_ext2_group_desc___show (char *command_line)
109*6a54128fSAndroid Build Coastguard Worker
110*6a54128fSAndroid Build Coastguard Worker {
111*6a54128fSAndroid Build Coastguard Worker long group_num,temp;
112*6a54128fSAndroid Build Coastguard Worker
113*6a54128fSAndroid Build Coastguard Worker temp=(device_offset-file_system_info.first_group_desc_offset) % (file_system_info.super_block.s_blocks_per_group*file_system_info.block_size);
114*6a54128fSAndroid Build Coastguard Worker group_num=temp/sizeof (struct ext2_group_desc);
115*6a54128fSAndroid Build Coastguard Worker
116*6a54128fSAndroid Build Coastguard Worker show (command_line);
117*6a54128fSAndroid Build Coastguard Worker
118*6a54128fSAndroid Build Coastguard Worker wmove (show_win,1,0);wprintw (show_win,"\n");wmove (show_win,2,0);
119*6a54128fSAndroid Build Coastguard Worker wprintw (show_win,"Group %ld of %ld ",group_num,file_system_info.groups_count-1);
120*6a54128fSAndroid Build Coastguard Worker wprintw (show_win,"in copy %ld ",group_info.copy_num);
121*6a54128fSAndroid Build Coastguard Worker if (group_info.copy_num==0) wprintw (show_win,"(Main copy)");
122*6a54128fSAndroid Build Coastguard Worker wprintw (show_win,"\n");refresh_show_win ();
123*6a54128fSAndroid Build Coastguard Worker
124*6a54128fSAndroid Build Coastguard Worker if (group_num==0) {
125*6a54128fSAndroid Build Coastguard Worker wprintw (command_win,"Reached first group descriptor\n");
126*6a54128fSAndroid Build Coastguard Worker wrefresh (command_win);
127*6a54128fSAndroid Build Coastguard Worker }
128*6a54128fSAndroid Build Coastguard Worker
129*6a54128fSAndroid Build Coastguard Worker if (group_num==file_system_info.groups_count-1) {
130*6a54128fSAndroid Build Coastguard Worker wprintw (command_win,"Reached last group descriptor\n");
131*6a54128fSAndroid Build Coastguard Worker wrefresh (command_win);
132*6a54128fSAndroid Build Coastguard Worker }
133*6a54128fSAndroid Build Coastguard Worker }
134*6a54128fSAndroid Build Coastguard Worker
type_ext2_group_desc___inode(char * command_line)135*6a54128fSAndroid Build Coastguard Worker void type_ext2_group_desc___inode (char *command_line)
136*6a54128fSAndroid Build Coastguard Worker
137*6a54128fSAndroid Build Coastguard Worker {
138*6a54128fSAndroid Build Coastguard Worker long inode_offset;
139*6a54128fSAndroid Build Coastguard Worker char buffer [80];
140*6a54128fSAndroid Build Coastguard Worker
141*6a54128fSAndroid Build Coastguard Worker inode_offset=type_data.u.t_ext2_group_desc.bg_inode_table;
142*6a54128fSAndroid Build Coastguard Worker sprintf (buffer,"setoffset block %ld",inode_offset);dispatch (buffer);
143*6a54128fSAndroid Build Coastguard Worker sprintf (buffer,"settype ext2_inode");dispatch (buffer);
144*6a54128fSAndroid Build Coastguard Worker }
145*6a54128fSAndroid Build Coastguard Worker
type_ext2_group_desc___blockbitmap(char * command_line)146*6a54128fSAndroid Build Coastguard Worker void type_ext2_group_desc___blockbitmap (char *command_line)
147*6a54128fSAndroid Build Coastguard Worker
148*6a54128fSAndroid Build Coastguard Worker {
149*6a54128fSAndroid Build Coastguard Worker long block_bitmap_offset;
150*6a54128fSAndroid Build Coastguard Worker char buffer [80];
151*6a54128fSAndroid Build Coastguard Worker
152*6a54128fSAndroid Build Coastguard Worker block_bitmap_info.entry_num=0;
153*6a54128fSAndroid Build Coastguard Worker block_bitmap_info.group_num=group_info.group_num;
154*6a54128fSAndroid Build Coastguard Worker
155*6a54128fSAndroid Build Coastguard Worker block_bitmap_offset=type_data.u.t_ext2_group_desc.bg_block_bitmap;
156*6a54128fSAndroid Build Coastguard Worker sprintf (buffer,"setoffset block %ld",block_bitmap_offset);dispatch (buffer);
157*6a54128fSAndroid Build Coastguard Worker sprintf (buffer,"settype block_bitmap");dispatch (buffer);
158*6a54128fSAndroid Build Coastguard Worker }
159*6a54128fSAndroid Build Coastguard Worker
type_ext2_group_desc___inodebitmap(char * command_line)160*6a54128fSAndroid Build Coastguard Worker void type_ext2_group_desc___inodebitmap (char *command_line)
161*6a54128fSAndroid Build Coastguard Worker
162*6a54128fSAndroid Build Coastguard Worker {
163*6a54128fSAndroid Build Coastguard Worker long inode_bitmap_offset;
164*6a54128fSAndroid Build Coastguard Worker char buffer [80];
165*6a54128fSAndroid Build Coastguard Worker
166*6a54128fSAndroid Build Coastguard Worker inode_bitmap_info.entry_num=0;
167*6a54128fSAndroid Build Coastguard Worker inode_bitmap_info.group_num=group_info.group_num;
168*6a54128fSAndroid Build Coastguard Worker
169*6a54128fSAndroid Build Coastguard Worker inode_bitmap_offset=type_data.u.t_ext2_group_desc.bg_inode_bitmap;
170*6a54128fSAndroid Build Coastguard Worker sprintf (buffer,"setoffset block %ld",inode_bitmap_offset);dispatch (buffer);
171*6a54128fSAndroid Build Coastguard Worker sprintf (buffer,"settype inode_bitmap");dispatch (buffer);
172*6a54128fSAndroid Build Coastguard Worker }
173*6a54128fSAndroid Build Coastguard Worker
type_ext2_group_desc___setactivecopy(char * command_line)174*6a54128fSAndroid Build Coastguard Worker void type_ext2_group_desc___setactivecopy (char *command_line)
175*6a54128fSAndroid Build Coastguard Worker
176*6a54128fSAndroid Build Coastguard Worker {
177*6a54128fSAndroid Build Coastguard Worker struct ext2_group_desc gd;
178*6a54128fSAndroid Build Coastguard Worker
179*6a54128fSAndroid Build Coastguard Worker gd=type_data.u.t_ext2_group_desc;
180*6a54128fSAndroid Build Coastguard Worker dispatch ("gocopy 0");
181*6a54128fSAndroid Build Coastguard Worker type_data.u.t_ext2_group_desc=gd;
182*6a54128fSAndroid Build Coastguard Worker dispatch ("show");
183*6a54128fSAndroid Build Coastguard Worker }
184