diff --git a/ar.c b/ar.c
index f3ba59b..0f16ec8 100644
--- a/ar.c
+++ b/ar.c
@@ -387,5 +387,5 @@
 		}
 		extractList=extractList->next;
 	}
-	return (TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/archival/ar.c b/archival/ar.c
index f3ba59b..0f16ec8 100644
--- a/archival/ar.c
+++ b/archival/ar.c
@@ -387,5 +387,5 @@
 		}
 		extractList=extractList->next;
 	}
-	return (TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/archival/gunzip.c b/archival/gunzip.c
index 70b25bd..eeff977 100644
--- a/archival/gunzip.c
+++ b/archival/gunzip.c
@@ -1350,7 +1350,7 @@
 
 		if (delInputFile == 1 && unlink(delFileName) < 0) {
 			perror(delFileName);
-			exit(FALSE);
+			return EXIT_FAILURE;
 		}
 	}
 	return(exit_code);
diff --git a/archival/gzip.c b/archival/gzip.c
index 2e147b1..d8c22a9 100644
--- a/archival/gzip.c
+++ b/archival/gzip.c
@@ -1930,7 +1930,7 @@
 
 		if (unlink(delFileName) < 0) {
 			perror(delFileName);
-			exit(FALSE);
+			exit(EXIT_FAILURE);
 		}
 	}
 
diff --git a/archival/tar.c b/archival/tar.c
index 826ab96..01997e4 100644
--- a/archival/tar.c
+++ b/archival/tar.c
@@ -156,6 +156,7 @@
 	int tostdoutFlag = FALSE;
 	int firstOpt = TRUE;
 	int stopIt;
+	int status;
 																		   
 
 	if (argc <= 1)
@@ -227,16 +228,21 @@
 #ifndef BB_FEATURE_TAR_CREATE
 		fatalError( "This version of tar was not compiled with tar creation support.\n");
 #else
-		exit(writeTarFile(tarName, verboseFlag, argv, excludeList));
+		status = writeTarFile(tarName, verboseFlag, argv, excludeList);
 #endif
 	}
 	if (listFlag == TRUE || extractFlag == TRUE) {
 		if (*argv)
 			extractList = argv;
-		exit(readTarFile(tarName, extractFlag, listFlag, tostdoutFlag,
-					verboseFlag, extractList, excludeList));
+		status = readTarFile(tarName, extractFlag, listFlag, tostdoutFlag,
+					verboseFlag, extractList, excludeList);
 	}
 
+	if (status == TRUE)
+		return EXIT_SUCCESS;
+	else
+		return EXIT_FAILURE;
+
   flagError:
 	fatalError( "Exactly one of 'c', 'x' or 't' must be specified\n");
 }
diff --git a/basename.c b/basename.c
index 4d9fc4e..fcc7d46 100644
--- a/basename.c
+++ b/basename.c
@@ -45,5 +45,5 @@
 			s[m-n] = '\0';
 	}
 	printf("%s\n", s);
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/chmod_chown_chgrp.c b/chmod_chown_chgrp.c
index 1ec7eec..e8ccb81 100644
--- a/chmod_chown_chgrp.c
+++ b/chmod_chown_chgrp.c
@@ -161,9 +161,9 @@
 	while (argc-- > 1) {
 		if (recursiveAction (*(++argv), recursiveFlag, FALSE, FALSE, 
 					fileAction, fileAction, NULL) == FALSE)
-			exit(FALSE);
+			return EXIT_FAILURE;
 	}
-	exit(TRUE);
+	return EXIT_SUCCESS;
 
   bad_group:
 	fatalError( "unknown group name: %s\n", groupName);
diff --git a/chroot.c b/chroot.c
index f0a2981..f279af1 100644
--- a/chroot.c
+++ b/chroot.c
@@ -54,7 +54,7 @@
 		execlp(prog, prog, NULL);
 #else
 		shell_main(argc, argv);
-		exit (0);
+		return EXIT_SUCCESS;
 #endif
 	}
 	fatalError("cannot execute %s: %s\n", prog, strerror(errno));
diff --git a/chvt.c b/chvt.c
index d4b16a0..7909645 100644
--- a/chvt.c
+++ b/chvt.c
@@ -25,13 +25,13 @@
 	num = atoi(argv[1]);
 	if (ioctl(fd, VT_ACTIVATE, num)) {
 		perror("VT_ACTIVATE");
-		exit(FALSE);
+		return EXIT_FAILURE;
 	}
 	if (ioctl(fd, VT_WAITACTIVE, num)) {
 		perror("VT_WAITACTIVE");
-		exit(FALSE);
+		return EXIT_FAILURE;
 	}
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
 
 
diff --git a/clear.c b/clear.c
index 4a8e045..ca83f38 100644
--- a/clear.c
+++ b/clear.c
@@ -29,5 +29,5 @@
 extern int clear_main(int argc, char **argv)
 {
 	printf("\033[H\033[J");
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/cmdedit.c b/cmdedit.c
index 8115e52..94b8fc7 100644
--- a/cmdedit.c
+++ b/cmdedit.c
@@ -135,7 +135,7 @@
 	cmdedit_reset_term();
 	fprintf(stdout, "\n");
 	if (sig!=SIGINT)
-		exit(TRUE);
+		exit(EXIT_SUCCESS);
 }
 
 /* Go to HOME position */
diff --git a/cmp.c b/cmp.c
index 98b747e..6b95544 100644
--- a/cmp.c
+++ b/cmp.c
@@ -54,7 +54,7 @@
 			else
 				printf("%s %s differ: char %d, line %d\n", filename1, filename2,
 						char_pos, line_pos);
-			return 1;
+			return EXIT_FAILURE;
 		}
 		char_pos++;
 		if (c1 == '\n')
diff --git a/console-tools/chvt.c b/console-tools/chvt.c
index d4b16a0..7909645 100644
--- a/console-tools/chvt.c
+++ b/console-tools/chvt.c
@@ -25,13 +25,13 @@
 	num = atoi(argv[1]);
 	if (ioctl(fd, VT_ACTIVATE, num)) {
 		perror("VT_ACTIVATE");
-		exit(FALSE);
+		return EXIT_FAILURE;
 	}
 	if (ioctl(fd, VT_WAITACTIVE, num)) {
 		perror("VT_WAITACTIVE");
-		exit(FALSE);
+		return EXIT_FAILURE;
 	}
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
 
 
diff --git a/console-tools/clear.c b/console-tools/clear.c
index 4a8e045..ca83f38 100644
--- a/console-tools/clear.c
+++ b/console-tools/clear.c
@@ -29,5 +29,5 @@
 extern int clear_main(int argc, char **argv)
 {
 	printf("\033[H\033[J");
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/console-tools/deallocvt.c b/console-tools/deallocvt.c
index 65af79b..4600c0d 100644
--- a/console-tools/deallocvt.c
+++ b/console-tools/deallocvt.c
@@ -28,7 +28,7 @@
 		/* deallocate all unused consoles */
 		if (ioctl(fd, VT_DISALLOCATE, 0)) {
 			perror("VT_DISALLOCATE");
-			exit( FALSE);
+			return EXIT_FAILURE;
 		}
 	} else
 printf("erik: B\n");
@@ -44,5 +44,5 @@
 			}
 		}
 printf("erik: C\n");
-	return( TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/console-tools/dumpkmap.c b/console-tools/dumpkmap.c
index 2d989df..77689fc 100644
--- a/console-tools/dumpkmap.c
+++ b/console-tools/dumpkmap.c
@@ -51,7 +51,7 @@
 	fd = open("/dev/tty0", O_RDWR);
 	if (fd < 0) {
 		errorMsg("Error opening /dev/tty0: %s\n", strerror(errno));
-		return 1;
+		return EXIT_FAILURE;
 	}
 
 	write(1, magic, 7);
@@ -88,5 +88,5 @@
 		}
 	}
 	close(fd);
-	return 0;
+	return EXIT_SUCCESS;
 }
diff --git a/console-tools/loadacm.c b/console-tools/loadacm.c
index f577379..1562108 100644
--- a/console-tools/loadacm.c
+++ b/console-tools/loadacm.c
@@ -40,17 +40,17 @@
 	fd = open("/dev/tty", O_RDWR);
 	if (fd < 0) {
 		errorMsg("Error opening /dev/tty1: %s\n", strerror(errno));
-		return( FALSE);
+		return EXIT_FAILURE;
 	}
 
 	if (screen_map_load(fd, stdin)) {
 		errorMsg("Error loading acm: %s\n", strerror(errno));
-		return( FALSE);
+		return EXIT_FAILURE;
 	}
 
 	write(fd, "\033(K", 3);
 
-	return( TRUE);
+	return EXIT_SUCCESS;
 }
 
 int screen_map_load(int fd, FILE * fp)
diff --git a/console-tools/reset.c b/console-tools/reset.c
index 8e2c491..bf8c3ed 100644
--- a/console-tools/reset.c
+++ b/console-tools/reset.c
@@ -29,6 +29,6 @@
 extern int reset_main(int argc, char **argv)
 {
        printf("\033c");
-       return(TRUE);
+       return EXIT_SUCCESS;
 }
 
diff --git a/console-tools/setkeycodes.c b/console-tools/setkeycodes.c
index 63c1063..6a31e04 100644
--- a/console-tools/setkeycodes.c
+++ b/console-tools/setkeycodes.c
@@ -68,5 +68,5 @@
 	argc -= 2;
 	argv += 2;
     }
-    return( TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/coreutils/basename.c b/coreutils/basename.c
index 4d9fc4e..fcc7d46 100644
--- a/coreutils/basename.c
+++ b/coreutils/basename.c
@@ -45,5 +45,5 @@
 			s[m-n] = '\0';
 	}
 	printf("%s\n", s);
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/coreutils/chroot.c b/coreutils/chroot.c
index f0a2981..f279af1 100644
--- a/coreutils/chroot.c
+++ b/coreutils/chroot.c
@@ -54,7 +54,7 @@
 		execlp(prog, prog, NULL);
 #else
 		shell_main(argc, argv);
-		exit (0);
+		return EXIT_SUCCESS;
 #endif
 	}
 	fatalError("cannot execute %s: %s\n", prog, strerror(errno));
diff --git a/coreutils/cmp.c b/coreutils/cmp.c
index 98b747e..6b95544 100644
--- a/coreutils/cmp.c
+++ b/coreutils/cmp.c
@@ -54,7 +54,7 @@
 			else
 				printf("%s %s differ: char %d, line %d\n", filename1, filename2,
 						char_pos, line_pos);
-			return 1;
+			return EXIT_FAILURE;
 		}
 		char_pos++;
 		if (c1 == '\n')
diff --git a/coreutils/cut.c b/coreutils/cut.c
index 2d313cc..b281fa2 100644
--- a/coreutils/cut.c
+++ b/coreutils/cut.c
@@ -241,5 +241,5 @@
 		}
 	}
 
-	return 0;
+	return EXIT_SUCCESS;
 }
diff --git a/coreutils/date.c b/coreutils/date.c
index 7e42167..2e69bde 100644
--- a/coreutils/date.c
+++ b/coreutils/date.c
@@ -232,7 +232,7 @@
 	} else if (*date_fmt == '\0') {
 		/* Imitate what GNU 'date' does with NO format string! */
 		printf("\n");
-		exit(TRUE);
+		return EXIT_SUCCESS;
 	}
 
 	/* Handle special conversions */
@@ -246,5 +246,5 @@
 	strftime(t_buff, 200, date_fmt, &tm_time);
 	printf("%s\n", t_buff);
 
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/coreutils/dd.c b/coreutils/dd.c
index 2b77ea6..044f167 100644
--- a/coreutils/dd.c
+++ b/coreutils/dd.c
@@ -174,7 +174,7 @@
 		   (inTotal % blockSize) != 0);
 	printf("%ld+%d records out\n", (long) (outTotal / blockSize),
 		   (outTotal % blockSize) != 0);
-	exit(TRUE);
+	return EXIT_SUCCESS;
   usage:
 
 	usage(dd_usage);
diff --git a/coreutils/df.c b/coreutils/df.c
index 8d6242c..aefffc7 100644
--- a/coreutils/df.c
+++ b/coreutils/df.c
@@ -79,12 +79,12 @@
 				exit(FALSE);
 			}
 			status = df(mountEntry->mnt_fsname, mountEntry->mnt_dir);
