Index: boot/generic/string.c
===================================================================
--- boot/generic/string.c	(revision c03ee1c304c982b593d8043411e6b003dd1c155a)
+++ boot/generic/string.c	(revision b968f39ec7eb06c8cc256e04d1e9a2aab3b0b1a5)
@@ -40,7 +40,7 @@
 /** Return number of characters in a string.
  *
- * @param str NULL terminated string.
- *
- * @return Number of characters in str.
+ * @param str		NULL terminated string.
+ *
+ * @return		Number of characters in str.
  */
 size_t strlen(const char *str)
@@ -54,5 +54,5 @@
 }
 
-/** Compare two NULL terminated strings
+/** Compare two NULL terminated strings.
  *
  * Do a char-by-char comparison of two NULL terminated strings.
@@ -60,8 +60,9 @@
  * characters on the minimum of their lengths.
  *
- * @param src First string to compare.
- * @param dst Second string to compare.
- *
- * @return 0 if the strings are equal, -1 if first is smaller, 1 if second smaller.
+ * @param src		First string to compare.
+ * @param dst		Second string to compare.
+ *
+ * @return		0 if the strings are equal, -1 if first is smaller,
+ * 			1 if second smaller.
  *
  */
@@ -82,5 +83,5 @@
 
 
-/** Compare two NULL terminated strings
+/** Compare two NULL terminated strings.
  *
  * Do a char-by-char comparison of two NULL terminated strings.
@@ -89,9 +90,10 @@
  * length.
  *
- * @param src First string to compare.
- * @param dst Second string to compare.
- * @param len Maximal length for comparison.
- *
- * @return 0 if the strings are equal, -1 if first is smaller, 1 if second smaller.
+ * @param src		First string to compare.
+ * @param dst		Second string to compare.
+ * @param len		Maximal length for comparison.
+ *
+ * @return		0 if the strings are equal, -1 if first is smaller,
+ * 			1 if second smaller.
  *
  */
@@ -119,7 +121,7 @@
  * last copied character.
  *
- * @param src Source string.
- * @param dest Destination buffer.
- * @param len Size of destination buffer.
+ * @param src		Source string.
+ * @param dest		Destination buffer.
+ * @param len		Size of destination buffer.
  */
 void strncpy(char *dest, const char *src, size_t len)
@@ -133,11 +135,11 @@
 }
 
-/** Convert ascii representation to unative_t
+/** Convert ascii representation to unative_t.
  *
  * Supports 0x for hexa & 0 for octal notation.
  * Does not check for overflows, does not support negative numbers
  *
- * @param text Textual representation of number
- * @return Converted number or 0 if no valid number ofund 
+ * @param text		Textual representation of number.
+ * @return		Converted number or 0 if no valid number found.
  */
 unative_t atoi(const char *text)
@@ -153,7 +155,7 @@
 
 	while (*text) {
-		if (base != 16 && \
-		    ((*text >= 'A' && *text <= 'F' )
-		     || (*text >='a' && *text <='f')))
+		if (base != 16 &&
+		    ((*text >= 'A' && *text <= 'F') ||
+		    (*text >='a' && *text <='f')))
 			break;
 		if (base == 8 && *text >='8')
@@ -177,4 +179,27 @@
 }
 
+/** Move piece of memory to another, possibly overlapping, location.
+ *
+ * @param dst		Destination address.
+ * @param src		Source address.
+ * @param len		Number of bytes to move.
+ *
+ * @return		Destination address.
+ */
+void *memmove(void *dst, const void *src, size_t len)
+{
+	char *d = dst;
+	const char *s = src;
+	if (s < d) {
+		while (len--)
+			*(d + len) = *(s + len);
+	} else {
+		while (len--)
+			*d++ = *s++;
+	}
+	
+	return dst;
+}
+
 /** @}
  */
Index: boot/generic/string.h
===================================================================
--- boot/generic/string.h	(revision c03ee1c304c982b593d8043411e6b003dd1c155a)
+++ boot/generic/string.h	(revision b968f39ec7eb06c8cc256e04d1e9a2aab3b0b1a5)
@@ -43,4 +43,5 @@
 extern void strncpy(char *dest, const char *src, size_t len);
 extern unative_t atoi(const char *text);
+extern void *memmove(void *dst, const void *src, size_t len);
 
 #endif
