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

VALUE rb_file_list_attrsf(fobj)
        VALUE fobj;
{
        int size;
        char *lval;
        int lret;
        int beg, end;
        VALUE retval;
        OpenFile *fptr;
        FILE *f;

        GetOpenFile(fobj, fptr);
        f = GetReadFile(fptr);

        Check_Type(fobj, T_FILE);

        size   = 16000;
        lval   = malloc(size);

        lret = flistxattr(fileno(f), 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("");
        }
}