-			if (status != 0)
-				exit(status);
+			if (status != TRUE)
+				return EXIT_FAILURE;
 			argc--;
 			argv++;
 		}
-		exit(TRUE);
+		return EXIT_SUCCESS;
 	} else {
 		FILE *mountTable;
 		struct mntent *mountEntry;
@@ -92,7 +92,7 @@
 		mountTable = setmntent(mtab_file, "r");
 		if (mountTable == 0) {
 			perror(mtab_file);
-			exit(FALSE);
+			return EXIT_FAILURE;
 		}
 
 		while ((mountEntry = getmntent(mountTable))) {
@@ -101,7 +101,7 @@
 		endmntent(mountTable);
 	}
 
-	return(TRUE);
+	return EXIT_FAILURE;
 }
 
 /*
diff --git a/coreutils/dirname.c b/coreutils/dirname.c
index 23f46be..ceb750c 100644
--- a/coreutils/dirname.c
+++ b/coreutils/dirname.c
@@ -40,5 +40,5 @@
 	if (s && *s)
 		*s = '\0';
 	printf("%s\n", (s)? *argv : ".");
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/coreutils/dos2unix.c b/coreutils/dos2unix.c
index c9f783f..ed2088e 100644
--- a/coreutils/dos2unix.c
+++ b/coreutils/dos2unix.c
@@ -41,5 +41,5 @@
                 putchar(c);
                 c = getchar();
 	} 
-	return 0;
+	return EXIT_SUCCESS;
 }
diff --git a/coreutils/du.c b/coreutils/du.c
index 408ad99..a0f1606 100644
--- a/coreutils/du.c
+++ b/coreutils/du.c
@@ -160,10 +160,10 @@
 		}
 	}
 
-	return(0);
+	return EXIT_SUCCESS;
 }
 
-/* $Id: du.c,v 1.25 2000/09/25 21:45:57 andersen Exp $ */
+/* $Id: du.c,v 1.26 2000/12/01 02:55:13 kraai Exp $ */
 /*
 Local Variables:
 c-file-style: "linux"
diff --git a/coreutils/echo.c b/coreutils/echo.c
index a6b5152..393f442 100644
--- a/coreutils/echo.c
+++ b/coreutils/echo.c
@@ -107,7 +107,7 @@
 		putchar('\n');
 	fflush(stdout);
 
-	return 0;
+	return EXIT_SUCCESS;
 }
 
 /*-
diff --git a/coreutils/hostid.c b/coreutils/hostid.c
index 47bd8d7..35a5859 100644
--- a/coreutils/hostid.c
+++ b/coreutils/hostid.c
@@ -26,5 +26,5 @@
 extern int hostid_main(int argc, char **argv)
 {
 	printf("%lx\n", gethostid());
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/coreutils/length.c b/coreutils/length.c
index 14d15c8..1ab4e3a 100644
--- a/coreutils/length.c
+++ b/coreutils/length.c
@@ -9,5 +9,5 @@
 	if (argc != 2 || **(argv + 1) == '-')
 		usage(length_usage);
 	printf("%lu\n", (long)strlen(argv[1]));
-	return (TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/coreutils/ls.c b/coreutils/ls.c
index d508a1b..225132b 100644
--- a/coreutils/ls.c
+++ b/coreutils/ls.c
@@ -878,5 +878,4 @@
 
   print_usage_message:
 	usage(ls_usage);
-	return(FALSE);
 }
diff --git a/coreutils/md5sum.c b/coreutils/md5sum.c
index 21570de..30b882a 100644
--- a/coreutils/md5sum.c
+++ b/coreutils/md5sum.c
@@ -902,22 +902,22 @@
 
   if (file_type_specified && do_check) {
     errorMsg("the -b and -t options are meaningless when verifying checksums\n");
-    exit FALSE;
+	return EXIT_FAILURE;
   }
 
   if (n_strings > 0 && do_check) {
     errorMsg("the -g and -c options are mutually exclusive\n");
-    exit FALSE;
+	return EXIT_FAILURE;
   }
 
   if (status_only && !do_check) {
     errorMsg("the -s option is meaningful only when verifying checksums\n");
-    exit FALSE;
+	return EXIT_FAILURE;
   }
 
   if (warn && !do_check) {
     errorMsg("the -w option is meaningful only when verifying checksums\n");
-    exit FALSE;
+	return EXIT_FAILURE;
   }
 
   if (n_strings > 0) {
@@ -925,7 +925,7 @@
 
     if (optind < argc) {
       errorMsg("no files may be specified when using -g\n");
-      exit FALSE;
+	  return EXIT_FAILURE;
     }
     for (i = 0; i < n_strings; ++i) {
       size_t cnt;
@@ -992,13 +992,16 @@
 
   if (fclose (stdout) == EOF) {
     errorMsg("write error\n");
-    exit FALSE;
+	return EXIT_FAILURE;
   }
 
   if (have_read_stdin && fclose (stdin) == EOF) {
     errorMsg("standard input\n");
-    exit FALSE;
+	return EXIT_FAILURE;
   }
 
-  exit (err == 0 ? TRUE : FALSE);
+  if (err == 0)
+	  return EXIT_SUCCESS;
+  else
+	  return EXIT_FAILURE;
 }
diff --git a/coreutils/mkdir.c b/coreutils/mkdir.c
index 04310e4..c950847 100644
--- a/coreutils/mkdir.c
+++ b/coreutils/mkdir.c
@@ -51,7 +51,7 @@
 				mode = 0;
 				if (parse_mode(*(++argv), &mode) == FALSE) {
 					errorMsg("Unknown mode: %s\n", *argv);
-					exit FALSE;
+					return EXIT_FAILURE;
 				}
 				/* Set the umask for this process so it doesn't 
 				 * screw up whatever the user just entered. */
@@ -80,13 +80,13 @@
 
 		if (strlen(*argv) > BUFSIZ - 1) {
 			errorMsg(name_too_long);
-			exit FALSE;
+			return EXIT_FAILURE;
 		}
 		strcpy(buf, *argv);
 		status = stat(buf, &statBuf);
 		if (parentFlag == FALSE && status != -1 && errno != ENOENT) {
 			errorMsg("%s: File exists\n", buf);
-			exit FALSE;
+			return EXIT_FAILURE;
 		}
 		if (parentFlag == TRUE) {
 			strcat(buf, "/");
@@ -94,11 +94,11 @@
 		} else {
 			if (mkdir(buf, mode) != 0 && parentFlag == FALSE) {
 				perror(buf);
-				exit FALSE;
+				return EXIT_FAILURE;
 			}
 		}
 		argc--;
 		argv++;
 	}
-	return( TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/coreutils/mkfifo.c b/coreutils/mkfifo.c
index 5e1bc1a..ef4a525 100644
--- a/coreutils/mkfifo.c
+++ b/coreutils/mkfifo.c
@@ -55,7 +55,7 @@
 		usage(mkfifo_usage);
 	if (mkfifo(*argv, mode) < 0) {
 		perror("mkfifo");
-		exit(255);
+		return EXIT_FAILURE;
 	}
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/coreutils/mknod.c b/coreutils/mknod.c
index ecb0e47..21b2689 100644
--- a/coreutils/mknod.c
+++ b/coreutils/mknod.c
@@ -85,6 +85,6 @@
 
 	if (mknod(argv[0], mode, dev) != 0)
 		fatalError("%s: %s\n", argv[0], strerror(errno));
-	return (TRUE);
+	return EXIT_SUCCESS;
 }
 
diff --git a/coreutils/pwd.c b/coreutils/pwd.c
index c9de777..54129b1 100644
--- a/coreutils/pwd.c
+++ b/coreutils/pwd.c
@@ -34,5 +34,5 @@
 		fatalError("%s\n", strerror(errno));
 
 	printf("%s\n", buf);
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/coreutils/rm.c b/coreutils/rm.c
index 4f97cad..c62083e 100644
--- a/coreutils/rm.c
+++ b/coreutils/rm.c
@@ -102,9 +102,9 @@
 		} else {
 			if (recursiveAction(srcName, recursiveFlag, FALSE,
 								TRUE, fileAction, dirAction, NULL) == FALSE) {
-				exit(FALSE);
+				return EXIT_FAILURE;
 			}
 		}
 	}
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/coreutils/sleep.c b/coreutils/sleep.c
index 709e3de..ad92b10 100644
--- a/coreutils/sleep.c
+++ b/coreutils/sleep.c
@@ -32,7 +32,7 @@
 
 	if (sleep(atoi(*(++argv))) != 0) {
 		perror("sleep");
-		exit(FALSE);
+		return EXIT_FAILURE;
 	}
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/coreutils/touch.c b/coreutils/touch.c
index 7db6c6e..5537fb6 100644
--- a/coreutils/touch.c
+++ b/coreutils/touch.c
@@ -43,7 +43,6 @@
 				break;
 			default:
 				usage(touch_usage);
-				exit(FALSE);
 			}
 		}
 	}
@@ -57,7 +56,7 @@
 				S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
 		if (fd < 0) {
 			if (create == FALSE && errno == ENOENT)
-				exit(TRUE);
+				return EXIT_SUCCESS;
 			else {
 				fatalError("%s", strerror(errno));
 			}
@@ -70,5 +69,5 @@
 		argv++;
 	}
 
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/coreutils/tty.c b/coreutils/tty.c
index 6eebed9..46201d3 100644
--- a/coreutils/tty.c
+++ b/coreutils/tty.c
@@ -38,5 +38,5 @@
 		else
 			puts("not a tty");
 	}
-	return(isatty(0) ? TRUE : FALSE);
+	return(isatty(0) ? EXIT_SUCCESS : EXIT_FAILURE);
 }
diff --git a/coreutils/uname.c b/coreutils/uname.c
index 8d9427c..2781b80 100644
--- a/coreutils/uname.c
+++ b/coreutils/uname.c
@@ -138,7 +138,7 @@
 	print_element(PRINT_MACHINE, name.machine);
 	print_element(PRINT_PROCESSOR, processor);
 
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
 
 /* If the name element set in MASK is selected for printing in `toprint',
diff --git a/coreutils/usleep.c b/coreutils/usleep.c
index 69790ef..86dc050 100644
--- a/coreutils/usleep.c
+++ b/coreutils/usleep.c
@@ -32,5 +32,5 @@
 	}
 
 	usleep(atoi(*(++argv)));	/* return void */
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/coreutils/uudecode.c b/coreutils/uudecode.c
index 78ca096..825fdb5 100644
--- a/coreutils/uudecode.c
+++ b/coreutils/uudecode.c
@@ -294,16 +294,16 @@
   }
 
   if (optind == argc)
-    exit_status = decode ("stdin", outname) == 0 ? TRUE : FALSE;
+    exit_status = decode ("stdin", outname) == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
   else {
-    exit_status = TRUE;
+    exit_status = EXIT_SUCCESS;
     do {
       if (freopen (argv[optind], "r", stdin) != NULL) {
         if (decode (argv[optind], outname) != 0)
           exit_status = FALSE;
       } else {
         errorMsg("%s: %s\n", argv[optind], strerror(errno));
-        exit_status = FALSE;
+        exit_status = EXIT_FAILURE;
       }
       optind++;
     }
diff --git a/coreutils/uuencode.c b/coreutils/uuencode.c
index aea99ed..8d15adb 100644
--- a/coreutils/uuencode.c
+++ b/coreutils/uuencode.c
@@ -179,7 +179,7 @@
     /* Optional first argument is input file.  */
     if (!freopen (argv[optind], "r", stdin) || fstat (fileno (stdin), &sb)) {
       errorMsg("%s: %s\n", argv[optind], strerror(errno));
-      exit FALSE;
+      return EXIT_FAILURE;
     }
     mode = sb.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO);
     optind++;
@@ -200,9 +200,9 @@
   printf(trans_ptr == uu_std ? "end\n" : "====\n");
   if (ferror (stdout)) {
     errorMsg("Write error\n");
-    exit FALSE;
+    return EXIT_FAILURE;
   }
