strlen(), strlen_isr()

Compute the length of a string

Synopsis:

#include <string.h>

size_t strlen( const char * s );

size_t strlen_isr( const char * s );

Arguments:

s
The string whose length you want to calculate.

Library:

libc

Use the -l c option to qcc to link against this library. This library is usually included automatically.

Description:

The strlen() function computes the length of the string pointed to by s. The strlen_isr() function is similar, but it's safe for you to use it in an interrupt service routine.

Returns:

The number of characters that precede the terminating null character.

Examples:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main( void )
  {
    printf( "%d\n", strlen( "Howdy" ) );
    printf( "%d\n", strlen( "Hello world\n" ) );
    printf( "%d\n", strlen( "" ) );

    return EXIT_SUCCESS;
  }

produces the output:

5
12
0

Environment variables:

LIBC_STRINGS
On certain targets, you can use this environment variable to select the implementation of strlen(). It doesn't affect the implementation of strlen_isr(). The value is one of the strings given below.
  • for AArch64 targets:
    • aarch64_neon — optimized for AARCH64 targets using NEON
    • generic — the default
  • for ARMv7 targets:
    • cortex_a9 — optimized for the ARM Cortex-A9 processor; assumes that no unaligned access is supported
    • cortex_a9_aligned — optimized for ARM Cortex-A9; requires that unaligned memory access be enabled on the platform. If memory access is misaligned, this implementation falls back to the NEON version.
    • cortex_a9_neon — optimized for ARM Cortex-A9 using NEON
    • generic — the default
    • krait — optimized for the Qualcomm Krait CPU
    • krait_neon — optimized for Qualcomm Krait using NEON

Processes that register ISRs shouldn't use the NEON versions.

Classification:

strlen() is ANSI, POSIX 1003.1; strlen_isr() is QNX Neutrino.

Table 1. strlen()
Safety:  
Cancellation point No
Interrupt handler Read the Caveats
Signal handler Yes
Thread Yes
Table 2. strlen_isr()
Safety:  
Cancellation point No
Interrupt handler Yes
Signal handler Yes
Thread Yes

Caveats:

Implementations of strlen() that are optimized using SIMD instructions aren't safe to use in an interrupt handler. These include the NEON implementations on ARMv7 and AArch64.