svn commit: trunk/busybox/util-linux

vda at busybox.net vda at busybox.net
Sun Jun 29 05:10:48 UTC 2008


Author: vda
Date: 2008-06-28 22:10:47 -0700 (Sat, 28 Jun 2008)
New Revision: 22559

Log:
fdisk: move more data to struct globals; shrink code 

function                                             old     new   delta
nowarn                                                 1       -      -1
listing                                                1       -      -1
dos_compatible_flag                                    1       -      -1
warn_cylinders                                        44      42      -2
open_list_and_close                                  364     362      -2
fdisk_fatal                                           41      38      -3
verify                                              1053    1049      -4
user_sectors                                           4       -      -4
user_heads                                             4       -      -4
user_cylinders                                         4       -      -4
pt_sectors                                             4       -      -4
pt_heads                                               4       -      -4
kern_sectors                                           4       -      -4
kern_heads                                             4       -      -4
ext_index                                              4       -      -4
total_number_of_sectors                                8       -      -8
extended_offset                                        8       -      -8
create_doslabel                                      129     120      -9
write_table                                          225     211     -14
delete_partition                                     445     431     -14
set_partition                                        476     459     -17
list_disk_geometry                                   247     229     -18
unable_to_write                                       19       -     -19
add_partition                                       2515    2486     -29
get_boot                                            1709    1636     -73
fdisk_main                                          2812    2679    -133
------------------------------------------------------------------------------
(add/remove: 0/14 grow/shrink: 0/12 up/down: 0/-388)         Total: -388 bytes
   text    data     bss     dec     hex filename
 804634     611    6852  812097   c6441 busybox_old
 804298     610    6804  811712   c62c0 busybox_unstripped



Modified:
   trunk/busybox/util-linux/fdisk.c
   trunk/busybox/util-linux/fdisk_osf.c
   trunk/busybox/util-linux/fdisk_sgi.c
   trunk/busybox/util-linux/fdisk_sun.c


Changeset:
Modified: trunk/busybox/util-linux/fdisk.c
===================================================================
--- trunk/busybox/util-linux/fdisk.c	2008-06-29 02:25:53 UTC (rev 22558)
+++ trunk/busybox/util-linux/fdisk.c	2008-06-29 05:10:47 UTC (rev 22559)
@@ -20,21 +20,22 @@
 # define USE_FEATURE_FDISK_BLKSIZE(a)
 #endif
 
-#define DEFAULT_SECTOR_SIZE     512
-#define MAX_SECTOR_SIZE 2048
-#define SECTOR_SIZE     512     /* still used in osf/sgi/sun code */
-#define MAXIMUM_PARTS   60
+#define DEFAULT_SECTOR_SIZE      512
+#define DEFAULT_SECTOR_SIZE_STR "512"
+#define MAX_SECTOR_SIZE         2048
+#define SECTOR_SIZE              512 /* still used in osf/sgi/sun code */
+#define MAXIMUM_PARTS             60
 
-#define ACTIVE_FLAG     0x80
+#define ACTIVE_FLAG             0x80
 
-#define EXTENDED        0x05
-#define WIN98_EXTENDED  0x0f
-#define LINUX_PARTITION 0x81
-#define LINUX_SWAP      0x82
-#define LINUX_NATIVE    0x83
-#define LINUX_EXTENDED  0x85
-#define LINUX_LVM       0x8e
-#define LINUX_RAID      0xfd
+#define EXTENDED                0x05
+#define WIN98_EXTENDED          0x0f
+#define LINUX_PARTITION         0x81
+#define LINUX_SWAP              0x82
+#define LINUX_NATIVE            0x83
+#define LINUX_EXTENDED          0x85
+#define LINUX_LVM               0x8e
+#define LINUX_RAID              0xfd
 
 
 enum {
@@ -290,12 +291,25 @@
 	unsigned user_set_sector_size;
 	unsigned sector_offset; // = 1;
 	unsigned g_heads, g_sectors, g_cylinders;
-	enum label_type current_label_type;
+	smallint /* enum label_type */ current_label_type;
 	smallint display_in_cyl_units; // = 1;
 #if ENABLE_FEATURE_OSF_LABEL
 	smallint possibly_osf_label;
 #endif
 
+	smallint listing;               /* no aborts for fdisk -l */
+	smallint dos_compatible_flag; // = 1;
+#if ENABLE_FEATURE_FDISK_WRITABLE
+	//int dos_changed;
+	smallint nowarn;                /* no warnings for fdisk -l/-s */
+#endif
+	int ext_index;                  /* the prime extended partition */
+	unsigned user_cylinders, user_heads, user_sectors;
+	unsigned pt_heads, pt_sectors;
+	unsigned kern_heads, kern_sectors;
+	ullong extended_offset;         /* offset of link pointers */
+	ullong total_number_of_sectors;
+
 	jmp_buf listingbuf;
 	char line_buffer[80];
 	char partname_buffer[80];
@@ -319,6 +333,19 @@
 #define current_label_type   (G.current_label_type  )
 #define display_in_cyl_units (G.display_in_cyl_units)
 #define possibly_osf_label   (G.possibly_osf_label  )
+#define listing                 (G.listing                )
+#define dos_compatible_flag     (G.dos_compatible_flag    )
+#define nowarn                  (G.nowarn                 )
+#define ext_index               (G.ext_index              )
+#define user_cylinders          (G.user_cylinders         )
+#define user_heads              (G.user_heads             )
+#define user_sectors            (G.user_sectors           )
+#define pt_heads                (G.pt_heads               )
+#define pt_sectors              (G.pt_sectors             )
+#define kern_heads              (G.kern_heads             )
+#define kern_sectors            (G.kern_sectors           )
+#define extended_offset         (G.extended_offset        )
+#define total_number_of_sectors (G.total_number_of_sectors)
 #define listingbuf      (G.listingbuf)
 #define line_buffer     (G.line_buffer)
 #define partname_buffer (G.partname_buffer)
@@ -331,6 +358,7 @@
 	g_partitions = 4; \
 	display_in_cyl_units = 1; \
 	units_per_sector = 1; \
+	dos_compatible_flag = 1; \
 } while (0)
 
 
