libbb: eliminate a static data array in bb_mode_string()

function                                             old     new   delta
print_stat                                           861     869      +8
header_verbose_list_ar                                73      77      +4
display_single                                       975     979      +4
header_verbose_list                                  237     239      +2
bb_mode_string                                       124     115      -9
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 4/1 up/down: 18/-9)               Total: 9 bytes
   text	   data	    bss	    dec	    hex	filename
1043136	    559	   5052	1048747	 1000ab	busybox_old
1043153	    559	   5020	1048732	 10009c	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
diff --git a/coreutils/chmod.c b/coreutils/chmod.c
index 8e3e138..5832cc5 100644
--- a/coreutils/chmod.c
+++ b/coreutils/chmod.c
@@ -91,8 +91,9 @@
 		 || (OPT_CHANGED
 		     && (statbuf->st_mode & 07777) != (newmode & 07777))
 		) {
+			char modestr[12];
 			printf("mode of '%s' changed to %04o (%s)\n", fileName,
-				newmode & 07777, bb_mode_string(newmode)+1);
+				newmode & 07777, bb_mode_string(modestr, newmode)+1);
 		}
 		return TRUE;
 	}
diff --git a/coreutils/ls.c b/coreutils/ls.c
index 9e85616..9a1264e 100644
--- a/coreutils/ls.c
+++ b/coreutils/ls.c
@@ -503,7 +503,8 @@
 		column += printf("%6"OFF_FMT"u ", (off_t) (dn->dn_blocks >> 1));
 	if (opt & OPT_l) {
 		/* long listing: show mode */
-		column += printf("%-10s ", (char *) bb_mode_string(dn->dn_mode));
+		char modestr[12];
+		column += printf("%-10s ", (char *) bb_mode_string(modestr, dn->dn_mode));
 		/* long listing: show number of links */
 		column += printf("%4lu ", (long) dn->dn_nlink);
 		/* long listing: show user/group */
diff --git a/coreutils/stat.c b/coreutils/stat.c
index a839346..2c2909e 100644
--- a/coreutils/stat.c
+++ b/coreutils/stat.c
@@ -339,7 +339,8 @@
 		strcat(pformat, "lo");
 		printf(pformat, (unsigned long) (statbuf->st_mode & (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)));
 	} else if (m == 'A') {
-		printfs(pformat, bb_mode_string(statbuf->st_mode));
+		char modestr[12];
+		printfs(pformat, bb_mode_string(modestr, statbuf->st_mode));
 	} else if (m == 'f') {
 		strcat(pformat, "lx");
 		printf(pformat, (unsigned long) statbuf->st_mode);
@@ -702,6 +703,7 @@
 			bb_putchar('\n');
 # endif
 	} else {
+		char modestr[12];
 		char *linkname = NULL;
 		struct passwd *pw_ent;
 		struct group *gw_ent;
@@ -736,7 +738,7 @@
 			bb_putchar('\n');
 		printf("Access: (%04lo/%10.10s)  Uid: (%5lu/%8s)   Gid: (%5lu/%8s)\n",
 		       (unsigned long) (statbuf.st_mode & (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)),
-		       bb_mode_string(statbuf.st_mode),
+		       bb_mode_string(modestr, statbuf.st_mode),
 		       (unsigned long) statbuf.st_uid,
 		       (pw_ent != NULL) ? pw_ent->pw_name : "UNKNOWN",
 		       (unsigned long) statbuf.st_gid,