check_errno.sh 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. #!/usr/bin/env bash
  2. # Small script to test fpc to system error numbers
  3. if [ "$1" == "verbose" ] ; then
  4. verbose=1
  5. echo "Being verbose"
  6. shift
  7. else
  8. verbose=0
  9. fi
  10. # Location of error number in system header
  11. errno_header="/usr/include/asm-generic/errno-base.h /usr/include/asm-generic/errno.h"
  12. errno_include=./errno.inc
  13. # Sustitution made to pass from fpc syscall number
  14. # to system define
  15. fpc_errno_prefix=ESysE
  16. errno_prefix=E
  17. # Test C file to grab all loaded headers
  18. cat > test-errno.c <<EOF
  19. #include <errno.h>
  20. int
  21. main ()
  22. {
  23. return 0;
  24. }
  25. EOF
  26. # Default C compiler is gcc
  27. # Can be overwritten by setting CC variable
  28. # But I don't know if other compilers also generate
  29. # .i files with --save-temps option
  30. if [ "$CC" == "" ] ; then
  31. CC=gcc
  32. fi
  33. # Use gcc with --save-temps option to create .i file
  34. $CC --save-temps -o test-errno ./test-errno.c
  35. # list of errno.h headers listed
  36. errno_headers=` sed -n "s:.*\"\(.*\.h\)\".*:\1:p" test-errno.i |sort | uniq`
  37. echo "Headers found are \"$errno_headers\""
  38. if [ "$errno_headers" != "" ] ; then
  39. errno_header="$errno_headers"
  40. fi
  41. # You should only need to change the variables above
  42. sed -n "s:^[ \t]*${fpc_errno_prefix}\\([_a-zA-Z0-9]*\\)[ \t]*=[ \t]*\\([0-9]*\\).*:check_errno_number ${errno_prefix}\1 \2:p" ${errno_include} > check_errno_list.sh
  43. sed -n "s:#define[ \t]*${errno_prefix}\\([_a-zA-Z0-9]*\\)[ \t][ \t]*\\([0-9]*\\).*:check_reverse_errno_number ${fpc_errno_prefix}\1 \2:p" ${errno_header} > check_reverse_errno_list.sh
  44. function check_errno_number ()
  45. {
  46. sys=$1
  47. value=$2
  48. if [ $verbose -ne 0 ] ; then
  49. echo Testing $sys value $value
  50. fi
  51. # Remember value of this constant
  52. eval ${sys}=${value}
  53. found=`sed -n "/#define[ \t][ \t]*${sys}[^A-Za-z0-9_]/p" ${errno_header}`
  54. val=`sed -n "s:#define[ \t][ \t]*${sys}[^A-Za-z0-9_][^A-Za-z0-9_]*\([0-9]*\).*:\1:p" ${errno_header}`
  55. extval=`sed -n "s:#define[ \t][ \t]*${sys}[^A-Za-z0-9_][^A-Za-z0-9_]*\([0-9A-Za-z_]*\).*:\1:p" ${errno_header}`
  56. if [ $verbose -ne 0 ] ; then
  57. echo Test for $sys found \"${found}\" \"${value}\" \"${val}\"
  58. fi
  59. if [ "${val}" == "${value}" ] ; then
  60. if [ $verbose -ne 0 ] ; then
  61. echo ${sys} value ${val} is correct
  62. fi
  63. else
  64. if [ "${val}" == "" ] ; then
  65. foundvalue=`sed -n "/#define.*[^A-Za-z0-9_]${value}$/p" ${errno_header}`
  66. if [ "${foundvalue}" == "" ] ; then
  67. foundvalue=`sed -n "s:\/\* ${value} is compa: ${value} is compa:p" ${errno_header}`
  68. fi
  69. fi
  70. if [ "$extval" != "" ] ; then
  71. eval indirectval=\$$extval
  72. echo "indirectval =\"$indirectval\""
  73. if [ "$indirectval" != "$value" ] ; then
  74. echo problem for ${sys} expected ${value}, line is \"${found}\", val found is \"${indirectval}\"
  75. else
  76. echo "$sys is defined as $extval which is $indirectval as expected $value"
  77. fi
  78. else
  79. echo "problem for ${sys} expected ${value}, line is \"${found}\", val found is \"${val}\""
  80. fi
  81. fi
  82. }
  83. addtoerrno=0
  84. errnonew=./errno-new.inc
  85. function check_reverse_errno_number ()
  86. {
  87. errname=$1
  88. errvalue=$2
  89. found=`grep -i -w $1 ${errno_include}`
  90. if [ "${found}" == "" ] ; then
  91. echo "Error ${errname}, value ${errvalue}, not in ${errno_include} file"
  92. if [ $addtoerrno -eq 0 ] ; then
  93. addtoerrno=1
  94. echo "{ List of missing system error number found in $errno_header }" > $errnonew
  95. fi
  96. echo " $errname = $errvalue;" >> $errnonew
  97. fi
  98. }
  99. set -f
  100. echo "Checking all entries of ${errno_include} file"
  101. source ./check_errno_list.sh
  102. echo "Checking all defines from \"$errno_header\""
  103. source ./check_reverse_errno_list.sh
  104. if [ $addtoerrno -eq 1 ] ; then
  105. echo " Missing error number found"
  106. echo " New values are in \"$errnonew\"
  107. echo You might want to add these lines to \"$errno\""
  108. fi