@@ -661,21 +689,6 @@
 	return read4_little_endian(p->size4);
 }
 
-static int ext_index;                   /* the prime extended partition */
-static smallint listing;                /* no aborts for fdisk -l */
-static smallint dos_compatible_flag = 1;
-#if ENABLE_FEATURE_FDISK_WRITABLE
-//static int dos_changed;
-static smallint nowarn;                 /* no warnings for fdisk -l/-s */
-#endif
-
-static unsigned user_cylinders, user_heads, user_sectors;
-static unsigned pt_heads, pt_sectors;
-static unsigned kern_heads, kern_sectors;
-
-static ullong extended_offset;            /* offset of link pointers */
-static ullong total_number_of_sectors;
-
 static void fdisk_fatal(const char *why)
 {
 	if (listing) {
@@ -706,8 +719,7 @@
 write_sector(ullong secno, char *buf)
 {
 	seek_sector(secno);
-	if (write(dev_fd, buf, sector_size) != sector_size)
-		fdisk_fatal(unable_to_write);
+	xwrite(dev_fd, buf, sector_size);
 }
 #endif
 
@@ -716,9 +728,10 @@
 read_pte(struct pte *pe, ullong offset)
 {
 	pe->offset = offset;
-	pe->sectorbuffer = xmalloc(sector_size);
+	pe->sectorbuffer = xzalloc(sector_size);
 	seek_sector(offset);
-	if (read(dev_fd, pe->sectorbuffer, sector_size) != sector_size)
+	/* xread would make us abort - bad for fdisk -l */
+	if (full_read(dev_fd, pe->sectorbuffer, sector_size) != sector_size)
 		fdisk_fatal(unable_to_read);
 #if ENABLE_FEATURE_FDISK_WRITABLE
 	pe->changed = 0;
@@ -1167,8 +1180,9 @@
 		if (ioctl(dev_fd, BLKSSZGET, &arg) == 0)
 			sector_size = arg;
 		if (sector_size != DEFAULT_SECTOR_SIZE)
-			printf("Note: sector size is %d (not %d)\n",
-				   sector_size, DEFAULT_SECTOR_SIZE);
+			printf("Note: sector size is %d "
+				"(not " DEFAULT_SECTOR_SIZE_STR ")\n",
+				sector_size);
 	}
 }
 
@@ -1302,7 +1316,7 @@
 		printf("'%s' is opened for read only\n", disk_device);
 	}
 	xmove_fd(fd, dev_fd);
