change interface to bb_xasprintf() - more perfect for me.
ln.c: error_msg(str)->error_msg(%s, str) - remove standart "feature" for hackers
reduce 100 bytes don't care in sum
diff --git a/archival/tar.c b/archival/tar.c
index 7a82b44..f6750ae 100644
--- a/archival/tar.c
+++ b/archival/tar.c
@@ -695,12 +695,8 @@
 	}
 
 	/* Prepend '-' to the first argument if required */
-	if (argv[1][0] != '-') {
-		char *tmp;
-
-		bb_xasprintf(&tmp, "-%s", argv[1]);
-		argv[1] = tmp;
-	}
+	if (argv[1][0] != '-') 
+		argv[1] = bb_xasprintf("-%s", argv[1]);
 
 	/* Initialise default values */
 	tar_handle = init_handle();
diff --git a/coreutils/expr.c b/coreutils/expr.c
index 3f052d9..969d9ff 100644
--- a/coreutils/expr.c
+++ b/coreutils/expr.c
@@ -147,7 +147,7 @@
 static void tostring (VALUE *v)
 {
 	if (v->type == integer) {
-               bb_xasprintf (&(v->u.s), "%d", v->u.i);
+		v->u.s = bb_xasprintf ("%d", v->u.i);
 		v->type = string;
 	}
 }
