Major coreutils update.
diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c
index 820a0d7..43e8aef 100644
--- a/libbb/xfuncs.c
+++ b/libbb/xfuncs.c
@@ -30,31 +30,38 @@
 
 
 #ifndef DMALLOC
+#ifdef L_xmalloc
 extern void *xmalloc(size_t size)
 {
 	void *ptr = malloc(size);
 	if (ptr == NULL && size != 0)
-		error_msg_and_die(memory_exhausted);
+		bb_error_msg_and_die(bb_msg_memory_exhausted);
 	return ptr;
 }
+#endif
 
+#ifdef L_xrealloc
 extern void *xrealloc(void *ptr, size_t size)
 {
 	ptr = realloc(ptr, size);
 	if (ptr == NULL && size != 0)
-		error_msg_and_die(memory_exhausted);
+		bb_error_msg_and_die(bb_msg_memory_exhausted);
 	return ptr;
 }
+#endif
 
+#ifdef L_xcalloc
 extern void *xcalloc(size_t nmemb, size_t size)
 {
 	void *ptr = calloc(nmemb, size);
 	if (ptr == NULL && nmemb != 0 && size != 0)
-		error_msg_and_die(memory_exhausted);
+		bb_error_msg_and_die(bb_msg_memory_exhausted);
 	return ptr;
 }
+#endif
 
-extern char * xstrdup (const char *s) {
+#ifdef L_xstrdup
+extern char * bb_xstrdup (const char *s) {
 	char *t;
 
 	if (s == NULL)
@@ -63,79 +70,121 @@
 	t = strdup (s);
 
 	if (t == NULL)
-		error_msg_and_die(memory_exhausted);
+		bb_error_msg_and_die(bb_msg_memory_exhausted);
 
 	return t;
 }
 #endif
+#endif /* DMALLOC */
 
-extern char * xstrndup (const char *s, int n) {
+#ifdef L_xstrndup
+extern char * bb_xstrndup (const char *s, int n) {
 	char *t;
 
 	if (s == NULL)
-		error_msg_and_die("xstrndup bug");
+		bb_error_msg_and_die("bb_xstrndup bug");
 
 	t = xmalloc(++n);
 	
 	return safe_strncpy(t,s,n);
 }
+#endif
 
-FILE *xfopen(const char *path, const char *mode)
+#ifdef L_xfopen
+FILE *bb_xfopen(const char *path, const char *mode)
 {
 	FILE *fp;
 	if ((fp = fopen(path, mode)) == NULL)
-		perror_msg_and_die("%s", path);
+		bb_perror_msg_and_die("%s", path);
 	return fp;
 }
+#endif
 
-extern int xopen(const char *pathname, int flags)
+#ifdef L_xopen
+extern int bb_xopen(const char *pathname, int flags)
 {
 	int ret;
 	
 	ret = open(pathname, flags, 0777);
 	if (ret == -1) {
-		perror_msg_and_die("%s", pathname);
+		bb_perror_msg_and_die("%s", pathname);
 	}
 	return ret;
 }
+#endif
 
-extern ssize_t xread(int fd, void *buf, size_t count)
+#ifdef L_xread
+extern ssize_t bb_xread(int fd, void *buf, size_t count)
 {
 	ssize_t size;
 
 	size = read(fd, buf, count);
 	if (size == -1) {
-		perror_msg_and_die("Read error");
+		bb_perror_msg_and_die("Read error");
 	}
 	return(size);
 }
+#endif
 
-extern void xread_all(int fd, void *buf, size_t count)
+#ifdef L_xread_all
+extern void bb_xread_all(int fd, void *buf, size_t count)
 {
 	ssize_t size;
 
-	size = xread(fd, buf, count);
-	if (size != count) {
-		error_msg_and_die("Short read");
+	while (count) {
+		if ((size = bb_xread(fd, buf, count)) == 0) {	/* EOF */
+			bb_error_msg_and_die("Short read");
+		}
+		count -= size;
 	}
 	return;
 }
+#endif
 
-extern unsigned char xread_char(int fd)
+#ifdef L_xread_char
+extern unsigned char bb_xread_char(int fd)
 {
 	char tmp;
 	
-	xread_all(fd, &tmp, 1);
+	bb_xread_all(fd, &tmp, 1);
 
 	return(tmp);	
 }
+#endif
 
+#ifdef L_xferror
+extern void bb_xferror(FILE *fp, const char *fn)
+{
+	if (ferror(fp)) {
+		bb_error_msg_and_die("%s", fn);
+	}
+}
+#endif
+
+#ifdef L_xferror_stdout
+extern void bb_xferror_stdout(void)
+{
+	bb_xferror(stdout, bb_msg_standard_output);
+}
+#endif
+
+#ifdef L_xfflush_stdout
+extern void bb_xfflush_stdout(void)
+{
+	if (fflush(stdout)) {
+		bb_perror_msg_and_die(bb_msg_standard_output);
+	}
+}
+#endif
+
+#ifdef L_strlen
 /* Stupid gcc always includes its own builtin strlen()... */
 #undef strlen
-size_t xstrlen(const char *string)
+size_t bb_strlen(const char *string)
 {
 	    return(strlen(string));
 }
+#endif
 
 /* END CODE */
 /*