-  return( TRUE);
+  return EXIT_SUCCESS;
 }
 
 /* Copyright (c) 1983 Regents of the University of California.
diff --git a/cp_mv.c b/cp_mv.c
index 2257f44..580c920 100644
--- a/cp_mv.c
+++ b/cp_mv.c
@@ -316,9 +316,9 @@
 		if (flags_memo)
 			*(baseDestName + baseDestLen) = '\0';
 	}
-	return( TRUE);
+	return EXIT_SUCCESS;
  exit_false:
-	return( FALSE);
+	return EXIT_FAILURE;
 }
 
 /*
diff --git a/cut.c b/cut.c
index 2d313cc..b281fa2 100644
--- a/cut.c
+++ b/cut.c
@@ -241,5 +241,5 @@
 		}
 	}
 
-	return 0;
+	return EXIT_SUCCESS;
 }
diff --git a/date.c b/date.c
index 7e42167..2e69bde 100644
--- a/date.c
+++ b/date.c
@@ -232,7 +232,7 @@
 	} else if (*date_fmt == '\0') {
 		/* Imitate what GNU 'date' does with NO format string! */
 		printf("\n");
-		exit(TRUE);
+		return EXIT_SUCCESS;
 	}
 
 	/* Handle special conversions */
@@ -246,5 +246,5 @@
 	strftime(t_buff, 200, date_fmt, &tm_time);
 	printf("%s\n", t_buff);
 
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/dc.c b/dc.c
index 48aa830..0f5f1fc 100644
--- a/dc.c
+++ b/dc.c
@@ -13,19 +13,15 @@
 
 static void push(double a)
 {
-	if (pointer >= (sizeof(stack) / sizeof(*stack))) {
-		errorMsg("stack overflow\n");
-		exit(-1);
-	} else
-		stack[pointer++] = a;
+	if (pointer >= (sizeof(stack) / sizeof(*stack)))
+		fatalError("stack overflow\n");
+	stack[pointer++] = a;
 }
 
 static double pop()
 {
-	if (pointer == 0) {
-		errorMsg("stack underflow\n");
-		exit(-1);
-	}
+	if (pointer == 0)
+		fatalError("stack underflow\n");
 	return stack[--pointer];
 }
 
@@ -124,8 +120,7 @@
 		}
 		o++;
 	}
-	errorMsg("%s: syntax error.\n", argument);
-	exit(-1);
+	fatalError("%s: syntax error.\n", argument);
 }
 
 /* return pointer to next token in buffer and set *buffer to one char
@@ -182,5 +177,5 @@
 		}
 	}
 	stack_machine(0);
-	return( TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/dd.c b/dd.c
index 2b77ea6..044f167 100644
--- a/dd.c
+++ b/dd.c
@@ -174,7 +174,7 @@
 		   (inTotal % blockSize) != 0);
 	printf("%ld+%d records out\n", (long) (outTotal / blockSize),
 		   (outTotal % blockSize) != 0);
-	exit(TRUE);
+	return EXIT_SUCCESS;
   usage:
 
 	usage(dd_usage);
diff --git a/deallocvt.c b/deallocvt.c
index 65af79b..4600c0d 100644
--- a/deallocvt.c
+++ b/deallocvt.c
@@ -28,7 +28,7 @@
 		/* deallocate all unused consoles */
 		if (ioctl(fd, VT_DISALLOCATE, 0)) {
 			perror("VT_DISALLOCATE");
-			exit( FALSE);
+			return EXIT_FAILURE;
 		}
 	} else
 printf("erik: B\n");
@@ -44,5 +44,5 @@
 			}
 		}
 printf("erik: C\n");
-	return( TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/df.c b/df.c
index 8d6242c..aefffc7 100644
--- a/df.c
+++ b/df.c
@@ -79,12 +79,12 @@
 				exit(FALSE);
 			}
 			status = df(mountEntry->mnt_fsname, mountEntry->mnt_dir);
-			if (status != 0)
-				exit(status);
+			if (status != TRUE)
+				return EXIT_FAILURE;
 			argc--;
 			argv++;
 		}
-		exit(TRUE);
+		return EXIT_SUCCESS;
 	} else {
 		FILE *mountTable;
 		struct mntent *mountEntry;
@@ -92,7 +92,7 @@
 		mountTable = setmntent(mtab_file, "r");
 		if (mountTable == 0) {
 			perror(mtab_file);
-			exit(FALSE);
+			return EXIT_FAILURE;
 		}
 
 		while ((mountEntry = getmntent(mountTable))) {
@@ -101,7 +101,7 @@
 		endmntent(mountTable);
 	}
 
-	return(TRUE);
+	return EXIT_FAILURE;
 }
 
 /*
diff --git a/dirname.c b/dirname.c
index 23f46be..ceb750c 100644
--- a/dirname.c
+++ b/dirname.c
@@ -40,5 +40,5 @@
 	if (s && *s)
 		*s = '\0';
 	printf("%s\n", (s)? *argv : ".");
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/dmesg.c b/dmesg.c
index 88b5d13..a32ca79 100644
--- a/dmesg.c
+++ b/dmesg.c
@@ -73,7 +73,7 @@
 		if (n < 0) {
 			goto klogctl_error;
 		}
-		exit(TRUE);
+		return EXIT_SUCCESS;
 	}
 
 	if (bufsize < 4096)
@@ -98,11 +98,11 @@
 	}
 	if (lastc != '\n')
 		putchar('\n');
-	exit(TRUE);
+	return EXIT_SUCCESS;
   end:
 	usage(dmesg_usage);
-	exit(FALSE);
+	return EXIT_FAILURE;
   klogctl_error:
 	perror("klogctl");
-	return(FALSE);
+	return EXIT_FAILURE;
 }
diff --git a/dos2unix.c b/dos2unix.c
index c9f783f..ed2088e 100644
--- a/dos2unix.c
+++ b/dos2unix.c
@@ -41,5 +41,5 @@
                 putchar(c);
                 c = getchar();
 	} 
-	return 0;
+	return EXIT_SUCCESS;
 }
diff --git a/du.c b/du.c
index 408ad99..a0f1606 100644
--- a/du.c
+++ b/du.c
@@ -160,10 +160,10 @@
 		}
 	}
 
-	return(0);
+	return EXIT_SUCCESS;
 }
 
-/* $Id: du.c,v 1.25 2000/09/25 21:45:57 andersen Exp $ */
+/* $Id: du.c,v 1.26 2000/12/01 02:55:13 kraai Exp $ */
 /*
 Local Variables:
 c-file-style: "linux"
diff --git a/dumpkmap.c b/dumpkmap.c
index 2d989df..77689fc 100644
--- a/dumpkmap.c
+++ b/dumpkmap.c
@@ -51,7 +51,7 @@
 	fd = open("/dev/tty0", O_RDWR);
 	if (fd < 0) {
 		errorMsg("Error opening /dev/tty0: %s\n", strerror(errno));
-		return 1;
+		return EXIT_FAILURE;
 	}
 
 	write(1, magic, 7);
@@ -88,5 +88,5 @@
 		}
 	}
 	close(fd);
-	return 0;
+	return EXIT_SUCCESS;
 }
diff --git a/dutmp.c b/dutmp.c
index cf5f1cf..03d80d8 100644
--- a/dutmp.c
+++ b/dutmp.c
@@ -62,5 +62,5 @@
 		ut.ut_addr);
 	}
 #endif
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/echo.c b/echo.c
index a6b5152..393f442 100644
--- a/echo.c
+++ b/echo.c
@@ -107,7 +107,7 @@
 		putchar('\n');
 	fflush(stdout);
 
-	return 0;
+	return EXIT_SUCCESS;
 }
 
 /*-
diff --git a/fbset.c b/fbset.c
index 8307f26..47130e3 100644
--- a/fbset.c
+++ b/fbset.c
@@ -434,7 +434,7 @@
 	if (g_options & OPT_READMODE) {
 		if (!readmode(&var, modefile, mode)) {
 			errorMsg("Unknown video mode `%s'\n", mode);
-			exit(1);
+			return EXIT_FAILURE;
 		}
 	}
 
@@ -446,5 +446,5 @@
 	/* Don't close the file, as exiting will take care of that */
 	/* close(fh); */
 
-	return (TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/fdflush.c b/fdflush.c
index 6633e12..380015d 100644
--- a/fdflush.c
+++ b/fdflush.c
@@ -40,7 +40,7 @@
 	fd = open(*argv, 0);
 	if (fd < 0) {
 		perror(*argv);
-		exit(FALSE);
+		return EXIT_FAILURE;
 	}
 
 	value = ioctl(fd, FDFLUSH, 0);
@@ -50,7 +50,7 @@
 
 	if (value) {
 		perror(*argv);
-		exit(FALSE);
+		return EXIT_FAILURE;
 	}
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/find.c b/find.c
index 48faf2c..a86b07e 100644
--- a/find.c
+++ b/find.c
@@ -100,8 +100,8 @@
 
 	if (recursiveAction(directory, TRUE, FALSE, FALSE,
 						fileAction, fileAction, NULL) == FALSE) {
-		exit(FALSE);
+		return EXIT_FAILURE;
 	}
 
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/findutils/find.c b/findutils/find.c
index 48faf2c..a86b07e 100644
--- a/findutils/find.c
+++ b/findutils/find.c
@@ -100,8 +100,8 @@
 
 	if (recursiveAction(directory, TRUE, FALSE, FALSE,
 						fileAction, fileAction, NULL) == FALSE) {
-		exit(FALSE);
+		return EXIT_FAILURE;
 	}
 
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/free.c b/free.c
index a33fa9a..f2e746e 100644
--- a/free.c
+++ b/free.c
@@ -60,7 +60,7 @@
 	printf("%6s%13ld%13ld%13ld\n", "Total:", info.totalram+info.totalswap,
 			(info.totalram-info.freeram)+(info.totalswap-info.freeswap),
 			info.freeram+info.freeswap);
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
 
 
diff --git a/freeramdisk.c b/freeramdisk.c
index 22fc3e6..5671514 100644
--- a/freeramdisk.c
+++ b/freeramdisk.c
@@ -51,7 +51,7 @@
 	/* Don't bother closing.  Exit does
 	 * that, so we can save a few bytes */
 	/* close(f); */
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
 
 /*
diff --git a/gunzip.c b/gunzip.c
index 70b25bd..eeff977 100644
--- a/gunzip.c
+++ b/gunzip.c
@@ -1350,7 +1350,7 @@
 
 		if (delInputFile == 1 && unlink(delFileName) < 0) {
 			perror(delFileName);
-			exit(FALSE);
+			return EXIT_FAILURE;
 		}
 	}
 	return(exit_code);
diff --git a/gzip.c b/gzip.c
index 2e147b1..d8c22a9 100644
--- a/gzip.c
+++ b/gzip.c
@@ -1930,7 +1930,7 @@
 
 		if (unlink(delFileName) < 0) {
 			perror(delFileName);
-			exit(FALSE);
+			exit(EXIT_FAILURE);
 		}
 	}
 
diff --git a/hostid.c b/hostid.c
index 47bd8d7..35a5859 100644
--- a/hostid.c
+++ b/hostid.c
@@ -26,5 +26,5 @@
 extern int hostid_main(int argc, char **argv)
 {
 	printf("%lx\n", gethostid());
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/insmod.c b/insmod.c
index 4f96c95..6386b94 100644
--- a/insmod.c
+++ b/insmod.c
@@ -77,7 +77,7 @@
 #ifndef MODUTILS_MODULE_H
 #define MODUTILS_MODULE_H 1
 
-#ident "$Id: insmod.c,v 1.28 2000/10/23 18:03:46 kraai Exp $"
+#ident "$Id: insmod.c,v 1.29 2000/12/01 02:55:13 kraai Exp $"
 
 /* This file contains the structures used by the 2.0 and 2.1 kernels.
    We do not use the kernel headers directly because we do not wish
@@ -283,7 +283,7 @@
 #ifndef MODUTILS_OBJ_H
 #define MODUTILS_OBJ_H 1
 
-#ident "$Id: insmod.c,v 1.28 2000/10/23 18:03:46 kraai Exp $"
+#ident "$Id: insmod.c,v 1.29 2000/12/01 02:55:13 kraai Exp $"
 
 /* The relocatable object is manipulated using elfin types.  */
 
@@ -2769,7 +2769,7 @@
 	FILE *fp;
 	struct obj_file *f;
 	char m_name[BUFSIZ + 1] = "\0";
-	int exit_status = FALSE;
+	int exit_status = EXIT_FAILURE;
 	int m_has_modinfo;
 #ifdef BB_FEATURE_INSMOD_VERSION_CHECKING
 	int k_version;
@@ -2833,7 +2833,7 @@
 				|| ((fp = fopen(m_filename, "r")) == NULL)) 
 			{
 				errorMsg("No module named '%s' found in '%s'\n", m_fullName, _PATH_MODULES);
-				exit(FALSE);
+				return EXIT_FAILURE;
 			}
 		} else
 			fatalError("No module named '%s' found in '%s'\n", m_fullName, _PATH_MODULES);
