svn commit: trunk/busybox/util-linux

landley at busybox.net landley at busybox.net
Sat Feb 25 03:46:13 UTC 2006


Author: landley
Date: 2006-02-24 19:46:10 -0800 (Fri, 24 Feb 2006)
New Revision: 14267

Log:
Another clean-up patch from Garrett.


Modified:
   trunk/busybox/util-linux/fdisk.c


Changeset:
Modified: trunk/busybox/util-linux/fdisk.c
===================================================================
--- trunk/busybox/util-linux/fdisk.c	2006-02-25 03:36:00 UTC (rev 14266)
+++ trunk/busybox/util-linux/fdisk.c	2006-02-25 03:46:10 UTC (rev 14267)
@@ -115,30 +115,10 @@
 # define MBRbuffer bb_common_bufsiz1
 #endif
 
-#ifdef CONFIG_FEATURE_SUN_LABEL
-static int sun_label;                  /* looking at sun disklabel */
-#else
-#define sun_label 0
-#endif
-#ifdef CONFIG_FEATURE_SGI_LABEL
-static int sgi_label;                  /* looking at sgi disklabel */
-#else
-#define sgi_label 0
-#endif
-#ifdef CONFIG_FEATURE_AIX_LABEL
-static int aix_label;                  /* looking at aix disklabel */
-#else
-#define aix_label 0
-#endif
 #ifdef CONFIG_FEATURE_OSF_LABEL
-static int osf_label;                  /* looking at OSF/1 disklabel */
 static int possibly_osf_label;
-#else
-#define osf_label 0
 #endif
 
-#define dos_label (!sun_label && !sgi_label && !aix_label && !osf_label)
-
 static uint heads, sectors, cylinders;
 static void update_units(void);
 
@@ -200,8 +180,14 @@
 	unable_to_write
 };
 
+enum label_type{
+	label_dos, label_sun, label_sgi, label_aix, label_osf
+};
+
 enum action { fdisk, require, try_only, create_empty_dos, create_empty_sun };
 
+static enum label_type current_label_type;
+
 static const char *disk_device;
 static int fd;                  /* the disk */
 static int partitions = 4;      /* maximum partition + 1 */
@@ -432,33 +418,23 @@
 	);
 }
 
-static void
-aix_nolabel(void)
-{
-	aixlabel->magic = 0;
-	aix_label = 0;
-	partitions = 4;
-	memset(MBRbuffer, 0, sizeof(MBRbuffer));  /* avoid fdisk cores */
-	return;
-}
-
 static int
 check_aix_label(void)
 {
 	if (aixlabel->magic != AIX_LABEL_MAGIC &&
 		aixlabel->magic != AIX_LABEL_MAGIC_SWAPPED) {
-		aix_label = 0;
+		current_label_type = 0;
 		aix_other_endian = 0;
 		return 0;
 	}
 	aix_other_endian = (aixlabel->magic == AIX_LABEL_MAGIC_SWAPPED);
 	update_units();
-	aix_label = 1;
+	current_label_type = label_aix;
 	partitions = 1016;
 	aix_volumes = 15;
 	aix_info();
-	aix_nolabel();              /* %% */
-	aix_label = 1;              /* %% */
+	/*aix_nolabel();*/              /* %% */
+	/*aix_label = 1;*/              /* %% */
 	return 1;
 }
 #endif  /* AIX_LABEL */
@@ -1786,14 +1762,6 @@
 	return SGI_SSWAP16(sgilabel->devparam.ntrks);
 }
 
-static void
-sgi_nolabel(void)
-{
-	sgilabel->magic = 0;
-	sgi_label = 0;
-	partitions = 4;
-}
-
 static unsigned int
 two_s_complement_32bit_sum(unsigned int* base, int size /* in bytes */)
 {
@@ -1818,8 +1786,7 @@
 
 	if (sgilabel->magic != SGI_LABEL_MAGIC
 	 && sgilabel->magic != SGI_LABEL_MAGIC_SWAPPED) {
-		sgi_label = 0;
-		sgi_other_endian = 0;
+		current_label_type = label_dos;
 		return 0;
 	}
 
@@ -1833,7 +1800,7 @@
 			_("Detected sgi disklabel with wrong checksum.\n"));
 	}
 	update_units();
-	sgi_label = 1;
+	current_label_type = label_sgi;
 	partitions = 16;
 	sgi_volumes = 15;
 	return 1;
