diff -ur ../orig.nplg/plugins/check_swap.c ./plugins/check_swap.c
--- ../orig.nplg/plugins/check_swap.c	2005-01-24 08:29:54.000000000 +0100
+++ ./plugins/check_swap.c	2005-06-04 08:26:49.000000000 +0200
@@ -79,14 +79,13 @@
 # endif
 #endif
 	char str[32];
-	char *status, *tmp_status;
+	char *status;
 
 	setlocale (LC_ALL, "");
 	bindtextdomain (PACKAGE, LOCALEDIR);
 	textdomain (PACKAGE);
 
 	status = strdup ("");
-	tmp_status = strdup ("");
 	perf = strdup ("");
 
 	if (process_arguments (argc, argv) == ERROR)
@@ -314,16 +313,19 @@
 	percent_used = 100 * ((double) used_swap) / ((double) total_swap);
 	result = max_state (result, check_swap (percent_used, free_swap));
 	/* broken into two steps because of funkiness with builtin asprintf */
-	asprintf (&tmp_status, _(" %d%% free (%.0f MB out of %.0f MB)"),
-						(100 - percent_used), free_swap, total_swap);
-	asprintf (&status, "%s%s", tmp_status, status);
-
-	asprintf (&perf, "%s", perfdata ("swap", (long) free_swap, "MB",
-		TRUE, (long) max (warn_size/1024, warn_percent/100.0*total_swap),
-		TRUE, (long) max (crit_size/1024, crit_percent/100.0*total_swap),
-		TRUE, 0,
-		TRUE, (long) total_swap));
-	printf ("SWAP %s:%s |%s\n", state_text (result), status, perf);
+	/* the breaking was removed because it was stupid. There's no reason
+	 * to concatenate a string using asprintf() just to print it to stdout
+	 * in the next statement. */
+	printf (_("SWAP %s - %d%% free (%.0f MB out of %.0f MB) %s|"),
+			state_text (result),
+			(100 - percent_used), free_swap, total_swap, status);
+
+	puts (perfdata ("swap", (long) free_swap, "MB",
+	                TRUE, (long) max (warn_size/1024, warn_percent/100.0*total_swap),
+	                TRUE, (long) max (crit_size/1024, crit_percent/100.0*total_swap),
+	                TRUE, 0,
+	                TRUE, (long) total_swap));
+
 	return result;
 }
 