@@ -2843,7 +2843,7 @@
 
 	if ((f = obj_load(fp)) == NULL) {
 		perror("Could not load the module\n");
-		exit(FALSE);
+		return EXIT_FAILURE;
 	}
 
 	if (get_modinfo_value(f, "kernel_version") == NULL)
@@ -2981,7 +2981,7 @@
 		goto out;
 	}
 
-	exit_status = TRUE;
+	exit_status = EXIT_SUCCESS;
 
 out:
 	fclose(fp);
diff --git a/kill.c b/kill.c
index 7ade822..dd5ca49 100644
--- a/kill.c
+++ b/kill.c
@@ -158,7 +158,7 @@
 						}
 					}
 					fprintf(stderr, "\n\n");
-					exit(TRUE);
+					return EXIT_SUCCESS;
 				}
 				break;
 			case '-':
@@ -236,11 +236,12 @@
 			 * upon exit, so we can save a byte or two */
 			argv++;
 		}
-		exit (all_found);
+		if (all_found == FALSE)
+			return EXIT_FAILURE;
 	}
 #endif
 
-	exit(TRUE);
+	return EXIT_SUCCESS;
 
 
   end:
diff --git a/lash.c b/lash.c
index 461f2c0..1524ef1 100644
--- a/lash.c
+++ b/lash.c
@@ -217,11 +217,11 @@
 		newdir = cmd->progs[0].argv[1];
 	if (chdir(newdir)) {
 		printf("cd: %s: %s\n", newdir, strerror(errno));
-		return FALSE;
+		return EXIT_FAILURE;
 	}
 	getcwd(cwd, sizeof(char)*MAX_LINE);
 
-	return TRUE;
+	return EXIT_SUCCESS;
 }
 
 /* built-in 'env' handler */
@@ -245,14 +245,14 @@
 		fatalError("Exec to %s failed: %s\n", cmd->progs[0].argv[0],
 				strerror(errno));
 	}
-	return TRUE;
+	return EXIT_SUCCESS;
 }
 
 /* built-in 'exit' handler */
 static int builtin_exit(struct job *cmd, struct jobSet *junk)
 {
 	if (!cmd->progs[0].argv[1] == 1)
-		exit TRUE;
+		exit(EXIT_SUCCESS);
 
 	exit (atoi(cmd->progs[0].argv[1]));
 }
@@ -267,12 +267,12 @@
 		if (!cmd->progs[0].argv[1] || cmd->progs[0].argv[2]) {
 			errorMsg("%s: exactly one argument is expected\n",
 					cmd->progs[0].argv[0]);
-			return FALSE;
+			return EXIT_FAILURE;
 		}
 		if (sscanf(cmd->progs[0].argv[1], "%%%d", &jobNum) != 1) {
 			errorMsg("%s: bad argument '%s'\n",
 					cmd->progs[0].argv[0], cmd->progs[0].argv[1]);
-			return FALSE;
+			return EXIT_FAILURE;
 			for (job = jobList->head; job; job = job->next) {
 				if (job->jobId == jobNum) {
 					break;
@@ -286,7 +286,7 @@
 	if (!job) {
 		errorMsg("%s: unknown job %d\n",
 				cmd->progs[0].argv[0], jobNum);
-		return FALSE;
+		return EXIT_FAILURE;
 	}
 
 	if (*cmd->progs[0].argv[0] == 'f') {
@@ -305,7 +305,7 @@
 
 	job->stoppedProgs = 0;
 
-	return TRUE;
+	return EXIT_SUCCESS;
 }
 
 /* built-in 'help' handler */
@@ -326,7 +326,7 @@
 		fprintf(stdout, "%s\t%s\n", x->cmd, x->descr);
 	}
 	fprintf(stdout, "\n\n");
-	return TRUE;
+	return EXIT_SUCCESS;
 }
 
 /* built-in 'jobs' handler */
@@ -343,7 +343,7 @@
 
 		printf(JOB_STATUS_FORMAT, job->jobId, statusString, job->text);
 	}
-	return TRUE;
+	return EXIT_SUCCESS;
 }
 
 
@@ -352,7 +352,7 @@
 {
 	getcwd(cwd, sizeof(char)*MAX_LINE);
 	fprintf(stdout, "%s\n", cwd);
-	return TRUE;
+	return EXIT_SUCCESS;
 }
 
 /* built-in 'export VAR=value' handler */
@@ -437,11 +437,11 @@
 
 	if (! (cmd->jobContext & (IF_TRUE_CONTEXT|IF_FALSE_CONTEXT))) {
 		errorMsg("unexpected token `then'\n");
-		return FALSE;
+		return EXIT_FAILURE;
 	}
 	/* If the if result was FALSE, skip the 'then' stuff */
 	if (cmd->jobContext & IF_FALSE_CONTEXT) {
-		return TRUE;
+		return EXIT_SUCCESS;
 	}
 
 	cmd->jobContext |= THEN_EXP_CONTEXT;
@@ -464,11 +464,11 @@
 
 	if (! (cmd->jobContext & (IF_TRUE_CONTEXT|IF_FALSE_CONTEXT))) {
 		errorMsg("unexpected token `else'\n");
-		return FALSE;
+		return EXIT_FAILURE;
 	}
 	/* If the if result was TRUE, skip the 'else' stuff */
 	if (cmd->jobContext & IF_TRUE_CONTEXT) {
-		return TRUE;
+		return EXIT_SUCCESS;
 	}
 
 	cmd->jobContext |= ELSE_EXP_CONTEXT;
@@ -488,12 +488,12 @@
 {
 	if (! (cmd->jobContext & (IF_TRUE_CONTEXT|IF_FALSE_CONTEXT))) {
 		errorMsg("unexpected token `fi'\n");
-		return FALSE;
+		return EXIT_FAILURE;
 	}
 	/* Clear out the if and then context bits */
 	cmd->jobContext &= ~(IF_TRUE_CONTEXT|IF_FALSE_CONTEXT|THEN_EXP_CONTEXT|ELSE_EXP_CONTEXT);
 	debug_printf(stderr, "Hit an fi   -- jobContext=%d\n", cmd->jobContext);
-	return TRUE;
+	return EXIT_SUCCESS;
 }
 #endif
 
@@ -504,13 +504,13 @@
 	int status;
 
 	if (!cmd->progs[0].argv[1] == 1)
-		return FALSE;
+		return EXIT_FAILURE;
 
 	input = fopen(cmd->progs[0].argv[1], "r");
 	if (!input) {
 		fprintf(stdout, "Couldn't open file '%s'\n",
 				cmd->progs[0].argv[1]);
-		return FALSE;
+		return EXIT_FAILURE;
 	}
 
 	/* Now run the file */
@@ -524,10 +524,10 @@
 {
 	if (!cmd->progs[0].argv[1] == 1) {
 		fprintf(stdout, "unset: parameter required.\n");
-		return FALSE;
+		return EXIT_FAILURE;
 	}
 	unsetenv(cmd->progs[0].argv[1]);
-	return TRUE;
+	return EXIT_SUCCESS;
 }
 
 /* free up all memory from a job */
diff --git a/length.c b/length.c
index 14d15c8..1ab4e3a 100644
--- a/length.c
+++ b/length.c
@@ -9,5 +9,5 @@
 	if (argc != 2 || **(argv + 1) == '-')
 		usage(length_usage);
 	printf("%lu\n", (long)strlen(argv[1]));
-	return (TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/loadacm.c b/loadacm.c
index f577379..1562108 100644
--- a/loadacm.c
+++ b/loadacm.c
@@ -40,17 +40,17 @@
 	fd = open("/dev/tty", O_RDWR);
 	if (fd < 0) {
 		errorMsg("Error opening /dev/tty1: %s\n", strerror(errno));
-		return( FALSE);
+		return EXIT_FAILURE;
 	}
 
 	if (screen_map_load(fd, stdin)) {
 		errorMsg("Error loading acm: %s\n", strerror(errno));
-		return( FALSE);
+		return EXIT_FAILURE;
 	}
 
 	write(fd, "\033(K", 3);
 
-	return( TRUE);
+	return EXIT_SUCCESS;
 }
 
 int screen_map_load(int fd, FILE * fp)
diff --git a/ls.c b/ls.c
index d508a1b..225132b 100644
--- a/ls.c
+++ b/ls.c
@@ -878,5 +878,4 @@
 
   print_usage_message:
 	usage(ls_usage);
-	return(FALSE);
 }
diff --git a/md5sum.c b/md5sum.c
index 21570de..30b882a 100644
--- a/md5sum.c
+++ b/md5sum.c
@@ -902,22 +902,22 @@
 
   if (file_type_specified && do_check) {
     errorMsg("the -b and -t options are meaningless when verifying checksums\n");
-    exit FALSE;
+	return EXIT_FAILURE;
   }
 
   if (n_strings > 0 && do_check) {
     errorMsg("the -g and -c options are mutually exclusive\n");
-    exit FALSE;
+	return EXIT_FAILURE;
   }
 
   if (status_only && !do_check) {
     errorMsg("the -s option is meaningful only when verifying checksums\n");
-    exit FALSE;
+	return EXIT_FAILURE;
   }
 
   if (warn && !do_check) {
     errorMsg("the -w option is meaningful only when verifying checksums\n");
-    exit FALSE;
+	return EXIT_FAILURE;
   }
 
   if (n_strings > 0) {
@@ -925,7 +925,7 @@
 
     if (optind < argc) {
       errorMsg("no files may be specified when using -g\n");
-      exit FALSE;
+	  return EXIT_FAILURE;
     }
     for (i = 0; i < n_strings; ++i) {
       size_t cnt;
@@ -992,13 +992,16 @@
 
   if (fclose (stdout) == EOF) {
     errorMsg("write error\n");
-    exit FALSE;
+	return EXIT_FAILURE;
   }
 
   if (have_read_stdin && fclose (stdin) == EOF) {
     errorMsg("standard input\n");
-    exit FALSE;
+	return EXIT_FAILURE;
   }
 
-  exit (err == 0 ? TRUE : FALSE);
+  if (err == 0)
+	  return EXIT_SUCCESS;
+  else
+	  return EXIT_FAILURE;
 }
diff --git a/miscutils/dc.c b/miscutils/dc.c
index 48aa830..0f5f1fc 100644
--- a/miscutils/dc.c
+++ b/miscutils/dc.c
@@ -13,19 +13,15 @@
 
 static void push(double a)
 {
-	if (pointer >= (sizeof(stack) / sizeof(*stack))) {
-		errorMsg("stack overflow\n");
-		exit(-1);
-	} else
-		stack[pointer++] = a;
+	if (pointer >= (sizeof(stack) / sizeof(*stack)))
+		fatalError("stack overflow\n");
+	stack[pointer++] = a;
 }
 
 static double pop()
 {
-	if (pointer == 0) {
-		errorMsg("stack underflow\n");
-		exit(-1);
-	}
+	if (pointer == 0)
+		fatalError("stack underflow\n");
 	return stack[--pointer];
 }
 
@@ -124,8 +120,7 @@
 		}
 		o++;
 	}
