xref: /aosp_15_r20/external/e2fsprogs/ext2ed/group_com.c (revision 6a54128f25917bfc36a8a6e9d722c04a0b4641b6)
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