#! /bin/sh
# Test whether all cancelable functions are cancelable.
# Copyright (C) 2002, 2003, 2007 Free Software Foundation, Inc.
# This file is part of the GNU C Library.
# Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.

# The GNU C Library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.

# The GNU C Library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.

# You should have received a copy of the GNU Lesser General Public
# License along with the GNU C Library; if not, write to the Free
# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
# 02111-1307 USA.

while [ $# -gt 0 ]; do
  ( nm -P $1; echo 'end[end]:' ) | gawk ' BEGIN {
C["accept"]=1
C["close"]=1
C["connect"]=1
C["creat"]=1
C["fcntl"]=1
C["fdatasync"]=1
C["fsync"]=1
C["msgrcv"]=1
C["msgsnd"]=1
C["msync"]=1
C["nanosleep"]=1
C["open"]=1
C["open64"]=1
C["pause"]=1
C["poll"]=1
C["pread"]=1
C["pread64"]=1
C["pselect"]=1
C["pwrite"]=1
C["pwrite64"]=1
C["read"]=1
C["readv"]=1
C["recv"]=1
C["recvfrom"]=1
C["recvmsg"]=1
C["select"]=1
C["send"]=1
C["sendmsg"]=1
C["sendto"]=1
C["sigpause"]=1
C["sigsuspend"]=1
C["sigwait"]=1
C["sigwaitinfo"]=1
C["system"]=1
C["tcdrain"]=1
C["wait"]=1
C["waitid"]=1
C["waitpid"]=1
C["write"]=1
C["writev"]=1
C["__xpg_sigpause"]=1
}
/:$/ {
  if (seen)
    {
      if (!seen_enable || !seen_disable)
	{
	  printf "in '$1'(%s) %s'\''s cancellation missing\n", object, seen
	  ret = 1
	}
    }
  seen=""
  seen_enable=""
  seen_disable=""
  object=gensub(/^.*\[(.*)\]:$/,"\\1","",$0)
  next
}
{
  if (C[$1] && $2 ~ /^[TW]$/)
    seen=$1
  else if ($1 ~ /^([.]|)__(libc|pthread)_enable_asynccancel$/ && $2 == "U")
    seen_enable=1
  else if ($1 ~ /^([.]|)__(libc|pthread)_disable_asynccancel$/ && $2 == "U")
    seen_disable=1
}
END {
  exit ret
}' || exit
  shift
done
