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