iPXE
Functions
string.c File Reference

String functions. More...

#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <ctype.h>

Go to the source code of this file.

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 
 FILE_SECBOOT (PERMITTED)
 
void * generic_memset (void *dest, int character, size_t len)
 Fill memory region. More...
 
void * generic_memcpy (void *dest, const void *src, size_t len)
 Copy memory region (forwards) More...
 
void * generic_memcpy_reverse (void *dest, const void *src, size_t len)
 Copy memory region (backwards) More...
 
void * generic_memmove (void *dest, const void *src, size_t len)
 Copy (possibly overlapping) memory region. More...
 
int memcmp (const void *first, const void *second, size_t len)
 Compare memory regions. More...
 
void * memchr (const void *src, int character, size_t len)
 Find character within a memory region. More...
 
void * memswap (void *first, void *second, size_t len)
 Swap memory regions. More...
 
int strcmp (const char *first, const char *second)
 Compare strings. More...
 
int strncmp (const char *first, const char *second, size_t max)
 Compare strings. More...
 
int strcasecmp (const char *first, const char *second)
 Compare case-insensitive strings. More...
 
int strncasecmp (const char *first, const char *second, size_t max)
 Compare case-insensitive strings. More...
 
size_t strlen (const char *src)
 Get length of string. More...
 
size_t strnlen (const char *src, size_t max)
 Get length of string. More...
 
char * strchr (const char *src, int character)
 Find character within a string. More...
 
char * strrchr (const char *src, int character)
 Find rightmost character within a string. More...
 
char * strstr (const char *haystack, const char *needle)
 Find substring. More...
 
char * stpcpy (char *dest, const char *src)
 Copy string. More...
 
char * strcpy (char *dest, const char *src)
 Copy string. More...
 
char * strncpy (char *dest, const char *src, size_t max)
 Copy string. More...
 
char * strcat (char *dest, const char *src)
 Concatenate string. More...
 
char * strdup (const char *src)
 Duplicate string. More...
 
char * strndup (const char *src, size_t max)
 Duplicate string. More...
 
unsigned int digit_value (unsigned int character)
 Calculate digit value. More...
 
static const char * strtoul_pre (const char *string, int *negate, int *base)
 Preprocess string for strtoul() or strtoull() More...
 
unsigned long strtoul (const char *string, char **endp, int base)
 Convert string to numeric value. More...
 
unsigned long long strtoull (const char *string, char **endp, int base)
 Convert string to numeric value. More...
 

Detailed Description

String functions.

Definition in file string.c.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL  )

◆ FILE_SECBOOT()

FILE_SECBOOT ( PERMITTED  )

◆ generic_memset()

void* generic_memset ( void *  dest,
int  character,
size_t  len 
)

Fill memory region.

Parameters
destDestination region
characterFill character
lenLength
Return values
destDestination region

Definition at line 48 of file string.c.

