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