iPXE
stdlib.h File Reference
#include <stdint.h>
#include <assert.h>

Go to the source code of this file.

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 FILE_SECBOOT (PERMITTED)
unsigned long strtoul (const char *string, char **endp, int base)
 Convert string to numeric value.
unsigned long long strtoull (const char *string, char **endp, int base)
 Convert string to numeric value.
void *__malloc malloc (size_t size)
 Allocate memory.
void * realloc (void *old_ptr, size_t new_size)
 Reallocate memory.
void free (void *ptr)
 Free memory.
void *__malloc zalloc (size_t len)
 Allocate cleared memory.
static void *__malloc calloc (size_t nmemb, size_t size)
 Allocate cleared memory.
long int random (void)
 Generate a pseudo-random number between 0 and 2147483647L or 2147483562?
void srandom (unsigned int seed)
 Seed the pseudo-random number generator.
static int rand (void)
static void srand (unsigned int seed)
static __attribute__ ((always_inline)) int abs(int value)
int system (const char *command)
 Execute command line.
__asmcall int main (void)
 Main entry point.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )

◆ FILE_SECBOOT()

FILE_SECBOOT ( PERMITTED )

References __malloc, base, len, and size.

◆ strtoul()

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

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}
pseudo_bit_t value[0x00020]
Definition arbel.h:2
uint32_t base
Base.
Definition librm.h:3
unsigned int digit_value(unsigned int character)
Calculate digit value.
Definition string.c:427
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(), apply_syslogs_settings(), 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 )
extern

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}

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

◆ malloc()

void *__malloc malloc ( size_t size)
extern

Allocate memory.

Parameters
sizeRequested size
Return values
ptrMemory, or NULL

Allocates memory with no particular alignment requirement. ptr will be aligned to at least a multiple of sizeof(void*).

Definition at line 621 of file malloc.c.

621 {
622 void *ptr;
623
624 ptr = realloc ( NULL, size );
625 if ( ASSERTED ) {
626 DBGC ( &heap, "HEAP detected possible memory corruption "
627 "from %p\n", __builtin_return_address ( 0 ) );
628 }
629 return ptr;
630}
#define NULL
NULL pointer (VOID *)
Definition Base.h:322
#define ASSERTED
Definition assert.h:26
#define DBGC(...)
Definition compiler.h:505
uint16_t size
Buffer size.
Definition dwmac.h:3
void * realloc(void *old_ptr, size_t new_size)
Reallocate memory.
Definition malloc.c:607
A heap.
Definition malloc.h:45

References ASSERTED, DBGC, NULL, realloc(), and size.

Referenced by add_tls(), aes_unwrap(), aes_wrap(), alloc_iob_raw(), apply_dns_search(), ath5k_hw_rfregs_init(), chap_init(), deflate_test_exec(), der_asn1(), derwin(), dhcpv6_rx(), dhe_key(), dupwin(), eap_rx_mschapv2_request(), eap_tx_response(), ecdsa_alloc(), efi_block_label(), efi_boot_path(), efi_cacert_all(), efi_cmdline_init(), efi_download_start(), efi_load_path(), efi_local_check_volume_name(), efi_local_len(), efi_locate_device(), efi_vasprintf(), efivars_fetch(), eisabus_probe(), fc_ulp_login(), fetch_setting_copy(), format_uri_alloc(), http_format_ntlm_auth(), icert_encode(), int13_hook(), ipair_rx_pubkey(), ipoib_map_remac(), ipv4_add_miniroute(), isabus_probe(), isapnpbus_probe(), iscsi_handle_chap_c_value(), iscsi_handle_chap_r_value(), iscsi_rx_buffered_data(), iscsi_scsi_command(), jme_alloc_rx_resources(), jme_alloc_tx_resources(), lldp_rx(), loopback_test(), mcabus_probe(), memcpy_test_speed(), mlx_memory_alloc_priv(), net80211_probe_start(), net80211_register(), newwin(), nfs_uri_symlink(), ntlm_authenticate_okx(), ocsp_response(), ocsp_uri_string(), parse_kv(), parse_net_args(), pci_vpd_resize(), pcibus_probe(), peerblk_decrypt(), peerblk_parse_header(), pem_asn1(), rsa_alloc(), sandev_parse_iso9660(), slirp_timer_new(), storef_setting(), storen_setting(), strndup(), t509bus_probe(), tls_new_server_key_exchange(), tls_new_session_ticket(), tls_select_handshake(), tls_send_client_key_exchange_dhe(), uhci_enqueue(), usb_config_descriptor(), usb_get_string_descriptor(), usbio_config(), usbio_path(), vasprintf(), vesafb_mode_list(), vmbus_open(), wpa_make_rsn_ie(), wpa_start(), and zalloc().

