Limitations

Some APIs of the Standard C Library are not implemented because of the constraints or limitations of Symbian platform:

  • AF_LOCAL sockets only support SO_SNDBUF and SO_RCVBUF in setsockopt and SO_TYPE , SO_SNDBUF and SO_RCVBUF in getsockopt . No ioctl commands are available.

  • AF_LOCAL sockets do not support shutdown() .

  • The stdioserver does not support per-process configurations.

  • Signals cannot be directed at an individual thread.

  • kill(self) / sigqueue(self) / raise() is not synchronous in the current implementation.

  • Semantics of signal delivery is different from that of *nix OSes.

  • The tm_tzname in the struct tm is not updated by localtime() and mktime() . This is owing to a limitation of localisation resource files in these platforms. The field will always be set to "UTC".

  • On S60 emulators started in textshell mode, the time zone offset returns the wrong value. In GUI mode, the offset is set correctly.

  • The tm_isdst field in the struct tm (used in localtime() and mktime() ) is not updated properly on the S60 3rd Edition SDK and devices; the field is simply set to -1.

  • mktime() and localtime() APIs are about 3 times slower on the S60 3rd Edition SDK and devices, because of lack of native support for more efficient code that is used for S60 3rd Edition, Feature Pack 1 and later SDKs.

  • In text mode stdio , fseek() to the return value of ftell() does not behave as expected.

  • In text-mode, fread() , fwrite() and their siblings will take approximately twice the time compared to binary mode. This is because of extra code required to perform newline-translations in text-mode.

  • P.I.P.S. applications built using the plug-in with this SDK, will not run on earlier versions of runtimes.

  • stat() retrieves the modification time of a directory incorrectly, if it was set (by utime() ) to an odd value.

  • Owing to the difference in the Symbian platform model (when compared to UNIX -like OS), fork() and exec() functions are not supported.

  • Since fork() and exec() are not supported, popen() is not complete. It will create a child process and open a pipe between a parent and a child process either in read or write mode. It does not copy the address space to a child.

  • The following are the limitations with waitpid(pid_t waitpid(pid_t pid, int *stat_loc, int options);

    • On OpenC there is no process group Ids. So, passing pid as 0 and less than -1 does not work as intended.

    • On OpenC, support is provided only for options - WNOHANG . Others are not supported.

    • The macros which related to job control which work on the stat_loc do not work:

      • WIFSIGNALED

      • WTERMSIG

      • WIFSTOPPED

      • WSTOPSIG

      • WIFCONTINUED .

    • On Symbian, the following additional macros that work on the stat_loc are provided:

      • WIFTERMINATED

      • WTERMINATESTATUS

      • WIFPANICED

      • WPANICCODE

  • For int dup2(int oldfd, int newfd); , the return value of dup2 can be different from the one the developer expected it to be ( newfd ). So, the developer of dup2 should use the return value of dup2 as the new allocated fd rather than the one passed to dup2 (newfd) . According to the standard, newfd and return values are the same, if dup2 is successful.

  • Some of the APIs of Open C assume that a cleanup stack is created and there is a top-level TRAP for the current thread. All the threads created using RThread::Create() should create them explicitly.

  • In case of Open C, libc will have its own console object maintained and all threads console I/O will be routed to the console. In case of a hybrid application, if the application creates one more console, then switching between these consoles will be a problem. The user may not be aware of this problem.

  • In case of an emulator, the developer can configure the window size dynamically. But the console maintained by Open C libc will remain the same. So, if the configuration is changed, data displayed on the console may not be aligned properly.

More detailed information about the limitations can be found in the P.I.P.S. API reference documentation.