# HG changeset patch # User Adam Chlipala # Date 1251235993 14400 # Node ID 782f0b4eea6782eaa47030cf5be0b4af30170c27 # Parent b26823138bf8dc7a24fa629877f97ed962babb5d New release diff -r b26823138bf8 -r 782f0b4eea67 CHANGELOG --- a/CHANGELOG Tue Aug 25 17:12:21 2009 -0400 +++ b/CHANGELOG Tue Aug 25 17:33:13 2009 -0400 @@ -1,3 +1,11 @@ +======== +20090825 +======== + +- Many bug fixes +- Remote procedure calls must be marked with the new 'rpc' function. +- Some tweaks to enable usage on OSX (suggested by Paul Snively) + ======== 20090718 ======== diff -r b26823138bf8 -r 782f0b4eea67 Makefile.in --- a/Makefile.in Tue Aug 25 17:12:21 2009 -0400 +++ b/Makefile.in Tue Aug 25 17:33:13 2009 -0400 @@ -14,7 +14,7 @@ smlnj: src/urweb.cm mlton: bin/urweb -OBJS := urweb request queue http cgi fastcgi +OBJS := urweb request queue http cgi fastcgi memmem c: $(OBJS:%=lib/c/%.o) clean: diff -r b26823138bf8 -r 782f0b4eea67 doc/manual.tex --- a/doc/manual.tex Tue Aug 25 17:12:21 2009 -0400 +++ b/doc/manual.tex Tue Aug 25 17:33:13 2009 -0400 @@ -1795,6 +1795,14 @@ Transactions can be run on the client by including them in attributes like the $\mt{Onclick}$ attribute of $\mt{button}$, and GUI widgets like $\mt{ctextbox}$ have $\mt{Source}$ attributes that can be used to connect them to sources, so that their values can be read by code running because of, e.g., an $\mt{Onclick}$ event. +\subsubsection{Remote Procedure Calls} + +Any function call may be made a client-to-server ``remote procedure call'' if the function being called needs no features that are only available to client code. To make a function call an RPC, pass that function call as the argument to $\mt{Basis.rpc}$: + +$$\begin{array}{l} + \mt{val} \; \mt{rpc} : \mt{t} ::: \mt{Type} \to \mt{transaction} \; \mt{t} \to \mt{transaction} \; \mt{t} +\end{array}$$ + \subsubsection{Asynchronous Message-Passing} To support asynchronous, ``server push'' delivery of messages to clients, any client that might need to receive an asynchronous message is assigned a unique ID. These IDs may be retrieved both on the client and on the server, during execution of code related to a client. diff -r b26823138bf8 -r 782f0b4eea67 include/types.h --- a/include/types.h Tue Aug 25 17:12:21 2009 -0400 +++ b/include/types.h Tue Aug 25 17:33:13 2009 -0400 @@ -2,6 +2,7 @@ #define URWEB_TYPES_H #include +#include typedef long long uw_Basis_int; typedef double uw_Basis_float; diff -r b26823138bf8 -r 782f0b4eea67 src/c/memmem.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/c/memmem.c Tue Aug 25 17:33:13 2009 -0400 @@ -0,0 +1,83 @@ +/* $NetBSD$ */ + +/*- + * Copyright (c) 2003 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#if defined(LIBC_SCCS) && !defined(lint) +__RCSID("$NetBSD$"); +#endif /* LIBC_SCCS and not lint */ + +#if !defined(_KERNEL) && !defined(_STANDALONE) +#include +#include +#else +#include +#define _DIAGASSERT(x) (void)0 +#define NULL ((char *)0) +#endif + +/* + * memmem() returns the location of the first occurence of data + * pattern b2 of size len2 in memory block b1 of size len1 or + * NULL if none is found. + */ +void * +memmem(const void *b1, const void *b2, size_t len1, size_t len2) +{ + /* Initialize search pointer */ + char *sp = (char *) b1; + + /* Initialize pattern pointer */ + char *pp = (char *) b2; + + /* Intialize end of search address space pointer */ + char *eos = sp + len1 - len2; + + /* Sanity check */ + if(!(b1 && b2 && len1 && len2)) + return NULL; + + while (sp <= eos) { + if (*sp == *pp) + if (memcmp(sp, pp, len2) == 0) + return sp; + + sp++; + } + + return NULL; +} diff -r b26823138bf8 -r 782f0b4eea67 src/compiler.sml --- a/src/compiler.sml Tue Aug 25 17:12:21 2009 -0400 +++ b/src/compiler.sml Tue Aug 25 17:33:13 2009 -0400 @@ -901,11 +901,12 @@ let val proto = Settings.currentProtocol () val urweb_o = clibFile "urweb.o" + val memmem_o = clibFile "memmem.o" val compile = "gcc " ^ Config.gccArgs ^ " -Wstrict-prototypes -Werror -O3 -I " ^ Config.includ ^ " -c " ^ cname ^ " -o " ^ oname - val link = "gcc -Werror -O3 -lm -lmhash -pthread " ^ libs ^ " " ^ urweb_o ^ " " ^ oname - ^ " " ^ #link proto ^ " -o " ^ ename + val link = "gcc -Werror -O3 -lm -lmhash -pthread " ^ Config.gccArgs ^ " " ^ libs ^ " " ^ urweb_o ^ " " ^ oname + ^ " " ^ memmem_o ^ " " ^ #link proto ^ " -o " ^ ename val (compile, link) = if profile then