Exit with failure status if we are unable to list any files or
directories.  Patch thanks to Kent Robotti <robotti@metconnect.com>.
diff --git a/coreutils/ls.c b/coreutils/ls.c
index a35070f..28b2f95 100644
--- a/coreutils/ls.c
+++ b/coreutils/ls.c
@@ -173,6 +173,8 @@
 #define column_width    COLUMN_WIDTH
 #endif
 
+static int status = EXIT_SUCCESS;
+
 static void newline(void)
 {
     if (column > 0) {
@@ -459,6 +461,7 @@
 	dir = opendir(path);
 	if (dir == NULL) {
 		errorMsg("%s: %s\n", path, strerror(errno));
+		status = EXIT_FAILURE;
 		return(NULL);	/* could not open the dir */
 	}
 	while ((entry = readdir(dir)) != NULL) {
@@ -477,6 +480,7 @@
 		if (follow_links == TRUE) {
 			if (stat(cur->fullname, &cur->dstat)) {
 				errorMsg("%s: %s\n", cur->fullname, strerror(errno));
+				status = EXIT_FAILURE;
 				free(cur->fullname);
 				free(cur);
 				continue;
@@ -485,6 +489,7 @@
 #endif
 		if (lstat(cur->fullname, &cur->dstat)) {   /* get file stat info into node */
 			errorMsg("%s: %s\n", cur->fullname, strerror(errno));
+			status = EXIT_FAILURE;
 			free(cur->fullname);
 			free(cur);
 			continue;
@@ -791,6 +796,7 @@
 		if (follow_links == TRUE) {
 			if (stat(av[oi], &cur->dstat)) {
 				errorMsg("%s: %s\n", av[oi], strerror(errno));
+				status = EXIT_FAILURE;
 				free(cur->fullname);
 				free(cur);
 				continue;
@@ -799,6 +805,7 @@
 #endif
 		if (lstat(av[oi], &cur->dstat)) {  /* get file info into node */
 			errorMsg("%s: %s\n", av[oi], strerror(errno));
+			status = EXIT_FAILURE;
 			free(cur->fullname);
 			free(cur);
 			continue;
@@ -842,7 +849,7 @@
 		}
 	}
 
-	return(0);
+	return(status);
 
   print_usage_message:
 	usage(ls_usage);