Quiet mode, sometimes error messages arent wanted
diff --git a/include/libbb.h b/include/libbb.h
index 4a4b919..224c561 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -237,7 +237,8 @@
 	extract_control_tar_gz = 128,
 	extract_unzip_only = 256,
 	extract_unconditional = 512,
-	extract_create_leading_dirs = 1024
+	extract_create_leading_dirs = 1024,
+	extract_quiet = 2048
 };
 char *unarchive(FILE *src_stream, FILE *out_stream, file_header_t *(*get_header)(FILE *),
 	const int extract_function, const char *prefix, char **extract_names);
diff --git a/libbb/libbb.h b/libbb/libbb.h
index 4a4b919..224c561 100644
--- a/libbb/libbb.h
+++ b/libbb/libbb.h
@@ -237,7 +237,8 @@
 	extract_control_tar_gz = 128,
 	extract_unzip_only = 256,
 	extract_unconditional = 512,
-	extract_create_leading_dirs = 1024
+	extract_create_leading_dirs = 1024,
+	extract_quiet = 2048
 };
 char *unarchive(FILE *src_stream, FILE *out_stream, file_header_t *(*get_header)(FILE *),
 	const int extract_function, const char *prefix, char **extract_names);
diff --git a/libbb/unarchive.c b/libbb/unarchive.c
index d95f2cf..5c5bb49 100644
--- a/libbb/unarchive.c
+++ b/libbb/unarchive.c
@@ -116,15 +116,19 @@
 					unlink(full_name); /* Directories might not be empty etc */
 				}
 			} else {
-				error_msg("%s not created: newer or same age file exists", file_entry->name);
-					seek_sub_file(src_stream, file_entry->size);
+				if ((function & extract_quiet) != extract_quiet) {
+					error_msg("%s not created: newer or same age file exists", file_entry->name);
+				}
+				seek_sub_file(src_stream, file_entry->size);
 				return (NULL);
 			}
 		}
 		if (function & extract_create_leading_dirs) { /* Create leading directories with default umask */
 			char *parent = dirname(full_name);
 			if (make_directory (parent, -1, FILEUTILS_RECUR) != 0) {
-				error_msg("couldn't create leading directories");
+				if ((function & extract_quiet) != extract_quiet) {
+					error_msg("couldn't create leading directories");
+				}
 			}
 			free (parent);
 		}
@@ -132,8 +136,10 @@
 			case S_IFREG:
 				if (file_entry->link_name) { /* Found a cpio hard link */
 					if (link(file_entry->link_name, full_name) != 0) {
-						perror_msg("Cannot link from %s to '%s'",
-							file_entry->name, file_entry->link_name);
+						if ((function & extract_quiet) != extract_quiet) {
+							perror_msg("Cannot link from %s to '%s'",
+								file_entry->name, file_entry->link_name);
+						}
 					}
 				} else {
 					if ((dst_stream = wfopen(full_name, "w")) == NULL) {
@@ -148,13 +154,17 @@
 			case S_IFDIR:
 				if (stat_res != 0) {
 					if (mkdir(full_name, file_entry->mode) < 0) {
-						perror_msg("extract_archive: ");
+						if ((function & extract_quiet) != extract_quiet) {
+							perror_msg("extract_archive: ");
+						}
 					}
 				}
 				break;
 			case S_IFLNK:
 				if (symlink(file_entry->link_name, full_name) < 0) {
-					perror_msg("Cannot create symlink from %s to '%s'", file_entry->name, file_entry->link_name); 
+					if ((function & extract_quiet) != extract_quiet) {
+						perror_msg("Cannot create symlink from %s to '%s'", file_entry->name, file_entry->link_name);
+					}
 					return NULL;
 				}
 				break;
@@ -163,7 +173,9 @@
 			case S_IFCHR:
 			case S_IFIFO:
 				if (mknod(full_name, file_entry->mode, file_entry->device) == -1) {
-					perror_msg("Cannot create node %s", file_entry->name);
+					if ((function & extract_quiet) != extract_quiet) {
+						perror_msg("Cannot create node %s", file_entry->name);
+					}
 					return NULL;
 				}
 				break;