# HG changeset patch # User Jim Meyering # Date 1001492021 0 # Node ID fc06aa9f08c8818d93dbba5b2ce1cf24814280ed # Parent 6c7cdd88a9b5d0c6a5333b254e30a29da4ff8b8b *** empty log message *** diff --git a/lib/gen-uio b/lib/gen-uio new file mode 100755 --- /dev/null +++ b/lib/gen-uio @@ -0,0 +1,46 @@ +#!/bin/sh + +tmp=gen-uio.$$ +trap 'status=$?; rm -f $tmp && exit $status' 0 +trap 'exit $?' 1 2 13 15 + +cat <<\EOF +#ifndef UNLOCKED_IO_H +# define UNLOCKED_IO_H 1 + +# if USE_UNLOCKED_IO + +/* These are wrappers for functions/macros from GNU libc. + The standard I/O functions are thread-safe. These *_unlocked ones + are more efficient but not thread-safe. That they're not thread-safe + is fine since all these applications are single threaded. */ + +EOF + +for f in $@; do + u=`echo $f|tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ` + echo "# if HAVE_${u}_UNLOCKED" + echo "# undef $f" + case $f in + getchar) + params=;; + putchar | clearerr | feof | ferror | fflush | getc ) + params=x;; + putc | fputc | fputs ) + params=x,y;; + fgets ) + params=x,y,z;; + fread | fwrite ) + params=w,x,y,z;; + *) + echo $0: missing case for $f 2>&1; exit 1;; + esac + echo "# define $f($params) ${f}_unlocked ($params)" + echo '# endif' +done + +cat <<\EOF + +# endif /* USE_UNLOCKED_IO */ +#endif /* UNLOCKED_IO_H */ +EOF