summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChristophe Grenier <grenier@cgsecurity.org>2012-08-09 13:03:40 +0200
committerChristophe Grenier <grenier@cgsecurity.org>2012-08-09 13:03:40 +0200
commit5c5f3c68450732370248085178dfde00d3688983 (patch)
treea9dcb6fcdef57230eb10c55f1be7a5fef9436634 /src
parenta904c5a049d9a8b31ac1707c1563b881b9e67006 (diff)
List the number of sectors when head per cylinder and sector per head are 1
TestDisk: Display the sector size
Diffstat (limited to 'src')
-rw-r--r--src/hdaccess.c26
-rw-r--r--src/tdiskop.c33
2 files changed, 36 insertions, 23 deletions
diff --git a/src/hdaccess.c b/src/hdaccess.c
index 0f84267..7b0c6a3 100644
--- a/src/hdaccess.c
+++ b/src/hdaccess.c
@@ -149,8 +149,6 @@ struct info_file_struct
};
static void autoset_geometry(disk_t * disk_car, const unsigned char *buffer, const int verbose);
-static const char *file_description(disk_t *disk_car);
-static const char *file_description_short(disk_t *disk_car);
static int file_clean(disk_t *disk_car);
static int file_pread(disk_t *disk_car, void *buf, const unsigned int count, const uint64_t offset);
static void *file_pread_fast(disk_t *disk, void *buf, const unsigned int count, const uint64_t offset);
@@ -1057,16 +1055,24 @@ static uint64_t compute_device_size(const int hd_h, const char *device, const in
}
#endif
-static const char *file_description(disk_t *disk_car)
+static const char *file_description(disk_t *disk)
{
- const struct info_file_struct *data=(const struct info_file_struct *)disk_car->data;
+ const struct info_file_struct *data=(const struct info_file_struct *)disk->data;
char buffer_disk_size[100];
- size_to_unit(disk_car->disk_size, buffer_disk_size);
- snprintf(disk_car->description_txt, sizeof(disk_car->description_txt),"Disk %s - %s - CHS %lu %u %u%s",
- disk_car->device, buffer_disk_size,
- disk_car->geom.cylinders, disk_car->geom.heads_per_cylinder, disk_car->geom.sectors_per_head,
- ((data->mode&O_RDWR)==O_RDWR?"":" (RO)"));
- return disk_car->description_txt;
+ size_to_unit(disk->disk_size, buffer_disk_size);
+ if(disk->geom.heads_per_cylinder == 1 && disk->geom.sectors_per_head == 1)
+ snprintf(disk->description_txt, sizeof(disk->description_txt),
+ "Disk %s - %s - %lu sectors%s",
+ disk->device, buffer_disk_size,
+ disk->geom.cylinders,
+ ((data->mode&O_RDWR)==O_RDWR?"":" (RO)"));
+ else
+ snprintf(disk->description_txt, sizeof(disk->description_txt),
+ "Disk %s - %s - CHS %lu %u %u%s",
+ disk->device, buffer_disk_size,
+ disk->geom.cylinders, disk->geom.heads_per_cylinder, disk->geom.sectors_per_head,
+ ((data->mode&O_RDWR)==O_RDWR?"":" (RO)"));
+ return disk->description_txt;
}
static const char *file_description_short(disk_t *disk_car)
diff --git a/src/tdiskop.c b/src/tdiskop.c
index 374f4d6..2df38bb 100644
--- a/src/tdiskop.c
+++ b/src/tdiskop.c
@@ -49,7 +49,7 @@
extern const arch_fnct_t arch_i386;
extern const arch_fnct_t arch_none;
#define INTER_DISK_X 0
-#define INTER_DISK_Y 7
+#define INTER_DISK_Y 8
static int menu_disk_cli(disk_t *disk_car, const int verbose,int dump_ind, const int saveheader, char **current_cmd)
@@ -106,7 +106,7 @@ static int menu_disk_cli(disk_t *disk_car, const int verbose,int dump_ind, const
}
#ifdef HAVE_NCURSES
-static int menu_disk_ncurses(disk_t *disk_car, const int verbose,int dump_ind, const int saveheader, char **current_cmd)
+static int menu_disk_ncurses(disk_t *disk, const int verbose,int dump_ind, const int saveheader, char **current_cmd)
{
int align=1;
int ask_part_order=0;
@@ -126,17 +126,24 @@ static int menu_disk_ncurses(disk_t *disk_car, const int verbose,int dump_ind, c
{'E',"Editor","Basic disk editor"},
{0,NULL,NULL}
};
- unsigned int menu=(disk_car->arch == &arch_none ? 1 : 0);
+ unsigned int menu=(disk->arch == &arch_none ? 1 : 0);
strcpy(options, "AGOPTQ");
- if(disk_car->arch->write_MBR_code!=NULL)
+ if(disk->arch->write_MBR_code!=NULL)
strcat(options,"C");
- if(disk_car->arch->erase_list_part!=NULL)
+ if(disk->arch->erase_list_part!=NULL)
strcat(options,"D");
while(1)
{
aff_copy(stdscr);
wmove(stdscr,5,0);
- wprintw(stdscr,"%s\n",disk_car->description(disk_car));
+ wprintw(stdscr, "%s\n", disk->description_short(disk));
+ wmove(stdscr,6,0);
+ if(disk->geom.heads_per_cylinder == 1 && disk->geom.sectors_per_head == 1)
+ wprintw(stdscr, " %lu sectors", disk->geom.cylinders);
+ else
+ wprintw(stdscr, " CHS %lu %u %u",
+ disk->geom.cylinders, disk->geom.heads_per_cylinder, disk->geom.sectors_per_head);
+ wprintw(stdscr, " - sector size=%u", disk->sector_size);
wmove(stdscr,20,0);
wprintw(stdscr,"Note: Correct disk geometry is required for a successful recovery. 'Analyse'");
wmove(stdscr,21,0);
@@ -150,22 +157,22 @@ static int menu_disk_ncurses(disk_t *disk_car, const int verbose,int dump_ind, c
case 'A':
{
list_part_t *list_part;
- list_part=interface_analyse(disk_car, verbose, saveheader, current_cmd);
- interface_recovery(disk_car, list_part, verbose, dump_ind, align, ask_part_order, expert, current_cmd);
+ list_part=interface_analyse(disk, verbose, saveheader, current_cmd);
+ interface_recovery(disk, list_part, verbose, dump_ind, align, ask_part_order, expert, current_cmd);
part_free_list(list_part);
}
break;
case 'd':
case 'D':
- write_clean_table(disk_car);
+ write_clean_table(disk);
break;
case 'c':
case 'C':
- write_MBR_code(disk_car);
+ write_MBR_code(disk);
break;
case 'g':
case 'G':
- change_geometry(disk_car, current_cmd);
+ change_geometry(disk, current_cmd);
break;
case 'o':
case 'O':
@@ -175,11 +182,11 @@ static int menu_disk_ncurses(disk_t *disk_car, const int verbose,int dump_ind, c
break;
case 't':
case 'T':
- interface_adv(disk_car, verbose, dump_ind, expert, current_cmd);
+ interface_adv(disk, verbose, dump_ind, expert, current_cmd);
break;
case 'e':
case 'E':
- interface_editor(disk_car);
+ interface_editor(disk);
break;
case 'q':
case 'Q':