Compatibility Breaks

All binary and source compatibility breaks in Symbian^3 SDK are listed with supporting information on handling these breaks.

The following table summarizes the binary and source compatibility breaks:

APIs/Header files/Libraries Description
RSocket::SendTo() and RSocket::RecvFrom() In earlier Symbian platform releases, if an application attempts RSocket::SendTo() and RSocket::RecvFrom() operations on a UDP socket when the connection is closed, the socket would start a new connection. This behavior has changed from Symbian^3 onwards, and such an operation will return KErrTimedOut or KErrInet6NoRoute to indicate that the connection has been closed.
Libc write() Symbian^3 supports POSIX signals which allows standard C applications to handle interrupts (hardware and software signals/events). The existing standard C applications are not affected by this change, unless they are recompiled against the updated libraries. Once the applications are recompiled, they will receive a SIGPIPE signal when they try to write to a broken pipe. Unless this signal is handled or is ignored using signore() method, the application terminates. For more information on handling POSIX signals on Symbian platform, refer to Using POSIX Signals.
CBitmapFont::OpenFont() and COpenFont The Flexible Memory Model in Symbian^3 does not provide access to the Open Font data in Font Bitmap Server global chunk. Rebuild the application binary on Symbian^3 to get access to the Open Font data.
RSocket::Open() The overloaded RSocket::Open() method that is meant for opening a socket without associating it with an RConnection object explicitly is called the default connection scenario. This scenario is not supported from Sybmian^3 onwards, so all code depending on default connection scenario has to be migrated to explicit or implicit connection scenario. For more information on explicit and implicit connection scenarios, refer to Starting a Socket Server connection: Tutorial.
CRemoteGc::SetDrawMode() and CWindowGc::SetDrawMode() These two APIs will not support the following draw modes:
  • EDrawModeAND

  • EDrawModeNOTAND

  • EDrawModeANDNOT

  • EDrawModeXOR

  • EDrawModeOR


  • EDrawModeNOTXOR


  • EDrawModeNOTOR

  • EDrawModeNOTPEN

  • EDrawModeORNOT


These two Graphics Context classes (CRemoteGc and CWindowGc) will support EDrawModePEN and EDrawModeWriteAlpha only. To use any of the draw modes listed earlier, use CFbsBitGc::SetDrawMode() and render their window content into an off-screen bitmap, and use CRemoteGc to draw the bitmap to the screen.
CMMFDevSound, CMdaAudioPlayerUtility, CMdaAudioRecorderUtility, CMdaAudioInputStream, CMdaAudioOutputStream, and CMdaAudioToneUtility. In earlier Symbian platform releases, an attempt to record or play an audio file without setting the volume and gain values (using SetVolume() and SetGain()) would result in silence. This behavior has changed from Symbian^3 onwards, where an audio file can be played or recorded without having to set the volume and gain values. With this change, all applications using these APIs must be rebuilt on Symbian^3.
CGraphicsContext::DrawTextExtended(classTDesC16const&, classCGraphicsContext::TTextParametersconst*, classTPointconst&, structCGraphicsContext::TDrawTextExtendedParamconst&) The ordinal position for this API has changed. Rebuild all the applications using this API.
CWsScreenDevice::SetPalette(), CWsScreenDevice::PaletteAttributes(), and CWsScreenDevice::GetPalette(). These APIs are not supported. All calls to these APIs will return KErrNotSupported. If the existing applications using these APIs check for KErrNotSupported error, will continue to work without any change. All other applications must be modified and rebuilt.
CDirectScreenAccess, RDirectScreenAccess, and MDirectScreenAccess. The usage of these Direct Screen Access (DSA) APIs has changed in Symbian^3 because of the ScreenPlay feature, which recommends using external surfaces instead of DSA to write to screen. Refer to DSA Migration Guide for information on how to use these APIs in Symbian^3.

This API did not exist in the S60 5th Edition and 3rd Edition releases, so all calls to this API in these releases were redirected to its implementation in the parent class, RHandleBase. RFs::Close() does exist in Symbian^3, but a Symbian^3 application (not using features specific to Symbian^3) using this API will fail to work on the S60 5th Edition and 3rd Edition devices.

To avoid this compatibility issue, we recommend you the following:

  • For developers using Symbian^3 or a future Symbian release: Use RHandleBase::Close() instead of RFs::Close() to deploy your applications on devices using S60 5th Edition and 3rd Edition.

  • For developers using S60 5th Edition and 3rd Edition: No change required, as calls to RFs::Close() are redirected to RHandleBase::Close() on all Symbian devices (including Symbian^3).