@@ -2445,7 +2412,7 @@
 	sgilabel->devparam.xylogics_writecont       = SGI_SSWAP16(0);
 	memset( &(sgilabel->directory), 0, sizeof(struct volume_directory)*15 );
 	memset( &(sgilabel->partitions), 0, sizeof(struct sgi_partition)*16 );
-	sgi_label = 1;
+	current_label_type = label_sgi;
 	partitions = 16;
 	sgi_volumes = 15;
 	sgi_set_entire();
@@ -2564,14 +2531,6 @@
 	set_changed(i);
 }
 
-static void
-sun_nolabel(void)
-{
-	sun_label = 0;
-	sunlabel->magic = 0;
-	partitions = 4;
-}
-
 static int
 check_sun_label(void)
 {
@@ -2580,7 +2539,7 @@
 
 	if (sunlabel->magic != SUN_LABEL_MAGIC
 	 && sunlabel->magic != SUN_LABEL_MAGIC_SWAPPED) {
-		sun_label = 0;
+		current_label_type = label_dos;
 		sun_other_endian = 0;
 		return 0;
 	}
@@ -2598,7 +2557,7 @@
 		sectors = SUN_SSWAP16(sunlabel->nsect);
 	}
 	update_units();
-	sun_label = 1;
+	current_label_type = label_sun;
 	partitions = 8;
 	return 1;
 }