48  {
49  uint8_t *dest_bytes = dest;
50 
51  while ( len-- )
52  *(dest_bytes++) = character;
53  return dest;
54 }
ring len
Length.
Definition: dwmac.h:231
unsigned char uint8_t
Definition: stdint.h:10
if(len >=6 *4) __asm__ __volatile__("movsl" if(len >=5 *4) __asm__ __volatile__("movsl" if(len >=4 *4) __asm__ __volatile__("movsl" if(len >=3 *4) __asm__ __volatile__("movsl" if(len >=2 *4) __asm__ __volatile__("movsl" if(len >=1 *4) __asm__ __volatile__("movsl" if((len % 4) >=2) __asm__ __volatile__("movsw" if((len % 2) >=1) __asm__ __volatile__("movsb" return dest
Definition: string.h:151

References dest, and len.

◆ generic_memcpy()

void* generic_memcpy ( void *  dest,
const void *  src,
size_t  len 
)

Copy memory region (forwards)

Parameters
destDestination region
srcSource region
lenLength
Return values
destDestination region

Definition at line 64 of file string.c.

64  {
65  const uint8_t *src_bytes = src;
66  uint8_t *dest_bytes = dest;
67 
68  while ( len-- )
69  *(dest_bytes++) = *(src_bytes++);
70  return dest;
71 }
static const void * src
Definition: string.h:48
ring len
Length.
Definition: dwmac.h:231
unsigned char uint8_t
Definition: stdint.h:10
if(len >=6 *4) __asm__ __volatile__("movsl" if(len >=5 *4) __asm__ __volatile__("movsl" if(len >=4 *4) __asm__ __volatile__("movsl" if(len >=3 *4) __asm__ __volatile__("movsl" if(len >=2 *4) __asm__ __volatile__("movsl" if(len >=1 *4) __asm__ __volatile__("movsl" if((len % 4) >=2) __asm__ __volatile__("movsw" if((len % 2) >=1) __asm__ __volatile__("movsb" return dest
Definition: string.h:151

References dest, len, and src.

Referenced by generic_memmove().

◆ generic_memcpy_reverse()

void* generic_memcpy_reverse ( void *  dest,
const void *  src,
size_t  len 
)

Copy memory region (backwards)

Parameters
destDestination region
srcSource region
lenLength
Return values
destDestination region

Definition at line 81 of file string.c.

81  {
82  const uint8_t *src_bytes = ( src + len );
83  uint8_t *dest_bytes = ( dest + len );
84 
85  while ( len-- )
86  *(--dest_bytes) = *(--src_bytes);
87  return dest;
88 }
static const void * src
Definition: string.h:48
ring len
Length.
Definition: dwmac.h:231
unsigned char uint8_t
Definition: stdint.h:10
if(len >=6 *4) __asm__ __volatile__("movsl" if(len >=5 *4) __asm__ __volatile__("movsl" if(len >=4 *4) __asm__ __volatile__("movsl" if(len >=3 *4) __asm__ __volatile__("movsl" if(len >=2 *4) __asm__ __volatile__("movsl" if(len >=1 *4) __asm__ __volatile__("movsl" if((len % 4) >=2) __asm__ __volatile__("movsw" if((len % 2) >=1) __asm__ __volatile__("movsb" return dest
Definition: string.h:151

References dest, len, and src.

Referenced by generic_memmove().

◆ generic_memmove()

void* generic_memmove ( void *  dest,
const void *  src,
size_t  len 
)

Copy (possibly overlapping) memory region.

Parameters
destDestination region
srcSource region
lenLength
Return values
destDestination region

Definition at line 98 of file string.c.

98  {
99 
100  if ( dest < src ) {
101  return generic_memcpy ( dest, src, len );
102  } else {
103  return generic_memcpy_reverse ( dest, src, len );
104  }
105 }
void * generic_memcpy(void *dest, const void *src, size_t len)
Copy memory region (forwards)
Definition: string.c:64
static const void * src
Definition: string.h:48
ring len
Length.
Definition: dwmac.h:231
void * generic_memcpy_reverse(void *dest, const void *src, size_t len)
Copy memory region (backwards)
Definition: string.c:81
if(len >=6 *4) __asm__ __volatile__("movsl" if(len >=5 *4) __asm__ __volatile__("movsl" if(len >=4 *4) __asm__ __volatile__("movsl" if(len >=3 *4) __asm__ __volatile__("movsl" if(len >=2 *4) __asm__ __volatile__("movsl" if(len >=1 *4) __asm__ __volatile__("movsl" if((len % 4) >=2) __asm__ __volatile__("movsw" if((len % 2) >=1) __asm__ __volatile__("movsb" return dest
Definition: string.h:151

References dest, generic_memcpy(), generic_memcpy_reverse(), len, and src.

◆ memcmp()

int memcmp ( const void *  first,
const void *  second,
size_t  len 
)

Compare memory regions.

Parameters
firstFirst region
secondSecond region
lenLength
Return values
diffDifference

Definition at line 115 of file string.c.

115  {
116  const uint8_t *first_bytes = first;
117  const uint8_t *second_bytes = second;
118  int diff;
119 
120  while ( len-- ) {
121  diff = ( *(first_bytes++) - *(second_bytes++) );
122  if ( diff )
123  return diff;
124  }
125  return 0;
126 }
uint32_t first
First block in range.
Definition: pccrr.h:15
ring len
Length.
Definition: dwmac.h:231
unsigned char uint8_t
Definition: stdint.h:10

References first, and len.

Referenced by acpimac_extract(), apply_syslog_settings(), asn1_compare(), asn1_okx(), base16_decode_okx(), base64_decode_okx(), bigint_add_okx(), bigint_mod_exp_okx(), bigint_mod_invert_okx(), bigint_montgomery_okx(), bigint_multiply_okx(), bigint_reduce_okx(), bigint_shl_okx(), bigint_shr_okx(), bigint_subtract_okx(), bigint_swap_okx(), bofm_en(), cachedhcp_apply(), cachedhcp_record(), ccmp_decrypt(), check_bios_interrupts(), cipher_decrypt_okx(), cipher_encrypt_okx(), cms_decrypt(), cms_decrypt_okx(), com32_identify(), cpio_okx(), deflate_okx(), dhcp_deliver(), dhcpv6_check_duid(), dhe_key_okx(), digest_frag_okx(), dns_copy_okx(), dns_encode_okx(), eapol_key_rx(), ecdsa_match(), efi_block_match(), efi_file_get_info(), efi_find_table(), efi_guid_ntoa(), efi_path_net_probe(), efi_pxe_ip_filter(), efi_pxe_udp_read(), efi_shim_is_sbatlevel(), efi_veto_dhcp6(), efi_veto_hp_xhci(), efi_veto_ip4config(), efi_veto_vmware_uefipxebc(), efivars_find(), elf_load(), elfboot_probe(), elliptic_add_okx(), elliptic_curve_okx(), elliptic_multiply_okx(), eoib_find(), eoib_find_peer(), eoib_rx_av(), eth_probe(), eth_slow_lacp_rx(), fc_els_logo_logout(), fc_peer_examine(), fc_peer_get_port_id(), fc_peer_get_wwn(), fc_peer_login(), fc_port_deliver(), fc_port_login(), fc_ulp_login(), fcels_exec(), fcoe_fip_rx(), fcoe_fip_rx_advertisement(), fcoe_rx(), fdt_match(), fdt_test_exec(), find_ibdev(), gzip_okx(), hmac_okx(), hvm_cpuid_base(), ib_find_path_cache_entry(), ib_find_qp_mgid(), ib_mcast_detach(), ib_mi_handle(), ib_path_complete(), inet6_aton_okx(), int13_parse_eltorito(), int13con_find(), ipair_key(), ipoib_find_remac(), ipoib_map_remac(), ipv6_has_addr(), ipv6_is_fragment(), ipv6_route_okx(), ipv6_table_okx(), is_autoboot_ll_addr(), iscsi_handle_chap_r_value(), linda_verify_uc_ram(), lldp_fetch(), loopback_wait(), mac_address_from_string_specs(), memcpy_test_speed(), mlx_memory_cmp_priv(), mschapv2_okx(), ne_probe(), neighbour_find(), net80211_rx(), netfront_net_probe(), ntlm_authenticate_okx(), ntlm_data_okx(), ntlm_key_okx(), nvs_verify(), ocsp_compare_responder_key_hash(), pcnet32_setup_mac_addr(), peerblk_done(), peerblk_parse_block(), peerdist_discovery_reply(), peerdist_info_block_okx(), peerdist_info_passphrase_okx(), peerdist_info_segment_okx(), pem_marker(), pixbuf_okx(), png_probe(), rsa_verify(), rsdp_find_rsdt_range(), sandev_parse_iso9660(), script_probe(), slam_pull_header(), string_test_exec(), strstr(), tftp_rx(), tkip_decrypt(), tkip_mix_1(), tls_new_ciphertext(), tls_new_finished(), tls_new_server_hello(), typeof(), ucode_exec(), udp_demux(), uuid_aton_okx(), vlan_probe(), vmbus_find_driver(), wpa_derive_ptk(), wpa_handle_3_of_4(), x25519_invert_okx(), x25519_key_okx(), x25519_multiply_okx(), x509_chain_okx(), x509_check_ipaddress(), x509_check_root(), x509_fingerprint_okx(), xcm_find(), xve_find(), and zlib_okx().

◆ memchr()

void* memchr ( const void *  src,
int  character,
size_t  len 
)

Find character within a memory region.

Parameters
srcSource region
characterCharacter to find
lenLength
Return values
foundFound character, or NULL if not found

Definition at line 136 of file string.c.

136  {
137  const uint8_t *src_bytes = src;
138 
139  for ( ; len-- ; src_bytes++ ) {
140  if ( *src_bytes == character )
141  return ( ( void * ) src_bytes );
142  }
143  return NULL;
144 }
static const void * src
Definition: string.h:48
ring len
Length.
Definition: dwmac.h:231
unsigned char uint8_t
Definition: stdint.h:10
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322

References len, NULL, and src.

Referenced by line_buffer(), pem_next(), process_script(), rsa_decrypt(), and string_test_exec().

◆ memswap()

void* memswap ( void *  first,
void *  second,
size_t  len 
)

Swap memory regions.

Parameters
firstFirst region
secondSecond region
lenLength
Return values
firstFirst region

Definition at line 154 of file string.c.

154  {
155  uint8_t *first_bytes = first;
156  uint8_t *second_bytes = second;
157  uint8_t temp;
158 
159  for ( ; len-- ; first_bytes++, second_bytes++ ) {
160  temp = *first_bytes;
161  *first_bytes = *second_bytes;
162  *second_bytes = temp;
163  }
164  return first;
165 }
uint32_t first
First block in range.
Definition: pccrr.h:15
ring len
Length.
Definition: dwmac.h:231
unsigned char uint8_t
Definition: stdint.h:10

References first, and len.

Referenced by arp_rx(), gdbudp_recv(), string_test_exec(), and tls_change_cipher().

◆ strcmp()

int strcmp ( const char *  first,
const char *  second 
)

Compare strings.

Parameters
firstFirst string
secondSecond string
Return values
diffDifference

Definition at line 174 of file string.c.

174  {
175 
176  return strncmp ( first, second, ~( ( size_t ) 0 ) );
177 }
uint32_t first
First block in range.
Definition: pccrr.h:15
int strncmp(const char *first, const char *second, size_t max)
Compare strings.
Definition: string.c:187

References first, and strncmp().

Referenced by apply_syslogs_settings(), base16_encode_okx(), base64_encode_okx(), bzimage_parse_cmdline(), command_terminator(), dns_decode_okx(), dns_list_okx(), dt_find_driver(), editstring_okx(), efi_veto_hp_xhci(), efi_veto_ip4config(), efi_veto_vmware_uefipxebc(), execv(), fc_port_find(), fdt_test_exec(), fdtmem_update_node(), find_child_settings(), find_dynui(), find_gdb_transport(), find_image(), find_netdev(), find_netdev_configurator(), find_parameters(), find_setting(), find_setting_type(), goto_find_label(), gzip_okx(), have_pxe_menu(), http_connect(), inet6_ntoa_okx(), inet_ntoa_okx(), ipair_rx_pair_error(), ipair_rx_session_error(), iscsi_handle_authmethod_value(), iscsi_handle_chap_a_value(), iscsi_handle_chap_n_value(), iscsi_handle_string(), iseq_exec(), keymap_find(), linebuf_accumulated_okx(), linebuf_consume_okx(), list_check_contents(), net80211_check_settings_update(), net80211_probe_step(), nfs_mount_deliver(), peerdisc_discovered(), peerdisc_find(), setting_cmp(), show_menu(), smsc95xx_vm3_fetch_mac(), snprintf_okx(), string_test_exec(), testnet_set_okx(), tls_session(), uri_churi_okx(), uri_format_okx(), uri_params_list_okx(), uri_pxe_okx(), uri_resolve_okx(), uri_resolve_path_okx(), uristrcmp(), usbblk_find(), uuid_ntoa_okx(), xenbus_find_driver(), and zlib_okx().

◆ strncmp()

int strncmp ( const char *  first,
const char *  second,
size_t  max 
)

Compare strings.

Parameters
firstFirst string
secondSecond string
maxMaximum length to compare
Return values
diffDifference

Definition at line 187 of file string.c.

187  {
188  const uint8_t *first_bytes = ( ( const uint8_t * ) first );
189  const uint8_t *second_bytes = ( ( const uint8_t * ) second );
190  int diff;
191 
192  for ( ; max-- ; first_bytes++, second_bytes++ ) {
193  diff = ( *first_bytes - *second_bytes );
194  if ( diff )
195  return diff;
196  if ( ! *first_bytes )
197  return 0;
198  }
199  return 0;
200 }
#define max(x, y)
Definition: ath.h:41
uint32_t first
First block in range.
Definition: pccrr.h:15
unsigned char uint8_t
Definition: stdint.h:10

References first, and max.

Referenced by dhcp_discovery_rx(), http_parse_status(), iscsi_handle_string(), match_long_option(), nfs_uri_symlink(), parse_uri(), peerdist_discovery_reply_tag(), strcmp(), string_test_exec(), and undinet_probe().

◆ strcasecmp()

int strcasecmp ( const char *  first,
const char *  second 
)

Compare case-insensitive strings.

Parameters
firstFirst string
secondSecond string
Return values
diffDifference

Definition at line 209 of file string.c.

209  {
210 
211  return strncasecmp ( first, second, ~( ( size_t ) 0 ) );
212 }
uint32_t first
First block in range.
Definition: pccrr.h:15
int strncasecmp(const char *first, const char *second, size_t max)
Compare case-insensitive strings.
Definition: string.c:222

References first, and strncasecmp().

Referenced by com32_identify(), comboot_identify(), efi_block_label(), efi_file_find(), efi_file_open(), efi_local_check_volume_name(), efi_snp_hii_fetch(), efi_snp_hii_store(), http_authentication(), http_digest_authenticate(), http_format_metadata_flavor(), http_parse_connection(), http_parse_content_encoding(), http_parse_digest_auth(), http_parse_header(), http_parse_transfer_encoding(), http_scheme(), parse_fc_els_handler(), string_test_exec(), sundance_probe(), tftp_process_option(), uart_find(), and xfer_uri_opener().

◆ strncasecmp()

int strncasecmp ( const char *  first,
const char *  second,
size_t  max 
)

Compare case-insensitive strings.

Parameters
firstFirst string
secondSecond string
maxMaximum length to compare
Return values
diffDifference

Definition at line 222 of file string.c.

222  {
223  const uint8_t *first_bytes = ( ( const uint8_t * ) first );
224  const uint8_t *second_bytes = ( ( const uint8_t * ) second );
225  int diff;
226 
227  for ( ; max-- ; first_bytes++, second_bytes++ ) {
228  diff = ( toupper ( *first_bytes ) -
229  toupper ( *second_bytes ) );
230  if ( diff )
231  return diff;
232  if ( ! *first_bytes )
233  return 0;
234  }
235  return 0;
236 }
#define max(x, y)
Definition: ath.h:41
uint32_t first
First block in range.
Definition: pccrr.h:15
static int toupper(int character)
Convert character to upper case.
Definition: ctype.h:121
unsigned char uint8_t
Definition: stdint.h:10

References first, max, and toupper().

Referenced by efi_file_open(), strcasecmp(), string_test_exec(), and x509_check_dnsname().

◆ strlen()

size_t strlen ( const char *  src)

Get length of string.

Parameters
srcString
Return values
lenLength

Definition at line 244 of file string.c.

244  {
245 
246  return strnlen ( src, ~( ( size_t ) 0 ) );
247 }
static const void * src
Definition: string.h:48
size_t strnlen(const char *src, size_t max)
Get length of string.
Definition: string.c:256

References src, and strnlen().

Referenced by __attribute__(), _print_label(), acpimac_extract(), add_dynui_item(), add_parameter(), alloc_form(), autovivify_child_settings(), base16_decoded_max_len(), base16_encode_okx(), base64_decoded_max_len(), base64_encode_okx(), cmdline_init(), comboot_copy_cmdline(), concat_args(), create_dynui(), create_parameters(), cwuri_fetch_uri(), dns_decode_okx(), dns_list_okx(), draw_editbox(), draw_menu_item(), dt_find_driver(), edit_string(), editstring_okx(), efi_block_exec(), efi_block_filename(), efi_cmdline_init(), efi_file_varlen(), efi_ifr_package(), efi_image_path(), efi_iscsi_path(), efi_local_open_resolved(), efi_snp_hii_append(), efi_snp_hii_store(), efivars_fetch(), fdt_bootargs(), fdt_ensure_child(), fdt_insert_string(), fdt_match(), generic_settings_store(), guestinfo_fetch_type(), guestrpc_command(), http_digest_update(), http_format_basic_auth(), http_parse_headers(), http_parse_ntlm_auth(), ib_srp_parse_byte_string(), ibft_set_string(), image_argument(), init_editbox(), ipair_tag(), ipv6_sock_aton(), iscsi_handle_chap_c_value(), iscsi_handle_chap_i_value(), iscsi_handle_chap_r_value(), iwlist(), linebuf_accumulated_okx(), match_long_option(), mschapv2_challenge_hash(), net80211_marshal_request_info(), netdev_fetch_bustype(), netdev_fetch_chip(), netdev_fetch_ifname(), netdev_fetch_linktype(), nfs_uri_symlink(), parse_net_args(), parse_string_setting(), parse_uri(), peerblk_retrieval_uri(), peerdisc_create(), peerdisc_discovered(), peerdisc_socket_rx(), peerdisc_socket_tx(), peerdist_discovery_reply(), peerdist_discovery_reply_tag(), peerdist_discovery_reply_values(), pem_marker(), prf_sha1(), resolv(), resolv_setting(), resolve_path(), show_menu(), smbios_fetch(), smbios_string(), snprintf_okx(), strcat(), string_copy(), string_test_exec(), strstr(), sync_console(), testnet_set_okx(), tftp_send_error(), tftp_send_rrq(), tls_client_hello(), tls_session(), uri_copy_fields(), uri_decode_inplace(), uri_encode_string(), uri_format_okx(), uri_pxe_okx(), validator_start_download(), version_fetch(), wpa_psk_start(), x509_check_dnsname(), xenbus_probe(), xenbus_probe_device(), xenbus_probe_type(), xenstore_dump(), xenstore_request(), xenstore_response(), and xenstore_send_string().

◆ strnlen()

size_t strnlen ( const char *  src,
size_t  max 
)

Get length of string.

Parameters
srcString
maxMaximum length
Return values
lenLength

Definition at line 256 of file string.c.

256  {
257  const uint8_t *src_bytes = ( ( const uint8_t * ) src );
258  size_t len = 0;
259 
260  while ( max-- && *(src_bytes++) )
261  len++;
262  return len;
263 }
#define max(x, y)
Definition: ath.h:41
static const void * src
Definition: string.h:48
ring len
Length.
Definition: dwmac.h:231
unsigned char uint8_t
Definition: stdint.h:10

References len, max, and src.

Referenced by efi_pecoff_debug_name(), fdt_describe(), gzip_extract(), iscsi_handle_strings(), string_test_exec(), strlen(), strndup(), tftp_rx_oack(), and used_len_string().

◆ strchr()

char* strchr ( const char *  src,
int  character 
)

Find character within a string.

Parameters
srcString
characterCharacter to find
Return values
foundFound character, or NULL if not found

Definition at line 272 of file string.c.

272  {
273  const uint8_t *src_bytes = ( ( const uint8_t * ) src );
274 
275  for ( ; ; src_bytes++ ) {
276  if ( *src_bytes == character )
277  return ( ( char * ) src_bytes );
278  if ( ! *src_bytes )
279  return NULL;
280  }
281 }
static const void * src
Definition: string.h:48
unsigned char uint8_t
Definition: stdint.h:10
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322

References NULL, and src.

Referenced by base64_decode(), bzimage_parse_cmdline(), cmdline_strip(), comboot_fetch_kernel(), dns_resolv(), efi_pecoff_debug_name(), fdt_path(), fdt_permitted(), http_parse_header(), ipv6_sock_aton(), iscsi_handle_string(), iscsi_handle_targetaddress_value(), netbios_domain(), nfs_uri_init(), parse_setting_name(), parse_settings_name(), parse_uri(), slam_parse_multicast_address(), string_test_exec(), testnet_set_okx(), tftp_process_multicast(), uri_character_escaped(), and x509_check_dnsname().

◆ strrchr()

char* strrchr ( const char *  src,
int  character 
)

Find rightmost character within a string.

Parameters
srcString
characterCharacter to find
Return values
foundFound character, or NULL if not found

Definition at line 290 of file string.c.

290  {
291  const uint8_t *src_bytes = ( ( const uint8_t * ) src );
292  const uint8_t *start = src_bytes;
293 
294  while ( *src_bytes )
295  src_bytes++;
296  for ( src_bytes-- ; src_bytes >= start ; src_bytes-- ) {
297  if ( *src_bytes == character )
298  return ( ( char * ) src_bytes );
299  }
300  return NULL;
301 }
uint32_t start
Starting offset.
Definition: netvsc.h:12
static const void * src
Definition: string.h:48
unsigned char uint8_t
Definition: stdint.h:10
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322

References NULL, src, and start.

Referenced by basename(), com32_identify(), comboot_identify(), dirname(), efi_file_open(), efi_pecoff_debug_name(), image_strip_suffix(), nfs_uri_next_mountpoint(), parse_uri(), and string_test_exec().

◆ strstr()

char* strstr ( const char *  haystack,
const char *  needle 
)

Find substring.

Parameters
haystackString
needleSubstring
Return values
foundFound substring, or NULL if not found

Definition at line 310 of file string.c.

310  {
311  size_t len = strlen ( needle );
312 
313  for ( ; *haystack ; haystack++ ) {
314  if ( memcmp ( haystack, needle, len ) == 0 )
315  return ( ( char * ) haystack );
316  }
317  return NULL;
318 }
ring len
Length.
Definition: dwmac.h:231
size_t strlen(const char *src)
Get length of string.
Definition: string.c:244
int memcmp(const void *first, const void *second, size_t len)
Compare memory regions.
Definition: string.c:115
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322

References len, memcmp(), NULL, and strlen().

Referenced by cmdline_strip(), comboot_fetch_kernel(), image_argument(), ipair_tag(), parse_uri(), string_test_exec(), and ucode_exec().

◆ stpcpy()

char* stpcpy ( char *  dest,
const char *  src 
)

Copy string.

Parameters
destDestination string
srcSource string
Return values
dnulTerminating NUL of destination string

Definition at line 327 of file string.c.

327  {
328  const uint8_t *src_bytes = ( ( const uint8_t * ) src );
329  uint8_t *dest_bytes = ( ( uint8_t * ) dest );
330 
331  /* We cannot use strncpy(), since that would pad the destination */
332  for ( ; ; src_bytes++, dest_bytes++ ) {
333  *dest_bytes = *src_bytes;
334  if ( ! *dest_bytes )
335  break;
336  }
337  return ( ( char * ) dest_bytes );
338 }
static const void * src
Definition: string.h:48
unsigned char uint8_t
Definition: stdint.h:10
if(len >=6 *4) __asm__ __volatile__("movsl" if(len >=5 *4) __asm__ __volatile__("movsl" if(len >=4 *4) __asm__ __volatile__("movsl" if(len >=3 *4) __asm__ __volatile__("movsl" if(len >=2 *4) __asm__ __volatile__("movsl" if(len >=1 *4) __asm__ __volatile__("movsl" if((len % 4) >=2) __asm__ __volatile__("movsw" if((len % 2) >=1) __asm__ __volatile__("movsb" return dest
Definition: string.h:151

References dest, and src.

Referenced by alloc_form(), strcpy(), and string_test_exec().

◆ strcpy()

char* strcpy ( char *  dest,
const char *  src 
)

Copy string.

Parameters
destDestination string
srcSource string
Return values
destDestination string

Definition at line 347 of file string.c.

347  {
348 
349  stpcpy ( dest, src );
350  return dest;
351 }
char * stpcpy(char *dest, const char *src)
Copy string.
Definition: string.c:327
static const void * src
Definition: string.h:48
if(len >=6 *4) __asm__ __volatile__("movsl" if(len >=5 *4) __asm__ __volatile__("movsl" if(len >=4 *4) __asm__ __volatile__("movsl" if(len >=3 *4) __asm__ __volatile__("movsl" if(len >=2 *4) __asm__ __volatile__("movsl" if(len >=1 *4) __asm__ __volatile__("movsl" if((len % 4) >=2) __asm__ __volatile__("movsw" if((len % 2) >=1) __asm__ __volatile__("movsb" return dest
Definition: string.h:151

References dest, src, and stpcpy().

Referenced by add_dynui_item(), add_parameter(), cmdline_strip(), create_dynui(), create_parameters(), efi_ifr_package(), fdt_insert_string(), ibft_set_string(), icert_encode(), inet6_ntoa(), net80211_prepare_assoc(), net80211_probe_start(), net80211_probe_step(), nfs_uri_symlink(), parse_uri(), peerdisc_discovered(), peerdist_discovery_reply(), resolv_setting(), strcat(), string_test_exec(), tftp_send_error(), and tls_session().

◆ strncpy()

char* strncpy ( char *  dest,
const char *  src,
size_t  max 
)

Copy string.

Parameters
destDestination string
srcSource string
maxMaximum length
Return values
destDestination string

Definition at line 361 of file string.c.

361  {
362  const uint8_t *src_bytes = ( ( const uint8_t * ) src );
363  uint8_t *dest_bytes = ( ( uint8_t * ) dest );
364 
365  for ( ; max ; max--, src_bytes++, dest_bytes++ ) {
366  *dest_bytes = *src_bytes;
367  if ( ! *dest_bytes )
368  break;
369  }
370  while ( max-- )
371  *(dest_bytes++) = '\0';
372  return dest;
373 }
#define max(x, y)
Definition: ath.h:41
static const void * src
Definition: string.h:48
unsigned char uint8_t
Definition: stdint.h:10
if(len >=6 *4) __asm__ __volatile__("movsl" if(len >=5 *4) __asm__ __volatile__("movsl" if(len >=4 *4) __asm__ __volatile__("movsl" if(len >=3 *4) __asm__ __volatile__("movsl" if(len >=2 *4) __asm__ __volatile__("movsl" if(len >=1 *4) __asm__ __volatile__("movsl" if((len % 4) >=2) __asm__ __volatile__("movsw" if((len % 2) >=1) __asm__ __volatile__("movsb" return dest
Definition: string.h:151

References dest, max, and src.

Referenced by buildarch_fetch(), cwuri_fetch_uri(), efi_block_install(), int13_install(), netdev_fetch_bustype(), netdev_fetch_chip(), netdev_fetch_ifname(), netdev_fetch_linktype(), platform_fetch(), slk_set(), string_test_exec(), and version_fetch().

◆ strcat()

char* strcat ( char *  dest,
const char *  src 
)

Concatenate string.

Parameters
destDestination string
srcSource string
Return values
destDestination string

Definition at line 382 of file string.c.

382  {
383 
384  strcpy ( ( dest + strlen ( dest ) ), src );
385  return dest;
386 }
static const void * src
Definition: string.h:48
char * strcpy(char *dest, const char *src)
Copy string.
Definition: string.c:347
size_t strlen(const char *src)
Get length of string.
Definition: string.c:244
if(len >=6 *4) __asm__ __volatile__("movsl" if(len >=5 *4) __asm__ __volatile__("movsl" if(len >=4 *4) __asm__ __volatile__("movsl" if(len >=3 *4) __asm__ __volatile__("movsl" if(len >=2 *4) __asm__ __volatile__("movsl" if(len >=1 *4) __asm__ __volatile__("movsl" if((len % 4) >=2) __asm__ __volatile__("movsw" if((len % 2) >=1) __asm__ __volatile__("movsb" return dest
Definition: string.h:151

References dest, src, strcpy(), and strlen().

Referenced by _print_label(), and string_test_exec().

◆ strdup()

char* strdup ( const char *  src)

Duplicate string.

Parameters
srcSource string
Return values
dupDuplicated string, or NULL if allocation failed

Definition at line 394 of file string.c.

394  {
395 
396  return strndup ( src, ~( ( size_t ) 0 ) );
397 }
static const void * src
Definition: string.h:48
char * strndup(const char *src, size_t max)
Duplicate string.
Definition: string.c:406

References src, and strndup().

Referenced by cmdline_init(), expand_settings(), history_append(), history_store(), http_parse_ntlm_auth(), ib_srp_parse_root_path(), image_set_cmdline(), image_set_name(), ipv6_sock_aton(), iscsi_handle_targetaddress_value(), iscsi_parse_root_path(), nfs_parse_uri(), nfs_uri_init(), nfs_uri_next_mountpoint(), oncrpc_init_cred_sys(), parse_settings_name(), peerdisc_discovered(), resolve_path(), resolve_uri(), slam_parse_multicast_address(), string_test_exec(), and system().

◆ strndup()

char* strndup ( const char *  src,
size_t  max 
)

Duplicate string.

Parameters
srcSource string
maxMaximum length
Return values
dupDuplicated string, or NULL if allocation failed

Definition at line 406 of file string.c.

406  {
407  size_t len = strnlen ( src, max );
408  char *dup;
409 
410  dup = malloc ( len + 1 /* NUL */ );
411  if ( dup ) {
412  memcpy ( dup, src, len );
413  dup[len] = '\0';
414  }
415  return dup;
416 }
#define max(x, y)
Definition: ath.h:41
void * memcpy(void *dest, const void *src, size_t len) __nonnull
static const void * src
Definition: string.h:48
ring len
Length.
Definition: dwmac.h:231
size_t strnlen(const char *src, size_t max)
Get length of string.
Definition: string.c:256
void * malloc(size_t size)
Allocate memory.
Definition: malloc.c:621

References len, malloc(), max, memcpy(), src, and strnlen().

Referenced by nfs_deliver(), strdup(), and string_test_exec().

◆ digit_value()

unsigned int digit_value ( unsigned int  character)

Calculate digit value.

Parameters
characterDigit character
Return values
digitDigit value

Invalid digits will be returned as a value greater than or equal to the numeric base.

Definition at line 427 of file string.c.

427  {
428 
429  if ( character >= 'a' )
430  return ( character - ( 'a' - 10 ) );
431  if ( character >= 'A' )
432  return ( character - ( 'A' - 10 ) );
433  if ( character <= '9' )
434  return ( character - '0' );
435  return character;
436 }

Referenced by hex_decode(), string_test_exec(), strtoul(), and strtoull().

◆ strtoul_pre()

static const char* strtoul_pre ( const char *  string,
int *  negate,
int *  base 
)
static

Preprocess string for strtoul() or strtoull()

Parameters
stringString
negateFinal value should be negated
baseNumeric base
Return values
stringRemaining string

Definition at line 446 of file string.c.

446  {
447 
448  /* Skip any leading whitespace */
449  while ( isspace ( *string ) )
450  string++;
451 
452  /* Process arithmetic sign, if present */
453  *negate = 0;
454  if ( *string == '-' ) {
455  string++;
456  *negate = 1;
457  } else if ( *string == '+' ) {
458  string++;
459  }
460 
461  /* Process base, if present */
462  if ( *base == 0 ) {
463  *base = 10;
464  if ( *string == '0' ) {
465  string++;
466  *base = 8;
467  if ( ( *string & ~0x20 ) == 'X' ) {
468  string++;
469  *base = 16;
470  }
471  }
472  }
473 
474  return string;
475 }
uint32_t base
Base.
Definition: librm.h:138
uint32_t string
Definition: multiboot.h:14
int isspace(int character)
Check to see if character is a space.
Definition: ctype.c:42

References base, isspace(), and string.

Referenced by strtoul(), and strtoull().

◆ strtoul()

unsigned long strtoul ( const char *  string,
char **  endp,
int  base 
)

Convert string to numeric value.

Parameters
stringString
endpEnd pointer (or NULL)
baseNumeric base (or zero to autodetect)
Return values
valueNumeric value

Definition at line 485 of file string.c.

485  {
486  unsigned long value = 0;
487  unsigned int digit;
488  int negate;
489 
490  /* Preprocess string */
491  string = strtoul_pre ( string, &negate, &base );
492 
493  /* Process digits */
494  for ( ; ; string++ ) {
495  digit = digit_value ( *string );
496  if ( digit >= ( unsigned int ) base )
497  break;
498  value = ( ( value * base ) + digit );
499  }
500 
501  /* Negate value if, applicable */
502  if ( negate )
503  value = -value;
504 
505  /* Fill in end pointer, if applicable */
506  if ( endp )
507  *endp = ( ( char * ) string );
508 
509  return value;
510 }
uint32_t base
Base.
Definition: librm.h:138
unsigned int digit_value(unsigned int character)
Calculate digit value.
Definition: string.c:427
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
static const char * strtoul_pre(const char *string, int *negate, int *base)
Preprocess string for strtoul() or strtoull()
Definition: string.c:446

References base, digit_value(), strtoul_pre(), and value.

Referenced by aoe_parse_uri(), bzimage_parse_cmdline(), cpio_parse_cmdline(), efi_snp_hii_store(), fc_aton(), fc_id_aton(), ftp_parse_value(), ftp_reply(), http_parse_content_length(), http_parse_retry_after(), http_parse_status(), http_rx_chunk_len(), ib_srp_parse_integer(), inet6_aton(), inet_aton(), iscsi_handle_chap_i_value(), iscsi_handle_maxburstlength_value(), iscsi_handle_targetaddress_value(), iscsi_parse_root_path(), mac_address_from_string_specs(), parse_int_setting(), parse_integer(), parse_setting_tag(), pnm_ascii(), scsi_parse_lun(), slam_parse_multicast_address(), string_test_exec(), tftp_process_blksize(), tftp_process_multicast(), tftp_process_tsize(), uart_find(), uri_decode(), uri_port(), and xenstore_read_num().

◆ strtoull()

unsigned long long strtoull ( const char *  string,
char **  endp,
int  base 
)

Convert string to numeric value.

Parameters
stringString
endpEnd pointer (or NULL)
baseNumeric base (or zero to autodetect)
Return values
valueNumeric value

Definition at line 520 of file string.c.

520  {
521  unsigned long long value = 0;
522  unsigned int digit;
523  int negate;
524 
525  /* Preprocess string */
526  string = strtoul_pre ( string, &negate, &base );
527 
528  /* Process digits */
529  for ( ; ; string++ ) {
530  digit = digit_value ( *string );
531  if ( digit >= ( unsigned int ) base )
532  break;
533  value = ( ( value * base ) + digit );
534  }
535 
536  /* Negate value if, applicable */
537  if ( negate )
538  value = -value;
539 
540  /* Fill in end pointer, if applicable */
541  if ( endp )
542  *endp = ( ( char * ) string );
543 
544  return value;
545 }
uint32_t base
Base.
Definition: librm.h:138
unsigned int digit_value(unsigned int character)
Calculate digit value.
Definition: string.c:427
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
static const char * strtoul_pre(const char *string, int *negate, int *base)
Preprocess string for strtoul() or strtoull()
Definition: string.c:446

References base, digit_value(), strtoul_pre(), and value.