119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/*
219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/usr/src/ext2ed/init.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 Project--------------------------------
819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source ProjectVarious initialization routines.
919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project--------------------------------
1019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
1119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source ProjectFirst written on: April 9 1995
1219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
1319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source ProjectCopyright (C) 1995 Gadi Oxman
1419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
1519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project*/
1619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
1719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <stdio.h>
1819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <stdlib.h>
1919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <string.h>
2019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#ifdef HAVE_READLINE
2119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <readline.h>
2219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif
2319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <signal.h>
2419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <unistd.h>
2519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
2619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <sys/types.h>
2719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <sys/stat.h>
2819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <fcntl.h>
2919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
3019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include "ext2ed.h"
3119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
3219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectchar lines_s [80],cols_s [80];
3319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
3419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid signal_handler (void);
3519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
3619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid prepare_to_close (void)
3719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
3819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
3919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	close_windows ();
4019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (device_handle!=NULL)
4119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		fclose (device_handle);
4219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	free_user_commands (&general_commands);
4319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	free_user_commands (&ext2_commands);
4419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	free_struct_descriptors ();
4519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
4619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
4719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectint init (void)
4819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
4919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
5019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	printf ("Initializing ...\n");
513984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
5219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (!process_configuration_file ()) {
5319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		fprintf (stderr,"Error - Unable to complete configuration. Quitting.\n");
543984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt		return (0);
5519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	};
563984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
5719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	general_commands.last_command=-1;	/* No commands whatsoever meanwhile */
5819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	ext2_commands.last_command=-1;
5919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	add_general_commands ();		/* Add the general commands, aviable always */
6019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	device_handle=NULL;			/* Notice that our device is still not set up */
6119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	device_offset=-1;
6219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	current_type=NULL;			/* No filesystem specific types yet */
6319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
6419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	remember_lifo.entries_count=0;		/* Object memory is empty */
653984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
6619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	init_windows ();			/* Initialize the NCURSES interface */
6719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	init_readline ();			/* Initialize the READLINE interface */
6819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	init_signals ();			/* Initialize the signal handlers */
6919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	write_access=0;				/* Write access disabled */
703984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
7119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	strcpy (last_command_line,"help");	/* Show the help screen to the user */
7219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	dispatch ("help");
7319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	return (1);				/* Success */
7419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
7519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
7619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid add_general_commands (void)
7719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
7819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
7919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	add_user_command (&general_commands,"help","EXT2ED help system",help);
8019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	add_user_command (&general_commands,"set","Changes a variable in the current object",set);
8119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	add_user_command (&general_commands,"setdevice","Selects the filesystem block device (e.g. /dev/hda1)",set_device);
8219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	add_user_command (&general_commands,"setoffset","Moves asynchronicly in the filesystem",set_offset);
8319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	add_user_command (&general_commands,"settype","Tells EXT2ED how to interpert the current object",set_type);
8419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	add_user_command (&general_commands,"show","Displays the current object",show);
8519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	add_user_command (&general_commands,"pgup","Scrolls data one page up",pgup);
8619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	add_user_command (&general_commands,"pgdn","Scrolls data one page down",pgdn);
8719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	add_user_command (&general_commands,"redraw","Redisplay the screen",redraw);
8819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	add_user_command (&general_commands,"remember","Saves the current position and data information",remember);
8919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	add_user_command (&general_commands,"recall","Gets back to the saved object position",recall);
9019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	add_user_command (&general_commands,"enablewrite","Enters Read/Write mode - Allows changing the filesystem",enable_write);
9119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	add_user_command (&general_commands,"disablewrite","Enters read only mode",disable_write);
9219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	add_user_command (&general_commands,"writedata","Write data back to disk",write_data);
9319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	add_user_command (&general_commands,"next","Moves to the next byte in hex mode",next);
9419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	add_user_command (&general_commands,"prev","Moves to the previous byte in hex mode",prev);
9519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
9619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
9719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid add_ext2_general_commands (void)
9819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
9919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
10019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	add_user_command (&ext2_commands,"super","Moves to the superblock of the filesystem",type_ext2___super);
10119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	add_user_command (&ext2_commands,"group","Moves to the first group descriptor",type_ext2___group);
10219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	add_user_command (&ext2_commands,"cd","Moves to the directory specified",type_ext2___cd);
10319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
10419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
10519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectint set_struct_descriptors (char *file_name)
10619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
10719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
10819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	FILE *fp;
10919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	char current_line [500],current_word [50],*ch;
11019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	char variable_name [50],variable_type [20];
11119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	struct struct_descriptor *current_descriptor;
1123984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
11319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if ( (fp=fopen (file_name,"rt"))==NULL) {
11419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		wprintw (command_win,"Error - Failed to open descriptors file %s\n",file_name);
11519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		refresh_command_win ();	return (0);
11619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	};
1173984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
11819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	while (!feof (fp)) {
11919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		fgets (current_line,500,fp);
1203984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt		if (feof (fp)) break;
12119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		ch=parse_word (current_line,current_word);
12219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		if (strcmp (current_word,"struct")==0) {
12319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			ch=parse_word (ch,current_word);
12419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			current_descriptor=add_new_descriptor (current_word);
1253984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
12619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			while (strchr (current_line,'{')==NULL) {
12719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				fgets (current_line,500,fp);
12819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				if (feof (fp)) break;
12919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			};
13019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			if (feof (fp)) break;
1313984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
13219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			fgets (current_line,500,fp);
13319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
13419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			while (strchr (current_line,'}')==NULL) {
13519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				while (strchr (current_line,';')==NULL) {
13619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project					fgets (current_line,500,fp);
13719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project					if (strchr (current_line,'}')!=NULL) break;
13819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				};
13919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				if (strchr (current_line,'}') !=NULL) break;
14019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				ch=parse_word (current_line,variable_type);
14119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				ch=parse_word (ch,variable_name);
14219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				while (variable_name [strlen (variable_name)-1]!=';') {
14319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project					strcpy (variable_type,variable_name);
14419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project					ch=parse_word (ch,variable_name);
14519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				};
14619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				variable_name [strlen (variable_name)-1]=0;
14719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				add_new_variable (current_descriptor,variable_type,variable_name);
14819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				fgets (current_line,500,fp);
14919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			};
1503984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt		};
15119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	};
1523984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
15319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	fclose (fp);
15419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	return (1);
15519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
15619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
15719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid free_struct_descriptors (void)
15819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
15919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
16019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	struct struct_descriptor *ptr,*next;
1613984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
16219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	ptr=first_type;
16319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	while (ptr!=NULL) {
16419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		next=ptr->next;
16519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		free_user_commands (&ptr->type_commands);
16619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		free (ptr);
16719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		ptr=next;
16819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
16919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	first_type=last_type=current_type=NULL;
17019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
17119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
17219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid free_user_commands (struct struct_commands *ptr)
17319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
17419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
17519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	int i;
1763984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
17719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	for (i=0;i<=ptr->last_command;i++) {
17819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		free (ptr->names [i]);
17919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		free (ptr->descriptions [i]);
18019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
1813984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
18219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	ptr->last_command=-1;
18319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
18419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
18519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectstruct struct_descriptor *add_new_descriptor (char *name)
18619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
18719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
18819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	struct struct_descriptor *ptr;
1893984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
19019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	ptr = malloc (sizeof (struct struct_descriptor));
19119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (ptr == NULL) {
19219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		printf ("Error - Can not allocate memory - Quitting\n");
19319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		exit (1);
19419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
19519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	memset(ptr, 0, sizeof(struct struct_descriptor));
19619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	ptr->prev = ptr->next = NULL;
19719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	strcpy (ptr->name,name);
19819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	ptr->length=0;
19919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	ptr->fields_num=0;
20019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (first_type==NULL) {
20119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		first_type = last_type = ptr;
20219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	} else {
20319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		ptr->prev = last_type; last_type->next = ptr; last_type=ptr;
20419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
20519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	ptr->type_commands.last_command=-1;
20619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	fill_type_commands (ptr);
20719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	return (ptr);
20819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
20919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
21019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectstruct type_table {
21119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	char 	*name;
21219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	int	field_type;
21319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	int	len;
21419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project};
21519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
21619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectstruct type_table type_table[] = {
21719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	{ "long",   FIELD_TYPE_INT,	4 },
21819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	{ "short",  FIELD_TYPE_INT,	2 },
21919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	{ "char",   FIELD_TYPE_CHAR,	1 },
22019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	{ "__u32",  FIELD_TYPE_UINT,	4 },
22119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	{ "__s32",  FIELD_TYPE_INT,	4 },
22219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	{ "__u16",  FIELD_TYPE_UINT,	2 },
22319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	{ "__s16",  FIELD_TYPE_INT,	2 },
22419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	{ "__u8",   FIELD_TYPE_UINT,	1 },
22519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	{ "__s8",   FIELD_TYPE_INT,	1 },
22619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	{  0,       0,                  0 }
22719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project};
22819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
22919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid add_new_variable (struct struct_descriptor *ptr,char *v_type,char *v_name)
23019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
23119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
23219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	short	len=1;
23319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	char	field_type=FIELD_TYPE_INT;
23419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	struct type_table *p;
2353984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
23619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	strcpy (ptr->field_names [ptr->fields_num],v_name);
23719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	ptr->field_positions [ptr->fields_num]=ptr->length;
23819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
23919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	for (p = type_table; p->name; p++) {
24019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		if (strcmp(v_type, p->name) == 0) {
24119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			len = p->len;
24219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			field_type = p->field_type;
24319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			break;
24419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		}
24519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
24619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (p->name == 0) {
24719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		if (strncmp(v_type, "char[", 5) == 0) {
24819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			len = atoi(v_type+5);
24919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			field_type = FIELD_TYPE_CHAR;
25019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		} else {
25119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			printf("Unknown type %s for field %s\n", v_type, v_name);
25219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			exit(1);
25319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		}
25419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
25519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
25619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	ptr->field_lengths [ptr->fields_num] = len;
25719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	ptr->field_types [ptr->fields_num] = field_type;
25819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
25919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	ptr->length+=len;
2603984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt	ptr->fields_num++;
26119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
26219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
26319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid fill_type_commands (struct struct_descriptor *ptr)
26419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
26519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/*
26619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
26719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source ProjectSet specific type user commands.
26819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
26919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project*/
27019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
27119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
27219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
27319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (strcmp ((ptr->name),"file")==0) {
27419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"show","Shows file data",type_file___show);
27519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"inode","Returns to the inode of the current file",type_file___inode);
27619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"display","Specifies data format - text or hex",type_file___display);
27719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"next","Pass to next byte",type_file___next);
27819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"prev","Pass to the previous byte",type_file___prev);
27919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"offset","Pass to a specified byte in the current block",type_file___offset);
28019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"nextblock","Pass to next file block",type_file___nextblock);
28119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"prevblock","Pass to the previous file block",type_file___prevblock);
28219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"block","Specify which file block to edit",type_file___block);
28319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"remember","Saves the file\'s inode position for later reference",type_file___remember);
28419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"set","Sets the current byte",type_file___set);
28519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"writedata","Writes the current block to the disk",type_file___writedata);
28619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
28719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
28819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (strcmp ((ptr->name),"ext2_inode")==0) {
28919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"show","Shows inode data",type_ext2_inode___show);
29019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"next","Move to next inode in current block group",type_ext2_inode___next);
29119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"prev","Move to next inode in current block group",type_ext2_inode___prev);
29219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"group","Move to the group descriptors of the current inode table",type_ext2_inode___group);
29319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"entry","Move to a specified entry in the current inode table",type_ext2_inode___entry);
29419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"file","Display file data of the current inode",type_ext2_inode___file);
29519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"dir","Display directory data of the current inode",type_ext2_inode___dir);
29619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
2973984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
29819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (strcmp ((ptr->name),"dir")==0) {
29919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"show","Shows current directory data",type_dir___show);
30019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"inode","Returns to the inode of the current directory",type_dir___inode);
30119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"next","Pass to the next directory entry",type_dir___next);
30219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"prev","Pass to the previous directory entry",type_dir___prev);
30319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"followinode","Follows the inode specified in this directory entry",type_dir___followinode);
30419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"remember","Remember the inode of the current directory entry",type_dir___remember);
30519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"cd","Changes directory relative to the current directory",type_dir___cd);
30619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"entry","Moves to a specified entry in the current directory",type_dir___entry);
30719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"writedata","Writes the current entry to the disk",type_dir___writedata);
30819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"set","Changes a variable in the current directory entry",type_dir___set);
30919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
3103984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
31119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (strcmp ((ptr->name),"ext2_super_block")==0) {
31219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"show","Displays the super block data",type_ext2_super_block___show);
31319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"gocopy","Move to another backup copy of the superblock",type_ext2_super_block___gocopy);
31419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"setactivecopy","Copies the current superblock to the main superblock",type_ext2_super_block___setactivecopy);
31519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
31619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
31719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (strcmp ((ptr->name),"ext2_group_desc")==0) {
31819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"next","Pass to the next block group decriptor",type_ext2_group_desc___next);
31919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"prev","Pass to the previous group descriptor",type_ext2_group_desc___prev);
32019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"entry","Pass to a specific group descriptor",type_ext2_group_desc___entry);
32119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"show","Shows the current group descriptor",type_ext2_group_desc___show);
32219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"inode","Pass to the inode table of the current group block",type_ext2_group_desc___inode);
32319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"gocopy","Move to another backup copy of the group descriptor",type_ext2_group_desc___gocopy);
32419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"blockbitmap","Show the block allocation bitmap of the current group block",type_ext2_group_desc___blockbitmap);
32519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"inodebitmap","Show the inode allocation bitmap of the current group block",type_ext2_group_desc___inodebitmap);
32619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"setactivecopy","Copies the current group descriptor to the main table",type_ext2_super_block___setactivecopy);
32719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
32819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
32919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (strcmp ((ptr->name),"block_bitmap")==0) {
33019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"show","Displays the block allocation bitmap",type_ext2_block_bitmap___show);
33119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"entry","Moves to a specific bit",type_ext2_block_bitmap___entry);
33219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"next","Moves to the next bit",type_ext2_block_bitmap___next);
33319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"prev","Moves to the previous bit",type_ext2_block_bitmap___prev);
33419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"allocate","Allocates the current block",type_ext2_block_bitmap___allocate);
33519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"deallocate","Deallocates the current block",type_ext2_block_bitmap___deallocate);
33619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
33719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
33819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (strcmp ((ptr->name),"inode_bitmap")==0) {
33919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"show","Displays the inode allocation bitmap",type_ext2_inode_bitmap___show);
34019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"entry","Moves to a specific bit",type_ext2_inode_bitmap___entry);
34119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"next","Moves to the next bit",type_ext2_inode_bitmap___next);
34219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"prev","Moves to the previous bit",type_ext2_inode_bitmap___prev);
34319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"allocate","Allocates the current inode",type_ext2_inode_bitmap___allocate);
34419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_user_command (&ptr->type_commands,"deallocate","Deallocates the current inode",type_ext2_inode_bitmap___deallocate);
34519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
3463984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
34719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
34819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
34919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid add_user_command (struct struct_commands *ptr,char *name,char *description,PF callback)
35019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
35119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
35219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	int num;
3533984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
35419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	num=ptr->last_command;
35519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (num+1==MAX_COMMANDS_NUM) {
35619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		printf ("Internal Error - Can't add command %s\n",name);
35719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		return;
35819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
3593984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
36019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	ptr->last_command=++num;
36119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
36219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	ptr->names [num]=(char *) malloc (strlen (name)+1);
36319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	strcpy (ptr->names [num],name);
3643984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
36519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (*description!=0) {
36619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		ptr->descriptions [num]=(char *) malloc (strlen (description)+1);
36719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		strcpy (ptr->descriptions [num],description);
36819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
3693984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
37019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	ptr->callback [num]=callback;
37119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
37219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
37319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectstatic unsigned int div_ceil(unsigned int a, unsigned int b)
37419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
37519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (!a)
37619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		return 0;
37719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	return ((a - 1) / b) + 1;
37819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
37919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
38019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectint set_file_system_info (void)
38119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
38219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
38319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	int ext2_detected=0;
38419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	struct ext2_super_block *sb;
3853984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
38619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	file_system_info.super_block_offset=1024;
38719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	file_system_info.file_system_size=DefaultTotalBlocks*DefaultBlockSize;
38819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
38919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	low_read ((char *) &file_system_info.super_block,sizeof (struct ext2_super_block),file_system_info.super_block_offset);
39019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
39119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	sb=&file_system_info.super_block;
39219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
3933984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt	if (sb->s_magic == EXT2_SUPER_MAGIC)
39419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		ext2_detected=1;
39519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
39619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (ext2_detected)
39719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		wprintw (command_win,"Detected extended 2 file system on device %s\n",device_name);
39819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	else
39919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		wprintw (command_win,"Warning - Extended 2 filesystem not detected on device %s\n",device_name);
40019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
40119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (!ext2_detected && !ForceExt2)
40219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		wprintw (command_win,"You may wish to use the configuration option ForceExt2 on\n");
40319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
40419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (ForceExt2 && !ext2_detected)
40519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		wprintw (command_win,"Forcing extended 2 filesystem\n");
4063984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
40719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (ForceDefault || !ext2_detected)
40819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		wprintw (command_win,"Forcing default parameters\n");
40919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
41019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	refresh_command_win ();
41119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
41219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (ext2_detected || ForceExt2) {
41319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		add_ext2_general_commands ();
41419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		if (!set_struct_descriptors (Ext2Descriptors))
41519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			return (0);
41619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
4173984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
41819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (!ForceDefault && ext2_detected) {
4193984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
42019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		file_system_info.block_size=EXT2_MIN_BLOCK_SIZE << sb->s_log_block_size;
42119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		if (file_system_info.block_size == EXT2_MIN_BLOCK_SIZE)
42219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			file_system_info.first_group_desc_offset=2*EXT2_MIN_BLOCK_SIZE;
42319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		else
42419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			file_system_info.first_group_desc_offset=file_system_info.block_size;
4253984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt		file_system_info.groups_count = div_ceil(sb->s_blocks_count,
42619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project						 sb->s_blocks_per_group);
4273984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
42819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		file_system_info.inodes_per_block=file_system_info.block_size/sizeof (struct ext2_inode);
42919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		file_system_info.blocks_per_group=sb->s_inodes_per_group/file_system_info.inodes_per_block;
43019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		file_system_info.no_blocks_in_group=sb->s_blocks_per_group;
43119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		file_system_info.file_system_size=(sb->s_blocks_count-1)*file_system_info.block_size;
43219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
43319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
43419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	else {
43519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		file_system_info.file_system_size=DefaultTotalBlocks*DefaultBlockSize;
4363984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt		file_system_info.block_size=DefaultBlockSize;
43719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		file_system_info.no_blocks_in_group=DefaultBlocksInGroup;
43819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
4393984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
44019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (file_system_info.file_system_size > 2147483647) {
44119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		wprintw (command_win,"Sorry, filesystems bigger than 2 GB are currently not supported\n");
44219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		return (0);
44319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
44419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	return (1);
44519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
44619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
44719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid init_readline (void)
44819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
44919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
45019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#ifdef HAVE_READLINE
45119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	rl_completion_entry_function=(Function *) complete_command;
45219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif
45319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
45419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
45519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid init_signals (void)
45619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
45719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
45819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	signal (SIGWINCH, signal_SIGWINCH_handler);	/* Catch SIGWINCH */
45919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	signal (SIGTERM, signal_SIGTERM_handler);
46019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	signal (SIGSEGV, signal_SIGSEGV_handler);
4613984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
46219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
46319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
46419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid signal_SIGWINCH_handler (int sig_num)
46519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
46619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
46719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	redraw_request=1;	/* We will handle it in main.c */
4683984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
4693984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt	/* Reset signal handler */
4703984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt	signal (SIGWINCH, signal_SIGWINCH_handler);
4713984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
47219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
47319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
47419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid signal_SIGTERM_handler (int sig_num)
47519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
47619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
47719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	prepare_to_close ();
47819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	printf ("Terminated due to signal %d\n",sig_num);
47919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	exit (1);
48019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
48119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
48219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid signal_SIGSEGV_handler (int sig_num)
48319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
48419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
48519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	prepare_to_close ();
48619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	printf ("Killed by signal %d!\n",sig_num);
48719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	exit (1);
48819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
48919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
49019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectint process_configuration_file (void)
49119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
49219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
49319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	char buffer [300];
49419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	char option [80],value [80];
49519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	FILE *fp;
49619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
49719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	strcpy (buffer, ETC_DIR);
49819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	strcat (buffer,"/ext2ed.conf");
4993984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
50019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if ((fp=fopen (buffer,"rt"))==NULL) {
50119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		fprintf (stderr,"Error - Unable to open configuration file %s\n",buffer);
50219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		return (0);
50319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
5043984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
50519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	while (get_next_option (fp,option,value)) {
50619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		if (strcasecmp (option,"Ext2Descriptors")==0) {
50719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			strcpy (Ext2Descriptors,value);
50819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		}
50919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
51019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		else if (strcasecmp (option,"AlternateDescriptors")==0) {
51119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			strcpy (AlternateDescriptors,value);
51219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		}
51319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
51419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		else if (strcasecmp (option,"LogFile")==0) {
51519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			strcpy (LogFile,value);
51619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		}
51719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
51819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		else if (strcasecmp (option,"LogChanges")==0) {
51919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			if (strcasecmp (value,"on")==0)
52019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				LogChanges = 1;
52119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			else if (strcasecmp (value,"off")==0)
52219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				LogChanges = 0;
52319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			else {
52419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				fprintf (stderr,"Error - Illegal value: %s %s\n",option,value);
52519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				fclose (fp);return (0);
52619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			}
52719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		}
52819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
52919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		else if (strcasecmp (option,"AllowChanges")==0) {
53019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			if (strcasecmp (value,"on")==0)
53119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				AllowChanges = 1;
53219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			else if (strcasecmp (value,"off")==0)
53319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				AllowChanges = 0;
53419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			else {
53519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				fprintf (stderr,"Error - Illegal value: %s %s\n",option,value);
53619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				fclose (fp);return (0);
53719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			}
53819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		}
53919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
54019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		else if (strcasecmp (option,"AllowMountedRead")==0) {
54119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			if (strcasecmp (value,"on")==0)
54219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				AllowMountedRead = 1;
54319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			else if (strcasecmp (value,"off")==0)
54419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				AllowMountedRead = 0;
54519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			else {
54619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				fprintf (stderr,"Error - Illegal value: %s %s\n",option,value);
54719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				fclose (fp);return (0);
54819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			}
54919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		}
55019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
55119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		else if (strcasecmp (option,"ForceExt2")==0) {
55219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			if (strcasecmp (value,"on")==0)
55319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				ForceExt2 = 1;
55419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			else if (strcasecmp (value,"off")==0)
55519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				ForceExt2 = 0;
55619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			else {
55719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				fprintf (stderr,"Error - Illegal value: %s %s\n",option,value);
55819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				fclose (fp);return (0);
55919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			}
56019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		}
56119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
56219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		else if (strcasecmp (option,"DefaultBlockSize")==0) {
56319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			DefaultBlockSize = atoi (value);
56419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		}
56519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
56619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		else if (strcasecmp (option,"DefaultTotalBlocks")==0) {
56719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			DefaultTotalBlocks = strtoul (value,NULL,10);
56819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		}
56919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
57019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		else if (strcasecmp (option,"DefaultBlocksInGroup")==0) {
57119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			DefaultBlocksInGroup = strtoul (value,NULL,10);
57219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		}
57319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
57419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		else if (strcasecmp (option,"ForceDefault")==0) {
57519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			if (strcasecmp (value,"on")==0)
57619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				ForceDefault = 1;
57719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			else if (strcasecmp (value,"off")==0)
57819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				ForceDefault = 0;
57919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			else {
58019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				fprintf (stderr,"Error - Illegal value: %s %s\n",option,value);
58119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				fclose (fp);return (0);
58219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			}
58319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		}
5843984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
58519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		else {
58619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			fprintf (stderr,"Error - Unknown option: %s\n",option);
58719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			fclose (fp);return (0);
58819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		}
58919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
59019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
59119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	printf ("Configuration completed\n");
59219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	fclose (fp);
59319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	return (1);
59419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
59519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
59619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectint get_next_option (FILE *fp,char *option,char *value)
59719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
59819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
59919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	char *ptr;
60019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	char buffer [600];
6013984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
60219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (feof (fp)) return (0);
60319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	do{
60419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		if (feof (fp)) return (0);
60519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		fgets (buffer,500,fp);
60619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	} while (buffer [0]=='#' || buffer [0]=='\n');
6073984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
60819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	ptr=parse_word (buffer,option);
60919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	ptr=parse_word (ptr,value);
61019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	return (1);
61119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
61219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
61319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid check_mounted (char *name)
61419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
61519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
61619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	FILE *fp;
61719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	char *ptr;
61819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	char current_line [500],current_word [200];
61919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
62019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	mounted=0;
6213984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
62219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if ( (fp=fopen ("/etc/mtab","rt"))==NULL) {
62319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		wprintw (command_win,"Error - Failed to open /etc/mtab. Assuming filesystem is mounted.\n");
62419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		refresh_command_win ();mounted=1;return;
62519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	};
6263984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
62719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	while (!feof (fp)) {
62819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		fgets (current_line,500,fp);
6293984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt		if (feof (fp)) break;
63019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		ptr=parse_word (current_line,current_word);
63119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		if (strcasecmp (current_word,name)==0) {
63219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			mounted=1;fclose (fp);return;
63319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		}
63419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	};
63519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
63619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	fclose (fp);
6373984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
6383984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt	return;
63919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
640