◆ realloc()

void * realloc ( void * old_ptr,
size_t new_size )
extern

Reallocate memory.

Parameters
old_ptrMemory previously allocated by malloc(), or NULL
new_sizeRequested size
Return values
new_ptrAllocated memory, or NULL

Definition at line 607 of file malloc.c.

607 {
608
609 return heap_realloc ( &heap, old_ptr, new_size );
610}
void * heap_realloc(struct heap *heap, void *old_ptr, size_t new_size)
Reallocate memory.
Definition malloc.c:537

References heap_realloc().

Referenced by __attribute__(), asn1_grow(), bitmap_resize(), cachedhcp_record(), dhcpopt_init(), efi_ifr_op(), efi_ifr_string(), efivars_find(), free(), ibft_alloc_string(), ibft_install(), line_buffer(), malloc(), nvo_realloc(), process_script(), and xferbuf_malloc_realloc().

◆ free()

void free ( void * ptr)
extern

Free memory.

Parameters
ptrMemory allocated by malloc(), or NULL

Memory allocated with malloc_phys() cannot be freed with free(); it must be freed with free_phys() instead.

If ptr is NULL, no action is taken.

Definition at line 642 of file malloc.c.

642 {
643
644 realloc ( ptr, 0 );
645 if ( ASSERTED ) {
646 DBGC ( &heap, "HEAP detected possible memory corruption "
647 "from %p\n", __builtin_return_address ( 0 ) );
648 }
649}

References ASSERTED, DBGC, and realloc().

◆ zalloc()

void *__malloc zalloc ( size_t size)
extern

Allocate cleared memory.

Parameters
sizeRequested size
Return values
ptrAllocated memory

Allocate memory as per malloc(), and zero it.

This function name is non-standard, but pretty intuitive. zalloc(size) is always equivalent to calloc(1,size)

Definition at line 662 of file malloc.c.

662 {
663 void *data;
664
665 data = malloc ( size );
666 if ( data )
667 memset ( data, 0, size );
668 if ( ASSERTED ) {
669 DBGC ( &heap, "HEAP detected possible memory corruption "
670 "from %p\n", __builtin_return_address ( 0 ) );
671 }
672 return data;
673}
uint8_t data[48]
Additional event data.
Definition ena.h:11
void * memset(void *dest, int character, size_t len) __nonnull
void * malloc(size_t size)
Allocate memory.
Definition malloc.c:621

References ASSERTED, data, DBGC, malloc(), memset(), and size.

