summaryrefslogtreecommitdiffstats
path: root/src/core
diff options
context:
space:
mode:
authorSimon Rettberg2020-08-12 12:27:02 +0200
committerSimon Rettberg2020-08-12 12:27:02 +0200
commitdf1f1c469e65156c18dd98931618a7d37c9d8691 (patch)
tree12bf4fe1a74701b5f86a696d1e28822dac055765 /src/core
parentRevert "Revert "[build] Construct full version number automatically from git ... (diff)
parent[efi] Use device path to locate filesystem from which we were loaded (diff)
downloadipxe-df1f1c469e65156c18dd98931618a7d37c9d8691.tar.gz
ipxe-df1f1c469e65156c18dd98931618a7d37c9d8691.tar.xz
ipxe-df1f1c469e65156c18dd98931618a7d37c9d8691.zip
Merge branch 'master' into openslx
Diffstat (limited to 'src/core')
-rw-r--r--src/core/open.c4
-rw-r--r--src/core/parseopt.c2
-rw-r--r--src/core/string.c27
-rw-r--r--src/core/uri.c4
4 files changed, 25 insertions, 12 deletions
diff --git a/src/core/open.c b/src/core/open.c
index 9d665ffda..c27d8a021 100644
--- a/src/core/open.c
+++ b/src/core/open.c
@@ -147,10 +147,8 @@ int xfer_open_socket ( struct interface *intf, int semantics,
socket_family_name ( peer->sa_family ) );
for_each_table_entry ( opener, SOCKET_OPENERS ) {
- if ( ( opener->semantics == semantics ) &&
- ( opener->family == peer->sa_family ) ) {
+ if ( opener->semantics == semantics )
return opener->open ( intf, peer, local );
- }
}
DBGC ( INTF_COL ( intf ), "INTF " INTF_FMT " attempted to open "
diff --git a/src/core/parseopt.c b/src/core/parseopt.c
index 3ddf94f3d..007080088 100644
--- a/src/core/parseopt.c
+++ b/src/core/parseopt.c
@@ -93,7 +93,7 @@ int parse_integer ( char *text, unsigned int *value ) {
/* Parse integer */
*value = strtoul ( text, &endp, 0 );
- if ( *endp ) {
+ if ( *endp || ( ! *text ) ) {
printf ( "\"%s\": invalid integer value\n", text );
return -EINVAL_INTEGER;
}
diff --git a/src/core/string.c b/src/core/string.c
index 5bd9dae8b..188fe0864 100644
--- a/src/core/string.c
+++ b/src/core/string.c
@@ -52,7 +52,7 @@ void * generic_memset ( void *dest, int character, size_t len ) {
}
/**
- * Copy memory region
+ * Copy memory region (forwards)
*
* @v dest Destination region
* @v src Source region
@@ -69,25 +69,40 @@ void * generic_memcpy ( void *dest, const void *src, size_t len ) {
}
/**
- * Copy (possibly overlapping) memory region
+ * Copy memory region (backwards)
*
* @v dest Destination region
* @v src Source region
* @v len Length
* @ret dest Destination region
*/
-void * generic_memmove ( void *dest, const void *src, size_t len ) {
+void * generic_memcpy_reverse ( void *dest, const void *src, size_t len ) {
const uint8_t *src_bytes = ( src + len );
uint8_t *dest_bytes = ( dest + len );
- if ( dest < src )
- return generic_memcpy ( dest, src, len );
while ( len-- )
*(--dest_bytes) = *(--src_bytes);
return dest;
}
/**
+ * Copy (possibly overlapping) memory region
+ *
+ * @v dest Destination region
+ * @v src Source region
+ * @v len Length
+ * @ret dest Destination region
+ */
+void * generic_memmove ( void *dest, const void *src, size_t len ) {
+
+ if ( dest < src ) {
+ return generic_memcpy ( dest, src, len );
+ } else {
+ return generic_memcpy_reverse ( dest, src, len );
+ }
+}
+
+/**
* Compare memory regions
*
* @v first First region
@@ -101,7 +116,7 @@ int memcmp ( const void *first, const void *second, size_t len ) {
int diff;
while ( len-- ) {
- diff = ( *(second_bytes++) - *(first_bytes++) );
+ diff = ( *(first_bytes++) - *(second_bytes++) );
if ( diff )
return diff;
}
diff --git a/src/core/uri.c b/src/core/uri.c
index 73ad2b227..e9e512ab4 100644
--- a/src/core/uri.c
+++ b/src/core/uri.c
@@ -413,8 +413,8 @@ struct uri * parse_uri ( const char *uri_string ) {
}
/* Split host into host[:port] */
- if ( ( uri->host[ strlen ( uri->host ) - 1 ] != ']' ) &&
- ( tmp = strrchr ( uri->host, ':' ) ) ) {
+ if ( ( tmp = strrchr ( uri->host, ':' ) ) &&
+ ( uri->host[ strlen ( uri->host ) - 1 ] != ']' ) ) {
*(tmp++) = '\0';
uri->port = tmp;
}