| ============================= |
| String Functions in LLVM-libc |
| ============================= |
| |
| ------- |
| Summary |
| ------- |
| |
| This site tracks the status of the implementation of string functions in LLVM |
| Libc. This includes a few extra functions that are not in string.h, such as |
| functions converting strings to numbers. |
| |
| --------------- |
| Source location |
| --------------- |
| |
| - The main source for string functions is located at: |
| ``libc/src/string``. |
| |
| - The source for string conversion functions is located at: |
| ``libc/src/stdlib`` and |
| ``libc/src/__support``. |
| |
| - The tests are located at: |
| ``libc/test/src/string``, |
| ``libc/test/src/stdlib``, and |
| ``libc/test/src/__support`` |
| respectively. |
| |
| --------------------- |
| Implementation Status |
| --------------------- |
| |
| Primary memory functions |
| ======================== |
| |
| .. TODO(gchatelet): add details about the memory functions. |
| |
| |
| ============= ========= |
| Function Name Available |
| ============= ========= |
| bzero YES |
| bcmp YES |
| memcpy YES |
| memset YES |
| memcmp YES |
| memmove YES |
| ============= ========= |
| |
| |
| Other Raw Memory Functions |
| ========================== |
| |
| ============= ========= |
| Function Name Available |
| ============= ========= |
| memchr YES |
| memrchr YES |
| memccpy YES |
| mempcpy YES |
| ============= ========= |
| |
| String Memory Functions |
| ======================= |
| |
| ============= ========= |
| Function Name Available |
| ============= ========= |
| stpcpy YES |
| stpncpy YES |
| strcpy YES |
| strncpy YES |
| strcat YES |
| strncat YES |
| strdup YES |
| strndup YES |
| ============= ========= |
| |
| String Examination Functions |
| ============================ |
| |
| ============= ========= |
| Function Name Available |
| ============= ========= |
| strlen YES |
| strnlen YES |
| strcmp YES |
| strncmp YES |
| strchr YES |
| strrchr YES |
| strspn YES |
| strcspn YES |
| strpbrk YES |
| strstr YES |
| strtok YES |
| strtok_r YES |
| ============= ========= |
| |
| String Conversion Functions |
| ============================ |
| |
| These functions are not in strings.h, but are still primarily string |
| functions, and are therefore tracked along with the rest of the string |
| functions. |
| |
| The String to float functions were implemented using the Eisel-Lemire algorithm |
| (read more about the algorithm here: `The Eisel-Lemire ParseNumberF64 Algorithm |
| <https://nigeltao.github.io/blog/2020/eisel-lemire.html>`_). This improved |
| the performance of string to float and double, and allowed it to complete this |
| comprehensive test 15% faster than glibc: `Parse Number FXX Test Data |
| <https://github.com/nigeltao/parse-number-fxx-test-data>`_. The test was done |
| with LLVM-libc built on 2022-04-14 and Debian GLibc version 2.33-6. The targets |
| ``libc_str_to_float_comparison_test`` and |
| ``libc_system_str_to_float_comparison_test`` were built and run on the test data |
| 10 times each, skipping the first run since it was an outlier. |
| |
| |
| ============= ========= |
| Function Name Available |
| ============= ========= |
| atof YES |
| atoi YES |
| atol YES |
| atoll YES |
| strtol YES |
| strtoll YES |
| strtoul YES |
| strtoull YES |
| strtof YES |
| strtod YES |
| strtold YES |
| strtoimax YES |
| strtoumax YES |
| ============= ========= |
| |
| String Error Functions |
| ====================== |
| |
| ============= ========= |
| Function Name Available |
| ============= ========= |
| strerror |
| strerror_s |
| strerrorlen_s |
| ============= ========= |
| |
| Localized String Functions |
| ========================== |
| |
| These functions require locale.h, and will be added when locale support is |
| implemented in LLVM-libc. |
| |
| ============= ========= |
| Function Name Available |
| ============= ========= |
| strcoll |
| strxfrm |
| ============= ========= |
| |
| --------------------------- |
| \<name\>_s String Functions |
| --------------------------- |
| |
| Many String functions have an equivalent _s version, which is intended to be |
| more secure and safe than the previous standard. These functions add runtime |
| error detection and overflow protection. While they can be seen as an |
| improvement, adoption remains relatively low among users. In addition, they are |
| being considered for removal, see |
| `Field Experience With Annex K — Bounds Checking Interfaces |
| <http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1967.htm>`_. For these reasons, |
| there is no ongoing work to implement them. |