-	errorMsg("%s: syntax error.\n", argument);
-	exit(-1);
+	fatalError("%s: syntax error.\n", argument);
 }
 
 /* return pointer to next token in buffer and set *buffer to one char
@@ -182,5 +177,5 @@
 		}
 	}
 	stack_machine(0);
-	return( TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/miscutils/dutmp.c b/miscutils/dutmp.c
index cf5f1cf..03d80d8 100644
--- a/miscutils/dutmp.c
+++ b/miscutils/dutmp.c
@@ -62,5 +62,5 @@
 		ut.ut_addr);
 	}
 #endif
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/miscutils/mktemp.c b/miscutils/mktemp.c
index 62ca870..2d53cc2 100644
--- a/miscutils/mktemp.c
+++ b/miscutils/mktemp.c
@@ -31,7 +31,7 @@
 	if (argc != 2 && (argc != 3 || strcmp(argv[1], "-q")))
 		usage(mktemp_usage);
 	if(mkstemp(argv[argc-1]) < 0)
-		exit(FALSE);
+		return EXIT_FAILURE;
 	(void) puts(argv[argc-1]);
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/miscutils/mt.c b/miscutils/mt.c
index 6acae4e..583674b 100644
--- a/miscutils/mt.c
+++ b/miscutils/mt.c
@@ -76,7 +76,7 @@
 
 	if (code->name == 0) {
 		errorMsg("unrecognized opcode %s.\n", argv[1]);
-		exit (FALSE);
+		return EXIT_FAILURE;
 	}
 
 	op.mt_op = code->value;
@@ -87,13 +87,13 @@
 
 	if ((fd = open(file, O_RDONLY, 0)) < 0) {
 		perror(file);
-		exit (FALSE);
+		return EXIT_FAILURE;
 	}
 
 	if (ioctl(fd, MTIOCTOP, &op) != 0) {
 		perror(file);
-		exit (FALSE);
+		return EXIT_FAILURE;
 	}
 
-	return (TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/miscutils/update.c b/miscutils/update.c
index 7279d83..080cb99 100644
--- a/miscutils/update.c
+++ b/miscutils/update.c
@@ -67,7 +67,7 @@
 
 	pid = fork();
 	if (pid < 0)
-		exit(FALSE);
+		return EXIT_FAILURE;
 	else if (pid == 0) {
 		/* Become a proper daemon */
 		setsid();
@@ -99,12 +99,12 @@
 					syslog(LOG_INFO,
 						   "This kernel does not need update(8). Exiting.");
 					closelog();
-					exit(TRUE);
+					return EXIT_SUCCESS;
 				}
 			}
 		}
 	}
-	return( TRUE);
+	return EXIT_SUCCESS;
 }
 
 /*
diff --git a/mkdir.c b/mkdir.c
index 04310e4..c950847 100644
--- a/mkdir.c
+++ b/mkdir.c
@@ -51,7 +51,7 @@
 				mode = 0;
 				if (parse_mode(*(++argv), &mode) == FALSE) {
 					errorMsg("Unknown mode: %s\n", *argv);
-					exit FALSE;
+					return EXIT_FAILURE;
 				}
 				/* Set the umask for this process so it doesn't 
 				 * screw up whatever the user just entered. */
@@ -80,13 +80,13 @@
 
 		if (strlen(*argv) > BUFSIZ - 1) {
 			errorMsg(name_too_long);
-			exit FALSE;
+			return EXIT_FAILURE;
 		}
 		strcpy(buf, *argv);
 		status = stat(buf, &statBuf);
 		if (parentFlag == FALSE && status != -1 && errno != ENOENT) {
 			errorMsg("%s: File exists\n", buf);
-			exit FALSE;
+			return EXIT_FAILURE;
 		}
 		if (parentFlag == TRUE) {
 			strcat(buf, "/");
@@ -94,11 +94,11 @@
 		} else {
 			if (mkdir(buf, mode) != 0 && parentFlag == FALSE) {
 				perror(buf);
-				exit FALSE;
+				return EXIT_FAILURE;
 			}
 		}
 		argc--;
 		argv++;
 	}
-	return( TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/mkfifo.c b/mkfifo.c
index 5e1bc1a..ef4a525 100644
--- a/mkfifo.c
+++ b/mkfifo.c
@@ -55,7 +55,7 @@
 		usage(mkfifo_usage);
 	if (mkfifo(*argv, mode) < 0) {
 		perror("mkfifo");
-		exit(255);
+		return EXIT_FAILURE;
 	}
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/mknod.c b/mknod.c
index ecb0e47..21b2689 100644
--- a/mknod.c
+++ b/mknod.c
@@ -85,6 +85,6 @@
 
 	if (mknod(argv[0], mode, dev) != 0)
 		fatalError("%s: %s\n", argv[0], strerror(errno));
-	return (TRUE);
+	return EXIT_SUCCESS;
 }
 
diff --git a/mkswap.c b/mkswap.c
index 627d04f..4757e15 100644
--- a/mkswap.c
+++ b/mkswap.c
@@ -176,7 +176,7 @@
 void die(const char *str)
 {
 	errorMsg("%s\n", str);
-	exit(FALSE);
+	exit(EXIT_FAILURE);
 }
 
 void page_ok(int page)
@@ -325,7 +325,7 @@
 	} else if (PAGES > sz && !force) {
 		errorMsg("error: size %ld is larger than device size %d\n",
 				PAGES * (pagesize / 1024), sz * (pagesize / 1024));
-		exit(FALSE);
+		return EXIT_FAILURE;
 	}
 
 	if (version == -1) {
@@ -369,7 +369,7 @@
 	DEV = open(device_name, O_RDWR);
 	if (DEV < 0 || fstat(DEV, &statbuf) < 0) {
 		perror(device_name);
-		exit(FALSE);
+		return EXIT_FAILURE;
 	}
 	if (!S_ISBLK(statbuf.st_mode))
 		check = 0;
@@ -393,7 +393,7 @@
 "This probably means creating v0 swap would destroy your partition table\n"
 "No swap created. If you really want to create swap v0 on that device, use\n"
 "the -f option to force it.\n", device_name);
-				exit(FALSE);
+				return EXIT_FAILURE;
 			}
 		}
 	}
@@ -429,5 +429,5 @@
 	 */
 	if (fsync(DEV))
 		die("fsync failed");
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/mktemp.c b/mktemp.c
index 62ca870..2d53cc2 100644
--- a/mktemp.c
+++ b/mktemp.c
@@ -31,7 +31,7 @@
 	if (argc != 2 && (argc != 3 || strcmp(argv[1], "-q")))
 		usage(mktemp_usage);
 	if(mkstemp(argv[argc-1]) < 0)
-		exit(FALSE);
+		return EXIT_FAILURE;
 	(void) puts(argv[argc-1]);
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/modutils/insmod.c b/modutils/insmod.c
index 4f96c95..6386b94 100644
--- a/modutils/insmod.c
+++ b/modutils/insmod.c
@@ -77,7 +77,7 @@
 #ifndef MODUTILS_MODULE_H
 #define MODUTILS_MODULE_H 1
 
-#ident "$Id: insmod.c,v 1.28 2000/10/23 18:03:46 kraai Exp $"
+#ident "$Id: insmod.c,v 1.29 2000/12/01 02:55:13 kraai Exp $"
 
 /* This file contains the structures used by the 2.0 and 2.1 kernels.
    We do not use the kernel headers directly because we do not wish
@@ -283,7 +283,7 @@
 #ifndef MODUTILS_OBJ_H
 #define MODUTILS_OBJ_H 1
 
-#ident "$Id: insmod.c,v 1.28 2000/10/23 18:03:46 kraai Exp $"
+#ident "$Id: insmod.c,v 1.29 2000/12/01 02:55:13 kraai Exp $"
 
 /* The relocatable object is manipulated using elfin types.  */
 
@@ -2769,7 +2769,7 @@
 	FILE *fp;
 	struct obj_file *f;
 	char m_name[BUFSIZ + 1] = "\0";
-	int exit_status = FALSE;
+	int exit_status = EXIT_FAILURE;
 	int m_has_modinfo;
 #ifdef BB_FEATURE_INSMOD_VERSION_CHECKING
 	int k_version;
@@ -2833,7 +2833,7 @@
 				|| ((fp = fopen(m_filename, "r")) == NULL)) 
 			{
 				errorMsg("No module named '%s' found in '%s'\n", m_fullName, _PATH_MODULES);
-				exit(FALSE);
+				return EXIT_FAILURE;
 			}
 		} else
 			fatalError("No module named '%s' found in '%s'\n", m_fullName, _PATH_MODULES);
@@ -2843,7 +2843,7 @@
 
 	if ((f = obj_load(fp)) == NULL) {
 		perror("Could not load the module\n");
-		exit(FALSE);
+		return EXIT_FAILURE;
 	}
 
 	if (get_modinfo_value(f, "kernel_version") == NULL)
@@ -2981,7 +2981,7 @@
 		goto out;
 	}
 
-	exit_status = TRUE;
+	exit_status = EXIT_SUCCESS;
 
 out:
 	fclose(fp);
diff --git a/modutils/rmmod.c b/modutils/rmmod.c
index dd29352..f5d7d35 100644
--- a/modutils/rmmod.c
+++ b/modutils/rmmod.c
@@ -34,7 +34,7 @@
 
 extern int rmmod_main(int argc, char **argv)
 {
-	int ret = TRUE;
+	int ret = EXIT_SUCCESS;
 	if (argc <= 1) {
 		usage(rmmod_usage);
 	}
@@ -47,9 +47,9 @@
 				/* Unload _all_ unused modules via NULL delete_module() call */
 				if (delete_module(NULL)) {
 					perror("rmmod");
-					exit(FALSE);
+					return EXIT_FAILURE;
 				}
-				exit(TRUE);
+				return EXIT_SUCCESS;
 			default:
 				usage(rmmod_usage);
 			}
@@ -59,7 +59,7 @@
 	while (argc-- > 0) {
 		if (delete_module(*argv) < 0) {
 			perror(*argv);
-			ret=FALSE;
+			ret = EXIT_FAILURE;
 		}
 		argv++;
 	}
diff --git a/mount.c b/mount.c
index 8b115c9..34dbb5e 100644
--- a/mount.c
+++ b/mount.c
@@ -330,7 +330,7 @@
 	int fakeIt = FALSE;
 	int useMtab = TRUE;
 	int i;
-	int rc = FALSE;
+	int rc = EXIT_FAILURE;
 	int fstabmount = FALSE;	
 
 #if defined BB_FEATURE_USE_DEVPS_PATCH
@@ -367,7 +367,7 @@
 		free( mntentlist);
 		close(fd);
 #endif
-		exit(TRUE);
+		return EXIT_SUCCESS;
 	}
 #else
 	if (argc == 1) {
@@ -388,7 +388,7 @@
 		} else {
 			perror(mtab_file);
 		}
-		exit(TRUE);
+		return EXIT_SUCCESS;
 	}
 #endif
 
@@ -489,7 +489,7 @@
 					&extra_opts, &string_flags, 1);
 				if ( rc != 0) {
 					fatalError("nfsmount failed: %s\n", strerror(errno));	
-					rc = FALSE;
+					rc = EXIT_FAILURE;
 				}
 			}
 #endif
@@ -499,7 +499,7 @@
 			if (all == FALSE)
 				break;
 
-			rc = TRUE;	// Always return 0 for 'all'
+			rc = EXIT_SUCCESS;	// Always return 0 for 'all'
 		}
 		if (fstabmount == TRUE)
 			endmntent(f);
@@ -512,8 +512,6 @@
 	
 	goto singlemount;
 	
-	exit(FALSE);
-
 goodbye:
 	usage(mount_usage);
 }
diff --git a/mt.c b/mt.c
index 6acae4e..583674b 100644
--- a/mt.c
+++ b/mt.c
@@ -76,7 +76,7 @@
 
 	if (code->name == 0) {
 		errorMsg("unrecognized opcode %s.\n", argv[1]);
-		exit (FALSE);
+		return EXIT_FAILURE;
 	}
 
 	op.mt_op = code->value;
@@ -87,13 +87,13 @@
 
 	if ((fd = open(file, O_RDONLY, 0)) < 0) {
 		perror(file);
-		exit (FALSE);
+		return EXIT_FAILURE;
 	}
 
 	if (ioctl(fd, MTIOCTOP, &op) != 0) {
 		perror(file);
-		exit (FALSE);
+		return EXIT_FAILURE;
 	}
 
-	return (TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/networking/nslookup.c b/networking/nslookup.c
index acb3e3b..c46a0b8 100644
--- a/networking/nslookup.c
+++ b/networking/nslookup.c
@@ -167,7 +167,7 @@
 		host = gethostbyname(argv[1]);
 	}
 	hostent_fprint(host, stdout);
