display(fp, lp);
display(fp, lp, 0);
edit(lp, f)	struct disklabel *lp;	int f;{	int first, ch, fd;	struct disklabel label;	FILE *fp;	if ((fd = mkstemp(tmpfil)) == -1 || (fp = fdopen(fd, "w")) == NULL) {		if (fd != -1)			close(fd);		warn("%s", tmpfil);		return (1);	}	display(fp, lp);	fprintf(fp, "\n# Notes:\n");	fprintf(fp,"# Up to 16 partitions are valid, named from 'a' to 'p'.  Partition 'a' is\n""# your root filesystem, 'b' is your swap, and 'c' should cover your whole\n""# disk. Any other partition is free for any use.  'size' and 'offset' are\n""# in 512-byte blocks. fstype should be '4.2BSD', 'swap', or 'none' or some\n""# other values.  fsize/bsize/cpg should typically be '1024 8192 16' for a\n""# 4.2BSD filesystem (or '512 4096 16' except on alpha, sun4, ...)\n");	fclose(fp);	for (;;) {		if (!editit())			break;		fp = fopen(tmpfil, "r");		if (fp == NULL) {			warn("%s", tmpfil);			break;		}		memset(&label, 0, sizeof(label));		if (getasciilabel(fp, &label)) {			if (cmplabel(lp, &label) == 0) {				puts("No changes.");				fclose(fp);				(void) unlink(tmpfil);				return (0);			}			*lp = label;			if (writelabel(f, bootarea, lp) == 0) {				fclose(fp);				(void) unlink(tmpfil);				return (0);			}		}		fclose(fp);		printf("re-edit the label? [y]: ");		fflush(stdout);		first = ch = getchar();		while (ch != '\n' && ch != EOF)			ch = getchar();		if (first == 'n' || first == 'N')			break;	}	(void)unlink(tmpfil);	return (1);}