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