Referenced by add_dynui_item(), add_parameter(), alloc_form(), alloc_gpios(), alloc_ibdev(), alloc_image(), alloc_netdev(), alloc_pixbuf(), alloc_sandev(), alloc_uart(), alloc_usb(), alloc_usb_bus(), alloc_usb_hub(), aoecmd_create(), aoedev_open(), ar9300_eeprom_restore_internal(), arbel_alloc(), arbel_create_cq(), arbel_create_qp(), ata_open(), atadev_command(), ath5k_hw_attach(), ath5k_probe(), ath9k_init_softc(), ath_descdma_setup(), atl1e_setup_ring_resources(), autovivify_child_settings(), block_translate(), cachedhcp_record(), calloc(), cms_message(), cms_parse_participants(), concat_args(), cpio_okx(), create_downloader(), create_dynui(), create_parameters(), create_pinger(), create_validator(), dhcp_deliver(), dhcpv6_register(), dns_resolv(), dt_probe_node(), dwgpio_group_probe(), dwusb_probe(), efi_block_exec(), efi_block_install(), efi_fcp_path(), efi_file_open_image(), efi_ib_srp_path(), efi_image_path(), efi_iscsi_path(), efi_local_open(), efi_netdev_path(), efi_path_uri(), efi_paths(), efi_pxe_install(), efi_snp_hii_fetch(), efi_snp_hii_install(), efi_snp_hii_process(), efi_snp_hii_store(), efi_snp_probe(), efi_uri_path(), efi_usb_install(), efi_usb_open(), efi_usb_path(), efi_usb_probe(), efidev_alloc(), efipci_start(), efivars_find(), ehci_endpoint_open(), ehci_probe(), ehci_ring_alloc(), eoib_create_peer(), exanic_probe(), fc_els_create(), fc_ns_query(), fc_peer_create(), fc_port_open(), fc_ulp_create(), fc_xchg_create(), fcpdev_open(), fcpdev_scsi_command(), fetch_string_setting_copy_alloc(), fetchf_setting_copy(), flexboot_nodnic_create_cq(), flexboot_nodnic_create_qp(), flexboot_nodnic_eth_open(), flexboot_nodnic_probe(), fragment_reassemble(), ftp_open(), generic_settings_store(), golan_alloc(), golan_create_cq(), golan_create_qp_aux(), guestinfo_fetch_type(), hermon_alloc(), hermon_create_cq(), hermon_create_qp(), http_connect(), http_open(), http_open_uri(), hub_probe(), hv_probe(), hvm_probe(), hw_open(), ib_cmrc_open(), ib_create_conn(), ib_create_cq(), ib_create_madx(), ib_create_mi(), ib_create_path(), ib_create_qp(), ib_mcast_attach(), ib_srp_open(), ibft_install(), icert_certs(), imux_probe(), init_mlx_utils(), ipair_create(), ipv6_add_miniroute(), iscsi_open(), linda_create_send_wq(), mlx_memory_zalloc_priv(), ndp_register_settings(), neighbour_create(), net80211_handle_mgmt(), net80211_prepare_assoc(), net80211_probe_start(), net80211_probe_step(), net80211_step_associate(), nfs_open(), nii_map(), numeric_resolv(), ocsp_check(), ocsp_uri_string(), open(), parse_uri(), pcibridge_probe(), peerblk_open(), peerdisc_create(), peerdisc_discovered(), peermux_filter(), ping_open(), png_pixbuf(), pxe_menu_parse(), qib7322_create_send_bufs(), qib7322_create_send_wq(), qib7322_probe(), rc80211_init(), resolv(), resolv_setting(), rtl818x_probe(), scsi_open(), scsidev_command(), sec80211_install(), sis190_mii_probe(), skge_probe(), skge_ring_alloc(), sky2_probe(), sky2_up(), slam_open(), srp_open(), srpdev_scsi_command(), start_dhcp(), start_dhcpv6(), start_ipv6conf(), start_ntp(), start_pxebs(), tcp_open(), tftp_core_open(), tg3_alloc_consistent(), tls_session(), tls_set_cipher(), txnic_bgx_probe(), txnic_pf_probe(), ucode_exec(), udp_open_common(), uhci_endpoint_open(), uhci_probe(), undipci_probe(), undirom_probe(), uri_dup(), usb_probe_all(), usbblk_probe(), usbio_endpoint_open(), usbio_interfaces(), usbio_interrupt_open(), usbio_start(), usbkbd_probe(), validator_start_download(), virtnet_open_legacy(), virtnet_open_modern(), vmbus_probe(), vmbus_probe_channels(), vxge_hw_device_initialize(), x509_alloc_chain(), x509_append(), x509_certificate(), xcm_create(), xenbus_probe_device(), xenstore_response(), xfer_open_named_socket(), xhci_bus_open(), xhci_device_open(), xhci_endpoint_open(), xhci_probe(), xhci_ring_alloc(), xsigo_ib_probe(), xve_create(), and zlib_deflate().

◆ calloc()

void *__malloc calloc ( size_t nmemb,
size_t size )
inlinestatic

Allocate cleared memory.