diff --git a/coreutils/ln.c b/coreutils/ln.c
index 274e0d0..6751e90 100644
--- a/coreutils/ln.c
+++ b/coreutils/ln.c
@@ -74,17 +74,17 @@
 			src_name = src;
 		}
 		if (!(flag & LN_SYMLINK) && stat(*argv, &statbuf)) {
-			bb_perror_msg(*argv);
+			bb_perror_msg("%s", *argv);
 			status = EXIT_FAILURE;
 			free(src_name);
 			continue;
 		}
 
 		if (flag & LN_BACKUP) {
-				char *backup = NULL;
-				bb_xasprintf(&backup, "%s%s", src, suffix);
+				char *backup;
+				backup = bb_xasprintf("%s%s", src, suffix);
 				if (rename(src, backup) < 0 && errno != ENOENT) {
-						bb_perror_msg(src);
+						bb_perror_msg("%s", src);
 						status = EXIT_FAILURE;
 						free(backup);
 						continue;
diff --git a/e2fsprogs/fsck.c b/e2fsprogs/fsck.c
index bb334e3..93514a3 100644
--- a/e2fsprogs/fsck.c
+++ b/e2fsprogs/fsck.c
@@ -363,7 +363,6 @@
 {
   char *s;
   const char *tpl;
-  char *prog;
   char *p = string_copy(fsck_path);
   struct stat st;
 
@@ -371,12 +370,12 @@
   tpl = (strncmp(type, "fsck.", 5) ? "%s/fsck.%s" : "%s/%s");
 
   for(s = strtok(p, ":"); s; s = strtok(NULL, ":")) {
-	bb_xasprintf(&prog, tpl, s, type);
-	if (stat(prog, &st) == 0) break;
-	free(prog);
+	s = bb_xasprintf(tpl, s, type);
+	if (stat(s, &st) == 0) break;
+	free(s);
   }
   free(p);
-  return(s ? prog : NULL);
+  return(s);
 }
 
 static int progress_active(void)
@@ -410,7 +409,7 @@
 		return ENOMEM;
 	memset(inst, 0, sizeof(struct fsck_instance));
 
-	bb_xasprintf(&prog, "fsck.%s", type);
+	prog = bb_xasprintf("fsck.%s", type);
 	argv[0] = prog;
 	argc = 1;
 
@@ -1189,7 +1188,7 @@
 
 	/* Update our search path to include uncommon directories. */
 	if (oldpath) {
-		bb_xasprintf(&fsck_path, "%s:%s", fsck_prefix_path, oldpath);
+		fsck_path = bb_xasprintf("%s:%s", fsck_prefix_path, oldpath);
 	} else {
 		fsck_path = string_copy(fsck_prefix_path);
 	}
diff --git a/e2fsprogs/mke2fs.c b/e2fsprogs/mke2fs.c
index 017fb53..6cd5bd4 100644
--- a/e2fsprogs/mke2fs.c
+++ b/e2fsprogs/mke2fs.c
@@ -794,10 +794,7 @@
 
 	/* Update our PATH to include /sbin  */
 	if (oldpath) {
-		char *newpath;
-
-		bb_xasprintf(&newpath, "%s:%s", PATH_SET, oldpath);
-		putenv(newpath);
+		putenv (bb_xasprintf("%s:%s", PATH_SET, oldpath));
 	} else
 		putenv (PATH_SET);
 
diff --git a/include/libbb.h b/include/libbb.h
index c92d972..02bdb58 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -408,8 +408,7 @@
 extern size_t bb_strlen(const char *string);
 #define strlen(x)   bb_strlen(x)
 
-void bb_xasprintf(char **string_ptr, const char *format, ...) __attribute__ ((format (printf, 2, 3)));
-
+char *bb_xasprintf(const char *format, ...) __attribute__ ((format (printf, 1, 2)));
 
 #define FAIL_DELAY    3
 extern void change_identity ( const struct passwd *pw );
diff --git a/libbb/bb_asprintf.c b/libbb/bb_asprintf.c
index a3ba424..8658a54 100644
--- a/libbb/bb_asprintf.c
+++ b/libbb/bb_asprintf.c
@@ -1,5 +1,5 @@
 /*
-   Copyright (C) 2002 Vladimir Oleynik <dzo@simtreas.ru>
+   Copyright (C) 2002,2005 Vladimir Oleynik <dzo@simtreas.ru>
 */
 
 #include <stdlib.h>
@@ -7,16 +7,18 @@
 #include <stdarg.h>
 #include "libbb.h"
 
-void bb_xasprintf(char **string_ptr, const char *format, ...)
+char *bb_xasprintf(const char *format, ...)
 {
 	va_list p;
 	int r;
+	char *string_ptr;
 
 	va_start(p, format);
-	r = vasprintf(string_ptr, format, p);
+	r = vasprintf(&string_ptr, format, p);
 	va_end(p);
 
 	if (r < 0) {
 		bb_perror_msg_and_die("bb_xasprintf");
 	}
+	return string_ptr;
 }
diff --git a/libbb/concat_path_file.c b/libbb/concat_path_file.c
index 00233ad..029c232 100644
--- a/libbb/concat_path_file.c
+++ b/libbb/concat_path_file.c
@@ -30,7 +30,6 @@
 
 extern char *concat_path_file(const char *path, const char *filename)
 {
-	char *outbuf;
 	char *lc;
 
 	if (!path)
@@ -38,7 +37,5 @@
 	lc = last_char_is(path, '/');
 	while (*filename == '/')
 		filename++;
-	bb_xasprintf(&outbuf, "%s%s%s", path, (lc==NULL ? "/" : ""), filename);
-
-	return outbuf;
+	return bb_xasprintf("%s%s%s", path, (lc==NULL ? "/" : ""), filename);
 }
diff --git a/libbb/run_shell.c b/libbb/run_shell.c
index 67ff2a5..6d084ee 100644
--- a/libbb/run_shell.c
+++ b/libbb/run_shell.c
@@ -84,11 +84,8 @@
 
 	args [0] = bb_get_last_path_component ( bb_xstrdup ( shell ));
 
-	if ( loginshell ) {
-		char *args0;
-		bb_xasprintf ( &args0, "-%s", args [0] );
-		args [0] = args0;
-	}
+	if ( loginshell ) 
+		args [0] = bb_xasprintf ("-%s", args [0]);
 
 	if ( command ) {
 		args [argno++] = "-c";
diff --git a/loginutils/adduser.c b/loginutils/adduser.c
index eb98901..1630c72 100644
--- a/loginutils/adduser.c
+++ b/loginutils/adduser.c
@@ -117,7 +117,7 @@
 {
 	char *cmd;
 
-	bb_xasprintf(&cmd, "addgroup -g %d %s", gid, login);
+	cmd = bb_xasprintf("addgroup -g %d %s", gid, login);
 	system(cmd);
 	free(cmd);
 }
diff --git a/miscutils/less.c b/miscutils/less.c
index 7b1b96c..189b886 100644
--- a/miscutils/less.c
+++ b/miscutils/less.c
@@ -208,7 +208,7 @@
 
 	for (i = 0; i <= num_flines; i++) {
 		safe_strncpy(current_line, flines[i], 256);
-		bb_xasprintf(&flines[i],"%5d %s", i + 1, current_line);
+		flines[i] = bb_xasprintf("%5d %s", i + 1, current_line);
 	}
 }
 
@@ -618,11 +618,8 @@
 
 static char *insert_highlights (char *line, int start, int end) {
 
-	char *new_line;
-
-	bb_xasprintf(&new_line, "%.*s%s%.*s%s%s", start, line, HIGHLIGHT,
+	return bb_xasprintf("%.*s%s%.*s%s%s", start, line, HIGHLIGHT,
 			end - start, line + start, NORMAL, line + end);
-	return new_line;
 }
 
 static char *process_regex_on_line(char *line, regex_t *pattern) {
diff --git a/miscutils/mountpoint.c b/miscutils/mountpoint.c
index 46b2d4e..771df55 100644
--- a/miscutils/mountpoint.c
+++ b/miscutils/mountpoint.c
@@ -46,8 +46,8 @@
 			if (S_ISDIR(st.st_mode)) {
 				dev_t st_dev = st.st_dev;
 				ino_t st_ino = st.st_ino;
-				char *p;
-				bb_xasprintf(&p, "%s/..", arg);
+				char *p = bb_xasprintf("%s/..", arg);
+				
 				if (stat(p, &st) == 0) {
 					short ret = (st_dev != st.st_dev) ||
 						(st_dev == st.st_dev && st_ino == st.st_ino);
diff --git a/modutils/insmod.c b/modutils/insmod.c
index 232a6e6..94e66f4 100644
--- a/modutils/insmod.c
+++ b/modutils/insmod.c
@@ -3756,10 +3756,10 @@
 
 #if defined(CONFIG_FEATURE_2_6_MODULES)
 	if (k_version > 4)
-		bb_xasprintf(&m_fullName, "%s.ko", tmp);
+		m_fullName = bb_xasprintf("%s.ko", tmp);
 	else
 #endif
-		bb_xasprintf(&m_fullName, "%s.o", tmp);
+		m_fullName = bb_xasprintf("%s.o", tmp);
 
 	if (!m_name) {
 		m_name = tmp;
diff --git a/networking/ifupdown.c b/networking/ifupdown.c
index c735294..d23c9f7 100644
--- a/networking/ifupdown.c
+++ b/networking/ifupdown.c
@@ -1010,7 +1010,7 @@
 		}
 	}
 
-	bb_xasprintf(&buf, "run-parts /etc/network/if-%s.d", opt);
+	buf = bb_xasprintf("run-parts /etc/network/if-%s.d", opt);
 	if ((*exec)(buf) != 1) {
 		return 0;
 	}
diff --git a/procps/sysctl.c b/procps/sysctl.c
index 359dcc0..dbb82e6 100644
--- a/procps/sysctl.c
+++ b/procps/sysctl.c
@@ -209,7 +209,7 @@
 		return -2;
 	}
 
-	bb_xasprintf(&tmpname, "%s%.*s", PROC_PATH, (equals - name), name);
+	tmpname = bb_xasprintf("%s%.*s", PROC_PATH, (equals - name), name);
 	outname = bb_xstrdup(tmpname + strlen(PROC_PATH));
 
 	while ((cptr = strchr(tmpname, '.')) != NULL)
diff --git a/shell/cmdedit.c b/shell/cmdedit.c
index c4cb9d9..edfa016 100644
--- a/shell/cmdedit.c
+++ b/shell/cmdedit.c
@@ -621,7 +621,7 @@
 			/* Null usernames should result in all users as possible completions. */
 			if ( /*!userlen || */ !strncmp(ud, entry->pw_name, userlen)) {
 
-			       bb_xasprintf(&temp, "~%s/", entry->pw_name);
+				temp = bb_xasprintf("~%s/", entry->pw_name);
 				matches = xrealloc(matches, (nm + 1) * sizeof(char *));
 
 				matches[nm++] = temp;