-	if (512 != read(dev_fd, MBRbuffer, 512)) {
+	if (512 != full_read(dev_fd, MBRbuffer, 512)) {
 		if (what == TRY_ONLY) {
 			close_dev_fd();
 			return 1;
@@ -1313,7 +1327,7 @@
 	fd = open(disk_device, O_RDONLY);
 	if (fd < 0)
 		return 1;
-	if (512 != read(fd, MBRbuffer, 512)) {
+	if (512 != full_read(fd, MBRbuffer, 512)) {
 		close(fd);
 		return 1;
 	}

Modified: trunk/busybox/util-linux/fdisk_osf.c
===================================================================
--- trunk/busybox/util-linux/fdisk_osf.c	2008-06-29 02:25:53 UTC (rev 22558)
+++ trunk/busybox/util-linux/fdisk_osf.c	2008-06-29 05:10:47 UTC (rev 22559)
@@ -688,13 +688,12 @@
 {
 	int fdb;
 
-	fdb = open(path, O_RDONLY);
+	fdb = open_or_warn(path, O_RDONLY);
 	if (fdb < 0) {
-		perror(path);
 		return 0;
 	}
-	if (read(fdb, ptr, size) < 0) {
-		perror(path);
+	if (full_read(fdb, ptr, size) < 0) {
+		bb_simple_perror_msg(path);
 		close(fdb);
 		return 0;
 	}
@@ -765,10 +764,8 @@
 	sector = get_start_sect(xbsd_part);
 #endif
 
-	if (lseek(dev_fd, sector * SECTOR_SIZE, SEEK_SET) == -1)
-		fdisk_fatal(unable_to_seek);
-	if (BSD_BBSIZE != write(dev_fd, disklabelbuffer, BSD_BBSIZE))
-		fdisk_fatal(unable_to_write);
+	seek_sector(sector);
+	xwrite(dev_fd, disklabelbuffer, BSD_BBSIZE);
 
 #if defined(__alpha__)
 	printf("Bootstrap installed on %s\n", disk_device);
@@ -938,9 +935,8 @@
 	sector = 0;
 #endif
 
-	if (lseek(dev_fd, sector * SECTOR_SIZE, SEEK_SET) == -1)
-		fdisk_fatal(unable_to_seek);
-	if (BSD_BBSIZE != read(dev_fd, disklabelbuffer, BSD_BBSIZE))
+	seek_sector(sector);
+	if (BSD_BBSIZE != full_read(dev_fd, disklabelbuffer, BSD_BBSIZE))
 		fdisk_fatal(unable_to_read);
 
 	memmove(d, &disklabelbuffer[BSD_LABELSECTOR * SECTOR_SIZE + BSD_LABELOFFSET],
@@ -984,15 +980,12 @@
 
 #if defined(__alpha__) && BSD_LABELSECTOR == 0
 	alpha_bootblock_checksum(disklabelbuffer);
-	if (lseek(dev_fd, 0, SEEK_SET) == -1)
-		fdisk_fatal(unable_to_seek);
-	if (BSD_BBSIZE != write(dev_fd, disklabelbuffer, BSD_BBSIZE))
-		fdisk_fatal(unable_to_write);
+	seek_sector(0);
+	xwrite(dev_fd, disklabelbuffer, BSD_BBSIZE);
 #else
-	if (lseek(dev_fd, sector * SECTOR_SIZE + BSD_LABELOFFSET, SEEK_SET) == -1)
-		fdisk_fatal(unable_to_seek);
-	if (sizeof(struct xbsd_disklabel) != write(dev_fd, d, sizeof(struct xbsd_disklabel)))
-		fdisk_fatal(unable_to_write);
+	seek_sector(sector);
+	lseek(dev_fd, BSD_LABELOFFSET, SEEK_CUR);
+	xwrite(dev_fd, d, sizeof(*d));
 #endif
 	sync_disks();
 	return 1;

Modified: trunk/busybox/util-linux/fdisk_sgi.c
===================================================================
--- trunk/busybox/util-linux/fdisk_sgi.c	2008-06-29 02:25:53 UTC (rev 22558)
+++ trunk/busybox/util-linux/fdisk_sgi.c	2008-06-29 05:10:47 UTC (rev 22559)
@@ -439,10 +439,7 @@
 	assert(two_s_complement_32bit_sum(
 		(unsigned int*)sgilabel, sizeof(*sgilabel)) == 0);
 
-	if (lseek(dev_fd, 0, SEEK_SET) < 0)
-		fdisk_fatal(unable_to_seek);
-	if (write(dev_fd, sgilabel, SECTOR_SIZE) != SECTOR_SIZE)
-		fdisk_fatal(unable_to_write);
+	write_sector(0, sgilabel);
 	if (!strncmp((char*)sgilabel->directory[0].vol_file_name, "sgilabel", 8)) {
 		/*
 		 * keep this habit of first writing the "sgilabel".
@@ -450,10 +447,7 @@
 		 */
 		sgiinfo *info = fill_sgiinfo();
 		int infostartblock = SGI_SSWAP32(sgilabel->directory[0].vol_file_start);
-		if (lseek(dev_fd, infostartblock*SECTOR_SIZE, SEEK_SET) < 0)
-			fdisk_fatal(unable_to_seek);
-		if (write(dev_fd, info, SECTOR_SIZE) != SECTOR_SIZE)
-			fdisk_fatal(unable_to_write);
+		write_sector(infostartblock, info);
 		free(info);
 	}
 }

Modified: trunk/busybox/util-linux/fdisk_sun.c
===================================================================
--- trunk/busybox/util-linux/fdisk_sun.c	2008-06-29 02:25:53 UTC (rev 22558)
+++ trunk/busybox/util-linux/fdisk_sun.c	2008-06-29 05:10:47 UTC (rev 22559)
@@ -722,9 +722,6 @@
 	while (ush < (unsigned short *)(&sunlabel->csum))
 		csum ^= *ush++;
 	sunlabel->csum = csum;
-	if (lseek(dev_fd, 0, SEEK_SET) < 0)
-		fdisk_fatal(unable_to_seek);
-	if (write(dev_fd, sunlabel, SECTOR_SIZE) != SECTOR_SIZE)
-		fdisk_fatal(unable_to_write);
+	write_sector(0, sunlabel);
 }
 #endif /* SUN_LABEL */




More information about the busybox-cvs mailing list