static VALUE method_get_acl(VALUE self, VALUE reqid, VALUE path, VALUE async) { VALUE watch = Qfalse; STANDARD_PREAMBLE(self, zk, reqid, path, async, watch, data_ctx, watch_ctx, call_type); struct ACL_vector acls; struct Stat stat; int rc; switch (call_type) { case SYNC: rc = zkrb_call_zoo_get_acl(zk->zh, RSTRING_PTR(path), &acls, &stat); break; case ASYNC: rc = zkrb_call_zoo_aget_acl(zk->zh, RSTRING_PTR(path), zkrb_acl_callback, data_ctx); break; default: /* TODO(wickman) raise proper argument error */ return Qnil; break; } VALUE output = rb_ary_new(); rb_ary_push(output, INT2FIX(rc)); if (IS_SYNC(call_type) && rc == ZOK) { rb_ary_push(output, zkrb_acl_vector_to_ruby(&acls)); rb_ary_push(output, zkrb_stat_to_rarray(&stat)); deallocate_ACL_vector(&acls); } return output; }
static VALUE method_get_acl(VALUE self, VALUE reqid, VALUE path, VALUE async) { STANDARD_PREAMBLE(self, zk, reqid, path, async, Qfalse, call_type); VALUE output = Qnil; struct ACL_vector acls; struct Stat stat; int rc=ZOK; switch (call_type) { #ifdef THREADED case SYNC: rc = zkrb_call_zoo_get_acl(zk->zh, RSTRING_PTR(path), &acls, &stat); break; #endif case ASYNC: rc = zkrb_call_zoo_aget_acl(zk->zh, RSTRING_PTR(path), zkrb_acl_callback, CTX_ALLOC(zk, reqid)); break; default: raise_invalid_call_type_err(call_type); break; } output = rb_ary_new(); rb_ary_push(output, INT2FIX(rc)); if (IS_SYNC(call_type) && rc == ZOK) { rb_ary_push(output, zkrb_acl_vector_to_ruby(&acls)); rb_ary_push(output, zkrb_stat_to_rarray(&stat)); deallocate_ACL_vector(&acls); } return output; }