-	return( TRUE);
+	return EXIT_SUCCESS;
 }
 
-/* $Id: nslookup.c,v 1.12 2000/09/25 21:45:58 andersen Exp $ */
+/* $Id: nslookup.c,v 1.13 2000/12/01 02:55:13 kraai Exp $ */
diff --git a/networking/ping.c b/networking/ping.c
index a436309..af109cf 100644
--- a/networking/ping.c
+++ b/networking/ping.c
@@ -1,6 +1,6 @@
 /* vi: set sw=4 ts=4: */
 /*
- * $Id: ping.c,v 1.26 2000/11/14 23:29:24 andersen Exp $
+ * $Id: ping.c,v 1.27 2000/12/01 02:55:13 kraai Exp $
  * Mini ping implementation for busybox
  *
  * Copyright (C) 1999 by Randolph Chung <tausq@debian.org>
@@ -256,7 +256,7 @@
 	if (argc < 1)
 		usage(ping_usage);
 	ping(*argv);
-	exit(TRUE);
+	return EXIT_SUCCESS;
 }
 
 #else /* ! BB_FEATURE_SIMPLE_PING */
@@ -546,7 +546,7 @@
 
 	myid = getpid() & 0xFFFF;
 	ping(*argv);
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
 #endif /* ! BB_FEATURE_SIMPLE_PING */
 
diff --git a/nslookup.c b/nslookup.c
index acb3e3b..c46a0b8 100644
--- a/nslookup.c
+++ b/nslookup.c
@@ -167,7 +167,7 @@
 		host = gethostbyname(argv[1]);
 	}
 	hostent_fprint(host, stdout);
-	return( TRUE);
+	return EXIT_SUCCESS;
 }
 
-/* $Id: nslookup.c,v 1.12 2000/09/25 21:45:58 andersen Exp $ */
+/* $Id: nslookup.c,v 1.13 2000/12/01 02:55:13 kraai Exp $ */
diff --git a/ping.c b/ping.c
index a436309..af109cf 100644
--- a/ping.c
+++ b/ping.c
@@ -1,6 +1,6 @@
 /* vi: set sw=4 ts=4: */
 /*
- * $Id: ping.c,v 1.26 2000/11/14 23:29:24 andersen Exp $
+ * $Id: ping.c,v 1.27 2000/12/01 02:55:13 kraai Exp $
  * Mini ping implementation for busybox
  *
  * Copyright (C) 1999 by Randolph Chung <tausq@debian.org>
@@ -256,7 +256,7 @@
 	if (argc < 1)
 		usage(ping_usage);
 	ping(*argv);
-	exit(TRUE);
+	return EXIT_SUCCESS;
 }
 
 #else /* ! BB_FEATURE_SIMPLE_PING */
@@ -546,7 +546,7 @@
 
 	myid = getpid() & 0xFFFF;
 	ping(*argv);
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
 #endif /* ! BB_FEATURE_SIMPLE_PING */
 
diff --git a/procps/free.c b/procps/free.c
index a33fa9a..f2e746e 100644
--- a/procps/free.c
+++ b/procps/free.c
@@ -60,7 +60,7 @@
 	printf("%6s%13ld%13ld%13ld\n", "Total:", info.totalram+info.totalswap,
 			(info.totalram-info.freeram)+(info.totalswap-info.freeswap),
 			info.freeram+info.freeswap);
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
 
 
diff --git a/procps/kill.c b/procps/kill.c
index 7ade822..dd5ca49 100644
--- a/procps/kill.c
+++ b/procps/kill.c
@@ -158,7 +158,7 @@
 						}
 					}
 					fprintf(stderr, "\n\n");
-					exit(TRUE);
+					return EXIT_SUCCESS;
 				}
 				break;
 			case '-':
@@ -236,11 +236,12 @@
 			 * upon exit, so we can save a byte or two */
 			argv++;
 		}
-		exit (all_found);
+		if (all_found == FALSE)
+			return EXIT_FAILURE;
 	}
 #endif
 
-	exit(TRUE);
+	return EXIT_SUCCESS;
 
 
   end:
diff --git a/procps/ps.c b/procps/ps.c
index df32161..4998e15 100644
--- a/procps/ps.c
+++ b/procps/ps.c
@@ -183,7 +183,7 @@
 		fprintf(stdout, "\n");
 	}
 	closedir(dir);
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
 
 
diff --git a/procps/uptime.c b/procps/uptime.c
index fe4e48c..159f24b 100644
--- a/procps/uptime.c
+++ b/procps/uptime.c
@@ -70,5 +70,5 @@
 			LOAD_INT(info.loads[1]), LOAD_FRAC(info.loads[1]), 
 			LOAD_INT(info.loads[2]), LOAD_FRAC(info.loads[2]));
 
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/ps.c b/ps.c
index df32161..4998e15 100644
--- a/ps.c
+++ b/ps.c
@@ -183,7 +183,7 @@
 		fprintf(stdout, "\n");
 	}
 	closedir(dir);
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
 
 
diff --git a/pwd.c b/pwd.c
index c9de777..54129b1 100644
--- a/pwd.c
+++ b/pwd.c
@@ -34,5 +34,5 @@
 		fatalError("%s\n", strerror(errno));
 
 	printf("%s\n", buf);
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/rdate.c b/rdate.c
index 80b37de..7c8d541 100644
--- a/rdate.c
+++ b/rdate.c
@@ -101,7 +101,6 @@
 			default:
 			case 'H':
 				usage(rdate_usage);
-				return(FALSE);
 				break;
 			case 's':
 				setdate++;
@@ -117,11 +116,10 @@
 
 	if (optind == argc) {
 		usage(rdate_usage);
-		return(FALSE);
 	}
 
 	if ((time= askremotedate(argv[optind])) == (time_t)-1) {
-		return(FALSE);
+		return EXIT_FAILURE;
 	}
 	if (setdate) {
 		if (stime(&time) < 0)
@@ -131,5 +129,5 @@
 		fprintf(stdout, "%s", ctime(&time));
 	}
 
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/reset.c b/reset.c
index 8e2c491..bf8c3ed 100644
--- a/reset.c
+++ b/reset.c
@@ -29,6 +29,6 @@
 extern int reset_main(int argc, char **argv)
 {
        printf("\033c");
-       return(TRUE);
+       return EXIT_SUCCESS;
 }
 
diff --git a/rm.c b/rm.c
index 4f97cad..c62083e 100644
--- a/rm.c
+++ b/rm.c
@@ -102,9 +102,9 @@
 		} else {
 			if (recursiveAction(srcName, recursiveFlag, FALSE,
 								TRUE, fileAction, dirAction, NULL) == FALSE) {
-				exit(FALSE);
+				return EXIT_FAILURE;
 			}
 		}
 	}
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/rmmod.c b/rmmod.c
index dd29352..f5d7d35 100644
--- a/rmmod.c
+++ b/rmmod.c
@@ -34,7 +34,7 @@
 
 extern int rmmod_main(int argc, char **argv)
 {
-	int ret = TRUE;
+	int ret = EXIT_SUCCESS;
 	if (argc <= 1) {
 		usage(rmmod_usage);
 	}
@@ -47,9 +47,9 @@
 				/* Unload _all_ unused modules via NULL delete_module() call */
 				if (delete_module(NULL)) {
 					perror("rmmod");
-					exit(FALSE);
+					return EXIT_FAILURE;
 				}
-				exit(TRUE);
+				return EXIT_SUCCESS;
 			default:
 				usage(rmmod_usage);
 			}
@@ -59,7 +59,7 @@
 	while (argc-- > 0) {
 		if (delete_module(*argv) < 0) {
 			perror(*argv);
-			ret=FALSE;
+			ret = EXIT_FAILURE;
 		}
 		argv++;
 	}
diff --git a/setkeycodes.c b/setkeycodes.c
index 63c1063..6a31e04 100644
--- a/setkeycodes.c
+++ b/setkeycodes.c
@@ -68,5 +68,5 @@
 	argc -= 2;
 	argv += 2;
     }
-    return( TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/sh.c b/sh.c
index 461f2c0..1524ef1 100644
--- a/sh.c
+++ b/sh.c
@@ -217,11 +217,11 @@
 		newdir = cmd->progs[0].argv[1];
 	if (chdir(newdir)) {
 		printf("cd: %s: %s\n", newdir, strerror(errno));
-		return FALSE;
+		return EXIT_FAILURE;
 	}
 	getcwd(cwd, sizeof(char)*MAX_LINE);
 
-	return TRUE;
+	return EXIT_SUCCESS;
 }
 
 /* built-in 'env' handler */
@@ -245,14 +245,14 @@
 		fatalError("Exec to %s failed: %s\n", cmd->progs[0].argv[0],
 				strerror(errno));
 	}
-	return TRUE;
+	return EXIT_SUCCESS;
 }
 
 /* built-in 'exit' handler */
 static int builtin_exit(struct job *cmd, struct jobSet *junk)
 {
 	if (!cmd->progs[0].argv[1] == 1)
-		exit TRUE;
+		exit(EXIT_SUCCESS);
 
 	exit (atoi(cmd->progs[0].argv[1]));
 }
@@ -267,12 +267,12 @@
 		if (!cmd->progs[0].argv[1] || cmd->progs[0].argv[2]) {
 			errorMsg("%s: exactly one argument is expected\n",
 					cmd->progs[0].argv[0]);
-			return FALSE;
+			return EXIT_FAILURE;
 		}
 		if (sscanf(cmd->progs[0].argv[1], "%%%d", &jobNum) != 1) {
 			errorMsg("%s: bad argument '%s'\n",
 					cmd->progs[0].argv[0], cmd->progs[0].argv[1]);
-			return FALSE;
+			return EXIT_FAILURE;
 			for (job = jobList->head; job; job = job->next) {
 				if (job->jobId == jobNum) {
 					break;
@@ -286,7 +286,7 @@
 	if (!job) {
 		errorMsg("%s: unknown job %d\n",
 				cmd->progs[0].argv[0], jobNum);
-		return FALSE;
+		return EXIT_FAILURE;
 	}
 
 	if (*cmd->progs[0].argv[0] == 'f') {
@@ -305,7 +305,7 @@
 
 	job->stoppedProgs = 0;
 
-	return TRUE;
+	return EXIT_SUCCESS;
 }
 
 /* built-in 'help' handler */
@@ -326,7 +326,7 @@
 		fprintf(stdout, "%s\t%s\n", x->cmd, x->descr);
 	}
 	fprintf(stdout, "\n\n");
-	return TRUE;
+	return EXIT_SUCCESS;
 }
 
 /* built-in 'jobs' handler */
@@ -343,7 +343,7 @@
 
 		printf(JOB_STATUS_FORMAT, job->jobId, statusString, job->text);
 	}
-	return TRUE;
+	return EXIT_SUCCESS;
 }
 
 
@@ -352,7 +352,7 @@
 {
 	getcwd(cwd, sizeof(char)*MAX_LINE);
 	fprintf(stdout, "%s\n", cwd);
-	return TRUE;
+	return EXIT_SUCCESS;
 }
 
 /* built-in 'export VAR=value' handler */
@@ -437,11 +437,11 @@
 
 	if (! (cmd->jobContext & (IF_TRUE_CONTEXT|IF_FALSE_CONTEXT))) {
 		errorMsg("unexpected token `then'\n");
-		return FALSE;
+		return EXIT_FAILURE;
 	}
 	/* If the if result was FALSE, skip the 'then' stuff */
 	if (cmd->jobContext & IF_FALSE_CONTEXT) {
-		return TRUE;
+		return EXIT_SUCCESS;
 	}
 
 	cmd->jobContext |= THEN_EXP_CONTEXT;
@@ -464,11 +464,11 @@
 
 	if (! (cmd->jobContext & (IF_TRUE_CONTEXT|IF_FALSE_CONTEXT))) {
 		errorMsg("unexpected token `else'\n");
-		return FALSE;
+		return EXIT_FAILURE;
 	}
 	/* If the if result was TRUE, skip the 'else' stuff */
 	if (cmd->jobContext & IF_TRUE_CONTEXT) {
-		return TRUE;
+		return EXIT_SUCCESS;
 	}
 
 	cmd->jobContext |= ELSE_EXP_CONTEXT;
