#!/bin/sh
# $Id: lsxattr,v 1.4 2016/05/10 23:33:13 friedman Exp $

case `uname -s` in
    Linux )
        # Note: security.capability values can be decoded
        # with the `getcap' program.
        exec getfattr \
             --match '^.*'  \
             --dump \
             --absolute-names \
             --no-dereference \
             --physical \
             "$@"
        ;;

    FreeBSD | NetBSD )
        # Mimic the linux output as best we can.
        # Because lsextattr prints multiple attributes on a line, we may fail
        # to look up ones with embedded whitespace in them.  Don't do that.
        for file in "$@" ; do
            echo "# file: $file"
            for namespace in system user; do
                for attr in `lsextattr -q $namespace "$file"`; do
                    value=`getextattr -qs $namespace $attr "$file"`
                    if [ $? -ne 0 ]; then
                        echo "$file: $namespace.$attr: could not get attribute value." 1>&2
                        continue
                    fi
                    echo "$namespace.$attr=$value"
                done
            done
            echo
        done
        ;;

    Darwin )
        for file in "$@" ; do
            echo "# file: $file"
            xattr "$file" |
                while read attr; do
                    echo "$attr="\"`xattr -p "$attr" "$file"`\"
                done
        done
        ;;

esac

# eof