Parameters
nmembNumber of members
sizeSize of each member
Return values
ptrAllocated memory

Allocate memory as per malloc(), and zero it.

This is implemented as a static inline, with the body of the function in zalloc(), since in most cases nmemb will be 1 and doing the multiply is just wasteful.

Definition at line 46 of file stdlib.h.

46 {
47 return zalloc ( nmemb * size );
48}
void *__malloc zalloc(size_t len)
Allocate cleared memory.
Definition malloc.c:662

References __malloc, size, and zalloc().

Referenced by ath5k_desc_alloc(), ath5k_eeprom_convert_pcal_info_2413(), ath5k_eeprom_convert_pcal_info_5111(), ath5k_eeprom_convert_pcal_info_5112(), and slk_init().

◆ random()

long int random ( void )
extern

Generate a pseudo-random number between 0 and 2147483647L or 2147483562?

Return values
randPseudo-random number

Definition at line 32 of file random.c.

32 {
33 int32_t q;
34
35 /* Initialize linear congruential generator */
36 if ( ! rnd_seed )
37 srandom ( time ( NULL ) );
38
39 /* simplified version of the LCG given in Bruce Schneier's
40 "Applied Cryptography" */
41 q = ( rnd_seed / 53668 );
42 rnd_seed = ( 40014 * ( rnd_seed - 53668 * q ) - 12211 * q );
43 if ( rnd_seed < 0 )
44 rnd_seed += 2147483563L;
45 return rnd_seed;
46}
signed int int32_t
Definition stdint.h:17
static int32_t rnd_seed
Definition random.c:14
void srandom(unsigned int seed)
Seed the pseudo-random number generator.
Definition random.c:21

References NULL, rnd_seed, and srandom().

Referenced by arbel_alloc_qpn(), cipher_cost(), digest_cost(), dns_send_packet(), eap_rx_mschapv2_request(), efi_pxe_udp_write(), efi_snp_hii_random_guid(), eth_random_addr(), forcedeth_open(), hermon_alloc_qpn(), http_digest_authenticate(), ib_create_conn(), ib_create_qp(), inject_corruption_nonzero(), inject_fault_nonzero(), iscsi_handle_chap_c_value(), iscsi_open_connection(), loopback_test(), memcpy_test_speed(), ntlm_response(), peerdisc_create(), PROFILE_TEST(), profile_test_exec(), rand(), start_dhcp(), start_dhcpv6(), tcp_open(), tcpip_bind(), tcpip_random_okx(), tls_client_hello(), tls_new_server_hello(), tls_send_client_key_exchange_pubkey(), vmbus_open(), and wep_encrypt().

◆ srandom()

void srandom ( unsigned int seed)
extern

Seed the pseudo-random number generator.

Parameters
seedSeed value

Definition at line 21 of file random.c.

21 {
22 rnd_seed = seed;
23 if ( ! rnd_seed )
24 rnd_seed = 4; /* Chosen by fair dice roll */
25}

References rnd_seed.

Referenced by random(), srand(), and tcpip_random_okx().

◆ rand()

int rand ( void )
inlinestatic

Definition at line 60 of file stdlib.h.

60 {
61 return random();
62}
long int random(void)
Generate a pseudo-random number between 0 and 2147483647L or 2147483562?
Definition random.c:32

References random().

Referenced by cipher_cost(), digest_cost(), mlx_utils_rand_priv(), oncrpc_init_session(), and register_netdev().

◆ srand()

void srand ( unsigned int seed)
inlinestatic

Definition at line 64 of file stdlib.h.

64 {
65 srandom ( seed );
66}
void srandom(unsigned int seed)
Seed the pseudo-random number generator.
Definition random.c:21

References srandom().

Referenced by cipher_cost(), digest_cost(), and register_netdev().

◆ __attribute__()

__attribute__ ( (always_inline) )
inlinestatic

Definition at line 75 of file stdlib.h.

75 {
76 return __builtin_abs ( value );
77}

References value.

◆ system()

int system ( const char * command)
extern

Execute command line.

Parameters
commandCommand line
Return values
rcReturn status code

Execute the named command and arguments.

Definition at line 288 of file exec.c.