@@ -3505,7 +3464,7 @@
 menu(void)
 {
 #ifdef CONFIG_FEATURE_SUN_LABEL
-	if (sun_label) {
+	if (label_sun == current_label_type) {
 		puts(_("Command action"));
 		puts(_("\ta\ttoggle a read only flag"));           /* sun */
 		puts(_("\tb\tedit bsd disklabel"));
@@ -3528,7 +3487,7 @@
 	} else
 #endif
 #ifdef CONFIG_FEATURE_SGI_LABEL
-	if (sgi_label) {
+	if (label_sgi == current_label_type) {
 		puts(_("Command action"));
 		puts(_("\ta\tselect bootable partition"));    /* sgi flavour */
 		puts(_("\tb\tedit bootfile entry"));          /* sgi */
@@ -3548,7 +3507,7 @@
 	} else
 #endif
 #ifdef CONFIG_FEATURE_AIX_LABEL
-	if (aix_label) {
+	if (label_aix == current_label_type) {
 		puts(_("Command action"));
 		puts(_("\tm\tprint this menu"));
 		puts(_("\to\tcreate a new empty DOS partition table"));
@@ -3586,7 +3545,7 @@
 xmenu(void)
 {
 #ifdef CONFIG_FEATURE_SUN_LABEL
-	if (sun_label) {
+	if (label_sun == current_label_type) {
 	puts(_("Command action"));
 	puts(_("\ta\tchange number of alternate cylinders"));      /*sun*/
 	puts(_("\tc\tchange number of cylinders"));
@@ -3606,7 +3565,7 @@
 	}  else
 #endif
 #ifdef CONFIG_FEATURE_SGI_LABEL
-	if (sgi_label) {
+	if (label_sgi == current_label_type) {
 		puts(_("Command action"));
 		puts(_("\tb\tmove beginning of data in a partition")); /* !sun */
 		puts(_("\tc\tchange number of cylinders"));
@@ -3624,7 +3583,7 @@
 	} else
 #endif
 #ifdef CONFIG_FEATURE_AIX_LABEL
-	if (aix_label) {
+	if (label_aix == current_label_type) {
 		puts(_("Command action"));
 		puts(_("\tb\tmove beginning of data in a partition")); /* !sun */
 		puts(_("\tc\tchange number of cylinders"));
@@ -3669,10 +3628,10 @@
 {
 	return (
 #ifdef CONFIG_FEATURE_SUN_LABEL
-		sun_label ? sun_sys_types :
+		label_sun == current_label_type ? sun_sys_types :
 #endif
 #ifdef CONFIG_FEATURE_SGI_LABEL
-		sgi_label ? sgi_sys_types :
+		label_sgi == current_label_type ? sgi_sys_types :
 #endif
 		i386_sys_types);
 }
@@ -3699,10 +3658,10 @@
 {
 	return (
 #ifdef CONFIG_FEATURE_SUN_LABEL
-		sun_label ? sunlabel->infos[i].id :
+		label_sun == current_label_type ? sunlabel->infos[i].id :
 #endif
 #ifdef CONFIG_FEATURE_SGI_LABEL
-		sgi_label ? sgi_get_sysid(i) :
+		label_sgi == current_label_type ? sgi_get_sysid(i) :
 #endif
 		ptes[i].part_table->sys_ind);
 }
@@ -3829,7 +3788,7 @@
 static void
 warn_cylinders(void)
 {
-	if (dos_label && cylinders > 1024 && !nowarn)
+	if (label_dos == current_label_type && cylinders > 1024 && !nowarn)
 		fprintf(stderr, _("\n"
 "The number of cylinders for this disk is set to %d.\n"
 "There is nothing wrong with that, but this is larger than 1024,\n"
@@ -3947,17 +3906,10 @@
 	_("Building a new DOS disklabel. Changes will remain in memory only,\n"
 	  "until you decide to write them. After that, of course, the previous\n"
 	  "content won't be recoverable.\n\n"));
-#ifdef CONFIG_FEATURE_SUN_LABEL
-	sun_nolabel();  /* otherwise always recognised as sun */
-#endif
-#ifdef CONFIG_FEATURE_SGI_LABEL
-	sgi_nolabel();  /* otherwise always recognised as sgi */
-#endif
-#ifdef CONFIG_FEATURE_AIX_LABEL
-	aix_label = 0;
-#endif
+
+	current_label_type = label_dos;
+
 #ifdef CONFIG_FEATURE_OSF_LABEL
-	osf_label = 0;
 	possibly_osf_label = 0;
 #endif
 	partitions = 4;
@@ -4156,7 +4108,7 @@
 	if (check_osf_label()) {
 		possibly_osf_label = 1;
 		if (!valid_part_table_flag(MBRbuffer)) {
-			osf_label = 1;
+			current_label_type = label_osf;
 			return 0;
 		}
 		printf(_("This disk has both DOS and BSD magic.\n"
@@ -4344,19 +4296,33 @@
 	pe = &ptes[i];
 
 	if (warn) {
-		if ((!sun_label && !sgi_label && !pe->part_table->sys_ind)
+		if (
+			(
+				label_sun != current_label_type && 
+				label_sgi != current_label_type && 
+				!pe->part_table->sys_ind
+			)
 #ifdef CONFIG_FEATURE_SUN_LABEL
-			|| (sun_label &&
-			(!sunlabel->partitions[i].num_sectors ||
-			 !sunlabel->infos[i].id))
+			|| (
+				label_sun == current_label_type &&
+				(
+					!sunlabel->partitions[i].num_sectors
+					|| !sunlabel->infos[i].id
+				)
+			)
 #endif
 #ifdef CONFIG_FEATURE_SGI_LABEL
-			|| (sgi_label && (!sgi_get_num_sectors(i)))
+			|| (
+				label_sgi == current_label_type &&
+				 !sgi_get_num_sectors(i)
+			)
 #endif
-		   )
+		){
 			fprintf(stderr,
 				_("Warning: partition %d has empty type\n"),
-				i+1);
+				i+1
+			);
+		}
 	}
 	return i;
 }
@@ -4468,13 +4434,13 @@
 	pe->changed = 1;
 
 #ifdef CONFIG_FEATURE_SUN_LABEL
-	if (sun_label) {
+	if (label_sun == current_label_type) {
 		sun_delete_partition(i);
 		return;
 	}
 #endif
 #ifdef CONFIG_FEATURE_SGI_LABEL
-	if (sgi_label) {
+	if (label_sgi == current_label_type) {
 		sgi_delete_partition(i);
 		return;
 	}
@@ -4539,7 +4505,7 @@
 	/* If sgi_label then don't use get_existing_partition,
 	   let the user select a partition, since get_existing_partition()
 	   only works for Linux like partition tables. */
-	if (!sgi_label) {
+	if (label_sgi != current_label_type) {
 		i = get_existing_partition(0, partitions);
 	} else {
 		i = get_partition(0, partitions);
@@ -4554,12 +4520,17 @@
 
 	/* if changing types T to 0 is allowed, then
 	   the reverse change must be allowed, too */
-	if (!sys && !sgi_label && !sun_label && !get_nr_sects(p))
+	if (!sys && label_sgi != current_label_type &&
+		label_sun != current_label_type && !get_nr_sects(p))
+	{
 		printf(_("Partition %d does not exist yet!\n"), i + 1);
-	else while (1) {
+	}else{
+	    while (1) {
 		sys = read_hex (get_sys_types());
 
-		if (!sys && !sgi_label && !sun_label) {
+		if (!sys && label_sgi != current_label_type &&
+			label_sun != current_label_type)
+		{
 			printf(_("Type 0 means free space to many systems\n"
 				   "(but not to Linux). Having partitions of\n"
 				   "type 0 is probably unwise. You can delete\n"
@@ -4567,7 +4538,7 @@
 			/* break; */
 		}
 
-		if (!sun_label && !sgi_label) {
+		if (label_sun != current_label_type && label_sgi != current_label_type) {
 			if (IS_EXTENDED(sys) != IS_EXTENDED(p->sys_ind)) {
 				printf(_("You cannot change a partition into"
 					   " an extended one or vice versa\n"
@@ -4578,33 +4549,39 @@
 
 		if (sys < 256) {
 #ifdef CONFIG_FEATURE_SUN_LABEL
-			if (sun_label && i == 2 && sys != WHOLE_DISK)
+			if (label_sun == current_label_type && i == 2 && sys != WHOLE_DISK)
 				printf(_("Consider leaving partition 3 "
 					   "as Whole disk (5),\n"
 					   "as SunOS/Solaris expects it and "
 					   "even Linux likes it.\n\n"));
 #endif
 #ifdef CONFIG_FEATURE_SGI_LABEL
-			if (sgi_label && ((i == 10 && sys != ENTIRE_DISK)
-					  || (i == 8 && sys != 0)))
+			if (label_sgi == current_label_type &&
+				(
+					(i == 10 && sys != ENTIRE_DISK) ||
+					(i == 8 && sys != 0)
+				)
+			){
 				printf(_("Consider leaving partition 9 "
 					   "as volume header (0),\nand "
 					   "partition 11 as entire volume (6)"
 					   "as IRIX expects it.\n\n"));
+			}
 #endif
 			if (sys == origsys)
 				break;
 #ifdef CONFIG_FEATURE_SUN_LABEL
-			if (sun_label) {
+			if (label_sun == current_label_type) {
 				sun_change_sysid(i, sys);
 			} else
 #endif
 #ifdef CONFIG_FEATURE_SGI_LABEL
-			if (sgi_label) {
+			if (label_sgi == current_label_type) {
 				sgi_change_sysid(i, sys);
 			} else
 #endif
 				p->sys_ind = sys;
+
 			printf(_("Changed system type of partition %d "
 				"to %x (%s)\n"), i + 1, sys,
 				partition_type(sys));
@@ -4614,6 +4591,7 @@
 				dos_changed = 1;
 			break;
 		}
+	    }
 	}
 }
 #endif /* CONFIG_FEATURE_FDISK_WRITABLE */
@@ -4870,14 +4848,14 @@
 	int i, w;
 
 #ifdef CONFIG_FEATURE_SUN_LABEL
-	if (sun_label) {
+	if (label_sun == current_label_type) {
 		sun_list_table(xtra);
 		return;
 	}
 #endif
 
 #ifdef CONFIG_FEATURE_SGI_LABEL
-	if (sgi_label) {
+	if (label_sgi == current_label_type) {
 		sgi_list_table(xtra);
 		return;
 	}
@@ -4886,7 +4864,7 @@
 	list_disk_geometry();
 
 #ifdef CONFIG_FEATURE_OSF_LABEL
-	if (osf_label) {
+	if (label_osf == current_label_type) {
 		xbsd_print_disklabel(xtra);
 		return;
 	}
@@ -4937,7 +4915,8 @@
 	/* Is partition table in disk order? It need not be, but... */
 	/* partition table entries are not checked for correct order if this
 	   is a sgi, sun or aix labeled disk... */
-	if (dos_label && wrong_p_order(NULL)) {
+	if (label_dos == current_label_type && wrong_p_order(NULL)) {
+		/* FIXME */
 		printf(_("\nPartition table entries are not in disk order\n"));
 	}
 }
@@ -5029,13 +5008,13 @@
 		return;
 
 #ifdef CONFIG_FEATURE_SUN_LABEL
-	if (sun_label) {
+	if (label_sun == current_label_type) {
 		verify_sun();
 		return;
 	}
 #endif
 #ifdef CONFIG_FEATURE_SGI_LABEL
-	if (sgi_label) {
+	if (label_sgi == current_label_type) {
 		verify_sgi(1);
 		return;
 	}
@@ -5249,19 +5228,19 @@
 		return;
 
 #ifdef CONFIG_FEATURE_SUN_LABEL
-	if (sun_label) {
+	if (label_sun == current_label_type) {
 		add_sun_partition(get_partition(0, partitions), LINUX_NATIVE);
 		return;
 	}
 #endif
 #ifdef CONFIG_FEATURE_SGI_LABEL
-	if (sgi_label) {
+	if (label_sgi == current_label_type) {
 		sgi_add_partition(get_partition(0, partitions), LINUX_NATIVE);
 		return;
 	}
 #endif
 #ifdef CONFIG_FEATURE_AIX_LABEL
-	if (aix_label) {
+	if (label_aix == current_label_type) {
 		printf(_("\tSorry - this fdisk cannot handle AIX disk labels."
 			 "\n\tIf you want to add DOS-type partitions, create"
 			 "\n\ta new empty DOS partition table first. (Use o.)"
@@ -5320,7 +5299,7 @@
 {
 	int i;
 
-	if (dos_label) {
+	if (label_dos == current_label_type) {
 		for (i = 0; i < 3; i++)
 			if (ptes[i].changed)
 				ptes[3].changed = 1;
@@ -5334,13 +5313,13 @@
 		}
 	}
 #ifdef CONFIG_FEATURE_SGI_LABEL
-	else if (sgi_label) {
+	else if (label_sgi == current_label_type) {
 		/* no test on change? the printf below might be mistaken */
 		sgi_write_table();
 	}
 #endif
 #ifdef CONFIG_FEATURE_SUN_LABEL
-	else if (sun_label) {
+	else if (label_sun == current_label_type) {
 		int needw = 0;
 
 		for (i = 0; i < 8; i++)
@@ -5431,7 +5410,7 @@
 
 	printf(_("Device: %s\n"), disk_device);
 #if defined(CONFIG_FEATURE_SGI_LABEL) || defined(CONFIG_FEATURE_SUN_LABEL)
-	if (sun_label || sgi_label)
+	if (label_sun == current_label_type || label_sgi == current_label_type)
 		print_buffer(MBRbuffer);
 	else
 #endif
@@ -5475,12 +5454,12 @@
 		switch (c) {
 		case 'a':
 #ifdef CONFIG_FEATURE_SUN_LABEL
-			if (sun_label)
+			if (label_sun == current_label_type)
 				sun_set_alt_cyl();
 #endif
 			break;
 		case 'b':
-			if (dos_label)
+			if (label_dos == current_label_type)
 				move_begin(get_partition(0, partitions));
 			break;
 		case 'c':
@@ -5488,10 +5467,10 @@
 				read_int(1, cylinders, 1048576, 0,
 					_("Number of cylinders"));
 #ifdef CONFIG_FEATURE_SUN_LABEL
-			if (sun_label)
+			if (label_sun == current_label_type)
 				sun_set_ncyl(cylinders);
 #endif
-			if (dos_label)
+			if (label_dos == current_label_type)
 				warn_cylinders();
 			break;
 		case 'd':
@@ -5499,20 +5478,20 @@
 			break;
 		case 'e':
 #ifdef CONFIG_FEATURE_SGI_LABEL
-			if (sgi_label)
+			if (label_sgi == current_label_type)
 				sgi_set_xcyl();
-			 else
+			else
 #endif
 #ifdef CONFIG_FEATURE_SUN_LABEL
-			 if (sun_label)
+			 if (label_sun == current_label_type)
 				sun_set_xcyl();
 			 else
 #endif
-			if (dos_label)
+			if (label_dos == current_label_type)
 				x_list_table(1);
 			break;
 		case 'f':
-			if (dos_label)
+			if (label_dos == current_label_type)
 				fix_partition_table_order();
 			break;
 		case 'g':
@@ -5527,19 +5506,19 @@
 			break;
 		case 'i':
 #ifdef CONFIG_FEATURE_SUN_LABEL
-			if (sun_label)
+			if (label_sun == current_label_type)
 				sun_set_ilfact();
 #endif
 			break;
 		case 'o':
 #ifdef CONFIG_FEATURE_SUN_LABEL
-			if (sun_label)
+			if (label_sun == current_label_type)
 				sun_set_rspeed();
 #endif
 			break;
 		case 'p':
 #ifdef CONFIG_FEATURE_SUN_LABEL
-			if (sun_label)
+			if (label_sun == current_label_type)
 				list_table(1);
 			else
 #endif
@@ -5570,7 +5549,7 @@
 			break;
 		case 'y':
 #ifdef CONFIG_FEATURE_SUN_LABEL
-			if (sun_label)
+			if (label_sun == current_label_type)
 				sun_set_pcylcount();
 #endif
 			break;
@@ -5615,6 +5594,7 @@
 	return is_ide;
 }
 
+
 static void
 try(const char *device, int user_specified)
 {
@@ -5632,8 +5612,9 @@
 			close(fd);
 		} else if (gb < 0) { /* no DOS signature */
 			list_disk_geometry();
-			if (aix_label)
+			if (label_aix == current_label_type){
 				return;
+			}
 #ifdef CONFIG_FEATURE_OSF_LABEL
 			if (btrydev(device) < 0)
 #endif
@@ -5645,8 +5626,9 @@
 			close(fd);
 			list_table(0);
 #ifdef CONFIG_FEATURE_FDISK_WRITABLE
-			if (!sun_label && partitions > 4)
+			if (label_sun != current_label_type && partitions > 4){
 				delete_partition(ext_index);
+			}
 #endif
 		}
 	} else {
@@ -5837,13 +5819,14 @@
 	get_boot(fdisk);
 
 #ifdef CONFIG_FEATURE_OSF_LABEL
-	if (osf_label) {
+	if (label_osf == current_label_type) {
 		/* OSF label, and no DOS label */
 		printf(_("Detected an OSF/1 disklabel on %s, entering "
 			 "disklabel mode.\n"),
 			   disk_device);
 		bselect();
-		osf_label = 0;
+		/*Why do we do this?  It seems to be counter-intuitive*/
+		current_label_type = label_dos;
 		/* If we return we may want to make an empty DOS label? */
 	}
 #endif
@@ -5853,15 +5836,15 @@
 		c = tolower(read_char(_("Command (m for help): ")));
 		switch (c) {
 		case 'a':
-			if (dos_label)
+			if (label_dos == current_label_type)
 				toggle_active(get_partition(1, partitions));
 #ifdef CONFIG_FEATURE_SUN_LABEL
-			else if (sun_label)
+			else if (label_sun == current_label_type)
 				toggle_sunflags(get_partition(1, partitions),
 						0x01);
 #endif
 #ifdef CONFIG_FEATURE_SGI_LABEL
-			else if (sgi_label)
+			else if (label_sgi == current_label_type)
 				sgi_set_bootpartition(
 					get_partition(1, partitions));
 #endif
@@ -5870,7 +5853,7 @@
 			break;
 		case 'b':
 #ifdef CONFIG_FEATURE_SGI_LABEL
-			if (sgi_label) {
+			if (label_sgi == current_label_type) {
 				printf(_("\nThe current boot file is: %s\n"),
 					sgi_get_bootfile());
 				if (read_chars(_("Please enter the name of the "
@@ -5885,15 +5868,15 @@
 #endif
 			break;
 		case 'c':
-			if (dos_label)
+			if (label_dos == current_label_type)
 				toggle_dos_compatibility_flag();
 #ifdef CONFIG_FEATURE_SUN_LABEL
-			else if (sun_label)
+			else if (label_sun == current_label_type)
 				toggle_sunflags(get_partition(1, partitions),
 						0x10);
 #endif
 #ifdef CONFIG_FEATURE_SGI_LABEL
-			else if (sgi_label)
+			else if (label_sgi == current_label_type)
 				sgi_set_swappartition(
 						get_partition(1, partitions));
 #endif
@@ -5908,7 +5891,7 @@
 			   let the user select a partition, since
 			   get_existing_partition() only works for Linux-like
 			   partition tables */
-				if (!sgi_label) {
+				if (label_sgi != current_label_type) {
 					j = get_existing_partition(1, partitions);
 				} else {
 					j = get_partition(1, partitions);
@@ -5922,7 +5905,7 @@
 			break;
 		case 'i':
 #ifdef CONFIG_FEATURE_SGI_LABEL
-			if (sgi_label)
+			if (label_sgi == current_label_type)
 				create_sgiinfo();
 			else
 #endif
@@ -5966,7 +5949,7 @@
 #ifdef CONFIG_FEATURE_FDISK_ADVANCED
 		case 'x':
 #ifdef CONFIG_FEATURE_SGI_LABEL
-			if (sgi_label) {
+			if (label_sgi == current_label_type) {
 				fprintf(stderr,
 					_("\n\tSorry, no experts menu for SGI "
 					"partition tables available.\n\n"));




More information about the busybox-cvs mailing list