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