@@ -488,12 +488,12 @@
 {
 	if (! (cmd->jobContext & (IF_TRUE_CONTEXT|IF_FALSE_CONTEXT))) {
 		errorMsg("unexpected token `fi'\n");
-		return FALSE;
+		return EXIT_FAILURE;
 	}
 	/* Clear out the if and then context bits */
 	cmd->jobContext &= ~(IF_TRUE_CONTEXT|IF_FALSE_CONTEXT|THEN_EXP_CONTEXT|ELSE_EXP_CONTEXT);
 	debug_printf(stderr, "Hit an fi   -- jobContext=%d\n", cmd->jobContext);
-	return TRUE;
+	return EXIT_SUCCESS;
 }
 #endif
 
@@ -504,13 +504,13 @@
 	int status;
 
 	if (!cmd->progs[0].argv[1] == 1)
-		return FALSE;
+		return EXIT_FAILURE;
 
 	input = fopen(cmd->progs[0].argv[1], "r");
 	if (!input) {
 		fprintf(stdout, "Couldn't open file '%s'\n",
 				cmd->progs[0].argv[1]);
-		return FALSE;
+		return EXIT_FAILURE;
 	}
 
 	/* Now run the file */
@@ -524,10 +524,10 @@
 {
 	if (!cmd->progs[0].argv[1] == 1) {
 		fprintf(stdout, "unset: parameter required.\n");
-		return FALSE;
+		return EXIT_FAILURE;
 	}
 	unsetenv(cmd->progs[0].argv[1]);
-	return TRUE;
+	return EXIT_SUCCESS;
 }
 
 /* free up all memory from a job */
diff --git a/shell/cmdedit.c b/shell/cmdedit.c
index 8115e52..94b8fc7 100644
--- a/shell/cmdedit.c
+++ b/shell/cmdedit.c
@@ -135,7 +135,7 @@
 	cmdedit_reset_term();
 	fprintf(stdout, "\n");
 	if (sig!=SIGINT)
-		exit(TRUE);
+		exit(EXIT_SUCCESS);
 }
 
 /* Go to HOME position */
diff --git a/shell/lash.c b/shell/lash.c
index 461f2c0..1524ef1 100644
--- a/shell/lash.c
+++ b/shell/lash.c
@@ -217,11 +217,11 @@
 		newdir = cmd->progs[0].argv[1];
 	if (chdir(newdir)) {
 		printf("cd: %s: %s\n", newdir, strerror(errno));
-		return FALSE;
+		return EXIT_FAILURE;
 	}
 	getcwd(cwd, sizeof(char)*MAX_LINE);
 
-	return TRUE;
+	return EXIT_SUCCESS;
 }
 
 /* built-in 'env' handler */
@@ -245,14 +245,14 @@
 		fatalError("Exec to %s failed: %s\n", cmd->progs[0].argv[0],
 				strerror(errno));
 	}
-	return TRUE;
+	return EXIT_SUCCESS;
 }
 
 /* built-in 'exit' handler */
 static int builtin_exit(struct job *cmd, struct jobSet *junk)
 {
 	if (!cmd->progs[0].argv[1] == 1)
-		exit TRUE;
+		exit(EXIT_SUCCESS);
 
 	exit (atoi(cmd->progs[0].argv[1]));
 }
@@ -267,12 +267,12 @@
 		if (!cmd->progs[0].argv[1] || cmd->progs[0].argv[2]) {
 			errorMsg("%s: exactly one argument is expected\n",
 					cmd->progs[0].argv[0]);
-			return FALSE;
+			return EXIT_FAILURE;
 		}
 		if (sscanf(cmd->progs[0].argv[1], "%%%d", &jobNum) != 1) {
 			errorMsg("%s: bad argument '%s'\n",
 					cmd->progs[0].argv[0], cmd->progs[0].argv[1]);
-			return FALSE;
+			return EXIT_FAILURE;
 			for (job = jobList->head; job; job = job->next) {
 				if (job->jobId == jobNum) {
 					break;
@@ -286,7 +286,7 @@
 	if (!job) {
 		errorMsg("%s: unknown job %d\n",
 				cmd->progs[0].argv[0], jobNum);
-		return FALSE;
+		return EXIT_FAILURE;
 	}
 
 	if (*cmd->progs[0].argv[0] == 'f') {
@@ -305,7 +305,7 @@
 
 	job->stoppedProgs = 0;
 
-	return TRUE;
+	return EXIT_SUCCESS;
 }
 
 /* built-in 'help' handler */
@@ -326,7 +326,7 @@
 		fprintf(stdout, "%s\t%s\n", x->cmd, x->descr);
 	}
 	fprintf(stdout, "\n\n");
-	return TRUE;
+	return EXIT_SUCCESS;
 }
 
 /* built-in 'jobs' handler */
@@ -343,7 +343,7 @@
 
 		printf(JOB_STATUS_FORMAT, job->jobId, statusString, job->text);
 	}
-	return TRUE;
+	return EXIT_SUCCESS;
 }
 
 
@@ -352,7 +352,7 @@
 {
 	getcwd(cwd, sizeof(char)*MAX_LINE);
 	fprintf(stdout, "%s\n", cwd);
-	return TRUE;
+	return EXIT_SUCCESS;
 }
 
 /* built-in 'export VAR=value' handler */
@@ -437,11 +437,11 @@
 
 	if (! (cmd->jobContext & (IF_TRUE_CONTEXT|IF_FALSE_CONTEXT))) {
 		errorMsg("unexpected token `then'\n");
-		return FALSE;
+		return EXIT_FAILURE;
 	}
 	/* If the if result was FALSE, skip the 'then' stuff */
 	if (cmd->jobContext & IF_FALSE_CONTEXT) {
-		return TRUE;
+		return EXIT_SUCCESS;
 	}
 
 	cmd->jobContext |= THEN_EXP_CONTEXT;
@@ -464,11 +464,11 @@
 
 	if (! (cmd->jobContext & (IF_TRUE_CONTEXT|IF_FALSE_CONTEXT))) {
 		errorMsg("unexpected token `else'\n");
-		return FALSE;
+		return EXIT_FAILURE;
 	}
 	/* If the if result was TRUE, skip the 'else' stuff */
 	if (cmd->jobContext & IF_TRUE_CONTEXT) {
-		return TRUE;
+		return EXIT_SUCCESS;
 	}
 
 	cmd->jobContext |= ELSE_EXP_CONTEXT;
@@ -488,12 +488,12 @@
 {
 	if (! (cmd->jobContext & (IF_TRUE_CONTEXT|IF_FALSE_CONTEXT))) {
 		errorMsg("unexpected token `fi'\n");
-		return FALSE;
+		return EXIT_FAILURE;
 	}
 	/* Clear out the if and then context bits */
 	cmd->jobContext &= ~(IF_TRUE_CONTEXT|IF_FALSE_CONTEXT|THEN_EXP_CONTEXT|ELSE_EXP_CONTEXT);
 	debug_printf(stderr, "Hit an fi   -- jobContext=%d\n", cmd->jobContext);
-	return TRUE;
+	return EXIT_SUCCESS;
 }
 #endif
 
@@ -504,13 +504,13 @@
 	int status;
 
 	if (!cmd->progs[0].argv[1] == 1)
-		return FALSE;
+		return EXIT_FAILURE;
 
 	input = fopen(cmd->progs[0].argv[1], "r");
 	if (!input) {
 		fprintf(stdout, "Couldn't open file '%s'\n",
 				cmd->progs[0].argv[1]);
-		return FALSE;
+		return EXIT_FAILURE;
 	}
 
 	/* Now run the file */
@@ -524,10 +524,10 @@
 {
 	if (!cmd->progs[0].argv[1] == 1) {
 		fprintf(stdout, "unset: parameter required.\n");
-		return FALSE;
+		return EXIT_FAILURE;
 	}
 	unsetenv(cmd->progs[0].argv[1]);
-	return TRUE;
+	return EXIT_SUCCESS;
 }
 
 /* free up all memory from a job */
diff --git a/sleep.c b/sleep.c
index 709e3de..ad92b10 100644
--- a/sleep.c
+++ b/sleep.c
@@ -32,7 +32,7 @@
 
 	if (sleep(atoi(*(++argv))) != 0) {
 		perror("sleep");
-		exit(FALSE);
+		return EXIT_FAILURE;
 	}
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/swaponoff.c b/swaponoff.c
index 4a1c8f9..0ae0c36 100644
--- a/swaponoff.c
+++ b/swaponoff.c
@@ -50,7 +50,7 @@
 
 	if (status != 0) {
 		perror(applet_name);
-		exit(FALSE);
+		exit(EXIT_FAILURE);
 	}
 }
 
@@ -69,7 +69,7 @@
 		}
 	}
 	endmntent(f);
-	exit(TRUE);
+	exit(EXIT_SUCCESS);
 }
 
 
@@ -105,9 +105,8 @@
 			}
 	}
 	swap_enable_disable(*argv);
-	exit(TRUE);
+	return EXIT_SUCCESS;
 
   usage_and_exit:
 	usage((whichApp == SWAPON_APP) ? swapon_usage : swapoff_usage);
-	exit(FALSE);
 }
diff --git a/sysklogd/syslogd.c b/sysklogd/syslogd.c
index 9bedc84..a507158 100644
--- a/sysklogd/syslogd.c
+++ b/sysklogd/syslogd.c
@@ -568,7 +568,7 @@
 		doSyslogd();
 	}
 
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
 
 /*
diff --git a/syslogd.c b/syslogd.c
index 9bedc84..a507158 100644
--- a/syslogd.c
+++ b/syslogd.c
@@ -568,7 +568,7 @@
 		doSyslogd();
 	}
 
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
 
 /*
diff --git a/tar.c b/tar.c
index 826ab96..01997e4 100644
--- a/tar.c
+++ b/tar.c
@@ -156,6 +156,7 @@
 	int tostdoutFlag = FALSE;
 	int firstOpt = TRUE;
 	int stopIt;
+	int status;
 																		   
 
 	if (argc <= 1)
@@ -227,16 +228,21 @@
 #ifndef BB_FEATURE_TAR_CREATE
 		fatalError( "This version of tar was not compiled with tar creation support.\n");
 #else
-		exit(writeTarFile(tarName, verboseFlag, argv, excludeList));
+		status = writeTarFile(tarName, verboseFlag, argv, excludeList);
 #endif
 	}
 	if (listFlag == TRUE || extractFlag == TRUE) {
 		if (*argv)
 			extractList = argv;
-		exit(readTarFile(tarName, extractFlag, listFlag, tostdoutFlag,
-					verboseFlag, extractList, excludeList));
+		status = readTarFile(tarName, extractFlag, listFlag, tostdoutFlag,
+					verboseFlag, extractList, excludeList);
 	}
 
+	if (status == TRUE)
+		return EXIT_SUCCESS;
+	else
+		return EXIT_FAILURE;
+
   flagError:
 	fatalError( "Exactly one of 'c', 'x' or 't' must be specified\n");
 }
diff --git a/touch.c b/touch.c
index 7db6c6e..5537fb6 100644
--- a/touch.c
+++ b/touch.c
@@ -43,7 +43,6 @@
 				break;
 			default:
 				usage(touch_usage);
-				exit(FALSE);
 			}
 		}
 	}
@@ -57,7 +56,7 @@
 				S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
 		if (fd < 0) {
 			if (create == FALSE && errno == ENOENT)
-				exit(TRUE);
+				return EXIT_SUCCESS;
 			else {
 				fatalError("%s", strerror(errno));
 			}
@@ -70,5 +69,5 @@
 		argv++;
 	}
 
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/true_false.c b/true_false.c
index b3b221e..333541c 100644
--- a/true_false.c
+++ b/true_false.c
@@ -27,10 +27,10 @@
 
 extern int true_main(int argc, char **argv)
 {
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
 
 extern int false_main(int argc, char **argv)
 {
-	return(FALSE);
+	return EXIT_FAILURE;
 }
diff --git a/tty.c b/tty.c
index 6eebed9..46201d3 100644
--- a/tty.c
+++ b/tty.c
@@ -38,5 +38,5 @@
 		else
 			puts("not a tty");
 	}
-	return(isatty(0) ? TRUE : FALSE);
+	return(isatty(0) ? EXIT_SUCCESS : EXIT_FAILURE);
 }
diff --git a/umount.c b/umount.c
index 1d9c6bb..5f3e59c 100644
--- a/umount.c
+++ b/umount.c
@@ -273,11 +273,14 @@
 
 	mtab_read();
 	if (umountAll == TRUE) {
-		exit(umount_all(useMtab));
+		if (umount_all(useMtab) == TRUE)
+			return EXIT_SUCCESS;
+		else
+			return EXIT_FAILURE;
 	}
 	if (do_umount(*argv, useMtab) == 0)
-		exit(TRUE);
+		return EXIT_SUCCESS;
 	perror("umount");
-	return(FALSE);
+	return EXIT_FAILURE;
 }
 
diff --git a/uname.c b/uname.c
index 8d9427c..2781b80 100644
--- a/uname.c
+++ b/uname.c
@@ -138,7 +138,7 @@
 	print_element(PRINT_MACHINE, name.machine);
 	print_element(PRINT_PROCESSOR, processor);
 
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
 
 /* If the name element set in MASK is selected for printing in `toprint',
diff --git a/update.c b/update.c
index 7279d83..080cb99 100644
--- a/update.c
+++ b/update.c
@@ -67,7 +67,7 @@
 
 	pid = fork();
 	if (pid < 0)
-		exit(FALSE);
+		return EXIT_FAILURE;
 	else if (pid == 0) {
 		/* Become a proper daemon */
 		setsid();
