sexp sexp_postmountsrv (sexp ctx, sexp self, sexp_sint_t n, sexp ls, sexp name, sexp mtpt, sexp flags) { Srv s; struct sexp_plan9_srv p9s; if (! sexp_listp(ctx, ls)) return sexp_type_exception(ctx, self, SEXP_PAIR, ls); if (! sexp_stringp(name)) return sexp_type_exception(ctx, self, SEXP_STRING, name); if (! sexp_stringp(mtpt)) return sexp_type_exception(ctx, self, SEXP_STRING, mtpt); if (! sexp_integerp(flags)) return sexp_type_exception(ctx, self, SEXP_FIXNUM, flags); sexp_build_srv(ctx, &p9s, ls); s.aux = &p9s; s.auth = &sexp_9p_auth; s.attach = &sexp_9p_attach; s.walk = &sexp_9p_walk; s.walk1 = &sexp_9p_walk1; s.clone = &sexp_9p_clone; s.open = &sexp_9p_open; s.create = &sexp_9p_create; s.remove = &sexp_9p_remove; s.read = &sexp_9p_read; s.write = &sexp_9p_write; s.stat = &sexp_9p_stat; s.wstat = &sexp_9p_wstat; s.flush = &sexp_9p_flush; s.destroyfid = &sexp_9p_destroyfid; s.destroyreq = &sexp_9p_destroyreq; s.end = &sexp_9p_end; postmountsrv(&s, sexp_string_data(name), sexp_string_data(mtpt), sexp_unbox_fixnum(flags)); return SEXP_UNDEF; }
static sexp sexp_sort_x (sexp ctx sexp_api_params(self, n), sexp seq, sexp less, sexp key) { sexp_sint_t len; sexp res, *data; sexp_gc_var1(vec); if (sexp_nullp(seq)) return seq; sexp_gc_preserve1(ctx, vec); vec = (sexp_truep(sexp_listp(ctx, seq)) ? sexp_list_to_vector(ctx, seq) : seq); if (! sexp_vectorp(vec)) { res = sexp_type_exception(ctx, self, SEXP_VECTOR, vec); } else { data = sexp_vector_data(vec); len = sexp_vector_length(vec); if (sexp_not(key) && sexp_basic_comparator(less)) { sexp_qsort(ctx, data, 0, len-1); if (sexp_opcodep(less) && sexp_opcode_inverse(less)) sexp_vector_nreverse(ctx, vec); res = vec; } else if (! (sexp_procedurep(less) || sexp_opcodep(less))) { res = sexp_type_exception(ctx, self, SEXP_PROCEDURE, less); } else if (! (sexp_procedurep(key) || sexp_opcodep(key) || sexp_not(key))) { res = sexp_type_exception(ctx, self, SEXP_PROCEDURE, key); } else { res = sexp_qsort_less(ctx, data, 0, len-1, less, key); } } if (sexp_pairp(seq) && ! sexp_exceptionp(res)) res = sexp_vector_copy_to_list(ctx, vec, seq); sexp_gc_release1(ctx); return res; }