summaryrefslogtreecommitdiffhomepage
path: root/util-linux/fdisk_aix.c
blob: 0a5e818fe65005686c4554c3a3142206060ac5b9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#if ENABLE_FEATURE_AIX_LABEL
/*
 * Copyright (C) Andreas Neuper, Sep 1998.
 *
 * Licensed under GPLv2, see file LICENSE in this source tree.
 */

typedef struct {
	uint32_t magic;        /* expect AIX_LABEL_MAGIC */
	uint32_t fillbytes1[124];
	uint32_t physical_volume_id;
	uint32_t fillbytes2[124];
} aix_partition;

#define AIX_LABEL_MAGIC         0xc9c2d4c1
#define AIX_LABEL_MAGIC_SWAPPED 0xc1d4c2c9
#define AIX_INFO_MAGIC          0x00072959
#define AIX_INFO_MAGIC_SWAPPED  0x59290700

/*
 * Changes:
 * 1999-03-20 Arnaldo Carvalho de Melo <acme@conectiva.com.br>
 *     Internationalization
 *
 * 2003-03-20 Phillip Kesling <pkesling@sgi.com>
 *      Some fixes
 */

// Write-only vars, unfinished code?
//static smallint aix_other_endian; /* bool */
//static smallint aix_volumes = 1; /* max 15 */

/*
 * only dealing with free blocks here
 */

static void
aix_info(void)
{
	puts("\n"
"There is a valid AIX label on this disk.\n"
"Unfortunately Linux cannot handle these disks at the moment.\n"
"Nevertheless some advice:\n"
"1. fdisk will destroy its contents on write.\n"
"2. Be sure that this disk is NOT a still vital part of a volume group.\n"
"   (Otherwise you may erase the other disks as well, if unmirrored.)\n"
"3. Before deleting this physical volume be sure to remove the disk\n"
"   logically from your AIX machine. (Otherwise you become an AIXpert).\n"
	);
}

static int
check_aix_label(void)
{
	aix_partition *aixlabel = (void*)MBRbuffer;

	if (aixlabel->magic != AIX_LABEL_MAGIC
	 && aixlabel->magic != AIX_LABEL_MAGIC_SWAPPED
	) {
		current_label_type = LABEL_DOS;
//		aix_other_endian = 0;
		return 0;
	}
//	aix_other_endian = (aixlabel->magic == AIX_LABEL_MAGIC_SWAPPED);
	update_units();
	current_label_type = LABEL_AIX;
	g_partitions = 1016;
//	aix_volumes = 15;
	aix_info();
	/*aix_nolabel();*/              /* %% */
	/*aix_label = 1;*/              /* %% */
	return 1;
}
#endif  /* AIX_LABEL */