From d54708399dbab43b2867dad1a41eb199eb0813d8 Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Wed, 3 Jan 2007 02:58:54 +0000 Subject: [PATCH] fdisk: remove 8k buffer from bss - OSF labels are not THAT common anyway --- util-linux/fdisk.c | 8 +++---- util-linux/fdisk_osf.c | 16 +++++++------- util-linux/fdisk_sgi.c | 49 +++++++++++++++++++++--------------------- 3 files changed, 37 insertions(+), 36 deletions(-) diff --git a/util-linux/fdisk.c b/util-linux/fdisk.c index 27b041e8e..cc6dfa57a 100644 --- a/util-linux/fdisk.c +++ b/util-linux/fdisk.c @@ -2715,7 +2715,7 @@ is_ide_cdrom_or_tape(const char *device) static void -try(const char *device, int user_specified) +trydev(const char *device, int user_specified) { int gb; @@ -2736,7 +2736,7 @@ try(const char *device, int user_specified) return; } #if ENABLE_FEATURE_OSF_LABEL - if (btrydev(device) < 0) + if (bsd_trydev(device) < 0) #endif printf(_("Disk %s doesn't contain a valid " "partition table\n"), device); @@ -2780,7 +2780,7 @@ tryprocpt(void) if (isdigit(s[-1])) continue; sprintf(devname, "/dev/%s", ptname); - try(devname, 0); + trydev(devname, 0); } #if ENABLE_FEATURE_CLEAN_UP fclose(procpt); @@ -2865,7 +2865,7 @@ int fdisk_main(int argc, char **argv) #endif listing = 1; for (k = 0; k < argc; k++) - try(argv[k], 1); + trydev(argv[k], 1); } else { /* we no longer have default device names */ /* but, we can use /proc/partitions instead */ diff --git a/util-linux/fdisk_osf.c b/util-linux/fdisk_osf.c index 17acd1977..16a046ea3 100644 --- a/util-linux/fdisk_osf.c +++ b/util-linux/fdisk_osf.c @@ -272,12 +272,9 @@ static struct partition *xbsd_part; static int xbsd_part_index; #endif -#if defined(__alpha__) /* We access this through a uint64_t * when checksumming */ -static char disklabelbuffer[BSD_BBSIZE] ATTRIBUTE_ALIGNED(8); -#else -static char disklabelbuffer[BSD_BBSIZE]; -#endif +/* hopefully xmalloc gives us required alignment */ +static char *disklabelbuffer; /*[BSD_BBSIZE]*/ static struct xbsd_disklabel xbsd_dlabel; @@ -299,7 +296,7 @@ check_osf_label(void) } static int -btrydev(const char * dev) +bsd_trydev(const char * dev) { if (xbsd_readlabel(NULL, &xbsd_dlabel) == 0) return -1; @@ -309,7 +306,7 @@ btrydev(const char * dev) } static void -bmenu(void) +bsd_menu(void) { puts(_("Command action")); puts(_("\td\tdelete a BSD partition")); @@ -431,7 +428,7 @@ bsd_select(void) break; #endif default: - bmenu(); + bsd_menu(); break; } } @@ -921,6 +918,9 @@ xbsd_readlabel(struct partition *p, struct xbsd_disklabel *d) { int t, sector; + if (!disklabelbuffer) + disklabelbuffer = xmalloc(BSD_BBSIZE); + /* p is used only to get the starting sector */ #if !defined(__alpha__) sector = (p ? get_start_sect(p) : 0); diff --git a/util-linux/fdisk_sgi.c b/util-linux/fdisk_sgi.c index c83ef2420..bb354d8d9 100644 --- a/util-linux/fdisk_sgi.c +++ b/util-linux/fdisk_sgi.c @@ -808,42 +808,43 @@ create_sgilabel(void) } memset(MBRbuffer, 0, sizeof(MBRbuffer)); + /* fields with '//' are already zeroed out by memset above */ + sgilabel->magic = SGI_SSWAP32(SGI_LABEL_MAGIC); - sgilabel->boot_part = SGI_SSWAP16(0); + //sgilabel->boot_part = SGI_SSWAP16(0); sgilabel->swap_part = SGI_SSWAP16(1); - /* sizeof(sgilabel->boot_file) = 16 > 6 */ - memset(sgilabel->boot_file, 0, 16); - strcpy((char*)sgilabel->boot_file, "/unix"); + //memset(sgilabel->boot_file, 0, 16); + strcpy((char*)sgilabel->boot_file, "/unix"); /* sizeof(sgilabel->boot_file) == 16 > 6 */ - sgilabel->devparam.skew = (0); - sgilabel->devparam.gap1 = (0); - sgilabel->devparam.gap2 = (0); - sgilabel->devparam.sparecyl = (0); + //sgilabel->devparam.skew = (0); + //sgilabel->devparam.gap1 = (0); + //sgilabel->devparam.gap2 = (0); + //sgilabel->devparam.sparecyl = (0); sgilabel->devparam.pcylcount = SGI_SSWAP16(geometry.cylinders); - sgilabel->devparam.head_vol0 = SGI_SSWAP16(0); + //sgilabel->devparam.head_vol0 = SGI_SSWAP16(0); + /* tracks/cylinder (heads) */ sgilabel->devparam.ntrks = SGI_SSWAP16(geometry.heads); - /* tracks/cylinder (heads) */ - sgilabel->devparam.cmd_tag_queue_depth = (0); - sgilabel->devparam.unused0 = (0); - sgilabel->devparam.unused1 = SGI_SSWAP16(0); + //sgilabel->devparam.cmd_tag_queue_depth = (0); + //sgilabel->devparam.unused0 = (0); + //sgilabel->devparam.unused1 = SGI_SSWAP16(0); + /* sectors/track */ sgilabel->devparam.nsect = SGI_SSWAP16(geometry.sectors); - /* sectors/track */ sgilabel->devparam.bytes = SGI_SSWAP16(512); sgilabel->devparam.ilfact = SGI_SSWAP16(1); sgilabel->devparam.flags = SGI_SSWAP32(TRACK_FWD| IGNORE_ERRORS|RESEEK); - sgilabel->devparam.datarate = SGI_SSWAP32(0); + //sgilabel->devparam.datarate = SGI_SSWAP32(0); sgilabel->devparam.retries_on_error = SGI_SSWAP32(1); - sgilabel->devparam.ms_per_word = SGI_SSWAP32(0); - sgilabel->devparam.xylogics_gap1 = SGI_SSWAP16(0); - sgilabel->devparam.xylogics_syncdelay = SGI_SSWAP16(0); - sgilabel->devparam.xylogics_readdelay = SGI_SSWAP16(0); - sgilabel->devparam.xylogics_gap2 = SGI_SSWAP16(0); - sgilabel->devparam.xylogics_readgate = SGI_SSWAP16(0); - sgilabel->devparam.xylogics_writecont = SGI_SSWAP16(0); - memset( &(sgilabel->directory), 0, sizeof(struct volume_directory)*15 ); - memset( &(sgilabel->partitions), 0, sizeof(struct sgi_partinfo)*16 ); + //sgilabel->devparam.ms_per_word = SGI_SSWAP32(0); + //sgilabel->devparam.xylogics_gap1 = SGI_SSWAP16(0); + //sgilabel->devparam.xylogics_syncdelay = SGI_SSWAP16(0); + //sgilabel->devparam.xylogics_readdelay = SGI_SSWAP16(0); + //sgilabel->devparam.xylogics_gap2 = SGI_SSWAP16(0); + //sgilabel->devparam.xylogics_readgate = SGI_SSWAP16(0); + //sgilabel->devparam.xylogics_writecont = SGI_SSWAP16(0); + //memset( &(sgilabel->directory), 0, sizeof(struct volume_directory)*15 ); + //memset( &(sgilabel->partitions), 0, sizeof(struct sgi_partinfo)*16 ); current_label_type = label_sgi; partitions = 16; sgi_volumes = 15;