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