#!/bin/sh - # $NetBSD: makelintstub,v 1.1 1996/12/22 11:38:34 cgd Exp $ # # Copyright (c) 1996 Christopher G. Demetriou. All rights reserved. # # 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 for the NetBSD Project # by Christopher G. Demetriou. # 4. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. if [ $# -lt 1 ] || [ $# -gt 2 ]; then echo "usage: $0 syscallname [funcname]" exit 1 fi syscallname="$1" if [ $# -eq 1 ]; then funcname="$syscallname" else funcname="$2" fi arglist="`printf '#include ' | cpp -C | \ grep '^/\* syscall: "'"$syscallname"'" ' | \ sed -e 's,^/\* syscall: ,,;s, \*/$,,'`" eval set -f -- "$arglist" if [ $# -lt 4 ]; then echo syscall $syscallname not found! 1>&2 exit 1 fi syscallname=$1 shift 2 # kill name and "ret:" returntype=$1 shift 2 # kill return type and "args:" cat << __EOF__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef __STDC__ #include #else #include #endif /*ARGSUSED*/ $returntype __EOF__ if [ "`eval echo -n \\$$#`" = "..." ]; then varargs=YES nargs=$(($# - 1)) else varargs=NO nargs=$# fi nargswithva=$# # do ANSI C function header echo "#ifdef __STDC__" echo -n "$funcname(" i=1 while [ $i -le $nargs ]; do eval echo -n \""\$$i"\" echo -n " arg$i" if [ $i -lt $nargswithva ]; then echo -n ", " fi i=$(($i + 1)) done if [ $varargs = YES ]; then echo -n "..." fi echo ")" # do K&R C function header echo "#else" echo -n "$funcname(" i=1 while [ $i -le $nargs ]; do echo -n "arg$i" if [ $i -lt $nargswithva ]; then echo -n ", " fi i=$(($i + 1)) done if [ $varargs = YES ]; then echo -n "va_alist" fi echo ")" i=1 while [ $i -le $nargs ]; do eval echo -n \"" \$$i"\" echo " arg$i;" i=$(($i + 1)) done if [ $varargs = YES ]; then echo " va_dcl" fi # do function body echo "#endif" echo "{" if [ "$returntype" != "void" ]; then echo " return (($returntype)0);" fi echo "}" exit 0