# 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
