| ================ | 
 | String Functions | 
 | ================ | 
 |  | 
 | .. include:: check.rst | 
 |  | 
 | --------------- | 
 | 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          |check| | 
 | bcmp           |check| | 
 | bcopy          |check|        | 
 | memcpy         |check| | 
 | memset         |check| | 
 | memcmp         |check| | 
 | memmove        |check| | 
 | =============  ========= | 
 |  | 
 |  | 
 | Other Raw Memory Functions | 
 | ========================== | 
 |  | 
 | =============  ========= | 
 | Function Name  Available | 
 | =============  ========= | 
 | memchr         |check| | 
 | memrchr        |check| | 
 | memccpy        |check| | 
 | mempcpy        |check| | 
 | =============  ========= | 
 |  | 
 | String Memory Functions | 
 | ======================= | 
 |  | 
 | =============  ========= | 
 | Function Name  Available | 
 | =============  ========= | 
 | stpcpy         |check| | 
 | stpncpy        |check| | 
 | strcpy         |check| | 
 | strncpy        |check| | 
 | strcat         |check| | 
 | strncat        |check| | 
 | strdup         |check| | 
 | strndup        |check| | 
 | =============  ========= | 
 |  | 
 | String Examination Functions | 
 | ============================ | 
 |  | 
 | =============  ========= | 
 | Function Name  Available | 
 | =============  ========= | 
 | strlen         |check| | 
 | strnlen        |check| | 
 | strcmp         |check| | 
 | strncmp        |check| | 
 | strchr         |check| | 
 | strrchr        |check| | 
 | strspn         |check| | 
 | strcspn        |check| | 
 | strpbrk        |check| | 
 | strstr         |check| | 
 | strtok         |check| | 
 | strtok_r       |check| | 
 | =============  ========= | 
 |  | 
 | 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           |check| | 
 | atoi           |check| | 
 | atol           |check| | 
 | atoll          |check| | 
 | strtol         |check| | 
 | strtoll        |check| | 
 | strtoul        |check| | 
 | strtoull       |check| | 
 | strtof         |check| | 
 | strtod         |check| | 
 | strtold        |check| | 
 | strtoimax      |check| | 
 | strtoumax      |check| | 
 | =============  ========= | 
 |  | 
 | String Error Functions | 
 | ====================== | 
 |  | 
 | =============  ========= | 
 | Function Name  Available | 
 | =============  ========= | 
 | strerror       |check| | 
 | strerror_r     |check| | 
 | =============  ========= | 
 |  | 
 | Localized String Functions | 
 | ========================== | 
 |  | 
 | These functions require locale.h, and will be finished when locale support is  | 
 | implemented in LLVM-libc. | 
 |  | 
 | =============  ========= | 
 | Function Name  Available | 
 | =============  ========= | 
 | strcoll        Partially | 
 | strxfrm        Partially | 
 | =============  ========= | 
 |  | 
 | --------------------------- | 
 | \<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. |