summaryrefslogtreecommitdiff
path: root/fdisks/fdiskaixlabel.c
blob: 6fe7b59d8ae143befbedd9a9a050b2a0f7eacecd (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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*
  Changes:
  Sat Mar 20 09:51:38 EST 1999 Arnaldo Carvalho de Melo <acme@conectiva.com.br>
	Internationalization
*/
#include <stdio.h>              /* stderr */
#include <string.h>             /* strstr */
#include <unistd.h>             /* write */

#include <endian.h>

#include "common.h"
#include "fdisk.h"
#include "fdiskaixlabel.h"
#include "nls.h"

static	int     other_endian = 0;
static  short	volumes=1;

/*
 * only dealing with free blocks here
 */

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

static void aix_nolabel(struct fdisk_context *cxt)
{
    struct aix_partition *aixlabel = (struct aix_partition *) cxt->firstsector;

    aixlabel->magic = 0;
    partitions = 4;
    fdisk_zeroize_firstsector(cxt);
    return;
}

static int aix_probe_label(struct fdisk_context *cxt)
{
    struct aix_partition *aixlabel = (struct aix_partition *) cxt->firstsector;

    if (aixlabel->magic != AIX_LABEL_MAGIC &&
	aixlabel->magic != AIX_LABEL_MAGIC_SWAPPED) {
	other_endian = 0;
	return 0;
    }
    other_endian = (aixlabel->magic == AIX_LABEL_MAGIC_SWAPPED);
    disklabel = AIX_LABEL;
    partitions= 1016;
    volumes = 15;
    aix_info();
    aix_nolabel(cxt);		/* %% */
    return 1;
}

static void aix_add_partition(
		struct fdisk_context *cxt __attribute__((__unused__)),
		int partnum __attribute__((__unused__)),
		int parttype __attribute__((__unused__)))
{
	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.)"
		 "\n\tWARNING: "
		 "This will destroy the present disk contents.\n"));
}

const struct fdisk_label aix_label =
{
	.name = "aix",
	.probe = aix_probe_label,
	.write = NULL,
	.verify = NULL,
	.create = NULL,
	.part_add = aix_add_partition,
	.part_delete = NULL,
};