@@ -98,7 +98,7 @@ class FOpenCall extends FunctionCall {
9898}
9999
100100abstract class FileAccess extends FunctionCall {
101- abstract Expr getFileExpr ( ) ;
101+ abstract VariableAccess getFileExpr ( ) ;
102102}
103103
104104pragma [ inline]
@@ -114,17 +114,17 @@ class ImplicitFileAccess extends FileAccess {
114114 string fileName ;
115115
116116 ImplicitFileAccess ( ) {
117- fileName = "stdin" and
117+ fileName = [ "stdin" , "_Stdin" ] and
118118 this .getTarget ( ) .hasGlobalName ( [ "getchar" , "getwchar" , "scanf" , "scanf_s" ] )
119119 or
120- fileName = "stdout" and
120+ fileName = [ "stdout" , "_Stdout" ] and
121121 this .getTarget ( ) .hasGlobalName ( [ "printf" , "printf_s" , "puts" , "putchar" , "putwchar" ] )
122122 or
123- fileName = "stderr" and this .getTarget ( ) .hasGlobalName ( "perror" )
123+ fileName = [ "stderr" , "_Stderr" ] and this .getTarget ( ) .hasGlobalName ( "perror" )
124124 }
125125
126126 /** The expression corresponding to the accessed file */
127- override Expr getFileExpr ( ) {
127+ override VariableAccess getFileExpr ( ) {
128128 fileName = result .( VariableAccess ) .getTarget ( ) .( GlobalVariable ) .toString ( ) or
129129 fileName = result .findRootCause ( ) .( Macro ) .getName ( )
130130 }
@@ -141,10 +141,10 @@ class InBandErrorReadFunctionCall extends FileAccess {
141141 }
142142
143143 /** The expression corresponding to the accessed file */
144- override Expr getFileExpr ( ) {
144+ override VariableAccess getFileExpr ( ) {
145145 if this instanceof ImplicitFileAccess
146146 then result = this .( ImplicitFileAccess ) .getFileExpr ( )
147- else result = this .getArgument ( 0 )
147+ else result = [ this .getArgument ( 0 ) , this . getArgument ( 0 ) . ( AddressOfExpr ) . getAnOperand ( ) ]
148148 }
149149}
150150
@@ -167,10 +167,11 @@ class FileReadFunctionCall extends FileAccess {
167167 }
168168
169169 /** The expression corresponding to the accessed file */
170- override Expr getFileExpr ( ) {
170+ override VariableAccess getFileExpr ( ) {
171171 if this instanceof ImplicitFileAccess
172172 then result = this .( ImplicitFileAccess ) .getFileExpr ( )
173- else result = this .getArgument ( filePos )
173+ else
174+ result = [ this .getArgument ( filePos ) , this .getArgument ( filePos ) .( AddressOfExpr ) .getAnOperand ( ) ]
174175 }
175176}
176177
@@ -195,10 +196,11 @@ class FileWriteFunctionCall extends FileAccess {
195196 }
196197
197198 /** The expression corresponding to the accessed file */
198- override Expr getFileExpr ( ) {
199+ override VariableAccess getFileExpr ( ) {
199200 if this instanceof ImplicitFileAccess
200201 then result = this .( ImplicitFileAccess ) .getFileExpr ( )
201- else result = this .getArgument ( filePos )
202+ else
203+ result = [ this .getArgument ( filePos ) , this .getArgument ( filePos ) .( AddressOfExpr ) .getAnOperand ( ) ]
202204 }
203205}
204206
@@ -209,7 +211,9 @@ class FileCloseFunctionCall extends FileAccess {
209211 FileCloseFunctionCall ( ) { this .getTarget ( ) .hasGlobalName ( "fclose" ) }
210212
211213 /** The expression corresponding to the accessed file */
212- override Expr getFileExpr ( ) { result = this .getArgument ( 0 ) }
214+ override VariableAccess getFileExpr ( ) {
215+ result = [ this .getArgument ( 0 ) , this .getArgument ( 0 ) .( AddressOfExpr ) .getAnOperand ( ) ]
216+ }
213217}
214218
215219/**
@@ -221,5 +225,7 @@ class FilePositioningFunctionCall extends FileAccess {
221225 }
222226
223227 /** The expression corresponding to the accessed file */
224- override Expr getFileExpr ( ) { result = this .getArgument ( 0 ) }
228+ override VariableAccess getFileExpr ( ) {
229+ result = [ this .getArgument ( 0 ) , this .getArgument ( 0 ) .( AddressOfExpr ) .getAnOperand ( ) ]
230+ }
225231}
0 commit comments