/* * 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(""); } }