summaryrefslogtreecommitdiff
path: root/dist/s_errno
diff options
context:
space:
mode:
Diffstat (limited to 'dist/s_errno')
-rw-r--r--dist/s_errno73
1 files changed, 73 insertions, 0 deletions
diff --git a/dist/s_errno b/dist/s_errno
new file mode 100644
index 00000000000..9981842e458
--- /dev/null
+++ b/dist/s_errno
@@ -0,0 +1,73 @@
+#! /bin/sh
+
+# Complain about code that returns a system error value without an associated
+# verbose message.
+#
+# This script is a kluge and isn't run by default.
+
+t=__wt.$$
+trap 'rm -f $t' 0 1 2 3 13 15
+
+cd ..
+
+# Strip out a list of errors that will be flagged, but are OK.
+error_ok()
+{
+ sed -e '/ERET(/d' \
+ -e '/WT_ERR_MSG(/d' \
+ -e '/WT_ERR_TEST(/d' \
+ -e '/WT_PANIC_ERR(/d' \
+ -e '/WT_PANIC_RET(/d' \
+ -e '/WT_RET_MSG(/d' \
+ -e '/\/intpack.i:.*EINVAL/d'\
+ -e '/\/intpack.i:.*ENOMEM/d'\
+ -e '/\/pack_impl.c:.*EINVAL/d'\
+ -e '/\/pack_impl.c:.*ENOMEM/d'\
+ -e '/\/pack_stream.c:.*ENOMEM/d'\
+ -e '/\/packing.i:.*EINVAL/d'\
+ -e '/__config_err(/d' \
+ -e '/__wt_block_panic(/d' \
+ -e '/__wt_err(/d' \
+ -e '/__wt_errx(/d' \
+ -e '/csv_error(/d' \
+ -e '/nop_error(/d' \
+ -e '/rotn_error(/d' \
+ -e '/zlib_error(/d'
+}
+
+# Loop through source files.
+for f in `find ext src -name '*.[ci]'`; do
+ if expr "$f" : 'ext/datasources/helium/helium.c' > /dev/null; then
+ continue
+ fi
+ if expr "$f" : 'src/os_win/os_winerr.c' > /dev/null; then
+ continue
+ fi
+ if expr "$f" : 'src/utilities/.*' > /dev/null; then
+ continue
+ fi
+
+ # Strip include files,
+ # then use the C preprocessor to strip comments,
+ # then turn each file into a single line,
+ # then chunk the file by semicolons,
+ # then search for explicit error returns (ignoring EBUSY),
+ # then prepend the file name to each line,
+ # then skip known calls that include verbose messages.
+ sed '/^#include/d' $f |
+ ${CC:-cc} -E - |
+ tr -s '\012' ' ' | tr ';' '\012' |
+ egrep -w 'EPERM|ENOENT|ESRCH|EINTR|EIO|ENXIO|E2BIG|ENOEXEC|EBADF|ECHILD|EDEADLK|ENOMEM|EACCES|EFAULT|ENOTBLK|EEXIST|EXDEV|ENODEV|ENOTDIR|EISDIR|EINVAL|ENFILE|EMFILE|ENOTTY|ETXTBSY|EFBIG|ENOSPC|ESPIPE|EROFS|EMLINK|EPIPE|EDOM|ERANGE|EAGAIN|EWOULDBLOCK|EINPROGRESS|EALREADY|ENOTSOCK|EDESTADDRREQ|EMSGSIZE|EPROTOTYPE|ENOPROTOOPT|EPROTONOSUPPORT|ESOCKTNOSUPPORT|EOPNOTSUPP|ENOTSUP|EPFNOSUPPORT|EAFNOSUPPORT|EADDRINUSE|EADDRNOTAVAIL|ENETDOWN|ENETUNREACH|ENETRESET|ECONNABORTED|ECONNRESET|ENOBUFS|EISCONN|ENOTCONN|ESHUTDOWN|ETOOMANYREFS|ETIMEDOUT|ECONNREFUSED|ELOOP|ENAMETOOLONG|EHOSTDOWN|EHOSTUNREACH|ENOTEMPTY|EPROCLIM|EUSERS|EDQUOT|ESTALE|EREMOTE|EBADRPC|ERPCMISMATCH|EPROGUNAVAIL|EPROGMISMATCH|EPROCUNAVAIL|ENOLCK|ENOSYS|EFTYPE|EAUTH|ENEEDAUTH|EIDRM|ENOMSG|EOVERFLOW|ECANCELED|EILSEQ|ENOATTR|EDOOFUS|EBADMSG|EMULTIHOP|ENOLINK|EPROTO|ENOTCAPABLE|ECAPMODE|ENOTRECOVERABLE|EOWNERDEAD|ELAST|ERESTART|EJUSTRETURN|ENOIOCTL|EDIRIOCTL' |
+ sed -e 's/^[ ]*//' \
+ -e "s;^;$f: ;" |
+ error_ok
+done > $t
+
+test -s $t && {
+ echo "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-="
+ echo 'Unexpected error usage.'
+ echo "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-="
+ cat $t
+ exit 1
+}
+exit 0