[PATCH] libvolume_id fixes for solaris
Artem Kachitchkine
Artem.Kachitchkin at Sun.COM
Mon Feb 20 12:49:40 PST 2006
Changes required for libvolume_id to compile and work correctly on Solaris:
- Sun compiler uses pragma instead of __attribute__ for packed structs;
- if configure detects absense of strnlen(), utils.c will provide a local
implementation;
- different byteorder functions;
- some filesystems are called differently.
Sorry there isn't a more elegant way to conditionally insert pragmas than ifdefs
in each file. Actually gcc seems to recognize #pragma pack(), but I hear it
might not be present in all gcc versions/platforms and I wasn't completely
comfortable changing Linux code.
-Artem.
-------------- next part --------------
Index: configure.in
===================================================================
RCS file: /cvs/hal/hal/configure.in,v
retrieving revision 1.118
diff -u -r1.118 configure.in
--- configure.in 13 Feb 2006 07:29:44 -0000 1.118
+++ configure.in 20 Feb 2006 19:20:58 -0000
@@ -297,6 +297,8 @@
esac
fi
+AC_CHECK_FUNCS(strnlen)
+
# DocBook Documentation
AC_PATH_PROG(DOCBOOK, docbook2html, no)
Index: volume_id/cramfs.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/cramfs.c,v
retrieving revision 1.6
diff -u -r1.6 cramfs.c
--- volume_id/cramfs.c 15 Nov 2005 03:32:36 -0000 1.6
+++ volume_id/cramfs.c 20 Feb 2006 19:20:59 -0000
@@ -27,6 +27,10 @@
#include "logging.h"
#include "util.h"
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
struct cramfs_super {
uint8_t magic[4];
uint32_t size;
@@ -42,6 +46,10 @@
uint8_t name[16];
} __attribute__((__packed__));
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack()
+#endif
+
int volume_id_probe_cramfs(struct volume_id *id, uint64_t off)
{
struct cramfs_super *cs;
Index: volume_id/ext.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/ext.c,v
retrieving revision 1.7
diff -u -r1.7 ext.c
--- volume_id/ext.c 15 Nov 2005 03:32:36 -0000 1.7
+++ volume_id/ext.c 20 Feb 2006 19:20:59 -0000
@@ -27,6 +27,10 @@
#include "util.h"
#include "logging.h"
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
struct ext2_super_block {
uint32_t s_inodes_count;
uint32_t s_blocks_count;
@@ -63,6 +67,10 @@
uint8_t s_volume_name[16];
} __attribute__((__packed__));
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack()
+#endif
+
#define EXT_SUPER_MAGIC 0xEF53
#define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x00000004
#define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV 0x00000008
Index: volume_id/fat.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/fat.c,v
retrieving revision 1.10
diff -u -r1.10 fat.c
--- volume_id/fat.c 21 Nov 2005 17:55:13 -0000 1.10
+++ volume_id/fat.c 20 Feb 2006 19:20:59 -0000
@@ -35,6 +35,10 @@
#define FAT_ATTR_MASK 0x3f
#define FAT_ENTRY_FREE 0xe5
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
struct vfat_super_block {
uint8_t boot_jump[3];
uint8_t sysid[8];
@@ -91,6 +95,10 @@
uint32_t size;
} __attribute__((__packed__));
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
static uint8_t *get_attr_volume_id(struct vfat_dir_entry *dir, unsigned int count)
{
unsigned int i;
@@ -344,7 +352,11 @@
found:
volume_id_set_usage(id, VOLUME_ID_FILESYSTEM);
+#ifndef sun
id->type = "vfat";
+#else
+ id->type = "pcfs";
+#endif
return 0;
}
Index: volume_id/hfs.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/hfs.c,v
retrieving revision 1.7
diff -u -r1.7 hfs.c
--- volume_id/hfs.c 15 Nov 2005 03:32:36 -0000 1.7
+++ volume_id/hfs.c 20 Feb 2006 19:21:00 -0000
@@ -27,6 +27,10 @@
#include "logging.h"
#include "util.h"
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
struct hfs_finder_info{
uint32_t boot_folder;
uint32_t start_app;
@@ -134,6 +138,10 @@
struct hfsplus_fork start_file;
} __attribute__((__packed__)) *hfsplus;
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack()
+#endif
+
#define HFS_SUPERBLOCK_OFFSET 0x400
#define HFS_NODE_LEAF 0xff
#define HFSPLUS_POR_CNID 1
Index: volume_id/highpoint.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/highpoint.c,v
retrieving revision 1.8
diff -u -r1.8 highpoint.c
--- volume_id/highpoint.c 15 Nov 2005 03:32:36 -0000 1.8
+++ volume_id/highpoint.c 20 Feb 2006 19:21:00 -0000
@@ -27,6 +27,10 @@
#include "logging.h"
#include "util.h"
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
struct hpt37x_meta {
uint8_t filler1[32];
uint32_t magic;
@@ -36,6 +40,10 @@
uint32_t magic;
} __attribute__((packed));
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack()
+#endif
+
#define HPT37X_CONFIG_OFF 0x1200
#define HPT37X_MAGIC_OK 0x5a7816f0
#define HPT37X_MAGIC_BAD 0x5a7816fd
Index: volume_id/hpfs.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/hpfs.c,v
retrieving revision 1.6
diff -u -r1.6 hpfs.c
--- volume_id/hpfs.c 15 Nov 2005 03:32:36 -0000 1.6
+++ volume_id/hpfs.c 20 Feb 2006 19:21:00 -0000
@@ -27,12 +27,20 @@
#include "logging.h"
#include "util.h"
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
struct hpfs_super
{
uint8_t magic[4];
uint8_t version;
} __attribute__((__packed__));
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack()
+#endif
+
#define HPFS_SUPERBLOCK_OFFSET 0x2000
int volume_id_probe_hpfs(struct volume_id *id, uint64_t off)
Index: volume_id/iso9660.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/iso9660.c,v
retrieving revision 1.8
diff -u -r1.8 iso9660.c
--- volume_id/iso9660.c 15 Nov 2005 03:32:36 -0000 1.8
+++ volume_id/iso9660.c 20 Feb 2006 19:21:00 -0000
@@ -35,6 +35,10 @@
#define ISO_VD_END 0xff
#define ISO_VD_MAX 16
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
struct iso_volume_descriptor {
uint8_t vd_type;
uint8_t vd_id[5];
@@ -54,6 +58,10 @@
uint8_t version;
} __attribute__((__packed__));
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack()
+#endif
+
int volume_id_probe_iso9660(struct volume_id *id, uint64_t off)
{
uint8_t *buf;
Index: volume_id/isw_raid.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/isw_raid.c,v
retrieving revision 1.6
diff -u -r1.6 isw_raid.c
--- volume_id/isw_raid.c 15 Nov 2005 03:32:36 -0000 1.6
+++ volume_id/isw_raid.c 20 Feb 2006 19:21:00 -0000
@@ -27,6 +27,10 @@
#include "logging.h"
#include "util.h"
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
struct isw_meta {
uint8_t sig[32];
uint32_t check_sum;
@@ -35,6 +39,10 @@
uint32_t generation_num;
} __attribute__((packed));
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack()
+#endif
+
#define ISW_SIGNATURE "Intel Raid ISM Cfg Sig. "
Index: volume_id/jfs.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/jfs.c,v
retrieving revision 1.7
diff -u -r1.7 jfs.c
--- volume_id/jfs.c 15 Nov 2005 03:32:36 -0000 1.7
+++ volume_id/jfs.c 20 Feb 2006 19:21:00 -0000
@@ -27,6 +27,10 @@
#include "logging.h"
#include "util.h"
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
struct jfs_super_block {
uint8_t magic[4];
uint32_t version;
@@ -40,6 +44,10 @@
uint8_t loguuid[16];
} __attribute__((__packed__));
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack()
+#endif
+
#define JFS_SUPERBLOCK_OFFSET 0x8000
int volume_id_probe_jfs(struct volume_id *id, uint64_t off)
Index: volume_id/linux_raid.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/linux_raid.c,v
retrieving revision 1.8
diff -u -r1.8 linux_raid.c
--- volume_id/linux_raid.c 15 Nov 2005 03:32:36 -0000 1.8
+++ volume_id/linux_raid.c 20 Feb 2006 19:21:00 -0000
@@ -27,6 +27,10 @@
#include "logging.h"
#include "util.h"
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
struct mdp_super_block {
uint32_t md_magic;
uint32_t major_version;
@@ -46,6 +50,10 @@
uint32_t set_uuid3;
} __attribute__((packed)) *mdp;
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack()
+#endif
+
#define MD_RESERVED_BYTES 0x10000
#define MD_MAGIC 0xa92b4efc
Index: volume_id/linux_swap.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/linux_swap.c,v
retrieving revision 1.7
diff -u -r1.7 linux_swap.c
--- volume_id/linux_swap.c 15 Nov 2005 03:32:36 -0000 1.7
+++ volume_id/linux_swap.c 20 Feb 2006 19:21:00 -0000
@@ -27,6 +27,10 @@
#include "logging.h"
#include "util.h"
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
struct swap_header_v1_2 {
uint8_t bootbits[1024];
uint32_t version;
@@ -36,6 +40,10 @@
uint8_t volume_name[16];
} __attribute__((__packed__)) *sw;
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack()
+#endif
+
#define LARGEST_PAGESIZE 0x4000
int volume_id_probe_linux_swap(struct volume_id *id, uint64_t off)
Index: volume_id/lsi_raid.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/lsi_raid.c,v
retrieving revision 1.5
diff -u -r1.5 lsi_raid.c
--- volume_id/lsi_raid.c 15 Nov 2005 03:32:36 -0000 1.5
+++ volume_id/lsi_raid.c 20 Feb 2006 19:21:00 -0000
@@ -27,10 +27,18 @@
#include "logging.h"
#include "util.h"
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
struct lsi_meta {
uint8_t sig[6];
} __attribute__((packed));
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
#define LSI_SIGNATURE "$XIDE$"
int volume_id_probe_lsi_mega_raid(struct volume_id *id, uint64_t off, uint64_t size)
Index: volume_id/luks.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/luks.c,v
retrieving revision 1.8
diff -u -r1.8 luks.c
--- volume_id/luks.c 15 Nov 2005 03:32:36 -0000 1.8
+++ volume_id/luks.c 20 Feb 2006 19:21:00 -0000
@@ -42,6 +42,10 @@
#define LUKS_PHDR_SIZE (sizeof(struct luks_phdr)/SECTOR_SIZE+1)
#define UUID_STRING_L 40
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
struct luks_phdr {
uint8_t magic[LUKS_MAGIC_L];
uint16_t version;
@@ -63,6 +67,10 @@
} keyblock[LUKS_NUMKEYS];
};
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
int volume_id_probe_luks(struct volume_id *id, uint64_t off)
{
struct luks_phdr *header;
Index: volume_id/lvm.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/lvm.c,v
retrieving revision 1.8
diff -u -r1.8 lvm.c
--- volume_id/lvm.c 15 Nov 2005 03:32:36 -0000 1.8
+++ volume_id/lvm.c 20 Feb 2006 19:21:00 -0000
@@ -27,6 +27,10 @@
#include "logging.h"
#include "util.h"
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
struct lvm1_super_block {
uint8_t id[2];
} __attribute__((packed));
@@ -39,6 +43,10 @@
uint8_t type[8];
} __attribute__((packed));
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack()
+#endif
+
#define LVM1_SB_OFF 0x400
#define LVM1_MAGIC "HM"
Index: volume_id/mac.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/mac.c,v
retrieving revision 1.8
diff -u -r1.8 mac.c
--- volume_id/mac.c 15 Nov 2005 03:32:36 -0000 1.8
+++ volume_id/mac.c 20 Feb 2006 19:21:00 -0000
@@ -27,6 +27,10 @@
#include "logging.h"
#include "util.h"
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
struct mac_driver_desc {
uint8_t signature[2];
uint16_t block_size;
@@ -43,6 +47,10 @@
uint8_t type[32];
} __attribute__((__packed__));
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
int volume_id_probe_mac_partition_map(struct volume_id *id, uint64_t off)
{
const uint8_t *buf;
Index: volume_id/minix.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/minix.c,v
retrieving revision 1.5
diff -u -r1.5 minix.c
--- volume_id/minix.c 15 Nov 2005 03:32:36 -0000 1.5
+++ volume_id/minix.c 20 Feb 2006 19:21:01 -0000
@@ -27,6 +27,10 @@
#include "logging.h"
#include "util.h"
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
struct minix_super_block
{
uint16_t s_ninodes;
@@ -41,6 +45,10 @@
uint32_t s_zones;
} __attribute__((__packed__));
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack()
+#endif
+
#define MINIX_SUPERBLOCK_OFFSET 0x400
int volume_id_probe_minix(struct volume_id *id, uint64_t off)
Index: volume_id/msdos.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/msdos.c,v
retrieving revision 1.7
diff -u -r1.7 msdos.c
--- volume_id/msdos.c 15 Nov 2005 03:32:36 -0000 1.7
+++ volume_id/msdos.c 20 Feb 2006 19:21:01 -0000
@@ -27,6 +27,10 @@
#include "logging.h"
#include "util.h"
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
struct msdos_partition_entry {
uint8_t boot_ind;
uint8_t head;
@@ -40,6 +44,10 @@
uint32_t nr_sects;
} __attribute__((packed));
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack()
+#endif
+
#define MSDOS_MAGIC "\x55\xaa"
#define MSDOS_PARTTABLE_OFFSET 0x1be
#define MSDOS_SIG_OFF 0x1fe
Index: volume_id/ntfs.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/ntfs.c,v
retrieving revision 1.8
diff -u -r1.8 ntfs.c
--- volume_id/ntfs.c 15 Nov 2005 03:32:36 -0000 1.8
+++ volume_id/ntfs.c 20 Feb 2006 19:21:01 -0000
@@ -27,6 +27,10 @@
#include "logging.h"
#include "util.h"
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
struct ntfs_super_block {
uint8_t jump[3];
uint8_t oem_id[8];
@@ -85,6 +89,10 @@
uint8_t minor_ver;
} __attribute__((__packed__)) *info;
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack()
+#endif
+
#define MFT_RECORD_VOLUME 3
#define MFT_RECORD_ATTR_VOLUME_NAME 0x60
#define MFT_RECORD_ATTR_VOLUME_INFO 0x70
Index: volume_id/nvidia_raid.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/nvidia_raid.c,v
retrieving revision 1.5
diff -u -r1.5 nvidia_raid.c
--- volume_id/nvidia_raid.c 15 Nov 2005 03:32:36 -0000 1.5
+++ volume_id/nvidia_raid.c 20 Feb 2006 19:21:01 -0000
@@ -27,6 +27,10 @@
#include "logging.h"
#include "util.h"
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
struct nvidia_meta {
uint8_t vendor[8];
uint32_t size;
@@ -34,6 +38,10 @@
uint16_t version;
} __attribute__((packed));
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack()
+#endif
+
#define NVIDIA_SIGNATURE "NVIDIA"
int volume_id_probe_nvidia_raid(struct volume_id *id, uint64_t off, uint64_t size)
Index: volume_id/ocfs.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/ocfs.c,v
retrieving revision 1.2
diff -u -r1.2 ocfs.c
--- volume_id/ocfs.c 15 Nov 2005 03:32:36 -0000 1.2
+++ volume_id/ocfs.c 20 Feb 2006 19:21:01 -0000
@@ -28,6 +28,9 @@
#include "logging.h"
#include "util.h"
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
struct ocfs1_super_block_header {
uint32_t minor_version;
@@ -127,6 +130,10 @@
uint8_t s_uuid[16];
} __attribute__((__packed__));
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack()
+#endif
+
int volume_id_probe_ocfs1(struct volume_id *id, uint64_t off)
{
const uint8_t *buf;
Index: volume_id/promise_raid.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/promise_raid.c,v
retrieving revision 1.5
diff -u -r1.5 promise_raid.c
--- volume_id/promise_raid.c 15 Nov 2005 03:32:36 -0000 1.5
+++ volume_id/promise_raid.c 20 Feb 2006 19:21:01 -0000
@@ -27,10 +27,18 @@
#include "logging.h"
#include "util.h"
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
struct promise_meta {
uint8_t sig[24];
} __attribute__((packed));
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack()
+#endif
+
#define PDC_CONFIG_OFF 0x1200
#define PDC_SIGNATURE "Promise Technology, Inc."
Index: volume_id/reiserfs.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/reiserfs.c,v
retrieving revision 1.9
diff -u -r1.9 reiserfs.c
--- volume_id/reiserfs.c 15 Nov 2005 03:32:36 -0000 1.9
+++ volume_id/reiserfs.c 20 Feb 2006 19:21:01 -0000
@@ -28,6 +28,10 @@
#include "logging.h"
#include "util.h"
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
struct reiserfs_super_block {
uint32_t blocks_count;
uint32_t free_blocks;
@@ -52,6 +56,10 @@
uint64_t dummy2;
} __attribute__((__packed__));
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack()
+#endif
+
#define REISERFS1_SUPERBLOCK_OFFSET 0x2000
#define REISERFS_SUPERBLOCK_OFFSET 0x10000
Index: volume_id/romfs.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/romfs.c,v
retrieving revision 1.7
diff -u -r1.7 romfs.c
--- volume_id/romfs.c 15 Nov 2005 03:32:36 -0000 1.7
+++ volume_id/romfs.c 20 Feb 2006 19:21:01 -0000
@@ -27,6 +27,10 @@
#include "logging.h"
#include "util.h"
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
struct romfs_super {
uint8_t magic[8];
uint32_t size;
@@ -34,6 +38,10 @@
uint8_t name[0];
} __attribute__((__packed__));
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack()
+#endif
+
int volume_id_probe_romfs(struct volume_id *id, uint64_t off)
{
struct romfs_super *rfs;
Index: volume_id/silicon_raid.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/silicon_raid.c,v
retrieving revision 1.5
diff -u -r1.5 silicon_raid.c
--- volume_id/silicon_raid.c 15 Nov 2005 03:32:36 -0000 1.5
+++ volume_id/silicon_raid.c 20 Feb 2006 19:21:01 -0000
@@ -27,6 +27,10 @@
#include "logging.h"
#include "util.h"
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
struct silicon_meta {
uint8_t unknown0[0x2E];
uint8_t ascii_version[0x36 - 0x2E];
@@ -46,6 +50,10 @@
uint16_t major_ver;
} __attribute__((packed));
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack()
+#endif
+
#define SILICON_MAGIC 0x2F000000
int volume_id_probe_silicon_medley_raid(struct volume_id *id, uint64_t off, uint64_t size)
Index: volume_id/sysv.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/sysv.c,v
retrieving revision 1.7
diff -u -r1.7 sysv.c
--- volume_id/sysv.c 15 Nov 2005 03:32:36 -0000 1.7
+++ volume_id/sysv.c 20 Feb 2006 19:21:01 -0000
@@ -30,6 +30,10 @@
#define SYSV_NICINOD 100
#define SYSV_NICFREE 50
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
struct sysv_super
{
uint16_t s_isize;
@@ -84,6 +88,10 @@
uint32_t s_type;
} __attribute__((__packed__));
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack()
+#endif
+
#define SYSV_SUPERBLOCK_BLOCK 0x01
#define SYSV_MAGIC 0xfd187e20
#define XENIX_SUPERBLOCK_BLOCK 0x18
Index: volume_id/udf.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/udf.c,v
retrieving revision 1.7
diff -u -r1.7 udf.c
--- volume_id/udf.c 15 Nov 2005 03:32:36 -0000 1.7
+++ volume_id/udf.c 20 Feb 2006 19:21:02 -0000
@@ -27,6 +27,10 @@
#include "logging.h"
#include "util.h"
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
struct volume_descriptor {
struct descriptor_tag {
uint16_t id;
@@ -60,6 +64,10 @@
uint8_t version;
} __attribute__((__packed__));
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack()
+#endif
+
#define UDF_VSD_OFFSET 0x8000
int volume_id_probe_udf(struct volume_id *id, uint64_t off)
@@ -173,7 +181,11 @@
found:
volume_id_set_usage(id, VOLUME_ID_FILESYSTEM);
+#ifndef sun
id->type = "udf";
+#else
+ id->type = "udfs";
+#endif
return 0;
}
Index: volume_id/ufs.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/ufs.c,v
retrieving revision 1.7
diff -u -r1.7 ufs.c
--- volume_id/ufs.c 15 Nov 2005 03:32:36 -0000 1.7
+++ volume_id/ufs.c 20 Feb 2006 19:21:02 -0000
@@ -27,6 +27,10 @@
#include "logging.h"
#include "util.h"
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
struct ufs_super_block {
uint32_t fs_link;
uint32_t fs_rlink;
@@ -164,6 +168,10 @@
uint8_t fs_space[1];
} __attribute__((__packed__));
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack()
+#endif
+
#define UFS_MAGIC 0x00011954
#define UFS2_MAGIC 0x19540119
#define UFS_MAGIC_FEA 0x00195612
Index: volume_id/util.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/util.c,v
retrieving revision 1.8
diff -u -r1.8 util.c
--- volume_id/util.c 23 Oct 2005 20:11:00 -0000 1.8
+++ volume_id/util.c 20 Feb 2006 19:21:02 -0000
@@ -274,3 +274,18 @@
id->seekbuf_len = 0;
}
}
+
+#ifndef HAVE_STRNLEN
+size_t strnlen(const char *s, size_t n)
+{
+ char *ptr;
+
+ if (s == NULL)
+ return (n);
+ ptr = memchr(s, 0, n);
+ if (ptr == NULL)
+ return (n);
+
+ return ((ptr - s) + 1);
+}
+#endif
Index: volume_id/util.h
===================================================================
RCS file: /cvs/hal/hal/volume_id/util.h,v
retrieving revision 1.9
diff -u -r1.9 util.h
--- volume_id/util.h 15 Nov 2005 03:32:36 -0000 1.9
+++ volume_id/util.h 20 Feb 2006 19:21:02 -0000
@@ -19,16 +19,34 @@
# include <config.h>
#endif
+#ifdef sun
+#include <sys/byteorder.h>
+#define bswap8 BSWAP_8
+#define bswap16 BSWAP_16
+#define bswap32 BSWAP_32
+#define bswap64 BSWAP_64
+#else
#include <endian.h>
#include <byteswap.h>
+#endif
+
+#ifdef __SUNPRO_C
+#define __FUNCTION__ __func__
+#define NO_STRUCT_ATTRIBUTE
+#endif
+
+#ifdef NO_STRUCT_ATTRIBUTE
+#define __attribute__(x)
+#define __attribute(x)
+#endif
/* size of superblock buffer, reiserfs block is at 64k */
#define SB_BUFFER_SIZE 0x11000
/* size of seek buffer, FAT cluster is 32k max */
#define SEEK_BUFFER_SIZE 0x10000
-#ifdef __BYTE_ORDER
-#if (__BYTE_ORDER == __LITTLE_ENDIAN)
+#if defined(__BYTE_ORDER) || defined (_BIG_ENDIAN) || defined (_LITTLE_ENDIAN)
+#if (__BYTE_ORDER == __LITTLE_ENDIAN) || defined (_LITTLE_ENDIAN)
#define le16_to_cpu(x) (x)
#define le32_to_cpu(x) (x)
#define le64_to_cpu(x) (x)
@@ -37,7 +55,7 @@
#define cpu_to_le16(x) (x)
#define cpu_to_le32(x) (x)
#define cpu_to_be32(x) bswap_32(x)
-#elif (__BYTE_ORDER == __BIG_ENDIAN)
+#elif (__BYTE_ORDER == __BIG_ENDIAN) || defined (_BIG_ENDIAN)
#define le16_to_cpu(x) bswap_16(x)
#define le32_to_cpu(x) bswap_32(x)
#define le64_to_cpu(x) bswap_64(x)
@@ -72,5 +90,9 @@
extern uint8_t *volume_id_get_buffer(struct volume_id *id, uint64_t off, size_t len);
extern void volume_id_free_buffer(struct volume_id *id);
+#ifndef HAVE_STRNLEN
+size_t strnlen(const char *s, size_t n);
+#endif
+
#endif /* _VOLUME_ID_UTIL_ */
Index: volume_id/via_raid.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/via_raid.c,v
retrieving revision 1.5
diff -u -r1.5 via_raid.c
--- volume_id/via_raid.c 15 Nov 2005 03:32:36 -0000 1.5
+++ volume_id/via_raid.c 20 Feb 2006 19:21:02 -0000
@@ -27,6 +27,10 @@
#include "logging.h"
#include "util.h"
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
struct via_meta {
uint16_t signature;
uint8_t version_number;
@@ -41,6 +45,10 @@
uint8_t checksum;
} __attribute__((packed));
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack()
+#endif
+
#define VIA_SIGNATURE 0xAA55
int volume_id_probe_via_raid(struct volume_id *id, uint64_t off, uint64_t size)
Index: volume_id/vxfs.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/vxfs.c,v
retrieving revision 1.2
diff -u -r1.2 vxfs.c
--- volume_id/vxfs.c 15 Nov 2005 03:32:36 -0000 1.2
+++ volume_id/vxfs.c 20 Feb 2006 19:21:02 -0000
@@ -29,11 +29,19 @@
#define VXFS_SUPER_MAGIC 0xa501FCF5
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
struct vxfs_super {
uint32_t vs_magic;
int32_t vs_version;
} __attribute__((__packed__));
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack()
+#endif
+
int volume_id_probe_vxfs(struct volume_id *id, uint64_t off)
{
struct vxfs_super *vxs;
Index: volume_id/xfs.c
===================================================================
RCS file: /cvs/hal/hal/volume_id/xfs.c,v
retrieving revision 1.7
diff -u -r1.7 xfs.c
--- volume_id/xfs.c 15 Nov 2005 03:32:36 -0000 1.7
+++ volume_id/xfs.c 20 Feb 2006 19:21:03 -0000
@@ -27,6 +27,10 @@
#include "logging.h"
#include "util.h"
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack(1)
+#endif
+
struct xfs_super_block {
uint8_t magic[4];
uint32_t blocksize;
@@ -42,6 +46,10 @@
uint64_t fdblocks;
} __attribute__((__packed__));
+#ifdef NO_STRUCT_ATTRIBUTE
+#pragma pack()
+#endif
+
int volume_id_probe_xfs(struct volume_id *id, uint64_t off)
{
struct xfs_super_block *xs;
More information about the hal
mailing list