@@ -99,12 +99,12 @@
 					syslog(LOG_INFO,
 						   "This kernel does not need update(8). Exiting.");
 					closelog();
-					exit(TRUE);
+					return EXIT_SUCCESS;
 				}
 			}
 		}
 	}
-	return( TRUE);
+	return EXIT_SUCCESS;
 }
 
 /*
diff --git a/uptime.c b/uptime.c
index fe4e48c..159f24b 100644
--- a/uptime.c
+++ b/uptime.c
@@ -70,5 +70,5 @@
 			LOAD_INT(info.loads[1]), LOAD_FRAC(info.loads[1]), 
 			LOAD_INT(info.loads[2]), LOAD_FRAC(info.loads[2]));
 
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/usleep.c b/usleep.c
index 69790ef..86dc050 100644
--- a/usleep.c
+++ b/usleep.c
@@ -32,5 +32,5 @@
 	}
 
 	usleep(atoi(*(++argv)));	/* return void */
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/util-linux/dmesg.c b/util-linux/dmesg.c
index 88b5d13..a32ca79 100644
--- a/util-linux/dmesg.c
+++ b/util-linux/dmesg.c
@@ -73,7 +73,7 @@
 		if (n < 0) {
 			goto klogctl_error;
 		}
-		exit(TRUE);
+		return EXIT_SUCCESS;
 	}
 
 	if (bufsize < 4096)
@@ -98,11 +98,11 @@
 	}
 	if (lastc != '\n')
 		putchar('\n');
-	exit(TRUE);
+	return EXIT_SUCCESS;
   end:
 	usage(dmesg_usage);
-	exit(FALSE);
+	return EXIT_FAILURE;
   klogctl_error:
 	perror("klogctl");
-	return(FALSE);
+	return EXIT_FAILURE;
 }
diff --git a/util-linux/fbset.c b/util-linux/fbset.c
index 8307f26..47130e3 100644
--- a/util-linux/fbset.c
+++ b/util-linux/fbset.c
@@ -434,7 +434,7 @@
 	if (g_options & OPT_READMODE) {
 		if (!readmode(&var, modefile, mode)) {
 			errorMsg("Unknown video mode `%s'\n", mode);
-			exit(1);
+			return EXIT_FAILURE;
 		}
 	}
 
@@ -446,5 +446,5 @@
 	/* Don't close the file, as exiting will take care of that */
 	/* close(fh); */
 
-	return (TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/util-linux/fdflush.c b/util-linux/fdflush.c
index 6633e12..380015d 100644
--- a/util-linux/fdflush.c
+++ b/util-linux/fdflush.c
@@ -40,7 +40,7 @@
 	fd = open(*argv, 0);
 	if (fd < 0) {
 		perror(*argv);
-		exit(FALSE);
+		return EXIT_FAILURE;
 	}
 
 	value = ioctl(fd, FDFLUSH, 0);
@@ -50,7 +50,7 @@
 
 	if (value) {
 		perror(*argv);
-		exit(FALSE);
+		return EXIT_FAILURE;
 	}
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/util-linux/freeramdisk.c b/util-linux/freeramdisk.c
index 22fc3e6..5671514 100644
--- a/util-linux/freeramdisk.c
+++ b/util-linux/freeramdisk.c
@@ -51,7 +51,7 @@
 	/* Don't bother closing.  Exit does
 	 * that, so we can save a few bytes */
 	/* close(f); */
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
 
 /*
diff --git a/util-linux/mkswap.c b/util-linux/mkswap.c
index 627d04f..4757e15 100644
--- a/util-linux/mkswap.c
+++ b/util-linux/mkswap.c
@@ -176,7 +176,7 @@
 void die(const char *str)
 {
 	errorMsg("%s\n", str);
-	exit(FALSE);
+	exit(EXIT_FAILURE);
 }
 
 void page_ok(int page)
@@ -325,7 +325,7 @@
 	} else if (PAGES > sz && !force) {
 		errorMsg("error: size %ld is larger than device size %d\n",
 				PAGES * (pagesize / 1024), sz * (pagesize / 1024));
-		exit(FALSE);
+		return EXIT_FAILURE;
 	}
 
 	if (version == -1) {
@@ -369,7 +369,7 @@
 	DEV = open(device_name, O_RDWR);
 	if (DEV < 0 || fstat(DEV, &statbuf) < 0) {
 		perror(device_name);
-		exit(FALSE);
+		return EXIT_FAILURE;
 	}
 	if (!S_ISBLK(statbuf.st_mode))
 		check = 0;
@@ -393,7 +393,7 @@
 "This probably means creating v0 swap would destroy your partition table\n"
 "No swap created. If you really want to create swap v0 on that device, use\n"
 "the -f option to force it.\n", device_name);
-				exit(FALSE);
+				return EXIT_FAILURE;
 			}
 		}
 	}
@@ -429,5 +429,5 @@
 	 */
 	if (fsync(DEV))
 		die("fsync failed");
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/util-linux/mount.c b/util-linux/mount.c
index 8b115c9..34dbb5e 100644
--- a/util-linux/mount.c
+++ b/util-linux/mount.c
@@ -330,7 +330,7 @@
 	int fakeIt = FALSE;
 	int useMtab = TRUE;
 	int i;
-	int rc = FALSE;
+	int rc = EXIT_FAILURE;
 	int fstabmount = FALSE;	
 
 #if defined BB_FEATURE_USE_DEVPS_PATCH
@@ -367,7 +367,7 @@
 		free( mntentlist);
 		close(fd);
 #endif
-		exit(TRUE);
+		return EXIT_SUCCESS;
 	}
 #else
 	if (argc == 1) {
@@ -388,7 +388,7 @@
 		} else {
 			perror(mtab_file);
 		}
-		exit(TRUE);
+		return EXIT_SUCCESS;
 	}
 #endif
 
@@ -489,7 +489,7 @@
 					&extra_opts, &string_flags, 1);
 				if ( rc != 0) {
 					fatalError("nfsmount failed: %s\n", strerror(errno));	
-					rc = FALSE;
+					rc = EXIT_FAILURE;
 				}
 			}
 #endif
@@ -499,7 +499,7 @@
 			if (all == FALSE)
 				break;
 
-			rc = TRUE;	// Always return 0 for 'all'
+			rc = EXIT_SUCCESS;	// Always return 0 for 'all'
 		}
 		if (fstabmount == TRUE)
 			endmntent(f);
@@ -512,8 +512,6 @@
 	
 	goto singlemount;
 	
-	exit(FALSE);
-
 goodbye:
 	usage(mount_usage);
 }
diff --git a/util-linux/rdate.c b/util-linux/rdate.c
index 80b37de..7c8d541 100644
--- a/util-linux/rdate.c
+++ b/util-linux/rdate.c
@@ -101,7 +101,6 @@
 			default:
 			case 'H':
 				usage(rdate_usage);
-				return(FALSE);
 				break;
 			case 's':
 				setdate++;
@@ -117,11 +116,10 @@
 
 	if (optind == argc) {
 		usage(rdate_usage);
-		return(FALSE);
 	}
 
 	if ((time= askremotedate(argv[optind])) == (time_t)-1) {
-		return(FALSE);
+		return EXIT_FAILURE;
 	}
 	if (setdate) {
 		if (stime(&time) < 0)
@@ -131,5 +129,5 @@
 		fprintf(stdout, "%s", ctime(&time));
 	}
 
-	return(TRUE);
+	return EXIT_SUCCESS;
 }
diff --git a/util-linux/swaponoff.c b/util-linux/swaponoff.c
index 4a1c8f9..0ae0c36 100644
--- a/util-linux/swaponoff.c
+++ b/util-linux/swaponoff.c
@@ -50,7 +50,7 @@
 
 	if (status != 0) {
 		perror(applet_name);
-		exit(FALSE);
+		exit(EXIT_FAILURE);
 	}
 }
 
@@ -69,7 +69,7 @@
 		}
 	}
 	endmntent(f);
-	exit(TRUE);
+	exit(EXIT_SUCCESS);
 }
 
 
@@ -105,9 +105,8 @@
 			}
 	}
 	swap_enable_disable(*argv);
-	exit(TRUE);
+	return EXIT_SUCCESS;
 
   usage_and_exit:
 	usage((whichApp == SWAPON_APP) ? swapon_usage : swapoff_usage);
-	exit(FALSE);
 }
diff --git a/util-linux/umount.c b/util-linux/umount.c
index 1d9c6bb..5f3e59c 100644
--- a/util-linux/umount.c
+++ b/util-linux/umount.c
@@ -273,11 +273,14 @@
 
 	mtab_read();
 	if (umountAll == TRUE) {
-		exit(umount_all(useMtab));
+		if (umount_all(useMtab) == TRUE)
+			return EXIT_SUCCESS;
+		else
+			return EXIT_FAILURE;
 	}
 	if (do_umount(*argv, useMtab) == 0)
-		exit(TRUE);
+		return EXIT_SUCCESS;
 	perror("umount");
-	return(FALSE);
+	return EXIT_FAILURE;
 }
 
diff --git a/uudecode.c b/uudecode.c
index 78ca096..825fdb5 100644
--- a/uudecode.c
+++ b/uudecode.c
@@ -294,16 +294,16 @@
   }
 
   if (optind == argc)
-    exit_status = decode ("stdin", outname) == 0 ? TRUE : FALSE;
+    exit_status = decode ("stdin", outname) == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
   else {
-    exit_status = TRUE;
+    exit_status = EXIT_SUCCESS;
     do {
       if (freopen (argv[optind], "r", stdin) != NULL) {
         if (decode (argv[optind], outname) != 0)
           exit_status = FALSE;
       } else {
         errorMsg("%s: %s\n", argv[optind], strerror(errno));
-        exit_status = FALSE;
+        exit_status = EXIT_FAILURE;
       }
       optind++;
     }
diff --git a/uuencode.c b/uuencode.c
index aea99ed..8d15adb 100644
--- a/uuencode.c
+++ b/uuencode.c
@@ -179,7 +179,7 @@
     /* Optional first argument is input file.  */
     if (!freopen (argv[optind], "r", stdin) || fstat (fileno (stdin), &sb)) {
       errorMsg("%s: %s\n", argv[optind], strerror(errno));
-      exit FALSE;
+      return EXIT_FAILURE;
     }
     mode = sb.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO);
     optind++;
@@ -200,9 +200,9 @@
   printf(trans_ptr == uu_std ? "end\n" : "====\n");
   if (ferror (stdout)) {
     errorMsg("Write error\n");
-    exit FALSE;
+    return EXIT_FAILURE;
   }
-  return( TRUE);
+  return EXIT_SUCCESS;
 }
 
 /* Copyright (c) 1983 Regents of the University of California.
