blob: 88c41b742c1936a01e3b3f0ae1f51739cfac9f8d [file] [log] [blame] [view]
# Starboard and C99
## Background
Historically Starboard did not allow usage of standard C symbols in order to
isolate Cobalt from non-compliant libc implementations and to provide a single,
consistent behavior at the Starboard API layer.
## C99 Usage Rationale
1. Inconsistencies in the libc libraries are rare and all third party libraries
need to be ported to the Starboard API. This can be a significant maintenance
cost as the dependencies need to be periodically rebased.
2. Even with all the efforts to use POEM headers from the
[starboard/client_porting](../../starboard/client_porting) directory many
non-Evergreen platforms still have a lot of direct system dependencies. These
dependencies do not exist for Evergreen platforms as Cobalt is statically
linked with the [musl](../../third_party/musl/BUILD.gn) libc library.
3. Starting with Starboard 13 a limited set of C99 symbols will be allowed.
This set will expand gradually while the corresponding Starboard APIs will be
deprecated and eventually removed.
## List of Allowed C99 Symbols
### <ctype.h>
* isalnum
* isdigit
* isspace
* isupper
* isxdigit
* tolower
* toupper
### <math.h>
* acos
* acosf
* asin
* asinf
* atan
* atan2
* atan2f
* atanf
* cbrt
* cbrtf
* ceil
* ceilf
* cos
* cosf
* div
* erf
* erff
* exp
* expf
* exp2f
* fabs
* floor
* floorf
* fmod
* fmodf
* frexp
* isfinite
* isnan
* labs
* llround
* llroundf
* log
* log10
* log10f
* log2
* log2f
* ldexp
* lrint
* lrintf
* modf
* nearbyint
* nearbyintf
* nextafter
* nextafterf
* pow
* powf
* round
* roundf
* scalbn
* sin
* sinf
* sqrt
* sqrtf
* tan
* tanf
* trunc
* truncf
### <stdlib.h>
* abs
* atoi
* atol
* bsearch
* strtof
* strtod
* strtol
* strtoll
* strtoul
* strtoull
* qsort
### <string.h>
* memchr
* memcmp
* memcpy
* memmove
* memset
* strcat
* strchr
* strcmp
* strcpy
* strcspn
* strlen
* strncmp
* strncat
* strncpy
* strrchr
* strstr
* strspn
### <tgmath.h>
* ceill
* logl
### <wchar.h>
* wcscat
* wcschr
* wcslen
* wmemchr
* wmemcmp
* wmemcpy
* wmemmove
* wmemset
* wcsncmp