## How it Works

LeaveScan works by examining each line of source code and checking that functions which do not terminate in L cannot leave. However, there are a few functions (more accurately, operators) in Symbian OS that may leave but cannot have an L suffix (such as operator<< and operator>> for RWriteStream and RReadStream respectively).

The naming convention cannot be applied appropriately to operators and, unfortunately, LeaveScan does not have the logic needed to recognize operators that may leave. When you use operators that you know have the potential to leave, you’ll have to remember to check this code by sight yourself.

LeaveScan also checks functions which do have a trailing L to see if they really can leave. If functions are encountered which do not leave, LeaveScan raises a warning. However, this scenario can be perfectly valid, for example, when implementing an abstract function such as CActive::RunL(), some implementations may leave but others may not.

LeaveScan ignores calls in trapped functions, commented out code, i.e. // and /* and */. It also checks for calls to LD, LC and LX functions as well as normal L functions. It also checks for User::Leave(), ELeave, User::LeaveIfError().