/*
 *  call-seq:
 *      File.list_attrs(filename) -> array
 *
 *  Returns an array with all attributes
 *
 *      File.list_attrs(".") => ("type", "rating", "artist")
 *
 */

static VALUE rb_file_list_attrs(obj, fname)
        VALUE obj, fname;
{
        int size;
        char *lval;
        int lret;
        int beg, end;
        VALUE retval;

        Check_Type(fname, T_STRING);

        size  = 16000;
        lval   = malloc(size);

        lret = llistxattr(StringValueCStr(fname), lval, size);
        if(lret >= 0) {
                retval = rb_ary_new();
                beg = 0;
                for(end=0; end < lret; end++) {
                        if (beg == 0 && lval[end] == '.') {
                                beg = end + 1;
                        }
                        if (lval[end] == 0) {
                                rb_ary_push(retval,
                                            rb_str_new(lval+beg, end-beg));
                                beg = 0;
                        }
                }
                free(lval);
                return retval;
        } else {
                free(lval);
                rb_sys_fail(StringValueCStr(fname));
        }
}