Bugzilla – Attachment 45711 Details for
Bug 104081
fdisk does not detect MAC-filesystem
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
IDP Log In
|
Forgot Password
fdisk filesystem mac
fs_mac.patch (text/x-diff), 7.03 KB, created by
Patrick Kirsch
on 2005-08-11 11:31:02 UTC
(
hide
)
Description:
fdisk filesystem mac
Filename:
MIME Type:
Creator:
Patrick Kirsch
Created:
2005-08-11 11:31:02 UTC
Size:
7.03 KB
patch
obsolete
>--- util-linux-2.12q/fdisk/fdiskmaclabel.c >+++ util-linux-2.12q/fdisk/fdiskmaclabel.c >@@ -0,0 +1,87 @@ >+/* >+ 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 "fdiskmaclabel.h" >+#include "nls.h" >+ >+#define MAC_BITMASK 0xffff0000 >+ >+ >+static int other_endian = 0; >+static short volumes=1; >+ >+/* >+ * only dealing with free blocks here >+ */ >+ >+static void >+mac_info( void ) { >+ puts( >+ _("\n\tThere is a valid MAC 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") >+ >+ ); >+} >+ >+void >+mac_nolabel( void ) >+{ >+ maclabel->magic = 0; >+ mac_label = 0; >+ partitions = 4; >+ memset( MBRbuffer, 0, sizeof(MBRbuffer) ); /* avoid fdisk cores */ >+ return; >+} >+ >+int >+check_mac_label( void ) >+{ >+ /* >+ Conversion: only 16 bit should compared >+ e.g.: HFS Label is only 16bit long >+ */ >+ >+ int magic_masked = 0 ; >+ magic_masked = maclabel->magic & MAC_BITMASK ; >+ >+ switch (magic_masked) { >+ case MAC_LABEL_MAGIC : >+ case MAC_LABEL_MAGIC_2: >+ case MAC_LABEL_MAGIC_3: >+ goto IS_MAC; >+ break; >+ default: >+ mac_label = 0; >+ other_endian = 0; >+ return 0; >+ >+ >+ } >+ >+ IS_MAC: >+ other_endian = (maclabel->magic == MAC_LABEL_MAGIC_SWAPPED); // =? >+ update_units(); >+ mac_label = 1; >+ partitions= 1016; // =? >+ volumes = 15; // =? >+ mac_info(); >+ mac_nolabel(); /* %% */ >+ mac_label = 1; /* %% */ >+ return 1; >+} >--- util-linux-2.12q/fdisk/fdiskmaclabel.h >+++ util-linux-2.12q/fdisk/fdiskmaclabel.h >@@ -0,0 +1,40 @@ >+#include <linux/types.h> /* for __u32 etc */ >+/* >+ * Copyright (C) Andreas Neuper, Sep 1998. >+ * This file may be redistributed under >+ * the terms of the GNU Public License. >+ */ >+ >+typedef struct { >+ unsigned int magic; /* expect MAC_LABEL_MAGIC */ >+ unsigned int fillbytes1[124]; >+ unsigned int physical_volume_id; >+ unsigned int fillbytes2[124]; >+} mac_partition; >+ >+#define MAC_LABEL_MAGIC 0x45520000 // MAC magic number only 16bits, do i always know that there are 0200 following ? Problem, after magic the uint16_t res1; follows, i donnno know about the 200k >+#define MAC_LABEL_MAGIC_2 0x50530000 >+#define MAC_LABEL_MAGIC_3 0x504d0000 >+ >+ >+#define MAC_LABEL_MAGIC_SWAPPED 0x00002554 >+ >+#define MAC_LABEL_MAGIC_2_SWAPPED 0x00003505 >+#define MAC_LABEL_MAGIC_3_SWAPPED 0x0000d405 >+ >+ >+/* fdisk.c */ >+#define maclabel ((mac_partition *)MBRbuffer) >+extern char MBRbuffer[MAX_SECTOR_SIZE]; >+extern char changed[MAXIMUM_PARTS]; >+extern unsigned int heads, sectors, cylinders; >+extern int show_begin; >+extern int mac_label; >+extern char *partition_type(unsigned char type); >+extern void update_units(void); >+extern char read_chars(char *mesg); >+ >+/* fdiskmaclabel.c */ >+extern struct systypes mac_sys_types[]; >+extern void mac_nolabel( void ); >+extern int check_mac_label( void ); >--- util-linux-2.12q/fdisk/Makefile >+++ util-linux-2.12q/fdisk/Makefile >@@ -39,7 +39,7 @@ > endif > endif > >-cfdisk: cfdisk.o llseek.o disksize.o i386_sys_types.o $(LIB)/xstrncpy.o >+cfdisk: cfdisk.o llseek.o disksize.o i386_sys_types.o $(LIB)/xstrncpy.o > ifeq "$(HAVE_SLANG)" "yes" > $(CC) $(LDFLAGS) $^ -o $@ $(LIBSLANG) > else >@@ -55,15 +55,17 @@ > rm -f activate > ln -s sfdisk activate > >-fdisk: fdisk.o llseek.o disksize.o fdiskbsdlabel.o fdisksgilabel.o \ >- fdisksunlabel.o fdiskaixlabel.o i386_sys_types.o partname.o >+fdisk: fdisk.o llseek.o disksize.o fdiskbsdlabel.o fdisksgilabel.o fdisksunlabel.o \ >+ fdiskmaclabel.o fdiskaixlabel.o i386_sys_types.o partname.o > fdisk.o: fdisk.c fdisk.h > fdiskbsdlabel.o: fdiskbsdlabel.c fdisk.h fdiskbsdlabel.h > fdisksunlabel.o: fdisksunlabel.c fdisksunlabel.h fdisk.h > fdiskaixlabel.o: fdiskaixlabel.c fdiskaixlabel.h fdisk.h >+fdiskmaclabel.o: fdiskmaclabel.c fdiskmaclabel.h fdisk.h >+ > fdisk.o cfdisk.o sfdisk.o fdiskbsdlabel.o fdisksunlabel.o \ >- fdisksgilabel.o fdiskaixlabel.o i386_sys_types.o partname.o: common.h >-sfdisk: sfdisk.o disksize.o i386_sys_types.o partname.o >+ fdisksgilabel.o fdiskaixlabel.o fdiskmaclabel.o i386_sys_types.o partname.o: common.h >+sfdisk: sfdisk.o disksize.o i386_sys_types.o partname.o > > install: all > $(INSTALLDIR) $(SBINDIR) >--- util-linux-2.12q/fdisk/fdisk.c >+++ util-linux-2.12q/fdisk/fdisk.c >@@ -26,6 +26,7 @@ > #include "fdisksunlabel.h" > #include "fdisksgilabel.h" > #include "fdiskaixlabel.h" >+#include "fdiskmaclabel.h" > > #include "../defines.h" > #ifdef HAVE_blkpg_h >@@ -165,11 +166,12 @@ > > unsigned long long total_number_of_sectors; > >-#define dos_label (!sun_label && !sgi_label && !aix_label && !osf_label) >+#define dos_label (!sun_label && !sgi_label && !aix_label && !mac_label && !osf_label) > int sun_label = 0; /* looking at sun disklabel */ > int sgi_label = 0; /* looking at sgi disklabel */ > int aix_label = 0; /* looking at aix disklabel */ > int osf_label = 0; /* looking at OSF/1 disklabel */ >+int mac_label = 0; /* looking at mac disklabel */ > int possibly_osf_label = 0; > > jmp_buf listingbuf; >@@ -363,6 +365,10 @@ > puts(_(" v verify the partition table")); > puts(_(" w write table to disk and exit")); > } >+ else if (mac_label) { >+ puts(_("no Commands available")); >+ >+ } > else if (aix_label) { > puts(_("Command action")); > puts(_(" m print this menu")); >@@ -443,6 +449,9 @@ > puts(_(" v verify the partition table")); > puts(_(" w write table to disk and exit")); > } >+ else if (mac_label) { >+ puts(_("no Commands available")); >+ } > else { > puts(_("Command action")); > puts(_(" b move beginning of data in a partition")); /* !sun */ >@@ -943,6 +952,9 @@ > if (check_aix_label()) > return 0; > >+ if (check_mac_label()) >+ return 0; >+ > if (check_osf_label()) { > possibly_osf_label = 1; > if (!valid_part_table_flag(MBRbuffer)) { >@@ -2074,6 +2086,15 @@ > "This will destroy the present disk contents.\n")); > return; > } >+ >+ if (mac_label) { >+ printf(_("\tSorry - this fdisk cannot handle MAC 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")); >+ return; >+ } > > for (i = 0; i < 4; i++) > free_primary += !ptes[i].part_table->sys_ind; >@@ -2404,7 +2425,11 @@ > if (gb > 0) { /* I/O error */ > } else if (gb < 0) { /* no DOS signature */ > list_disk_geometry(); >- if (!aix_label && btrydev(device) < 0) >+ if (aix_label) >+ return; >+ if (mac_label) >+ return; >+ if (btrydev(device) < 0) > fprintf(stderr, > _("Disk %s doesn't contain a valid " > "partition table\n"), device);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
Actions:
View
Attachments on
bug 104081
: 45711 |
48778