Mercurial > hg > toybox
annotate toys/pending/fdisk.c @ 1396:e0c9c5424864 draft
Isaac Dunham spotted that dhcp was also reimplementing daemon().
author | Rob Landley <rob@landley.net> |
---|---|
date | Sun, 20 Jul 2014 21:34:49 -0500 |
parents | e59d4322331b |
children |
rev | line source |
---|---|
989
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1 /* fdisk.c - fdisk program to modify partitions on disk. |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
2 * |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
3 * Copyright 2012 Ashwini Kumar <ak.ashwini@gmail.com> |
997
8b1814e4c987
Ashwini Sharma said that Kyungwan Han should be in the contact info for the commands he sent recently.
Rob Landley <rob@landley.net>
parents:
989
diff
changeset
|
4 * Copyright 2013 Kyungwan Han <asura321@gmail.com> |
989
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
5 * |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
6 * No Standard. |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
7 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
8 USE_FDISK(NEWTOY(fdisk, "C#<0H#<0S#<0b#<512ul", TOYFLAG_SBIN)) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
9 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
10 config FDISK |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
11 bool "fdisk" |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
12 default n |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
13 help |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
14 usage: fdisk [-lu] [-C CYLINDERS] [-H HEADS] [-S SECTORS] [-b SECTSZ] DISK |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
15 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
16 Change partition table |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
17 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
18 -u Start and End are in sectors (instead of cylinders) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
19 -l Show partition table for each DISK, then exit |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
20 -b size sector size (512, 1024, 2048 or 4096) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
21 -C CYLINDERS Set number of cylinders/heads/sectors |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
22 -H HEADS |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
23 -S SECTORS |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
24 */ |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
25 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
26 #define FOR_fdisk |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
27 #include "toys.h" |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
28 #include <linux/hdreg.h> |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
29 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
30 GLOBALS( |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
31 long sect_sz; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
32 long sectors; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
33 long heads; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
34 long cylinders; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
35 ) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
36 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
37 #define EXTENDED 0x05 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
38 #define WIN98_EXTENDED 0x0f |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
39 #define LINUX_NATIVE 0x83 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
40 #define LINUX_EXTENDED 0x85 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
41 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
42 #define SECTOR_SIZE 512 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
43 #define ONE_K 1024 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
44 #define PARTITION_MAX 60 //partition max is modifiable |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
45 #define IS_EXTENDED(i) ((i) == EXTENDED || (i) == WIN98_EXTENDED || (i) == LINUX_EXTENDED) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
46 #define sector(s) ((s) & 0x3f) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
47 #define cylinder(s, c) ((c) | (((s) & 0xc0) << 2)) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
48 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
49 typedef off_t sector_t; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
50 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
51 struct partition { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
52 unsigned char boot_ind, head, sector, cyl, sys_ind, end_head, |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
53 end_sector, end_cyl, start4[4], size4[4]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
54 }; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
55 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
56 struct part_entry { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
57 struct partition *part; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
58 char *sec_buffer; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
59 sector_t start_offset; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
60 int modified; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
61 }; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
62 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
63 struct part_types { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
64 int id; |
998
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
65 char type[24]; |
989
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
66 } sys_types[] = { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
67 {0x00, "Empty"}, {0x01, "FAT12"}, {0x04, "FAT16 <32M"}, {0x05, "Extended"}, |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
68 {0x06, "FAT16"}, {0x07, "HPFS/NTFS"}, {0x0a, "OS/2 Boot Manager"}, |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
69 {0x0b, "Win95 FAT32"}, {0x0c, "Win95 FAT32 (LBA)"}, {0x0e, "Win95 FAT16 (LBA)"}, |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
70 {0x0f, "Win95 Ext'd (LBA)"}, {0x11, "Hidden FAT12"}, {0x12, "Compaq diagnostics"}, |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
71 {0x14, "Hidden FAT16 <32M"}, {0x16, "Hidden FAT16"}, {0x17, "Hidden HPFS/NTFS"}, |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
72 {0x1b, "Hidden Win95 FAT32"}, {0x1c, "Hidden W95 FAT32 (LBA)"}, {0x1e, "Hidden W95 FAT16 (LBA)"}, |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
73 {0x3c, "Part.Magic recovery"}, {0x41, "PPC PReP Boot"}, {0x42, "SFS"}, |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
74 {0x63, "GNU HURD or SysV"}, {0x80, "Old Minix"}, {0x81, "Minix / old Linux"}, |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
75 {0x82, "Linux swap"}, {0x83, "Linux"}, {0x84, "OS/2 hidden C: drive"}, |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
76 {0x85, "Linux extended"}, {0x86, "NTFS volume set"}, {0x87, "NTFS volume set"}, |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
77 {0x8e, "Linux LVM"}, {0x9f, "BSD/OS"}, {0xa0, "Thinkpad hibernation"}, |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
78 {0xa5, "FreeBSD"}, {0xa6, "OpenBSD"}, {0xa8, "Darwin UFS"}, {0xa9, "NetBSD"}, |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
79 {0xab, "Darwin boot"}, {0xb7, "BSDI fs"}, {0xb8, "BSDI swap"}, |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
80 {0xbe, "Solaris boot"}, {0xeb, "BeOS fs"}, {0xee, "EFI GPT"}, |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
81 {0xef, "EFI (FAT-12/16/32)"}, {0xf0, "Linux/PA-RISC boot"}, |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
82 {0xf2, "DOS secondary"}, {0xfd, "Linux raid autodetect"}, |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
83 }; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
84 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
85 static int num_parts, disp_unit_cyl, dos_flag, dev_fd = 3; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
86 static long g_cylinders, g_heads, g_sectors, g_sect_size; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
87 static sector_t total_number_sectors, extended_offset; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
88 static char MBRbuf[2048], *disk_device; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
89 struct part_entry partitions[PARTITION_MAX]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
90 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
91 static struct partition* part_offset(char *secbuf, int i) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
92 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
93 return (struct partition*)(secbuf + 0x1be + i*(sizeof(struct partition))); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
94 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
95 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
96 static void set_levalue(unsigned char *cp, sector_t value ) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
97 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
98 uint32_t val = SWAP_LE32(value); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
99 memcpy(cp, (void*)&val, 4); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
100 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
101 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
102 static void set_hsc(struct partition *p, sector_t start, sector_t end) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
103 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
104 if (dos_flag && (start / (g_sectors * g_heads) > 1023)) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
105 start = g_heads * g_sectors * ONE_K - 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
106 p->sector = (start % g_sectors) + 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
107 start /= g_sectors; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
108 p->head = start % g_heads; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
109 start /= g_heads; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
110 p->cyl = start & 0xFF; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
111 p->sector |= (start >> 2) & 0xc0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
112 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
113 if (dos_flag && (end / (g_sectors * g_heads) > 1023)) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
114 end = g_heads * g_sectors * ONE_K - 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
115 p->end_sector = (end % g_sectors) + 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
116 end /= g_sectors; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
117 p->end_head = end % g_heads; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
118 end /= g_heads; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
119 p->end_cyl = end & 0xFF; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
120 p->end_sector |= (end >> 2) & 0xc0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
121 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
122 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
123 static int chs_warn(void) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
124 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
125 if (g_heads && g_sectors && g_cylinders) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
126 return 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
127 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
128 printf("Unknown value(s) for:"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
129 if (!g_heads) printf(" heads"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
130 if (!g_sectors) printf(" sectors"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
131 if (!g_cylinders) printf(" cylinders"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
132 printf(". can set in the expert menu.\n"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
133 return 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
134 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
135 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
136 static void list_types(void) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
137 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
138 int i, adjust = 0, size = ARRAY_LEN(sys_types); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
139 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
140 if(size % 2) adjust = 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
141 for (i = 0; i < (size - adjust); i+=2) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
142 xprintf("%2x %-22s\t\t%2x %-22.22s\n", sys_types[i].id, sys_types[i].type, |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
143 sys_types[i+1].id, sys_types[i+1].type); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
144 if (adjust) xprintf("%2x %-22s\n",sys_types[size-1].id, sys_types[size-1].type); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
145 xputc('\n'); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
146 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
147 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
148 static void read_sec_sz() |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
149 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
150 int arg; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
151 if (ioctl(dev_fd, BLKSSZGET, &arg) == 0) g_sect_size = arg; |
998
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
152 if (toys.optflags & FLAG_b) { |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
153 if (TT.sect_sz != 512 && TT.sect_sz != 1024 && TT.sect_sz != 2048 && |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
154 TT.sect_sz != 4096) { |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
155 toys.exithelp++; |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
156 error_exit("bad sector size"); |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
157 } |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
158 g_sect_size = TT.sect_sz; |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
159 } |
989
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
160 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
161 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
162 static sector_t read_size() |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
163 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
164 uint64_t sec64 = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
165 unsigned long sectors = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
166 if (ioctl(dev_fd, BLKGETSIZE64, &sec64) == 0) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
167 sec64 = sec64 >> 9; //convert to 512 block size. |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
168 if (sec64 != (uint32_t) sec64) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
169 perror_msg("device has more than 2^32 sectors, can't use all of them"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
170 sec64 = (uint32_t) - 1L; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
171 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
172 return sec64; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
173 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
174 if (ioctl(dev_fd, BLKGETSIZE, §ors) == 0) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
175 if (sizeof(long) > sizeof(sector_t) && sectors != (sector_t)sectors) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
176 sectors = (uint32_t) - 1L; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
177 return sectors; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
178 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
179 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
180 static int validate_part_buff(char *buffer) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
181 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
182 if ((buffer[510] != 0x55) || (buffer[511] != 0xAA)) return 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
183 return 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
184 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
185 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
186 static int is_partition_clear(struct partition* p) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
187 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
188 int i = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
189 unsigned char res = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
190 const char *ptr = (const char*)p; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
191 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
192 for (i = 0; i < sizeof(struct partition); i++) res |= (unsigned char)ptr[i]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
193 return (res == 0x00); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
194 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
195 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
196 static uint32_t swap_le32toh(unsigned char *cp) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
197 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
198 uint32_t val; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
199 memcpy((void*)&val, cp, 4); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
200 return le32toh(val); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
201 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
202 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
203 static int check_order(void) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
204 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
205 sector_t first[num_parts], last_seen_val = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
206 int i; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
207 struct part_entry *pe; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
208 struct partition *px; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
209 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
210 for (i = 0; i < num_parts; i++) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
211 if (i == 4) last_seen_val = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
212 pe = &partitions[i]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
213 px = pe->part; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
214 if (px->sys_ind) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
215 first[i] = swap_le32toh(px->start4) + pe->start_offset; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
216 if (last_seen_val > first[i]) return 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
217 last_seen_val = first[i]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
218 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
219 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
220 return 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
221 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
222 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
223 static void read_geometry(struct hd_geometry *disk) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
224 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
225 struct hd_geometry geometry; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
226 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
227 if (ioctl(dev_fd, HDIO_GETGEO, &geometry)) return; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
228 disk->heads = geometry.heads; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
229 disk->sectors = geometry.sectors; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
230 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
231 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
232 /* Read the extended boot record for the |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
233 * logical partion details. |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
234 */ |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
235 static void read_ebr(int idx) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
236 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
237 char *sec_buf = NULL; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
238 sector_t offset = 0, local_start_off = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
239 struct partition *p, *q; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
240 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
241 q = p = partitions[idx].part; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
242 local_start_off = swap_le32toh(p->start4); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
243 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
244 if (!extended_offset) extended_offset = local_start_off; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
245 do { |
1389
e59d4322331b
fdisk : partitions > 60, are deleted, offset entry for extended partitions was wrong.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
1183
diff
changeset
|
246 if (num_parts >= 60) { |
e59d4322331b
fdisk : partitions > 60, are deleted, offset entry for extended partitions was wrong.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
1183
diff
changeset
|
247 xprintf("Warning: deleting partitions after 60\n"); |
e59d4322331b
fdisk : partitions > 60, are deleted, offset entry for extended partitions was wrong.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
1183
diff
changeset
|
248 memset(q, 0, sizeof(struct partition)); //clear_partition |
e59d4322331b
fdisk : partitions > 60, are deleted, offset entry for extended partitions was wrong.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
1183
diff
changeset
|
249 partitions[num_parts-1].modified = 1; |
e59d4322331b
fdisk : partitions > 60, are deleted, offset entry for extended partitions was wrong.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
1183
diff
changeset
|
250 break; |
e59d4322331b
fdisk : partitions > 60, are deleted, offset entry for extended partitions was wrong.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
1183
diff
changeset
|
251 } |
e59d4322331b
fdisk : partitions > 60, are deleted, offset entry for extended partitions was wrong.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
1183
diff
changeset
|
252 |
989
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
253 sec_buf = xzalloc(g_sect_size); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
254 partitions[num_parts].part = part_offset(sec_buf, 0); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
255 partitions[num_parts].sec_buffer = sec_buf; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
256 offset = swap_le32toh(q->start4); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
257 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
258 if (num_parts > 4) offset += local_start_off; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
259 partitions[num_parts].start_offset = offset; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
260 xlseek(dev_fd, (off_t)(offset * g_sect_size), SEEK_SET); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
261 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
262 if (g_sect_size != readall(dev_fd, sec_buf, g_sect_size)) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
263 close(dev_fd); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
264 error_exit("Couldn't read sector zero\n"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
265 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
266 num_parts++; //extended partions present. |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
267 q = part_offset(sec_buf, 1); |
1389
e59d4322331b
fdisk : partitions > 60, are deleted, offset entry for extended partitions was wrong.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
1183
diff
changeset
|
268 } while (!is_partition_clear(q) && IS_EXTENDED(q->sys_ind)); |
989
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
269 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
270 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
271 static void physical_HS(int* h, int *s) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
272 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
273 struct partition *p; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
274 int i, end_h, end_s, e_hh = 0, e_ss = 0, ini = 1, dirty = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
275 const unsigned char *bufp = (const unsigned char *)MBRbuf; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
276 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
277 if (!(validate_part_buff((char*)bufp))) return; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
278 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
279 for (i = 0; i < 4; i++) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
280 p = part_offset((char*)bufp, i); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
281 if (p->sys_ind) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
282 end_h = p->end_head + 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
283 end_s = (p->end_sector & 077); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
284 if (ini) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
285 e_hh = end_h; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
286 e_ss = end_s; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
287 ini = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
288 } else if (e_hh !=end_h || e_ss != end_s) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
289 dirty = 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
290 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
291 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
292 if (!dirty && !ini) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
293 *h = e_hh; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
294 *s = e_ss; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
295 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
296 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
297 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
298 //Reset the primary partition table |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
299 static void reset_boot(int change) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
300 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
301 int i; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
302 for(i = 0; i < 4; i++) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
303 struct part_entry *pe = &partitions[i]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
304 pe->part = part_offset(MBRbuf, i); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
305 pe->start_offset = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
306 pe->sec_buffer = MBRbuf; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
307 pe->modified = change; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
308 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
309 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
310 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
311 static inline void write_table_flag(char *buf) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
312 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
313 buf[510] = 0x55; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
314 buf[511] = 0xaa; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
315 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
316 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
317 /* free the buffers used for holding details of |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
318 * extended logical partions |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
319 */ |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
320 static void free_bufs(void) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
321 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
322 int i = 4; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
323 for (; i < num_parts; i++) free(partitions[i].sec_buffer); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
324 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
325 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
326 static void create_empty_doslabel(void) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
327 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
328 xprintf("Building a new DOS Disklabel. The changes will\n" |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
329 "remain in memory only, until you write it.\n"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
330 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
331 num_parts = 4; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
332 extended_offset = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
333 memset(&MBRbuf[510 - 4*16], 0, 4*16); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
334 write_table_flag(MBRbuf); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
335 partitions[0].modified = 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
336 reset_boot(1); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
337 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
338 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
339 /* Read the Master Boot sector of the device for the |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
340 * partition table entries/details. |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
341 * If any extended partition is found then read the EBR |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
342 * for logical partition details |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
343 */ |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
344 static int read_mbr(char *device, int validate) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
345 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
346 int fd, sector_fac, i, h = 0, s = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
347 struct hd_geometry disk; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
348 fd = open(device, O_RDWR); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
349 if(fd < 0) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
350 perror_msg("can't open '%s'",device); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
351 return 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
352 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
353 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
354 disk_device = strdup(device); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
355 if(fd != dev_fd) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
356 if(dup2(fd, dev_fd) != dev_fd) perror_exit("Can't dup2"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
357 close(fd); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
358 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
359 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
360 //read partition table - MBR |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
361 if (SECTOR_SIZE != readall(dev_fd, MBRbuf, SECTOR_SIZE)) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
362 close(dev_fd); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
363 perror_exit("Couldn't read sector zero\n"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
364 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
365 if (validate && !validate_part_buff(MBRbuf)) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
366 xprintf("Device contains neither a valid DOS " |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
367 "partition table, nor Sun, SGI, OSF or GPT " |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
368 "disklabel\n"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
369 create_empty_doslabel(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
370 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
371 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
372 disk.heads = disk.sectors = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
373 read_geometry(&disk); //CHS values |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
374 total_number_sectors = read_size(); //Device size |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
375 read_sec_sz(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
376 sector_fac = g_sect_size/SECTOR_SIZE; //512 is hardware sector size. |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
377 physical_HS(&h, &s); //physical dimensions may be diferent from HDIO_GETGEO |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
378 g_sectors = (toys.optflags & FLAG_S && TT.sectors)? TT.sectors : s? s : disk.sectors?disk.sectors : 63; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
379 g_heads = (toys.optflags & FLAG_H && TT.heads)? TT.heads : h? h : disk.heads? disk.heads : 255; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
380 g_cylinders = total_number_sectors/(g_heads * g_sectors * sector_fac); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
381 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
382 if (!g_cylinders) g_cylinders = toys.optflags & FLAG_C? TT.cylinders : 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
383 if ((g_cylinders > ONE_K) && !(toys.optflags & (FLAG_l | FLAG_S))) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
384 xprintf("\nThe number of cylinders for this disk is set to %lu.\n" |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
385 "There is nothing wrong with that, but this is larger than 1024,\n" |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
386 "and could in certain setups cause problems.\n", g_cylinders); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
387 for (i = 0; i < num_parts; i++) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
388 if (IS_EXTENDED(partitions[i].part->sys_ind)) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
389 read_ebr(i); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
390 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
391 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
392 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
393 chs_warn(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
394 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
395 return 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
396 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
397 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
398 static char* get_type(int sys_ind) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
399 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
400 int i, size = ARRAY_LEN(sys_types); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
401 for (i = 0; i < size; i++) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
402 if (sys_ind == sys_types[i].id) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
403 return sys_types[i].type; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
404 return "Unknown"; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
405 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
406 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
407 static void consistency_check(const struct partition *p, int partition) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
408 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
409 unsigned physbc, physbh, physbs, physec, physeh, physes; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
410 unsigned lbc, lbh, lbs, lec, leh, les; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
411 sector_t start, end; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
412 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
413 if (!g_heads || !g_sectors || (partition >= 4)) return; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
414 // physical beginning c, h, s |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
415 physbc = cylinder(p->sector,p->cyl); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
416 physbh = p->head; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
417 physbs = sector(p->sector); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
418 // physical ending c, h, s |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
419 physec = cylinder(p->end_sector, p->end_cyl); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
420 physeh = p->end_head; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
421 physes = sector(p->end_sector); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
422 // logical begin and end CHS values |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
423 start = swap_le32toh((unsigned char*)(p->start4)); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
424 end = start + swap_le32toh((unsigned char*)(p->size4)) -1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
425 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
426 lbc = start/(g_sectors * g_heads); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
427 lbh = (start/g_sectors) % g_heads; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
428 lbs = (start % g_sectors) + 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
429 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
430 lec = end/(g_sectors * g_heads); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
431 leh = (end/g_sectors) % g_heads; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
432 les = (end % g_sectors) + 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
433 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
434 //Logical and Physical diff |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
435 if (g_cylinders <= ONE_K && (physbc != lbc || physbh != lbh || physbs != lbs)) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
436 xprintf("Partition %u has different physical/logical beginings (Non-Linux?): \n", partition+1); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
437 xprintf("phys = (%u %u %u) ",physbc, physbh, physbs); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
438 xprintf("logical = (%u %u %u)\n", lbc, lbh, lbs); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
439 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
440 if (g_cylinders <= ONE_K && (physec != lec || physeh != leh || physes != les)) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
441 xprintf("Partition %u has different physical/logical endings: \n", partition+1); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
442 xprintf("phys = (%u %u %u) ",physec, physeh, physes); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
443 xprintf("logical = (%u %u %u)\n", lec, leh, les); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
444 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
445 // Ending on cylinder boundary? |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
446 if (physeh != (g_heads - 1) || physes != g_sectors) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
447 xprintf("Partition %u does not end on cylinder boundary\n", partition + 1); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
448 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
449 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
450 // List the partition details |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
451 static void list_partitions(int validate) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
452 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
453 struct partition *p; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
454 uint32_t start_cyl, end_cyl, start_sec, end_sec, blocks, secs; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
455 char boot, lastchar = '\0', *dev = disk_device; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
456 int i = 0, len = strlen(disk_device), odds = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
457 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
458 if (validate && !validate_part_buff(MBRbuf)) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
459 close(dev_fd); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
460 toys.exitval = 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
461 xprintf("Device %s: doesn't contain a valid partition table\n", disk_device); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
462 return; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
463 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
464 if (isdigit(dev[len - 1])) lastchar = 'p'; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
465 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
466 xprintf("%*s Boot Start End Blocks Id System\n", len+1, "Device"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
467 for (i = 0; i < num_parts; i++) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
468 p = partitions[i].part; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
469 if (is_partition_clear(p)) continue; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
470 |
1389
e59d4322331b
fdisk : partitions > 60, are deleted, offset entry for extended partitions was wrong.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
1183
diff
changeset
|
471 boot = ((p->boot_ind == 0x80)?'*':(!p->boot_ind)?' ':'?'); |
989
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
472 start_sec = swap_le32toh(p->start4) + partitions[i].start_offset; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
473 secs = swap_le32toh(p->size4); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
474 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
475 if ((start_sec + secs) == 0) end_sec = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
476 else end_sec = start_sec + secs -1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
477 start_cyl = start_sec/(g_heads * g_sectors) + 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
478 end_cyl = end_sec/(g_heads * g_sectors) + 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
479 blocks = secs; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
480 if (g_sect_size < ONE_K) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
481 blocks /= (ONE_K/g_sect_size); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
482 odds = secs %(ONE_K/g_sect_size); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
483 } else if (g_sect_size > ONE_K) blocks *= (g_sect_size/ONE_K); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
484 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
485 if (lastchar) xprintf("%s%c%d",dev, lastchar, i+1); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
486 else xprintf("%s%d",dev, i+1); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
487 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
488 xprintf(" %c %11u %11u %11u%c %2x %s\n", |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
489 boot, |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
490 disp_unit_cyl == 0? start_sec: start_cyl, |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
491 disp_unit_cyl == 0? end_sec: end_cyl, |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
492 blocks,odds?'+':' ', p->sys_ind, get_type(p->sys_ind)); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
493 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
494 consistency_check(p, i); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
495 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
496 if (check_order()) xprintf("\nPartition table entries are not in disk order"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
497 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
498 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
499 //Print device details |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
500 static void print_mbr(int validate) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
501 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
502 unsigned long long bytes = ((unsigned long long)total_number_sectors << 9); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
503 long mbytes = bytes/1000000; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
504 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
505 if (mbytes < 10000) xprintf("Disk %s: %lu MB, %llu bytes\n", disk_device, mbytes, bytes); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
506 else xprintf("Disk %s: %lu.%lu GB, %llu bytes\n", disk_device, mbytes/1000, (mbytes/100)%10, bytes); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
507 xprintf("%ld heads, %ld sectors/track, %ld cylinders", g_heads, g_sectors, g_cylinders); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
508 if (!disp_unit_cyl) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
509 xprintf(", total %lld sectors\n", total_number_sectors/(g_sect_size/SECTOR_SIZE)); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
510 xprintf("Units = sectors of 1 * %ld = %ld bytes\n",g_sect_size, g_sect_size); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
511 } else xprintf("\nUnits = cylinders of %ld * %ld = %ld bytes\n\n", |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
512 g_heads * g_sectors, g_sect_size, g_heads * g_sectors * g_sect_size); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
513 list_partitions(validate); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
514 xputc('\n'); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
515 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
516 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
517 static void init_members(void) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
518 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
519 int i = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
520 num_parts = 4; //max of primaries in a part table |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
521 disp_unit_cyl = dos_flag = 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
522 extended_offset = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
523 g_sect_size = SECTOR_SIZE; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
524 for (i = 0; i < num_parts; i++) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
525 partitions[i].part = part_offset(MBRbuf, i); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
526 partitions[i].sec_buffer = MBRbuf; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
527 partitions[i].modified = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
528 partitions[i].start_offset = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
529 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
530 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
531 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
532 static int read_input(char *mesg, char *outp) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
533 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
534 char *p; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
535 int size = 0; |
998
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
536 do { |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
537 xprintf("%s", mesg); |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
538 p = fgets(toybuf, 80, stdin); |
989
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
539 |
998
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
540 if (!p || !(size = strlen(p))) exit(0); |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
541 if (p[size-1] == '\n') p[--size] = '\0'; |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
542 } while (!size); |
989
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
543 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
544 while (*p != '\0' && *p <= ' ') p++; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
545 if (outp) memcpy(outp, p, strlen(p) + 1); //1 for nul |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
546 return *p; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
547 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
548 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
549 static int read_hex(char *mesg) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
550 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
551 int val; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
552 char input[80], *endp; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
553 while (1) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
554 read_input(mesg, input); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
555 if ((*input | 0x20) == 'l') { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
556 list_types(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
557 memset(input, 0, 80); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
558 continue; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
559 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
560 val = strtoul(input, &endp, 16); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
561 if (endp && *endp) continue; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
562 if (val <= 0xff) return val; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
563 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
564 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
565 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
566 /* Delete an exiting partition, |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
567 * if its primary, then just clear the partition details |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
568 * if extended, then clear the partition details, also for logical |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
569 * if only logical, then move the later partitions backwards 1 step |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
570 */ |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
571 void delete_partition(int i) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
572 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
573 int sys_id, looper = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
574 struct partition *p, *q, *ext_p, *ext_q; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
575 sector_t new_start; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
576 struct part_entry *pe = &partitions[i]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
577 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
578 if (chs_warn()) return; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
579 p = pe->part; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
580 sys_id = p->sys_ind; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
581 if (!sys_id) xprintf("Partition %u is empty\n", i+1); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
582 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
583 if (i < 4 && !IS_EXTENDED(sys_id)) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
584 memset(p, 0, sizeof(struct partition)); //clear_partition |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
585 pe->modified = 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
586 } else if (i < 4 && IS_EXTENDED(sys_id)) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
587 memset(p, 0, sizeof(struct partition)); //clear_partition |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
588 pe->modified = 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
589 for (looper = 4; looper < num_parts; looper++) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
590 pe = &partitions[looper]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
591 p = pe->part; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
592 if (is_partition_clear(p)) break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
593 else { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
594 memset(p, 0, sizeof(struct partition)); //clear_partition |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
595 pe->modified = 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
596 free(pe->sec_buffer); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
597 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
598 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
599 extended_offset = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
600 num_parts = 4; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
601 } else { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
602 //only logical is delete, need to move the rest of them backwards |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
603 if (i == 4) { //move partiton# 6 to 5. |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
604 partitions[i].modified = 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
605 if (num_parts > i+1) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
606 q = partitions[i + 1].part; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
607 *p = *q; //copy the part table |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
608 ext_p = part_offset(partitions[i].sec_buffer, 1); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
609 ext_q = part_offset(partitions[i + 1].sec_buffer, 1); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
610 *ext_p = *ext_q; //copy the extended info pointer |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
611 // change the start of the 4th partiton. |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
612 new_start = partitions[i + 1].start_offset + swap_le32toh(q->start4) - extended_offset; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
613 new_start = SWAP_LE32(new_start); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
614 memcpy(p->start4, (void *)&new_start, 4); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
615 } else { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
616 memset(partitions[i].part, 0, sizeof(struct partition)); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
617 return; //only logical |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
618 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
619 } else if (i > 4) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
620 ext_p = part_offset(partitions[i-1].sec_buffer, 1); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
621 ext_q = part_offset(partitions[i].sec_buffer, 1); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
622 memcpy((void*)ext_p, (void *)ext_q, sizeof(struct partition)); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
623 partitions[i-1].modified = 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
624 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
625 if (i == 4) looper = i+2; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
626 else if (i > 4) looper = i+1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
627 for (; looper < num_parts; looper++) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
628 partitions[looper-1] = partitions[looper]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
629 num_parts--; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
630 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
631 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
632 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
633 static int ask_partition(int num_parts) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
634 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
635 int val; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
636 while (1) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
637 do { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
638 xprintf("Partition (%u - %u):", 1, num_parts); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
639 fgets(toybuf, 80, stdin); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
640 } while (!isdigit(*toybuf)); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
641 val = atoi(toybuf); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
642 if (val > 0 && val <= num_parts) return val; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
643 else xprintf("Invalid number entered\n"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
644 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
645 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
646 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
647 static void toggle_active_flag(int i) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
648 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
649 struct partition *p = partitions[i].part; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
650 if (is_partition_clear(p)) xprintf("Partition %u is empty\n", i+1); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
651 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
652 if (IS_EXTENDED(p->sys_ind) && !p->boot_ind) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
653 xprintf("WARNING: Partition %u is an extended partition\n", i + 1); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
654 p->boot_ind = p->boot_ind == 0x80?0 : 0x80; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
655 partitions[i].modified = 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
656 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
657 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
658 //Write the partition details from Buffer to Disk. |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
659 void write_table(void) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
660 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
661 int i =0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
662 struct part_entry *pe; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
663 sector_t offset; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
664 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
665 for (i = 0; i < 4; i++) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
666 if (partitions[i].modified) partitions[3].modified = 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
667 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
668 for (i = 3; i < num_parts; i++) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
669 pe = &partitions[i]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
670 write_table_flag(pe->sec_buffer); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
671 offset = pe->start_offset; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
672 if (pe->modified == 1) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
673 xlseek(dev_fd, offset * g_sect_size, SEEK_SET); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
674 xwrite(dev_fd, pe->sec_buffer, g_sect_size); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
675 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
676 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
677 xprintf("The partition table has been altered.\n"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
678 xprintf("Calling ioctl() to re-read partition table\n"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
679 sync(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
680 for (i = 4; i < num_parts; i++) free(partitions[i].sec_buffer); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
681 if(ioctl(dev_fd, BLKRRPART, NULL) < 0) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
682 perror_exit("WARNING: rereading partition table failed, kernel still uses old table"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
683 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
684 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
685 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
686 /* try to find a partition for deletion, if only |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
687 * one, then select the same, else ask from USER |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
688 */ |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
689 static int get_non_free_partition(int max) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
690 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
691 int num = -1, i = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
692 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
693 for (i = 0; i < max; i++) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
694 if (!is_partition_clear(partitions[i].part)) { |
998
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
695 if (num >= 0) |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
696 return ask_partition(num_parts)-1; |
989
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
697 num = i; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
698 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
699 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
700 (num >= 0) ? xprintf("Selected partition %d\n",num+1): |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
701 xprintf("No partition is defined yet!\n"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
702 return num; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
703 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
704 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
705 /* a try at autodetecting an empty partition table entry, |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
706 * if multiple options then get USER's choce. |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
707 */ |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
708 static int get_free_partition(int max) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
709 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
710 int num = -1, i = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
711 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
712 for (i = 0; i < max; i++) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
713 if (is_partition_clear(partitions[i].part)) { |
998
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
714 if (num >= 0) |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
715 return ask_partition(4)-1; |
989
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
716 num = i; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
717 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
718 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
719 (num >= 0) ? xprintf("Selected partition %d\n",num+1): |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
720 xprintf("All primary partitions have been defined already!\n"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
721 return num; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
722 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
723 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
724 //taking user input for partition start/end sectors/cyinders |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
725 static uint32_t ask_value(char *mesg, sector_t left, sector_t right, sector_t defalt) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
726 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
727 char *str = toybuf; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
728 uint32_t val; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
729 int use_default = 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
730 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
731 while (1) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
732 use_default = 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
733 do { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
734 xprintf("%s",mesg); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
735 fgets(str, 80, stdin); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
736 } while (!isdigit(*str) && (*str != '\n') |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
737 && (*str != '-') && (*str != '+') && (!isblank(*str))); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
738 while (isblank(*str)) str++; //remove leading white spaces |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
739 if (*str == '+' || *str == '-') { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
740 int minus = (*str == '-'); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
741 int absolute = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
742 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
743 val = atoi(str + 1); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
744 while (isdigit(*++str)) use_default = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
745 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
746 switch (*str) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
747 case 'c': |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
748 case 'C': |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
749 if (!disp_unit_cyl) val *= g_heads * g_sectors; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
750 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
751 case 'K': |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
752 absolute = ONE_K; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
753 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
754 case 'k': |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
755 absolute = 1000; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
756 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
757 case 'm': |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
758 case 'M': |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
759 absolute = 1000000; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
760 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
761 case 'g': |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
762 case 'G': |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
763 absolute = 1000000000; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
764 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
765 default: |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
766 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
767 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
768 if (absolute) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
769 unsigned long long bytes = (unsigned long long) val * absolute; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
770 unsigned long unit = (disp_unit_cyl && (g_heads * g_sectors))? g_heads * g_sectors : 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
771 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
772 unit = unit * g_sect_size; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
773 bytes += unit/2; // rounding |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
774 bytes /= unit; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
775 val = bytes; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
776 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
777 if (minus) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
778 val = -val; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
779 val += left; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
780 } else { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
781 val = atoi(str); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
782 while (isdigit(*str)) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
783 str++; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
784 use_default = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
785 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
786 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
787 if(use_default) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
788 val = defalt; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
789 xprintf("Using default value %lld\n", defalt); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
790 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
791 if (val >= left && val <= right) return val; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
792 else xprintf("Value out of range\n"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
793 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
794 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
795 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
796 //validating if the start given falls in a limit or not |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
797 static int validate(int start_index, sector_t* begin,sector_t* end, sector_t start |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
798 , int asked) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
799 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
800 int i, valid = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
801 for (i = start_index; i < num_parts; i++) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
802 if (start >= begin[i] && start <= end[i]) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
803 if (asked) xprintf("Sector %lld is already allocated\n",start); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
804 valid = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
805 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
806 } else valid = 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
807 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
808 return valid; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
809 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
810 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
811 //get the start sector/cylinder of a new partition |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
812 static sector_t ask_start_sector(int idx, sector_t* begin, sector_t* end, int ext_idx) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
813 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
814 sector_t start, limit, temp = 0, start_cyl, limit_cyl, offset = 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
815 char mesg[256]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
816 int i, asked = 0, valid = 0, start_index = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
817 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
818 if (dos_flag) offset = g_sectors; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
819 start = offset; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
820 if (disp_unit_cyl) limit = (sector_t)g_sectors * g_heads * g_cylinders - 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
821 else limit = total_number_sectors - 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
822 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
823 if (disp_unit_cyl) //make the begin of every partition to cylnder boundary |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
824 for (i = 0; i < num_parts; i++) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
825 begin[i] = (begin[i]/(g_heads* g_sectors)) * (g_heads* g_sectors); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
826 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
827 if (idx >= 4) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
828 if (!begin[ext_idx] && extended_offset) begin[ext_idx] = extended_offset; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
829 start = begin[ext_idx] + offset; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
830 limit = end[ext_idx]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
831 start_index = 4; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
832 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
833 do { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
834 if (asked) valid = validate(start_index, begin, end, start, asked); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
835 if (valid) break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
836 |
998
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
837 do { |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
838 for (i = start_index; i < num_parts; i++) |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
839 if (start >= begin[i] && start <= end[i]) |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
840 start = end[i] + 1 + ((idx >= 4)? offset : 0); |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
841 } while (!validate(start_index, begin, end, start, 0)); |
989
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
842 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
843 start_cyl = start/(g_sectors * g_heads) + 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
844 limit_cyl = limit/(g_sectors * g_heads) + 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
845 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
846 if (start > limit) break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
847 sprintf(mesg, "First %s (%lld - %lld, default %lld): ", disp_unit_cyl? "cylinder" : "sector", |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
848 (long long int)(disp_unit_cyl? start_cyl : start), |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
849 (long long int)(disp_unit_cyl? limit_cyl : limit), |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
850 (long long int)(disp_unit_cyl? start_cyl : start)); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
851 temp = ask_value(mesg, disp_unit_cyl? start_cyl : start, |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
852 disp_unit_cyl? limit_cyl : limit, disp_unit_cyl? start_cyl : start); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
853 asked = 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
854 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
855 if (disp_unit_cyl) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
856 // point to the cylinder start sector |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
857 temp = (temp-1) * g_heads * g_sectors; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
858 if (temp < start) //the boundary is falling in the already used sectors. |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
859 temp = start; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
860 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
861 start = temp; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
862 } while (asked && !valid); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
863 return start; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
864 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
865 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
866 //get the end sector/cylinder of a new partition |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
867 static sector_t ask_end_sector(int idx, sector_t* begin, sector_t* end, int ext_idx, sector_t start_sec) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
868 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
869 sector_t limit, temp = 0, start_cyl, limit_cyl, start = start_sec; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
870 char mesg[256]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
871 int i; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
872 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
873 if (disp_unit_cyl) limit = (sector_t)g_sectors * g_heads * g_cylinders - 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
874 else limit = total_number_sectors - 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
875 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
876 if (disp_unit_cyl) //make the begin of every partition to cylnder boundary |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
877 for (i = 0; i < num_parts; i++) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
878 begin[i] = (begin[i]/(g_heads* g_sectors)) * (g_heads* g_sectors); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
879 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
880 if (idx >= 4) limit = end[ext_idx]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
881 |
1389
e59d4322331b
fdisk : partitions > 60, are deleted, offset entry for extended partitions was wrong.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
1183
diff
changeset
|
882 for (i = 0; i < num_parts; i++) { |
e59d4322331b
fdisk : partitions > 60, are deleted, offset entry for extended partitions was wrong.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
1183
diff
changeset
|
883 struct part_entry *pe = &partitions[i]; |
e59d4322331b
fdisk : partitions > 60, are deleted, offset entry for extended partitions was wrong.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
1183
diff
changeset
|
884 if (start < pe->start_offset && limit >= pe->start_offset) limit = pe->start_offset - 1; |
989
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
885 if (start < begin[i] && limit >= begin[i]) limit = begin[i] - 1; |
1389
e59d4322331b
fdisk : partitions > 60, are deleted, offset entry for extended partitions was wrong.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
1183
diff
changeset
|
886 } |
989
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
887 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
888 start_cyl = start/(g_sectors * g_heads) + 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
889 limit_cyl = limit/(g_sectors * g_heads) + 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
890 if (limit < start) { //the boundary is falling in the already used sectors. |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
891 xprintf("No Free sectors available\n"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
892 return 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
893 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
894 sprintf(mesg, "Last %s or +size or +sizeM or +sizeK (%lld - %lld, default %lld): ", |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
895 disp_unit_cyl? "cylinder" : "sector", |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
896 (long long int)(disp_unit_cyl? start_cyl : start), |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
897 (long long int)(disp_unit_cyl? limit_cyl : limit), |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
898 (long long int)(disp_unit_cyl? limit_cyl : limit)); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
899 temp = ask_value(mesg, disp_unit_cyl? start_cyl : start, |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
900 disp_unit_cyl? limit_cyl : limit, disp_unit_cyl? limit_cyl : limit); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
901 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
902 if (disp_unit_cyl) { // point to the cylinder start sector |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
903 temp = temp * g_heads * g_sectors - 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
904 if (temp > limit) temp = limit; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
905 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
906 if (temp < start) { //the boundary is falling in the already used sectors. |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
907 xprintf("No Free sectors available\n"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
908 return 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
909 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
910 return temp; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
911 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
912 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
913 // add a new partition to the partition table |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
914 static int add_partition(int idx, int sys_id) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
915 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
916 int i, ext_idx = -1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
917 sector_t start, end, begin_sec[num_parts], end_sec[num_parts]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
918 struct part_entry *pe = &partitions[idx]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
919 struct partition *p = pe->part; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
920 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
921 if (p && !is_partition_clear(p)) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
922 xprintf("Partition %u is already defined, delete it to re-add\n", idx+1); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
923 return 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
924 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
925 for (i = 0; i < num_parts; i++) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
926 pe = &partitions[i]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
927 p = pe->part; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
928 if (is_partition_clear(p)) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
929 begin_sec[i] = 0xffffffff; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
930 end_sec[i] = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
931 } else { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
932 begin_sec[i] = swap_le32toh(p->start4) + pe->start_offset; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
933 end_sec[i] = begin_sec[i] + swap_le32toh(p->size4) - 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
934 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
935 if (IS_EXTENDED(p->sys_ind)) ext_idx = i; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
936 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
937 start = ask_start_sector(idx, begin_sec, end_sec, ext_idx); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
938 end = ask_end_sector(idx, begin_sec, end_sec, ext_idx, start); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
939 if (!end) return 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
940 //Populate partition table entry - 16 bytes |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
941 pe = &partitions[idx]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
942 p = pe->part; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
943 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
944 if (idx > 4) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
945 if (dos_flag) pe->start_offset = start - (sector_t)g_sectors; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
946 else pe->start_offset = start - 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
947 if (pe->start_offset == extended_offset) pe->start_offset++; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
948 if (!dos_flag) start++; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
949 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
950 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
951 set_levalue(p->start4, start - pe->start_offset); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
952 set_levalue(p->size4, end - start + 1); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
953 set_hsc(p, start, end); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
954 p->boot_ind = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
955 p->sys_ind = sys_id; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
956 pe->modified = 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
957 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
958 if (idx > 4) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
959 p = partitions[idx-1].part + 1; //extended pointer for logical partitions |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
960 set_levalue(p->start4, pe->start_offset - extended_offset); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
961 set_levalue(p->size4, end - start + 1 + (dos_flag? g_sectors: 1)); |
1389
e59d4322331b
fdisk : partitions > 60, are deleted, offset entry for extended partitions was wrong.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
1183
diff
changeset
|
962 set_hsc(p, pe->start_offset, end); |
989
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
963 p->boot_ind = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
964 p->sys_ind = EXTENDED; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
965 partitions[idx-1].modified = 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
966 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
967 if (IS_EXTENDED(sys_id)) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
968 pe = &partitions[4]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
969 pe->modified = 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
970 pe->sec_buffer = xzalloc(g_sect_size); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
971 pe->part = part_offset(pe->sec_buffer, 0); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
972 pe->start_offset = extended_offset = start; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
973 num_parts = 5; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
974 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
975 return 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
976 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
977 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
978 static void add_logical_partition(void) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
979 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
980 struct part_entry *pe; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
981 if (num_parts > 5 || !is_partition_clear(partitions[4].part)) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
982 pe = &partitions[num_parts]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
983 pe->modified = 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
984 pe->sec_buffer = xzalloc(g_sect_size); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
985 pe->part = part_offset(pe->sec_buffer, 0); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
986 pe->start_offset = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
987 num_parts++; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
988 if (!add_partition(num_parts - 1, LINUX_NATIVE)) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
989 num_parts--; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
990 free(pe->sec_buffer); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
991 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
992 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
993 else add_partition(num_parts -1, LINUX_NATIVE); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
994 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
995 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
996 /* Add a new partiton to the partition table. |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
997 * MAX partitions limit is taken to be 60, can be changed |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
998 */ |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
999 static void add_new_partition(void) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1000 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1001 int choice, idx, i, free_part = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1002 char *msg = NULL; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1003 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1004 if (chs_warn()) return; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1005 for (i = 0; i < 4; i++) if(is_partition_clear(partitions[i].part)) free_part++; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1006 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1007 if (!free_part && num_parts >= 60) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1008 xprintf("The maximum number of partitions has been created\n"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1009 return; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1010 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1011 if (!free_part) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1012 if (extended_offset) add_logical_partition(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1013 else xprintf("You must delete some partition and add " |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1014 "an extended partition first\n"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1015 return; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1016 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1017 |
1183
0752b2d58909
Rename xmsprintf() to just xmprintf().
Rob Landley <rob@landley.net>
parents:
998
diff
changeset
|
1018 msg = xmprintf(" %s\n p primary partition(1-4)\n", |
989
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1019 extended_offset? "l logical (5 or over)" : "e extended"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1020 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1021 choice = 0x20 | read_input(msg, NULL); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1022 free(msg); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1023 if (choice == 'p') { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1024 idx = get_free_partition(4); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1025 if (idx >= 0) add_partition(idx, LINUX_NATIVE); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1026 return; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1027 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1028 if (choice =='l' && extended_offset) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1029 add_logical_partition(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1030 return; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1031 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1032 if (choice == 'e' && !extended_offset) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1033 idx = get_free_partition(4); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1034 if (idx >= 0) add_partition(idx, EXTENDED); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1035 return; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1036 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1037 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1038 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1039 static void change_systype(void ) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1040 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1041 int i, sys_id; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1042 struct partition *p; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1043 struct part_entry *pe; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1044 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1045 i = ask_partition(num_parts); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1046 pe = &partitions[i-1]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1047 p = pe->part; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1048 if (is_partition_clear(p)) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1049 xprintf("Partition %d doesn't exist yet!\n", i); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1050 return; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1051 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1052 sys_id = read_hex("Hex code (L to list codes): "); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1053 if ((IS_EXTENDED(p->sys_ind) && !IS_EXTENDED(sys_id)) || |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1054 (!IS_EXTENDED(p->sys_ind) && IS_EXTENDED(sys_id))) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1055 xprintf("you can't change a partition to an extended or vice-versa\n"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1056 return; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1057 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1058 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1059 xprintf("Changed system type of partition %u to %0x (%s)\n",i, sys_id, get_type(sys_id)); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1060 p->sys_ind = sys_id; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1061 pe->modified = 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1062 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1063 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1064 static void check(int n, unsigned h, unsigned s, unsigned c, sector_t start) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1065 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1066 sector_t total, real_s, real_c; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1067 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1068 real_s = sector(s) - 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1069 real_c = cylinder(s, c); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1070 total = (real_c * g_sectors + real_s) * g_heads + h; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1071 if (!total) xprintf("Partition %u contains sector 0\n", n); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1072 if (h >= g_heads) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1073 xprintf("Partition %u: head %u greater than maximum %lu\n", n, h + 1, g_heads); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1074 if (real_s >= g_sectors) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1075 xprintf("Partition %u: sector %u greater than maximum %lu\n", n, s, g_sectors); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1076 if (real_c >= g_cylinders) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1077 xprintf("Partition %u: cylinder %lld greater than maximum %lu\n", n, real_c + 1, g_cylinders); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1078 if (g_cylinders <= ONE_K && start != total) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1079 xprintf("Partition %u: previous sectors %lld disagrees with total %lld\n", n, start, total); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1080 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1081 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1082 static void verify_table(void) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1083 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1084 int i, j, ext_idx = -1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1085 sector_t begin_sec[num_parts], end_sec[num_parts], total = 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1086 struct part_entry *pe; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1087 struct partition *p; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1088 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1089 for (i = 0; i < num_parts; i++) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1090 pe = &partitions[i]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1091 p = pe->part; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1092 if (is_partition_clear(p) || IS_EXTENDED(p->sys_ind)) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1093 begin_sec[i] = 0xffffffff; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1094 end_sec[i] = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1095 } else { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1096 begin_sec[i] = swap_le32toh(p->start4) + pe->start_offset; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1097 end_sec[i] = begin_sec[i] + swap_le32toh(p->size4) - 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1098 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1099 if (IS_EXTENDED(p->sys_ind)) ext_idx = i; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1100 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1101 for (i = 0; i < num_parts; i++) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1102 pe = &partitions[i]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1103 p = pe->part; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1104 if (p->sys_ind && !IS_EXTENDED(p->sys_ind)) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1105 consistency_check(p, i); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1106 if ((swap_le32toh(p->start4) + pe->start_offset) < begin_sec[i]) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1107 xprintf("Warning: bad start-of-data in partition %u\n", i + 1); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1108 check(i + 1, p->end_head, p->end_sector, p->end_cyl, end_sec[i]); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1109 total += end_sec[i] + 1 - begin_sec[i]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1110 for (j = 0; j < i; j++) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1111 if ((begin_sec[i] >= begin_sec[j] && begin_sec[i] <= end_sec[j]) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1112 || ((end_sec[i] <= end_sec[j] && end_sec[i] >= begin_sec[j]))) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1113 xprintf("Warning: partition %u overlaps partition %u\n", j + 1, i + 1); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1114 total += begin_sec[i] >= begin_sec[j] ? begin_sec[i] : begin_sec[j]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1115 total -= end_sec[i] <= end_sec[j] ? end_sec[i] : end_sec[j]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1116 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1117 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1118 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1119 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1120 if (extended_offset) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1121 struct part_entry *pex = &partitions[ext_idx]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1122 sector_t e_last = swap_le32toh(pex->part->start4) + |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1123 swap_le32toh(pex->part->size4) - 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1124 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1125 for (i = 4; i < num_parts; i++) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1126 total++; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1127 p = partitions[i].part; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1128 if (!p->sys_ind) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1129 if (i != 4 || i + 1 < num_parts) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1130 xprintf("Warning: partition %u is empty\n", i + 1); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1131 } else if (begin_sec[i] < extended_offset || end_sec[i] > e_last) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1132 xprintf("Logical partition %u not entirely in partition %u\n", i + 1, ext_idx + 1); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1133 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1134 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1135 if (total > g_heads * g_sectors * g_cylinders) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1136 xprintf("Total allocated sectors %lld greater than the maximum " |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1137 "%lu\n", total, g_heads * g_sectors * g_cylinders); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1138 else { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1139 total = g_heads * g_sectors * g_cylinders - total; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1140 if (total) xprintf("%lld unallocated sectors\n", total); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1141 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1142 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1143 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1144 static void move_begning(int idx) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1145 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1146 sector_t start, num, new_start, end; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1147 char mesg[256]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1148 struct part_entry *pe = &partitions[idx]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1149 struct partition *p = pe->part; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1150 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1151 if (chs_warn()) return; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1152 start = swap_le32toh(p->start4) + pe->start_offset; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1153 num = swap_le32toh(p->size4); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1154 end = start + num -1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1155 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1156 if (!num || IS_EXTENDED(p->sys_ind)) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1157 xprintf("Partition %u doesn't have data area\n", idx+1); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1158 return; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1159 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1160 sprintf(mesg, "New begining of data (0 - %lld, default %lld): ", |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1161 (long long int)(end), (long long int)(start)); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1162 new_start = ask_value(mesg, 0, end, start); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1163 if (new_start != start) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1164 set_levalue(p->start4, new_start - pe->start_offset); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1165 set_levalue(p->size4, end - new_start +1); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1166 if ((read_input("Recalculate C/H/S (Y/n): ", NULL) | 0x20) == 'y') |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1167 set_hsc(p, new_start, end); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1168 pe->modified = 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1169 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1170 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1171 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1172 static void print_raw_sectors() |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1173 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1174 int i, j; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1175 struct part_entry *pe; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1176 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1177 xprintf("Device: %s\n", disk_device); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1178 for (i = 3; i < num_parts; i++) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1179 pe = &partitions[i]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1180 for (j = 0; j < g_sect_size; j++) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1181 if (!(j % 16)) xprintf("\n0x%03X: ",j); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1182 xprintf("%02X ",pe->sec_buffer[j]); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1183 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1184 xputc('\n'); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1185 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1186 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1187 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1188 static void print_partitions_list(int ext) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1189 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1190 int i; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1191 struct part_entry *pe; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1192 struct partition *p; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1193 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1194 xprintf("Disk %s: %lu heads, %lu sectors, %lu cylinders\n\n", disk_device, g_heads, g_sectors, g_cylinders); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1195 xprintf("Nr AF Hd Sec Cyl Hd Sec Cyl Start Size ID\n"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1196 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1197 for (i = 0; i < num_parts; i++) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1198 pe = &partitions[i]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1199 p = pe->part; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1200 if (p) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1201 if (ext && (i >= 4)) p = pe->part + 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1202 if(ext && i < 4 && !IS_EXTENDED(p->sys_ind)) continue; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1203 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1204 xprintf("%2u %02x%4u%4u%5u%4u%4u%5u%11u%11u %02x\n", |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1205 i+1, p->boot_ind, p->head, |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1206 sector(p->sector), cylinder(p->sector, p->cyl), |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1207 p->end_head, |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1208 sector(p->end_sector), cylinder(p->end_sector, p->end_cyl), |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1209 swap_le32toh(p->start4), |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1210 swap_le32toh(p->size4), |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1211 p->sys_ind); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1212 if (p->sys_ind) consistency_check(p, i); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1213 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1214 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1215 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1216 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1217 //fix the partition table order to ascending |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1218 static void fix_order(void) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1219 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1220 sector_t first[num_parts], min; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1221 int i, j, oj, ojj, sj, sjj; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1222 struct part_entry *pe; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1223 struct partition *px, *py, temp, *pj, *pjj, tmp; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1224 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1225 for (i = 0; i < num_parts; i++) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1226 pe = &partitions[i]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1227 px = pe->part; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1228 if (is_partition_clear(px)) first[i] = 0xffffffff; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1229 else first[i] = swap_le32toh(px->start4) + pe->start_offset; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1230 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1231 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1232 if (!check_order()) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1233 xprintf("Ordering is already correct\n\n"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1234 return; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1235 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1236 for (i = 0; i < 4; i++) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1237 for (j = 0; j < 3; j++) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1238 if (first[j] > first[j+1]) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1239 py = partitions[j+1].part; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1240 px = partitions[j].part; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1241 memcpy(&temp, py, sizeof(struct partition)); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1242 memcpy(py, px, sizeof(struct partition)); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1243 memcpy(px, &temp, sizeof(struct partition)); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1244 min = first[j+1]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1245 first[j+1] = first[j]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1246 first[j] = min; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1247 partitions[j].modified = 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1248 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1249 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1250 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1251 for (i = 5; i < num_parts; i++) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1252 for (j = 5; j < num_parts - 1; j++) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1253 oj = partitions[j].start_offset; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1254 ojj = partitions[j+1].start_offset; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1255 if (oj > ojj) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1256 partitions[j].start_offset = ojj; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1257 partitions[j+1].start_offset = oj; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1258 pj = partitions[j].part; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1259 set_levalue(pj->start4, swap_le32toh(pj->start4)+oj-ojj); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1260 pjj = partitions[j+1].part; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1261 set_levalue(pjj->start4, swap_le32toh(pjj->start4)+ojj-oj); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1262 set_levalue((partitions[j-1].part+1)->start4, ojj-extended_offset); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1263 set_levalue((partitions[j].part+1)->start4, oj-extended_offset); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1264 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1265 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1266 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1267 for (i = 4; i < num_parts; i++) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1268 for (j = 4; j < num_parts - 1; j++) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1269 pj = partitions[j].part; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1270 pjj = partitions[j+1].part; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1271 sj = swap_le32toh(pj->start4); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1272 sjj = swap_le32toh(pjj->start4); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1273 oj = partitions[j].start_offset; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1274 ojj = partitions[j+1].start_offset; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1275 if (oj+sj > ojj+sjj) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1276 tmp = *pj; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1277 *pj = *pjj; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1278 *pjj = tmp; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1279 set_levalue(pj->start4, ojj+sjj-oj); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1280 set_levalue(pjj->start4, oj+sj-ojj); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1281 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1282 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1283 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1284 // If anything changed |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1285 for (j = 4; j < num_parts; j++) partitions[j].modified = 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1286 xprintf("Done!\n"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1287 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1288 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1289 static void print_menu(void) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1290 { |
998
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
1291 xprintf("a\ttoggle a bootable flag\n" |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
1292 "b\tedit bsd disklabel\n" |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
1293 "c\ttoggle the dos compatibility flag\n" |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
1294 "d\tdelete a partition\n" |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
1295 "l\tlist known partition types\n" |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
1296 "n\tadd a new partition\n" |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
1297 "o\tcreate a new empty DOS partition table\n" |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
1298 "p\tprint the partition table\n" |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
1299 "q\tquit without saving changes\n" |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
1300 "s\tcreate a new empty Sun disklabel\n" |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
1301 "t\tchange a partition's system id\n" |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
1302 "u\tchange display/entry units\n" |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
1303 "v\tverify the partition table\n" |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
1304 "w\twrite table to disk and exit\n" |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
1305 "x\textra functionality (experts only)\n"); |
989
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1306 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1307 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1308 static void print_xmenu(void) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1309 { |
998
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
1310 xprintf("b\tmove beginning of data in a partition\n" |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
1311 "c\tchange number of cylinders\n" |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
1312 "d\tprint the raw data in the partition table\n" |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
1313 "e\tlist extended partitions\n" |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
1314 "f\tfix partition order\n" |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
1315 "h\tchange number of heads\n" |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
1316 "p\tprint the partition table\n" |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
1317 "q\tquit without saving changes\n" |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
1318 "r\treturn to main menu\n" |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
1319 "s\tchange number of sectors/track\n" |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
1320 "v\tverify the partition table\n" |
72bbeccf4565
fdisk: remove goto; inline valid(); merge xprintf() calls; shrink sys_types
Isaac Dunham <ibid.ag@gmail.com>
parents:
997
diff
changeset
|
1321 "w\twrite table to disk and exit\n"); |
989
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1322 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1323 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1324 static void expert_menu(void) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1325 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1326 int choice, idx; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1327 sector_t value; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1328 char mesg[256]; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1329 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1330 while (1) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1331 xputc('\n'); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1332 char *msg = "Expert Command ('m' for help): "; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1333 choice = 0x20 | read_input(msg, NULL); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1334 switch (choice) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1335 case 'b': //move data begining in partition |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1336 idx = ask_partition(num_parts); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1337 move_begning(idx - 1); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1338 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1339 case 'c': //change cylinders |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1340 sprintf(mesg, "Number of cylinders (1 - 1048576, default %lu): ", g_cylinders); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1341 value = ask_value(mesg, 1, 1048576, g_cylinders); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1342 g_cylinders = TT.cylinders = value; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1343 toys.optflags |= FLAG_C; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1344 if(g_cylinders > ONE_K) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1345 xprintf("\nThe number of cylinders for this disk is set to %lu.\n" |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1346 "There is nothing wrong with that, but this is larger than 1024,\n" |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1347 "and could in certain setups cause problems.\n", g_cylinders); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1348 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1349 case 'd': //print raw data in part tables |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1350 print_raw_sectors(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1351 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1352 case 'e': //list extended partitions |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1353 print_partitions_list(1); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1354 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1355 case 'f': //fix part order |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1356 fix_order(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1357 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1358 case 'h': //change number of heads |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1359 sprintf(mesg, "Number of heads (1 - 256, default %lu): ", g_heads); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1360 value = ask_value(mesg, 1, 256, g_heads); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1361 g_heads = TT.heads = value; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1362 toys.optflags |= FLAG_H; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1363 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1364 case 'p': //print partition table |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1365 print_partitions_list(0); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1366 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1367 case 'q': |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1368 free_bufs(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1369 close(dev_fd); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1370 xputc('\n'); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1371 exit(0); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1372 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1373 case 'r': |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1374 return; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1375 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1376 case 's': //change sector/track |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1377 sprintf(mesg, "Number of sectors (1 - 63, default %lu): ", g_sectors); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1378 value = ask_value(mesg, 1, 63, g_sectors); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1379 g_sectors = TT.sectors = value; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1380 toys.optflags |= FLAG_H; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1381 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1382 case 'v': |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1383 verify_table(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1384 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1385 case 'w': |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1386 write_table(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1387 toys.exitval = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1388 exit(0); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1389 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1390 case 'm': |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1391 print_xmenu(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1392 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1393 default: |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1394 xprintf("Unknown command '%c'\n",choice); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1395 print_xmenu(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1396 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1397 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1398 } //while(1) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1399 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1400 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1401 static int disk_proper(const char *device) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1402 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1403 unsigned length; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1404 int fd = open(device, O_RDONLY); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1405 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1406 if (fd != -1) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1407 struct hd_geometry dev_geo; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1408 dev_geo.heads = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1409 dev_geo.sectors = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1410 int err = ioctl(fd, HDIO_GETGEO, &dev_geo); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1411 close(fd); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1412 if (!err) return (dev_geo.start == 0); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1413 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1414 length = strlen(device); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1415 if (length != 0 && isdigit(device[length - 1])) return 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1416 return 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1417 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1418 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1419 static void reset_entries() |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1420 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1421 int i; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1422 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1423 memset(MBRbuf, 0, sizeof(MBRbuf)); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1424 for (i = 4; i < num_parts; i++) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1425 memset(&partitions[i], 0, sizeof(struct part_entry)); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1426 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1427 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1428 //this will keep dev_fd = 3 always alive |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1429 static void move_fd() |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1430 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1431 int fd = xopen("/dev/null", O_RDONLY); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1432 if(fd != dev_fd) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1433 if(dup2(fd, dev_fd) != dev_fd) perror_exit("Can't dup2"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1434 close(fd); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1435 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1436 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1437 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1438 /* Read proc/partitions and then print the details |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1439 * for partitions on each device |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1440 */ |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1441 static void read_and_print_parts() |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1442 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1443 unsigned int ma, mi, sz; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1444 char *name = toybuf, *buffer = toybuf + ONE_K, *device = toybuf + 2048; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1445 FILE* fp = xfopen("/proc/partitions", "r"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1446 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1447 while (fgets(buffer, ONE_K, fp)) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1448 reset_entries(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1449 num_parts = 4; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1450 memset(name, 0, sizeof(name)); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1451 if (sscanf(buffer, " %u %u %u %[^\n ]", &ma, &mi, &sz, name) != 4) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1452 continue; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1453 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1454 sprintf(device,"/dev/%s",name); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1455 if (disk_proper(device)) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1456 if (read_mbr(device, 0)) continue; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1457 print_mbr(1); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1458 move_fd(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1459 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1460 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1461 fclose(fp); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1462 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1463 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1464 void fdisk_main(void) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1465 { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1466 int choice, p; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1467 |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1468 init_members(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1469 move_fd(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1470 if (TT.heads >= 256) TT.heads = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1471 if (TT.sectors >= 64) TT.sectors = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1472 if (toys.optflags & FLAG_u) disp_unit_cyl = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1473 if (toys.optflags & FLAG_l) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1474 if (!toys.optc) read_and_print_parts(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1475 else { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1476 while(*toys.optargs){ |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1477 if (read_mbr(*toys.optargs, 0)) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1478 toys.optargs++; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1479 continue; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1480 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1481 print_mbr(1); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1482 move_fd(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1483 toys.optargs++; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1484 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1485 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1486 toys.exitval = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1487 return; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1488 } else { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1489 if (!toys.optc || toys.optc > 1 ) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1490 toys.exitval = toys.exithelp = 1; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1491 show_help(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1492 return; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1493 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1494 if (read_mbr(toys.optargs[0], 1)) return; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1495 while (1) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1496 xputc('\n'); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1497 char *msg = "Command ('m' for help): "; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1498 choice = 0x20 | read_input(msg, NULL); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1499 switch (choice) { |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1500 case 'a': |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1501 p = ask_partition(num_parts); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1502 toggle_active_flag(p - 1); //partition table index start from 0. |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1503 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1504 case 'b': |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1505 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1506 case 'c': |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1507 dos_flag = !dos_flag; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1508 xprintf("Dos compatible flag is %s\n", dos_flag?"Set" : "Not set"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1509 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1510 case 'd': |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1511 p = get_non_free_partition(num_parts); //4 was here |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1512 if(p >= 0) delete_partition(p); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1513 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1514 case 'l': |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1515 list_types(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1516 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1517 case 'n': //add new partition |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1518 add_new_partition(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1519 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1520 case 'o': |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1521 create_empty_doslabel(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1522 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1523 case 'p': |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1524 print_mbr(0); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1525 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1526 case 'q': |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1527 free_bufs(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1528 close(dev_fd); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1529 xputc('\n'); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1530 exit(0); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1531 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1532 case 's': |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1533 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1534 case 't': |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1535 change_systype(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1536 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1537 case 'u': |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1538 disp_unit_cyl = !disp_unit_cyl; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1539 xprintf("Changing Display/Entry units to %s\n",disp_unit_cyl?"cylinders" : "sectors"); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1540 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1541 case 'v': |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1542 verify_table(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1543 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1544 case 'w': |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1545 write_table(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1546 toys.exitval = 0; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1547 return; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1548 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1549 case 'x': |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1550 expert_menu(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1551 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1552 case 'm': |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1553 print_menu(); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1554 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1555 default: |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1556 xprintf("%c: Unknown command\n",choice); |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1557 break; |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1558 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1559 } //while(1) |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1560 } |
8ff8b1befcdf
I have implemented FDISK command.
Ashwini Sharma <ak.ashwini@gmail.com>
parents:
diff
changeset
|
1561 } |