check_errnostr.sh 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #!/usr/bin/env bash
  2. # Script to check for errno strings in errnostr.inc
  3. # compared to constant values in errno.inc
  4. temps="check_errnostr_list.sh testerrnostr* errnostrlst.inc"
  5. if [ "$1" == "clean" ] ; then
  6. echo Removing $temps
  7. rm -f $temps
  8. exit
  9. fi
  10. gsed -n "s:ESysE\(.*\)[[:space:]]*=[[:space:]]*\([[:space:]0-9]*\);: test_errnostr E\1 \2 :p" errno.inc | \
  11. gsed "s:':'':g" > check_errnostr_list.sh
  12. if [ "$1" == "verbose" ] ; then
  13. verbose=1
  14. fpcopt=-gl
  15. else
  16. verbose=0
  17. fpcopt=
  18. fi
  19. # Reverse 'error string', { ENUMBER }
  20. # to ENUMBER string
  21. gsed -n -e "s|[^']*\('.*'\)[[:space:]]*,*[[:space:]]*{[[:space:]]*\(E[A-Za-z_0-9]*\).*|(Number : ESys\2; NumberStr : '\2'; Str : \1),|p" errnostr.inc > errnostrlst.inc
  22. # Free Pascal source including
  23. # errnostr.inc file
  24. # to test if strings are correct
  25. cat > testerrnostr.pp <<EOF
  26. uses
  27. Dos;
  28. {\$i errnostr.inc}
  29. {\$i errno.inc}
  30. type
  31. TNumberString = record
  32. Number : longint;
  33. NumberStr : String;
  34. Str : String;
  35. end;
  36. const
  37. ErrStringArray :
  38. Array [0..sys_errn] of TNumberString= (
  39. (Number :0; NumberStr : '0' ; str : ''),
  40. {\$i errnostrlst.inc}
  41. (Number :-1; NumberStr : ''; str : ''));
  42. var
  43. ErrorName : string;
  44. value,i,j : longint;
  45. verbose : boolean;
  46. str : string;
  47. function Quote (s : string) : string;
  48. var
  49. i : longint;
  50. begin
  51. Quote:='';
  52. for i:=1 to length(s) do
  53. if (s[i]='''') then
  54. Quote:=quote+''''''
  55. else
  56. Quote:=quote+s[i];
  57. end;
  58. begin
  59. if (paramcount=1) and (paramstr(1)='--write') then
  60. begin
  61. for i:=0 to sys_errn-1 do
  62. for j:=0 to sys_errn do
  63. if (ErrStringArray[j].Number=i) then
  64. with ErrStringArray[j] do
  65. writeln(' ''',Quote(Str), ''' { ',NumberStr, ' ',Number,' }');
  66. exit;
  67. end;
  68. if paramcount < 3 then
  69. begin
  70. writeln('Usage: testerrnostr ENAME value "Comment"');
  71. exit;
  72. end;
  73. val(paramstr(2),value);
  74. if (value>=0) and (value<sys_errn) then
  75. str:=sys_errlist[value]
  76. else
  77. str:='';
  78. verbose:=(GetEnv('verbose')<>'0');
  79. while (pos('''',str)>0) do
  80. delete(str,pos('''',str),1);
  81. if pos(str,paramstr(3))>0 then
  82. begin
  83. if verbose then
  84. writeln('String for ',paramstr(1),' is "',str,'" contained in ',paramstr(3));
  85. end
  86. else if (value>=sys_errn) then
  87. writeln('String for ',paramstr(1),' index ',value,'not in errnostr.inc, comment is ',paramstr(3))
  88. else
  89. begin
  90. write('String for ',paramstr(1),' index ',value, ' is "',sys_errlist[value],'"');
  91. writeln(', comment in errno.inc is ',paramstr(3));
  92. end;
  93. end.
  94. EOF
  95. fpc $fpcopt ./testerrnostr.pp
  96. res=$?
  97. if [ $res -ne 0 ] ; then
  98. echo "Compilation of testerrnostr.pp failed"
  99. exit
  100. fi
  101. export verbose
  102. function test_errnostr ()
  103. {
  104. if [ $verbose -eq 1 ] ; then
  105. echo "Testing errno \"$1\""
  106. fi
  107. errno=$1
  108. shift
  109. value=$1
  110. shift
  111. comment="$@"
  112. comment2=`grep $errno errnostrlst.inc`
  113. ./testerrnostr $errno $value "$comment"
  114. }
  115. . ./check_errnostr_list.sh
  116. # ./testerrnostr --write