require '_h2ph_pre.ph';

no warnings qw(redefine misc);

unless(defined(&_UFS_UFS_BSWAP_H_)) {
    eval 'sub _UFS_UFS_BSWAP_H_ () {1;}' unless defined(&_UFS_UFS_BSWAP_H_);
    if(defined(&_KERNEL_OPT)) {
	require './ufs/ufs/opt_ffs.ph';
    }
    require 'sys/bswap.ph';
    if(defined(&FFS_EI)) {
	eval 'sub UFS_MPNEEDSWAP {
	    my($ump) = @_;
    	    eval q((($ump)-> &um_flags &  &UFS_NEEDSWAP));
	}' unless defined(&UFS_MPNEEDSWAP);
	eval 'sub UFS_FSNEEDSWAP {
	    my($fs) = @_;
    	    eval q((($fs)-> &fs_flags &  &FS_SWAPPED));
	}' unless defined(&UFS_FSNEEDSWAP);
	eval 'sub UFS_IPNEEDSWAP {
	    my($ip) = @_;
    	    eval q( &UFS_MPNEEDSWAP(($ip)-> &i_ump));
	}' unless defined(&UFS_IPNEEDSWAP);
    } else {
	eval 'sub UFS_MPNEEDSWAP {
	    my($ump) = @_;
    	    eval q((( &void)($ump), 0));
	}' unless defined(&UFS_MPNEEDSWAP);
	eval 'sub UFS_FSNEEDSWAP {
	    my($fs) = @_;
    	    eval q((( &void)($fs), 0));
	}' unless defined(&UFS_FSNEEDSWAP);
	eval 'sub UFS_IPNEEDSWAP {
	    my($ip) = @_;
    	    eval q((( &void)($ip), 0));
	}' unless defined(&UFS_IPNEEDSWAP);
    }
    if((!defined(&_KERNEL)  && !defined(&NO_FFS_EI)) || defined(&FFS_EI)) {
	eval 'sub ufs_rw32 {
	    my($a,$ns) = @_;
    	    eval q({ (($ns) ?  &bswap32($a) : ($a)); });
	}' unless defined(&ufs_rw32);
	eval 'sub ufs_rw64 {
	    my($a,$ns) = @_;
    	    eval q({ (($ns) ?  &bswap64($a) : ($a)); });
	}' unless defined(&ufs_rw64);
    } else {
	eval 'sub ufs_rw16 {
	    my($a,$ns) = @_;
    	    eval q({ $a; });
	}' unless defined(&ufs_rw16);
	eval 'sub ufs_rw32 {
	    my($a,$ns) = @_;
    	    eval q({ $a; });
	}' unless defined(&ufs_rw32);
	eval 'sub ufs_rw64 {
	    my($a,$ns) = @_;
    	    eval q({ $a; });
	}' unless defined(&ufs_rw64);
    }
    eval 'sub ufs_add16 {
        my($a, $b, $ns) = @_;
	    eval q(($a) =  &ufs_rw16( &ufs_rw16(($a), ($ns)) + ($b), ($ns)));
    }' unless defined(&ufs_add16);
    eval 'sub ufs_add32 {
        my($a, $b, $ns) = @_;
	    eval q(($a) =  &ufs_rw32( &ufs_rw32(($a), ($ns)) + ($b), ($ns)));
    }' unless defined(&ufs_add32);
    eval 'sub ufs_add64 {
        my($a, $b, $ns) = @_;
	    eval q(($a) =  &ufs_rw64( &ufs_rw64(($a), ($ns)) + ($b), ($ns)));
    }' unless defined(&ufs_add64);
}
1;