288 {
289 int count = split_command ( ( char * ) command, NULL );
290 char *all_tokens[ count + 1 ];
291 int ( * process_next ) ( int rc );
292 char *command_copy;
293 char **tokens;
294 int argc;
295 int process;
296 int rc = 0;
297
298 /* Create modifiable copy of command */
299 command_copy = strdup ( command );
300 if ( ! command_copy )
301 return -ENOMEM;
302
303 /* Split command into tokens */
304 split_command ( command_copy, all_tokens );
305 all_tokens[count] = NULL;
306
307 /* Process individual commands */
308 process = 1;
309 for ( tokens = all_tokens ; ; tokens += ( argc + 1 ) ) {
310
311 /* Find command terminator */
312 argc = command_terminator ( tokens, &process_next );
313
314 /* Expand tokens and execute command */
315 if ( process ) {
316 char *argv[ argc + 1 ];
317
318 /* Expand tokens */
319 if ( ( rc = expand_tokens ( argc, tokens, argv ) ) != 0)
320 break;
321 argv[argc] = NULL;
322
323 /* Execute command */
324 rc = execv ( argv[0], argv );
325
326 /* Free tokens */
327 free_tokens ( argv );
328 }
329
330 /* Stop processing, if applicable */
332 break;
333
334 /* Stop processing if we have reached the end of the
335 * command.
336 */
337 if ( ! process_next )
338 break;
339
340 /* Determine whether or not to process next command */
341 process = process_next ( rc );
342 }
343
344 /* Free modified copy of command */
345 free ( command_copy );
346
347 return rc;
348}
struct arbelprm_rc_send_wqe rc
Definition arbel.h:3
int execv(const char *command, char *const argv[])
Execute command.
Definition exec.c:61
int shell_stopped(int stop)
Test and consume shell stop state.
Definition exec.c:228
static int expand_tokens(int argc, char **tokens, char **argv)
Expand settings within a token list.
Definition exec.c:249
static void free_tokens(char **argv)
Free an expanded token list.
Definition exec.c:273
static int split_command(char *command, char **tokens)
Split command line into tokens.
Definition exec.c:122
static int command_terminator(char **tokens, int(**process_next)(int rc))
Find command terminator.
Definition exec.c:184
static unsigned int count
Number of entries.
Definition dwmac.h:220
#define ENOMEM
Not enough space.
Definition errno.h:535
static void(* free)(struct refcnt *refcnt))
Definition refcnt.h:55
@ SHELL_STOP_COMMAND
Stop processing current command line.
Definition shell.h:23
char * strdup(const char *src)
Duplicate string.
Definition string.c:394
A command-line command.
Definition command.h:10
A process.
Definition process.h:18

References command_terminator(), count, ENOMEM, execv(), expand_tokens(), free, free_tokens(), NULL, rc, SHELL_STOP_COMMAND, shell_stopped(), split_command(), and strdup().

◆ main()

__asmcall int main ( void )
extern

Main entry point.

Return values
rcReturn status code

Definition at line 29 of file main.c.

29 {
30 int rc;
31
32 /* Perform one-time-only initialisation (e.g. heap) */
33 initialise();
34
35 /* Some devices take an unreasonably long time to initialise */
36 printf ( "%s initialising devices...\n", product_short_name );
37 startup();
38
39 /* Attempt to boot */
40 if ( ( rc = ipxe ( NULL ) ) != 0 )
41 goto err_ipxe;
42
43 err_ipxe:
45 return rc;
46}
int ipxe(struct net_device *netdev)
Main iPXE flow of execution.
Definition autoboot.c:586
void startup(void)
Start up iPXE.
Definition init.c:70
void initialise(void)
Initialise iPXE.
Definition init.c:53
static void shutdown_exit(void)
Shut down system for exit back to firmware.
Definition init.h:86
const char product_short_name[]
Product short name string.
Definition version.c:77
int printf(const char *fmt,...)
Write a formatted string to the console.
Definition vsprintf.c:465

References __asmcall, initialise(), ipxe(), NULL, printf(), product_short_name, rc, shutdown_exit(), and startup().

Referenced by _efi_start().