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